Custom Facebook Feed - Version 2.14.1

Version Description

  • Fix: Some connection error notices not clearing automatically.
Download this release

Release Info

Developer smashballoon
Plugin Icon 128x128 Custom Facebook Feed
Version 2.14.1
Comparing to
See all releases

Code changes from version 2.14 to 2.14.1

README.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Smash Balloon Social Post Feed ===
2
  Contributors: smashballoon
3
- Tags: Facebook, Facebook feed, Facebook posts, Facebook wall, Facebook page
4
  Requires at least: 3.0
5
  Requires PHP: 5.2
6
  Tested up to: 5.4
7
- Stable tag: 2.14
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -12,82 +12,80 @@ Formerly "Custom Facebook Feed". Display completely customizable Facebook feeds
12
 
13
  == Description ==
14
 
15
- Display Facebook posts on your website. **Completely customizable**, **responsive** and **search engine crawlable**. Display **multiple Facebook feeds** from **any public Facebook page**, and completely match the look and feel of the site with tons of customization options!
16
 
17
  *"The perfect Facebook plugin with amazing support! What else do you want? Get it!"* - [JoeJeffries](http://wordpress.org/support/topic/you-dont-already-have-this?facebook)
18
 
19
- *"I honestly cannot recommend this plugin enough. The plugin itself is gorgeous and super customizable, and if you run into trouble...support will get you out of it. Five Stars across the board."* - [pamsavoybarnett](http://wordpress.org/support/topic/love-this-plugin-w-awesome-support?facebook)
20
 
21
- **Please note:** This free plugin allows you to display text and links from Facebook posts. To display **photos, videos, comments,** and more, we offer a Pro version of the plugin. See the Pro Version section below for more information.
22
 
23
  ### Facebook Feed Features
24
 
25
  * **Super simple to set up** - 1 minute quick setup with no Facebook Developer App required
26
- * **Display feeds from ANY Facebook page** - even ones you aren't an admin of
27
- * **Completely Customizable** - By default the Facebook feed will adopt the style of your website, but can be completely customized to look however you like - with tons of styling and customization options!
28
  * Facebook feed content is **crawlable by search engines** adding SEO value to your site - other Facebook plugins embed the feed using iframes which are not crawlable
29
- * Completely **responsive** and mobile optimized - layout looks great on any screen size and in any container width
30
- * Display **feeds from multiple different Facebook pages** and use the shortcode to embed them into a page, post or widget anywhere on your site
31
- * Add your own **custom CSS**
32
  * **Caching** means that your Facebook posts load lightning fast. Set your own caching time - check for new posts on Facebook every few seconds, minutes, hours or days. You decide.
33
  * Show and hide certain parts of each Facebook post
34
- * Show or hide the Facebook profile picture and name of the author above each post
35
  * Display Facebook posts by just the page owner, everyone who posts on your Facebook page, or only other people
36
  * Control the width, height, padding and background color of your Facebook feed
37
- * Customize the size, weight and color of text
38
  * Choose to set a background color and rounded corners on your Facebook posts
39
  * Supports Facebook tags - creates links when using the @ symbol to tag people in your Facebook posts
40
  * Automatically links hashtags used in posts to the hashtag page on Facebook
41
- * Select the number of Facebook posts to display
42
- * Select from a range of date formats or enter your own
43
- * Use your own custom link text in place of the defaults
44
  * Use the shortcode options to style multiple Facebook feeds in completely different ways
45
  * Set a maximum character length for both the text and descriptions of your Facebook posts
46
- * Create a customizable header with a range of icons for your Custom Facebook Feed
47
- * Localization/i18n support to allow every part of the feed to be displayed in your language
 
48
 
49
  ### Pro Version (Custom Facebook Feed Pro)
50
 
51
- In order to maintain the free version of the plugin on an ongoing basis, and to provide quick and effective support for free, we offer a Pro version of the plugin. The Pro version allows you to display photos, videos, the number of likes, shares, reactions and comments for each Facebook post, choose from multiple layout options, filter posts by type or #hashtag/string, load more posts into your feed, and more. [Click here](https://smashballoon.com/differences-between-the-free-version-and-pro-version-of-the-custom-facebook-feed-plugin/ "Differences between free and Pro version of Custom Facebook Feed plugin") for a full list of all differences between the free version and Pro version.
52
 
53
- * [Find out more about the Pro version](https://smashballoon.com/custom-facebook-feed/ "Custom Facebook Feed Pro")
54
- * [Try out the Pro demo](https://smashballoon.com/custom-facebook-feed/demo "Custom Facebook Feed Pro Demo").
55
 
56
  ### Benefits
57
 
58
  * **Increase social engagement** between you and your users, customers, or fans
59
  * **Save time** by using the Custom Facebook Feed to generate dynamic, search engine crawlable content on your website
60
  * **Get more likes** by displaying your Facebook content directly on your site
61
- * **Improve your SEO** as all of that quality keyword-rich Facebook content from posts and comments is directly embedded into your website
62
  * Display your Facebook content your way to perfectly match your website's style
63
  * **No Coding Required** - choose from tons of built-in customization options to create a truly unique feed of your Facebook content.
64
- * The plugin is **updated regularly** with new features, bug-fixes and Facebook API changes
65
  * Support is quick and effective
66
  * We're dedicated to providing the **most customizable**, **robust** and **well supported** Facebook feed plugin in the world!
67
 
68
- ### How to use the plugin
69
 
70
- One of our main priorities has always been to make our plugins as easy as possible to setup and use. Once you've installed the plugin there are only a few steps to get up and running:
71
 
72
- * 1) Click the "Log in and get my Access Token" button on the plugin settings page. This will prompt you to log into your Facebook account to authorize the plugin.
73
- * 2) Once you've connected your account, save the plugin settings.
74
- * 3) Then simply copy and paste the `[custom-facebook-feed]` shortcode onto any page, post, or widget where you want the feed to be displayed.
75
 
76
- That's it! You can then customize the feed as needed using the settings on the plugin "Customize" page.
77
 
78
- For full step-by-step setup directions with screenshots, see [here](https://smashballoon.com/custom-facebook-feed/docs/free/ "Custom Facebook Feed Free Setup Doc").
79
 
80
  ### Requesting support
81
 
82
- Customer support is a huge deal to us. We pride ourselves on always providing quick, effective, and courteous support to all of our users. If you're having an issue then just let us know and we'll be there to help as soon as possible. You can either open a ticket on the support forum on [WordPress.org](https://wordpress.org/support/plugin/custom-facebook-feed/ "Custom Facebook Feed Free support forum"), or directly on [our website](https://smashballoon.com/custom-facebook-feed/support/ "Custom Facebook Feed website support form"). We also have a large collection of help documentation and FAQs [on our website](https://smashballoon.com/custom-facebook-feed/faq/ "Custom Facebook Feed support FAQs") for all common issues.
83
 
84
  ### Who's behind this plugin?
85
 
86
- We're Smash Balloon; a fun-loving WordPress plugin development company birthed into existence in early 2013. We specialize in creating plugins that are not only intuitive and simple to use, but also designed to integrate seamlessly into your website and allow you to display your social media content in powerful and unique ways. Over 1 million awesome people have decided to actively use our free plugins, which is an incredible honor that we don't take lightly. This compels us to try to provide the quickest and most effective customer support that we can, blowing users away with the best customer service they've ever experienced.
87
 
88
- To find out more about the team, see [here](https://smashballoon.com/about/ "Team Smash Balloon").
89
 
90
- Check out our other free plugins for both [Instagram](https://wordpress.org/plugins/instagram-feed "Instagram Feed free plugin") and [Twitter](https://wordpress.org/plugins/custom-twitter-feeds/ "Custom Twitter Feeds free plugin").
91
 
92
  == Installation ==
93
 
@@ -105,9 +103,9 @@ For a full list of FAQs and help with troubleshooting please visit the **[FAQ &
105
 
106
  If you have a Facebook **page** with a URL like this: `https://www.facebook.com/smashballoon` then the Page ID is just `smashballoon`. If your page URL is structured like this: `https://www.facebook.com/pages/smashballoon/123654123654123` then the Page ID is actually the number at the end, so in this case `123654123654123`.
107
 
108
- Due to [recent changes](https://smashballoon.com/facebook-api-changes-april-4-2018/) to the Facebook API it is unfortunately no longer possible to display a feed from a Facebook Group.
109
 
110
- Copy and paste the ID into the [Pro demo](https://smashballoon.com/custom-facebook-feed/demo/) to test it.
111
 
112
  = Are there any limitations on which Facebook page or group feeds I can display? =
113
 
@@ -131,11 +129,11 @@ Once you've done so, the plugin will be able to retrieve and display all of your
131
 
132
  = Can I show photos and videos in my Custom Facebook feed? =
133
 
134
- This free plugin only allows you to display text from your Facebook posts. To display photos and videos in your feed you would need to upgrade to the Pro version of the plugin. Try out a demo of the Pro version on the [Custom Facebook Feed website](https://smashballoon.com/custom-facebook-feed/demo "Custom Facebook Feed Demo"), and find out more about the Pro version [here](https://smashballoon.com/custom-facebook-feed/ "Custom Facebook Feed Pro"). [Click here](https://smashballoon.com/differences-between-the-free-version-and-pro-version-of-the-custom-facebook-feed-plugin/ "Differences between free and Pro version of Custom Facebook Feed plugin") for a full list of all differences between the free version and Pro version.
135
 
136
  = Can I show the comments, shares and likes associated with each Facebook post? =
137
 
138
- This is a feature of the [Pro version of the plugin](https://smashballoon.com/custom-facebook-feed/ "Custom Facebook Feed Pro"). To display comments, shares and likes you would need to upgrade from the free version to the Pro version.
139
 
140
  = Is the content of my Custom Facebook Feed crawlable by search engines? =
141
 
@@ -147,7 +145,7 @@ You can embed your Facebook feed directly into a template file by using the Word
147
 
148
  = My Facebook feed posts are not showing up, or all I can see is the Facebook Like box but no posts =
149
 
150
- Please refer to [this FAQ](https://smashballoon.com/facebook-feed-doesnt-show-can-see-like-box-posts-gives/ "My Facebook feed posts are not showing up, or all I can see is the Facebook Like box but no posts") for potential solutions on how to resolve this issue.
151
 
152
  = Create a basic slideshow from your Facebook posts =
153
 
@@ -183,11 +181,11 @@ setInterval(function(){
183
 
184
  = Changing the font in your Facebook feed and using Google Fonts =
185
 
186
- Please refer to [this FAQ](https://smashballoon.com/changing-the-font-in-your-facebook-feed-using-google-fonts/ "Changing the font in your Facebook feed and using Google Fonts") for directions on how to use Google fonts in your Facebook posts.
187
 
188
  = Can I display my Facebook posts horizontally or in multiple columns? =
189
 
190
- Please refer to [this FAQ](https://smashballoon.com/can-display-facebook-post-horizontally-multiple-columns/ "Can I display my Facebook posts horizontally or in multiple columns?") for directions on how to display your Facebook posts in multiple columns.
191
 
192
  = My Facebook feed appears to have stopped updating / working =
193
 
@@ -203,11 +201,11 @@ Please note, this isn't a limitation of our plugin, it's a restriction which Fac
203
 
204
  = I'm receiving an error message when trying to display my Facebook posts =
205
 
206
- Please refer to our [Error Message Reference page](https://smashballoon.com/custom-facebook-feed/docs/errors/ "I'm receiving an error message when trying to display my Facebook posts") for information on how to resolve common error messages.
207
 
208
  = Creating a Masonry grid layout from your Facebook posts =
209
 
210
- Please refer to [this FAQ](https://smashballoon.com/creating-a-masonry-grid-layout-from-your-facebook-posts/ "Creating a Masonry grid layout from your Facebook posts") for directions on how to create a Masonry grid layout from your Facebook feed posts.
211
 
212
  = How do I customize my Facebook feed? =
213
 
@@ -229,7 +227,7 @@ If your shortcode includes single quotes then check that they are the standard s
229
 
230
  3) Typo in the shortcode option
231
 
232
- Ensure that there aren't any spelling errors in the shortcode options that you're using and that the format is consistent with that demonstrated on the [Shortcode Options reference page](https://smashballoon.com/custom-facebook-feed/docs/shortcodes/ "The shortcode options aren't working").
233
 
234
  = Facebook avatar pictures aren't showing up in my Facebook feed =
235
 
@@ -244,25 +242,28 @@ The most common reason for this is that an add-on or extension you have installe
244
 
245
  == Screenshots ==
246
 
247
- 1. By default the Facebook feed inherits your theme's default styles and is completely responsive
248
  2. Completely customize the way your Facebook feed looks to perfectly match your site
249
  3. Use custom CSS to customize every part of the Facebook feed
250
- 4. Display Facebook events
251
  5. Configuring the Custom Facebook Feed plugin
252
- 6. General options - Custom Facebook Feed Layout & Style page
253
- 7. Typography options - Custom Facebook Feed Layout & Style page
254
- 8. Misc options - Custom Facebook FeedLayout & Style page
255
  9. It's super easy to display your Facebook feed in any page or post
256
 
257
  == Changelog ==
 
 
 
258
  = 2.14 =
259
- * New: Email alerts for critical issues. If there's an issue with a Facebook feed on your website which hasn't been resolved yet then you'll receive an email notification to let you know. This is sent once per week until the issue is resolved. These emails can be disabled by using the following setting: Facebook Feed > Customize > Misc > Feed Issue Email Report.
260
- * New: Admin notifications for critical issues. If there is an error with the feed, admins will see notices in the dashboard and on the front-end of the site along with instructions on how to resolve the issue. Front-end admin notifications can be disabled by using the following setting: Facebook Feed > Customize > Misc > Disable Admin Error Notice.
261
  * New: Added a WordPress 'Site Health' integration. If there is a critical error with your feeds, it will now be flagged in the site health page.
262
  * New: Added "About Us" page for those who would like to learn more about Smash Balloon and our other products. Go to Facebook Feed -> About Us in the dashboard.
263
 
264
  = 2.13 =
265
- * New: Added a Custom Facebook Feed Gutenberg block to use in the block editor, allowing you to easily add a feed to posts and pages.
266
  * New: Added support for translations.
267
 
268
  = 2.12.4 =
@@ -271,78 +272,78 @@ The most common reason for this is that an add-on or extension you have installe
271
  * Fix: Minor bug fixes
272
 
273
  = 2.12.3 =
274
- * Tweak: Added a text link in the settings page footer to our new free [YouTube plugin](https://wordpress.org/plugins/feeds-for-youtube/)
275
- * Tweak: When reconnecting an account on the settings page, if there's an issue with the existing access token then it'll be automatically replaced.
276
  * Tweak: Added 'rel="noopener"' to all external links and added 'rel="noreferrer"' to all non-Facebook links. Thanks to Dev VIP for the suggestion.
277
- * Fix: Fixed an issue with some call-to-action link URLs when a link protocol wasn't included
278
  * Fix: Fixed a JavaScript conflict with the [Forminator](https://wordpress.org/plugins/forminator/) plugin
279
- * Fix: Fixed duplicate post message displaying due to ellipsis HTML character
280
- * Fix: If a shared link post had no post text then the link title was used causing it to be displayed twice in the post
281
 
282
  = 2.12.2 =
283
  * Fix: Fixed a JavaScript error in the admin caused by the previous update. Apologies for any inconvenience.
284
 
285
  = 2.12.1 =
286
- * Fix: Fixed an issue with post date timezones due to changes in the WordPress 5.3 update
287
- * Fix: Fixed a rare issue where a JavaScript error would occur in the WordPress admin if a Facebook account was manually connected and the Page ID used was the full URL
288
  * Fix: Fixed a JavaScript error in the admin when using older web browsers
289
  * Tweak: Improved the manual account connection process
290
  * Tweak: Some minor UI tweaks to match the new WordPress 5.3 UI style
291
 
292
  = 2.12 =
293
- * New: Added a backup cache so the feed will still display even if there's an error from the Facebook API.
294
- * New: You can now easily manage multiple page or group accounts on the plugin settings page allowing you to easily add them to other feeds on your site. When you connect a page or group you will now see it listed in the "Connected Accounts" section. You can add it to the primary feed or to another feed by using the new `account` shortcode option.
295
- * Tweak: Added a filter which can be used to filter the API data when returned; `cff_filter_api_data`.
296
- * Tweak: Updated API error messages
297
- * Fix: Fixed an issue with some @tag links in post text due to a Facebook API change
298
- * Fix: Fixed a rare issue with ellipsis chracter symbols in shared link descriptions causing the entire link description not to be displayed
299
 
300
  = 2.11.1 =
301
- * Tweak: Added the link source URL below the title for shared link posts
302
- * Fix: Some themes would prevent the "Share" link from working successfully
303
- * Fix: Fixed an issue with the "Feed Columns" setting not working if the minified versions of the plugin CSS/JavaScript files were being used
304
 
305
  = 2.11 =
306
- * New: Added a "Feed Columns" setting to allow you to display your feed in multiple columns. This can be found under the "General" tab on the "Customize" page, or by using the `cols` and `colsmobile` shortcode settings.
307
  * New: Updated to use v4.0 of the Facebook API
308
 
309
  = 2.10 =
310
- * New: Facebook Groups are making their long-awaited return to the plugin! Just click the 'Log in and get my Access Token' button on the plugin's Settings page and select 'Facebook Group'. Follow the prompts to connect your Group and display your feed.
311
- * Fix: Fixed an issue where a lists of groups or pages wouldn't be displayed when retrieving an Access Token due to a server configuration issue
312
- * Fix: Photo icons weren't showing for album posts
313
- * Tweak: Now uses the `visitor_posts` endpoint to display visitor post feeds
314
 
315
  = 2.9.1 =
316
  * New: Added support for v3.3 of the Facebook API.
317
- * Fix: The Access Token selection area was being cut off on small screens when a lot of Facebook pages were listed.
318
 
319
  = 2.9 =
320
- * New: You can now select between a "Regular" or "Boxed" post style. Settings for this can be found at: `Facebook Feed > Customize > Style Posts > Post Item`. A Box Shadow setting has been added to the "Boxed" post style.
321
  * New: Added some settings to control the size and color of the Facebook shared link URLs and descriptions. These can be found at: `Facebook Feed > Customize > Style Posts > Shared Link Boxes`.
322
  * New: Improved the Facebook Access Token retrieval process to make it more intuitive.
323
- * Tweak: Avatar images are now circular to match Facebook.
324
- * Tweak: Animated the social media icons when the "Share" button is clicked.
325
  * Tweak: Changed the way the Facebook Like Box loads to avoid a conflict with the Facebook Messenger widget. It no longer uses the Facebook JavaScript SDK.
326
  * Tweak: Changed the elements used for icons from `<i>` to `<span>` to aid accessibility.
327
  * Tweak: Removed the Google+ share option as the platform has been deprecated.
328
- * Tweak: Removed the share widgets from the footer of the admin so that they're only loaded when the "Share the plugin" button is clicked.
329
- * Fix: The plugin now uses the built-in WordPress HTTP API to get data from Facebook instead of making it's own cURL requests to the Facebook API.
330
- * Fix: Fixed an issue where the avatars of people posting to the Facebook page weren't being displayed. Individual Facebook API requests for avatars have now been removed and bundled into the main Facebook API request.
331
- * Fix: If the link to the Facebook profile of a visitor posting to your page is not available then remove the link from the avatar and author name.
332
- * Fix: Fixed an accessibility error caused by the share icons being empty links.
333
  * Fix: Removed the use of the ENT_HTML5 constant as it isn't supported in PHP 5.4.
334
- * Fix: Fixed a rare issue with tags in Facebook post stories when the locale was set to be Greek.
335
 
336
  = 2.8 =
337
- * New: Added support for Facebook Notes in timeline feeds. If your Facebook timeline feed contains a note then the plugin will now get the content from the note and display it within the Facebook post.
338
- * New: Facebook call-to-action buttons - such as "Learn More", "Shop Now", and "Message Page" - are now supported in your Facebook posts. These text strings can be translated using the settings at: Facebook Feed > Customize > Custom Text/Translate
339
  * New: Added a setting that you can enable if you are displaying Facebook posts from a restricted (non-public) Facebook page. This will allow the Facebook page avatar to be displayed, and is located at: Facebook Feed > Customize > Misc > Misc Settings > Is Facebook Page restricted?
340
- * New: If a visitor posts to your Facebook page then their avatar will now be displayed and cached for 6 months. To clear the cache of these avatar images use the button located at: Facebook Feed > Customize > Misc > Misc Settings > Clear Avatar Cache
341
- * Tweak: The Timezone setting can now be set in the shortcode. Eg: `timezone="America/Los_Angeles"`
342
- * Tweak: Minor UI changes to the admin pages
343
  * Tweak: Reduced some of the Facebook data in the System Info
344
  * Fix: If you backdate a Facebook post it will now be ordered correctly in your Facebook feed
345
- * Fix: Fixed a theme conflict related to the Color Picker in the admins section
346
  * Verified compatibility with WordPress 5.0 and Gutenburg
347
 
348
  = 2.7.2 =
@@ -353,507 +354,54 @@ The most common reason for this is that an add-on or extension you have installe
353
  * Tweak: Made some adjustments to the Facebook Access Token login process
354
 
355
  = 2.7 =
356
- * New: Now easily get your own Facebook Access Token to avoid any Facebook connection issues. Simply click the blue Facebook "Log in and get my Access Token" button on the Custom Facebook Feed settings page and connect your Facebook account to get your token. The Facebook Access Token will work to get Facebook posts from ANY Facebook page. Thanks to our friends at SlickRemix for powering our new login and getting the plugin back up and running again!
357
  * Tweak: Removed the minimum caching time if you're using your own Facebook Page Access Token
358
 
359
  = 2.6.4 =
360
- * **Important:** If you are displaying Facebook posts from a Facebook page that **you are an admin of** then it is now highly recommended that you retrieve your own Facebook Access Token for that Facebook page to avoid any Facebook API rate limit errors. Simply follow these [step-by-step](https://smashballoon.com/custom-facebook-feed/page-token/) instructions to obtain one.
361
 
362
  = 2.6.3 =
363
  * Fix: Fixed an issue where Facebook API errors were being cached
364
 
365
  = 2.6.2 =
366
- * Fix: Replaced all HTTP links with HTTPS
367
  * Fix: Fixed a rare issue which affected the layout of other Facebook widgets
368
  * Fix: Automatically remove slashes at the end of the Facebook Page ID as it caused an error
369
- * Fix: The API response test in the System Info now only tests with your Facebook token if you have the "Use my own Access Token" setting enabled
370
  * Fix: Fixed an issue which caused an occasional Facebook API rate limit error
371
 
372
  = 2.6.1 =
373
  * Fix: Removed an unnecessary Facebook API call
374
  * Fix: Removed a PHP notice which was displayed under rare circumstances
375
- * Fix: Minor bug fixes
376
 
377
  = 2.6 =
378
  * Fix: Fixed an issue connecting to the Facebook API caused by a recent Facebook platform change
379
  * Tweak: Increased the minimum caching time to be 15 minutes to reduce Facebook API requests
380
 
381
  = 2.5.2 =
382
- * Important: Due to sudden changes in the Facebook API it is no longer possible to display posts from a Facebook Group. Please [see here](https://smashballoon.com/facebook-api-changes-april-4-2018/) for more information. We apologize for any frustration or inconvenience this has caused.
383
- * Removed: Due to Facebook API restrictions, it is no longer possible to display information about an event when it is posted or shared to your Facebook Page timeline.
384
 
385
  = 2.5.1 =
386
- * Fix: Prevented a PHP notice which would be displayed under rare circumstances
387
  * Fix: Replaced a function due to a deprecation in PHP 7.2
388
 
389
  = 2.5 =
390
- * New: Added the post story as part of the page/author name at the top of the post
391
  * New: Added an option to use minified versions of the plugin CSS and JavaScript files: `Facebook Feed > Customize > Misc > Misc Settings > Minify CSS and JavaScript files`
392
  * New: Added support for clearing the cache of major caching plugins when the Facebook feed cache is cleared. You can enable this by setting the following setting to be "Yes": `Facebook Feed > Customize > Misc > Misc Settings > Force cache to clear on interval`
393
- * Tweak: Improved the text truncation so that it applies to both the post text and description as one block of text and accounts for HTML link tags
394
- * Tweak: Added an "Auto" option to the Post Limit setting where it will automatically adjust the post limit based on the number of posts you choose to display
395
- * Tweak: Reorganized the settings pages to be more intuitive
396
  * Tweak: Added aria-hidden=true to icons to help improve accessibility
397
- * Tweak: The icon font stylesheet handle has been renamed so it will only be loaded once if another of our plugins is installed
398
- * Tweak: Error messages are now only shown to admins
399
- * Tweak: Added a setting to workaround a theme issue that affects the shortening of the post text. If you're experiencing an issue with the shortening of post text then you can enable the following setting: `Facebook Feed > Customize > Misc > Misc Settings > Fix text shortening issue`
400
- * Fix: Included a fallback in case the author name and avatar aren't available in visitor posts
401
- * Fix: Fixed an issue with apostrophes in the header not being escaped correctly
402
- * Fix: Fixed an issue with the icon font when Font Awesome 5 was added to a site
403
- * Fix: Added support for the @[ID:page-name] tagging format
404
- * Fix: The post description is now able to be displayed even if the post text is hidden
405
-
406
- = 2.4.6 =
407
- * Compatible with WordPress 4.8
408
-
409
- = 2.4.5 =
410
- * Tweak: Updated plugin links for new WordPress.org repo
411
- * Fix: Minor bug fixes
412
-
413
- = 2.4.4 =
414
- * New: If your Facebook posts have been created in more than one language on Facebook then it's now possible to display each language by using the `locale` setting in the shortcode. Eg: English: `[custom-facebook-feed locale=en_EN]`, German: `[custom-facebook-feed locale=de_DE]`
415
- * Fix: Fixed an issue with the order of group posts in some feeds
416
-
417
- = 2.4.3 =
418
- * Fix: Fixed a potential security vulnerability
419
- * Tested with upcoming WordPress 4.6 update
420
-
421
- = 2.4.2 =
422
- * Tweak: Group wall feed posts are now ordered based on recent activity, rather than by the date they were created, to better reflect the order on the Facebook Group wall.
423
- * Tweak: The "5 hours ago" date text strings can now be translated directly in the shortcode if you're displaying different feeds in different languages. See the bottom of the [Shortcode Options table](https://smashballoon.com/custom-facebook-feed/docs/shortcodes/) for more information.
424
- * Tweak: Created some specific [setup directions](https://smashballoon.com/custom-facebook-feed/docs/free/) for the free version.
425
- * Fix: Minor bug fixes
426
-
427
- = 2.4.1.2 =
428
- * Updated to be compatible with Facebook API version 2.6
429
-
430
- = 2.4.1.1 =
431
- * Fix: Fixed a JavaScript error in the admin area when using WordPress 4.5
432
-
433
- = 2.4.1 =
434
- * New: If a post contains either a photo or video then an icon and link are now added to view it on Facebook. You can disable this by unchecking the "Media Link" option in the following location: Customize > Post Layout > Show/Hide. You can also remove it by using the "exclude" shortcode option: exclude="medialink". You can translate or change the text for this link on the "Custom Text / Translate" settings page.
435
- * Tweak: Tested with WordPress 4.5
436
- * Fix: Fixed an issue where the "Share" button in the plugin Like Box wasn't working correctly
437
- * Fix: Added support for wp-config proxy settings. Credit to [@usrlocaldick](https://wordpress.org/support/topic/proxy-support-1) for the patch.
438
-
439
- = 2.4 =
440
- * New: Added a setting to allow you to use a fixed pixel width for the Facebook feed on desktop but switch to a 100% width responsive layout on mobile
441
- * New: You can now click on the name of a setting on the admin pages to reveal the corresponding shortcode for that setting
442
- * New: Added quick links to the top of the Customize settings pages to make it easier to find certain settings
443
- * New: Added a setting to allow you to disable the default plugin text and link styles (Customize > Misc > Disable default styles)
444
- * New: Added a setting which allows you to manually change the request method used to fetch Facebook posts which is necessary for some server setups
445
- * Tweak: Updated the Font Awesome icon font to version 4.5
446
- * Tweak: Moved the 'Show Header' setting to the 'General' tab on the Customize page
447
- * Fix: Hashtag linking now works with all languages and character sets
448
- * Fix: Fixed an error that occurred when trying to activate the Pro version with the free version still activated
449
- * Fix: Fixed a rare error which occurred when the Facebook post contained no text and no story
450
- * Fix: Fixed an issue when trying to display Facebook posts by only visitors to your Facebook page caused by a recent Facebook API update
451
-
452
- = 2.3.10 =
453
- * Fix: If you're experiencing an issue with your Facebook feed not automatically updating successfully then please update the plugin and enable the following setting: Custom Facebook Feed > Customize > Misc > Misc Settings > Force cache to clear on interval. If you set this setting to 'Yes' then it should force your plugin cache to clear either every hour, 12 hours, or 24 hours, depending on how often you have the plugin set to check Facebook for new posts.
454
-
455
- = 2.3.9 =
456
- * Fix: Fixed an issue caused by the recent Facebook API 2.5 update where the posts wouldn't display when using a brand new Access Token
457
-
458
- = 2.3.8 =
459
- * Fix: Fixed a positioning issue with the Facebook "Like Box / Page Plugin" widget caused by a recent Facebook update which was causing it to overlap on top of other content
460
- * Fix: Hashtags containing Chinese characters are now linked
461
- * Fix: Fixed a minor issue in shared link posts where the post text linked to the shared link URL instead of the post on Facebook
462
- * Tweak: Added a timezone for Sydney, Australia
463
-
464
- = 2.3.7 =
465
- * Fix: Fixed an issue caused by the WordPress 4.3 update where feeds from very long page IDs wouldn't update correctly due to the cache not clearing when expired
466
- * Fix: Removed specific encoding parameters from the cURL request method to prevent encoding issues on some servers
467
-
468
- = 2.3.6 =
469
- * New: Added a couple of new customization options for the Facebook Like Box/Page Plugin which allow you to select a small/slim header for the Like Box and hide the call-to-action button (if available)
470
- * Fix: The plugin now works with Access Tokens which use the new recently-released version 2.4 of the Facebook API
471
-
472
- = 2.3.5 =
473
- * New: Replace the Facebook 'Like Box' with the new Facebook 'Page Plugin' as the Facebook Like Box will be deprecated on June 23rd, 2015. Settings can be found under the Misc tab on the plugin's Customize page.
474
- * Fix: Hashtags which contain foreign characters are now correctly linked to the hashtag on Facebook
475
- * Fix: Links within Facebook post descriptions weren't opening in a new tab
476
- * Fix: Removed empty style tags from some elements
477
- * Fix: The URLs used for the 'Share' icons are now encoded to prevent any HTML validation errors
478
- * Fix: Shared Facebook posts now link to the new shared post and not to the original post that was shared on Facebook
479
- * Fix: Corrected a minor issue with the plugin caching string
480
- * Fix: Fixed a minor issue with tags in the Facebook post text when creating/sharing an event
481
- * Tweak: Add some stricter CSS to some parts of the feed to prevent theme conflicts
482
- * Tweak: Automatically link the Facebook event name to the event now rather than it having to be enabled on the plugin's 'Typography' settings page
483
-
484
- = 2.3.4 =
485
- * Fix: The Facebook event description is no longer shown twice in event posts. It was previously shown in the post text itself and in the Facebook event details.
486
- * Fix: Fixed a rare bug which would occur if your Facebook page or Facebook group name contained a number
487
-
488
- = 2.3.3 =
489
- * Fix: Removed a PHP notice which was missed in the last update. Apologies for the two updates in quick succession.
490
-
491
- = 2.3.2 =
492
- * Fix: Fixed some stray PHP notices which were inadvertently introduced in a recent update
493
- * Tweak: Added an option to not load the icon font included in the plugin
494
-
495
- = 2.3.1 =
496
- * New: Added a shortcode option to allow you to offset the number of posts to be shown. Eg: offset=2
497
- * New: Added an email link to the sharing icons
498
- * New: Added a setting to load a local copy of the icon font instead of the CDN version. This can be found at the bottom of the 'Misc' settings page.
499
- * Tweak: Added a prefix to the IDs on all Facebook posts so that they can now be targeted via CSS
500
- * Tweak: Added "nofollow" to all links by default. This can be disabled by using `nofollow=false` in the shortcode.
501
- * Tweak: Added some missing settings to the System Info section
502
- * Tweak: Added the 'Timezone' setting to the main Settings page so that it's easier to find
503
- * Fix: Added a workaround for Facebook changing the event URLs in their API from absolute to relative URLs
504
- * Fix: Facebook removed the 'relevant_count' parameter from their API so added a workaround to get the number of photos attached to a Facebook post
505
- * Fix: Fixed a minor bug in the WP_Http fallback method
506
- * Fix: Removed duplicate IDs on the share icons and replaced with classes
507
- * Fix: Added a check to the file_get_contents data retrieval method to check whether the Open SSL wrapper is enabled
508
- * Fix: The `eventtitlelink` shortcode option now works correctly
509
- * Fix: Added a workaround for 'story_tags' which Facebook deprecated from their API
510
- * Fix: Removed query string from the end of CSS and JavaScript file references and replaced it with the wp_enqueue_script 'ver' parameter instead
511
-
512
- = 2.3 =
513
- * Happy New Year!
514
- * New: Added a share link which allows you to share posts to Facebook, Twitter, Google+ or LinkedIn. This can be disabled at the very bottom of the Typography tab, or by using `showsharelink=false` in the [custom-facebook-feed] shortcode.
515
- * Tweak: Using your own Facebook Access Token in the plugin is still optional but is now recommended in order to protect yourself against future Access Token related issues
516
- * Tweak: Increased the accuracy of the character count when links are included in the Facebook text
517
- * Tweak: Improved the efficiency of the Facebook post caching
518
- * Tweak: Replaced the rel attribute with the HTML5 data attribute when storing data on an element
519
- * Tweak: Added HTTPS stream wrapper check to the System Info to aid in troubleshooting
520
- * Tweak: Updated the plugin's icon font to the latest version
521
- * Tweak: Added the Smash Balloon logo to the credit link which can be optionally displayed at the bottom of your feed. The setting for this is at the bottom of the Misc tab on the Customize page.
522
- * Tweak: Added a shortcode option to only show the Smash Balloon credit link on certain feeds: `[custom-facebook-feed credit=true]`
523
- * Fix: Fixed an issue with quotes being escaped in custom/translated text
524
- * Fix: Display an error message if WPHTTP function isn't working correctly
525
- * Fix: The `postbgcolor` shortcode option is now working correctly
526
-
527
- = 2.2.1 =
528
- * Fix: Fixed a minor JavaScript error which occurs if a Facebook post doesn't contain any text
529
-
530
- = 2.2 =
531
- * New: Added a text area to the Support tab which contains all of the plugin settings and site info for easier troubleshooting
532
- * New: You can now set the number of Facebook posts to '0' if you just want to show the Facebook Like box widget and no posts
533
- * Tweak: If the user doesn't add a unit to the width, height or padding then automatically add 'px'
534
- * Tweak: Added social media sharing links to the bottom of the settings page and an option to add a credit link to the bottom of the feed
535
- * Fix: Fixed an issue with Facebook hashtags not being linked when followed immediately by punctuation
536
- * Fix: When displaying a shared link if the caption is the same as the link URL then don't display it
537
- * Fix: Added a space before the feed header's style attribute to remove HTML validation error
538
- * Fix: Prefixed the 'top' and 'bottom' classes used on the Facebook Like box to prevent CSS conflicts
539
- * Fix: Fixed an issue with the link color not being applied to Facebook hashtag links
540
-
541
- = 2.1.3 =
542
- * Fix: Fixed an issue with the Facebook Access Token used in the plugin hitting its request limit
543
-
544
- = 2.1.2 =
545
- * Fix: Added in a missing closing div tag to the Facebook feed when an error is being displayed
546
-
547
- = 2.1.1 =
548
- * Fix: Fixed an issue with the date not being hidden when unchecked in the Show/Hide section
549
- * Fix: Fixed an issue with the date not being displayed below event posts when the date position was set to 'At the bottom of the post'
550
-
551
- = 2.1 =
552
- * New: Added an option to preserve/save your plugin options after uninstalling the plugin. This makes manually updating the plugin much easier.
553
- * New: Added a 'Settings' link to the plugin on the Plugins page
554
- * New: Added a field to the Misc settings page which allows users to enter their Facebook App ID in order to remove a couple of browser console warnings caused by the Facebook Like box widget
555
- * Tweak: Reduced the size of the author's Facebook profile picture from 50px to 40px to match Facebook
556
- * Tweak: The link description text is now 12px in size by default
557
- * Tweak: Added some default character limits to the post text and descriptions
558
- * Tweak: If the post author is being hidden then change the default date position to be the bottom of the post
559
- * Fix: The post author link is no longer the full width of the post and is only wrapped around the author image and name which helps prevent inadvertently clicking on the post author
560
- * Fix: Added a fb-root element to the Like box to prevent a browser console warning
561
- * Fix: Renamed the ShowError function to prevent conflicts
562
- * Fix: Fixed an issue with the 'seconds' custom text string not being saved correctly
563
- * Fix: When linking the post text to the Facebook post the correct text color is now applied
564
-
565
- = 2.0.1 =
566
- * Tweak: Improved error handling and added an [Error Message reference](https://smashballoon.com/custom-facebook-feed/docs/errors/) to the website
567
-
568
- = 2.0 =
569
- * New: Added an option to display the post date immediately below the author name - as it is on Facebook. This is now the default date position.
570
- * New: Added options to add a background color and rounded corners to your posts
571
- * New: If your Facebook event has an end date then it will now be displayed after the start date
572
- * New: Hashtags in the post descriptions are now also linked
573
- * New: Tested and approved for the upcoming WordPress 4.0 release
574
- * Tweak: Moved the 'View on Facebook' link to the left side
575
- * Tweak: Added error handling to improve user experience
576
- * Tweak: If the Facebook API can't be reached by the plugin for some reason then it no longer caches the empty response and instead keeps trying to retrieve the posts from Facebook until it is successful
577
- * Fix: Removed some redundant inline CSS used on the posts
578
- * Fix: If there is a token in the 'Access Token' field but the 'Enter my own Access Token' box is unchecked then the plugin will no longer use it
579
- * Fix: Added the trim() function to the 'Test connection to Facebook API' function to improve reliability
580
- * Fix: Fixed an occasional JavaScript error which occurred when the post text was hidden
581
-
582
- = 1.9.9.3 =
583
- * New: Hashtags in link, photo and video descriptions are now also linked
584
- * Fix: Fixed an issue with hashtags being linked when the post text is also linked, which interfered with the text formatting
585
-
586
- = 1.9.9.2 =
587
- * Fix: Removed a couple of stray PHP notices
588
-
589
- = 1.9.9.1 =
590
- * Fix: Fixed an occasional issue with hashtags in inline CSS inadvertently being linked
591
-
592
- = 1.9.9 =
593
- * New: Hashtags in your posts are now linked to the hashtag search on Facebook. This can be disabled in the 'Post Text' section on the Typography settings page.
594
- * New: Added a Facebook icon to the Custom Facebook Feed admin menu
595
- * Fix: Corrected the left side margin on the "Like" box so that it aligns correctly with posts
596
-
597
- = 1.9.8.1 =
598
- * Fix: Fixed an admin JavaScript error introduced by the last update
599
-
600
- = 1.9.8 =
601
- * Tweak: The Access Token field is now hidden by default and is revealed by a checkbox
602
- * Fix: Fixed an issue with link colors not being applied to all links
603
- * Fix: Removed the link box container from posts which contain non-youtube/vimeo links
604
- * Fix: Links which don't contain a 'http://' protocol are now linked correctly
605
-
606
- = 1.9.7 =
607
- * Fix: Fixed an issue with a generic function name which was occasionally causing an error
608
-
609
- = 1.9.6 =
610
- * Tweak: Added an HTML wrapper element around the feed
611
-
612
- = 1.9.5 =
613
- * New: Added an option to set a height on the Like box. This allows you to display more faces of your fans if you have that option selected.
614
- * Tweak: Added a few stricter CSS styles to help minimize the chance of theme stylesheets distorting post formatting
615
- * Tweak: Added a span to the header text to allow CSS to be applied
616
- * Fix: Fixed a bug with the post author text bumping down below the author image in the Firefox browser
617
- * Fix: Corrected a bug which caused some links not to have the color applied
618
- * Fix: Fixed a float issue in Firefox which sometimes caused the feed to be pushed off the page
619
-
620
- = 1.9.4 =
621
- * New: Added background and border styling options to shared links
622
- * Tweak: Reduced the clickable area of the post author
623
- * Tweak: Added a 'Customize' tab to the Settings page
624
- * Fix: Fixed an issue with post tag linking not working correctly in some languages
625
- * Fix: Fixed an issue with line breaks not being respected in IE8
626
-
627
- = 1.9.2 =
628
- * Fix: Added title and alt attributes to the post author's Facebook profile picture
629
- * Fix: Improved the reliability of the post tag linking
630
- * Fix: Fixed an issue with HTML characters not rendering correctly when linking the post text
631
- * Fix: Improved the reliability of the CSS clearing method used on the feed container
632
- * Compatible with WordPress 3.9
633
-
634
- = 1.9.1 =
635
- * Fix: Fixed an issue with the 'textlink' shortcode option
636
- * Fix: Fixed an bug with post text sometimes being duplicated when linked
637
- * Fix: Removed error_reporting(0);
638
-
639
- = 1.9.0 =
640
- * New: Added the ability to change the text size and color of the post author
641
- * New: Define the format, size and color of shared link titles
642
- * New: You can now define the color of the links in your post text, descriptions and Facebook events
643
- * Tweak: Moved the Feed Header options to the Typography page
644
- * Tweak: Moved the Ajax setting to the Misc page
645
- * Tweak: Now removes any query strings attached to the Facebook Page ID
646
- * Fix: Fixed an issue with some themes causing the clear element to prevent links being clickable
647
- * Fix: Some minor bug fixes
648
-
649
- = 1.8.2.3 =
650
- * New: Now supports Facebook tags - creates links when using the @ symbol to tag other people or Facebook pages in your posts
651
- * Tweak: Changed the method used for link replacement in posts
652
- * Fix: Fixed issue with php include
653
-
654
- = 1.8.1 =
655
- * New: Added an 'exclude' shortcode option to allow you to easily exclude specific parts of the post
656
- * New: Timeline events are now cached to help reduce page load time
657
- * New: Added an option for when the WordPress theme is loading the feed via AJAX so that the JavaScript runs after the feed has been loaded into the page
658
- * Tweak: Changed author images back to loading via PHP rather than JavaScript due to issues with certain WordPress themes
659
- * Fix: Reset the timezone after the shortcode has run
660
- * Fix: Fixed an issue with the shared link descriptions not being hidden when specified
661
- * Fix: Fixed a rare issue with the 'textlink' shortcode option
662
- * Fix: Use a fallback JSON string if unable to find the cached version in the database
663
-
664
- = 1.8.0 =
665
- * New: Added a built-in color picker
666
- * New: Added class to posts based on the author to allow for independent styling
667
- * Tweak: Now loads the author's Facebook profile picture in using JavaScript to help speed up load times
668
- * Tweak: Now automatically set the Facebook post limit based on the number of Facebook posts to be displayed
669
- * Tweak: Core improvements to the way Facebook posts are output
670
- * Tweak: Changed 'Layout & Style' page name to 'Customize'
671
- * Tweak: Moved the Support information to a tab on the Settings page
672
- * Tweak: Improved the 'Test connection to Facebook API' function
673
- * Fix: Encode Facebook URLs so that they pass HTML validation
674
- * Fix: Fixed an issue with Facebook post captions not displaying under some circumstances
675
- * Fix: More robust method for stripping the URL when a user enters Facebook page URL instead of their Facebook Page ID
676
-
677
- = 1.7.2 =
678
- * Tweak: Moved the 'Show post author' option from the General settings tab to the Post Layout tab
679
- * Tweak: Added the ability to show or hide the author to the 'include' shortcode option
680
- * Fix: Added CSS box-sizing property to feed header so that padding doesn't increase its width
681
- * Fix: Fixed showheader=false and headeroutside=false shortcode options
682
- * Fix: Now allows users to enter their Facebook page URL as their Facebook Page ID
683
-
684
- = 1.7.0 =
685
- * New: Added ability to add a customizable header to your feed
686
- * New: Added a Custom JavaScript section to allow you to add your own JS or jQuery functionality to the feed
687
- * New: Added a 'Custom Text / Translate' tab to house all customizable text
688
- * New: You can now choose to show posts only by other people on your Facebook page
689
- * New: Set your timezone so that dates/times are displayed in your local time
690
- * New: When a Facebook post contains a link to multiple images it now states the number of photos after the post text and links to the Facebook album
691
- * Tweak: Plugin now detects whether the page is using SSL and pulls https resources
692
- * Tweak: Added a button to test the connection to Facebook's API for easier troubleshooting
693
- * Fix: Now using HTML encoding to parse any raw HTML tags in the Facebook post text or descriptions
694
- * Fix: Added a protocol to the beginning of links which don't include one
695
- * Fix: Fixed date width issue in IE7
696
- * Fix: Removed stray PHP notices
697
- * Fix: Added a space between the Like Box attributes
698
-
699
- = 1.6.8.2 =
700
- * Fix: Fixed a CSS bug in Firefox which was causing the page author name to bump down below the avatar
701
-
702
- = 1.6.8.1 =
703
- * Tweak: Moved 'View on Facebook' link up to be level with the date rather than on the line below it
704
- * Fix: Don't show the caption when it is the same as the Facebook post text
705
- * Fix: Fixed issue with enqueueing JavaScript file
706
-
707
- = 1.6.8 =
708
- * New: Added option to remove border from the Facebook Like box when showing faces
709
- * New: Set Facebook "Like" box text color to either blue or white
710
- * Tweak: Moved descripion below video or link title and added link source
711
- * Tweak: Added ability to manually translate the '2 weeks ago' text
712
- * Tweak: Replaced 'View Link' with 'View on Facebook' so that shared links now link to the Facebook post
713
- * Tweak: Facebook "Like" box is now responsive
714
- * Tweak: Displays Facebook post caption if no description is available
715
- * Tweak: Vertically center multi-line author names rather than bumping them down below the Facebook profile picture
716
- * Tweak: Checks whether the Access Token is inputted in the correct format
717
- * Fix: Fixed bug in the 'Show posts on my page by others' option
718
- * Fix: If displaying a Facebook group then automatically hides the Facebook "Like" box
719
- * Fix: 'others=false' shortcode option now working correctly
720
- * Fix: Strip any white space characters from beginning or end of Access Token and Facebook Page ID
721
-
722
- = 1.6.7.1 =
723
- * Fix: Fixed a bug in 1.6.7 which was causing an issue displaying the Facebook feed in some circumstances
724
-
725
- = 1.6.7 =
726
- * New: Your Facebook feed can now be completely displayed in any language - added i18n support for date translation
727
- * Tweak: Improved documentation within the plugin
728
- * Tweak: Changed order of methods used to retrieve Facebook feed data
729
-
730
- = 1.6.6.3 =
731
- * New: Added support for Facebook group events
732
-
733
- = 1.6.6.1 =
734
- * Fix: Resolved jQuery UI draggable bug which was causing issues with drag and drop
735
-
736
- = 1.6.6 =
737
- * New: Now works with Facebook groups
738
- * Fix: Fixed an issue with the 'Show posts by others' option not working correctly in the previous version
739
-
740
- = 1.6.4 =
741
- * New: Added localization support. Full support for various languages coming soon
742
- * New: Added CSS classes to different Facebook post types to allow for different styling based on post type
743
- * New: Option to link statuses to either the status post itself or the directly to the Facebook page/timeline
744
- * New: Added option to add thumbnail faces of fans to the Facebook Like box and define a width
745
- * Tweak: Added separate classes to 'View on Facebook' and 'View Link' links so that they can be targeted with CSS
746
- * Tweak: Prefixed every CSS class to prevent styling conflicts with theme stylesheets. Please note that if you used custom CSS to style parts of the feed that the CSS classes are now prefixed with 'cff-' to prevent theme conflicts. Eg. '.more' is now '.cff-more'.
747
-
748
- = 1.6.3 =
749
- * New: Added support for Facebook 'Offers'
750
- * Fix: Fixed an issue with the 'others' shortcode option not working correctly
751
- * Fix: Prefixed the 'clear' class to prevent conflicts
752
-
753
- = 1.6.2 =
754
- * New: Post caching now temporarily stores your Facebook post data in your WordPress database to allow for super quick load times
755
- * New: Define your own caching time. Check for new Facebook posts every few seconds, minutes, hours or days. You decide.
756
- * New: Define your own custom text for the 'See More' and 'See Less' buttons
757
- * New: Add your own CSS class to your Custom Facebook Feeds
758
- * New: Define a Facebook post limit which is higher or lower than the default 25
759
- * New: Include the Facebook Like box inside or outside of the Facebook feed's container
760
- * New: Customize the Facebook event date independently
761
- * New: Improved layout of admin pages for easier navigation and customization
762
- * Fix: Provided a fix for the Facebook API duplicate post bug
763
- * Fix: Fixed bug which ocurred when multiple Facebook feeds are displayed on the same page with different text lengths defined
764
-
765
- = 1.5.2 =
766
- * Fix: Fixed JavaScript error in previous update
767
-
768
- = 1.5.1 =
769
- * New: Added a 'See More' link to expand any text which is longer than the character limit defined
770
- * New: Choose to show Facebook posts by other people in your feed
771
- * New: Option to show the post author's Facebook profile picture and name above each post
772
- * New: Added options to customize and format the Facebook post date
773
- * New: Add your own text before and after the date and in place of the 'View on Facebook' and 'View Link' text links
774
- * New: Specify the format of the Facebook Event date
775
- * Tweak: Default date format is less specific and better mimics Facebook's - credit Mark Bebbington
776
- * Tweak: Changed the layout of the Typography section to allow for the additional options
777
- * Fix: When a Facebook photo album is shared it now links to the album itself on Facebook and not just the cover photo
778
- * Fix: Fixed issue with hyperlinks in post text which don't have a space before them not being converted to links
779
-
780
- = 1.4.8 =
781
- * Minor fixes
782
-
783
- = 1.4.7 =
784
- * Tweak: Added links to statuses which link to the Facebook page
785
- * Tweak: Added classes to Facebook event date, location and description to allow custom styling
786
- * Tweak: Removed 'Where' and 'When' text from Facebook events and made bold instead
787
-
788
- = 1.4.6 =
789
- * Fix: Fixed 'num' option in shortcode
790
-
791
- = 1.4.4 =
792
- * New: Added more shortcode options
793
- * Minor tweaks
794
-
795
- = 1.4.2 =
796
- * New: Add your own custom CSS to allow for even deeper customization
797
- * New: Optionally link your post text to the Facebook post
798
- * New: Optionally link your event title to the Facebook event page
799
- * Some minor modifications
800
-
801
- = 1.4.1 =
802
- * Fix: Set all parts of the Facebook feed to display by default on activation
803
-
804
- = 1.4.0 =
805
- * Major Update!
806
- * New: Loads of new customization options for your Custom Facebook Feed
807
- * New: Define Facebook feed width, height, padding and background color
808
- * New: Change the font-size, font-weight and color of the Facebook post text, description, date, links and event details
809
- * New: Choose whether to show or hide certain parts of the Facebook posts
810
- * New: Select whether the Facebook Like box is shown at the top of bottom of the Facebook feed
811
- * New: Choose Facebook Like box background color
812
-
813
- = 1.3.6 =
814
- * Minor modifications
815
-
816
- = 1.3.5 =
817
- * New: Shared Facebook events now display event details (name, location, date/time, description) directly in the Facebook feed
818
-
819
- = 1.3.4 =
820
- * New: Email addresses within the Facebook post text are now hyperlinked
821
- * Fix: Links beginning with 'www' are now also hyperlinked
822
-
823
- = 1.3.3 =
824
- * New: Added support for Facebook events - display the Facebook event details (name, location, date/time, description) directly in the Facebook feed
825
- * Fix: Links within the Facebook post text are now hyperlinked
826
- * Tweak: Added additional methods for retrieving Facebook feed data
827
-
828
- = 1.3.2 =
829
- * Fix: Now using the built-in WordPress HTTP API to get retrieve the Facebook data
830
-
831
- = 1.3.1 =
832
- * Fix: Fixed issue with certain Facebook statuses not displaying correctly
833
-
834
- = 1.3.0 =
835
- * Tweak: If 'Number of Posts to show' is not set then default to 10 Facebook posts
836
-
837
- = 1.2.9 =
838
- * Fix: Now using cURL instead of file_get_contents to prevent issues with php.ini configuration on some web servers
839
-
840
- = 1.2.8 =
841
- * Fix: Fixed bug in specifying the number of Facebook posts to display
842
-
843
- = 1.2.7 =
844
- * Tweak: Prevented likes and comments by the page author showing up in the Facebook feed
845
-
846
- = 1.2.6 =
847
- * Tweak: Added help link to Custom Facebook Feed settings page
848
-
849
- = 1.2.5 =
850
- * Fix: Added clear fix
851
-
852
- = 1.2.1 =
853
- * Fix: Minor bug fixes
854
-
855
- = 1.2 =
856
- * New: Added the ability to define a maximum length for both the Facebook post text and description
857
-
858
- = 1.0 =
859
- * Launch!
1
  === Smash Balloon Social Post Feed ===
2
  Contributors: smashballoon
3
+ Tags: Facebook, Facebook feed, Facebook posts, Facebook wall, Facebook page, Custom Facebook Feed, Facebook group, Facebook social feed, Facebook post, Facebook like box
4
  Requires at least: 3.0
5
  Requires PHP: 5.2
6
  Tested up to: 5.4
7
+ Stable tag: 2.14.1
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
12
 
13
  == Description ==
14
 
15
+ Display Facebook posts on your website. **Completely customizable**, **responsive** and **search engine crawlable** Facebook feeds. Display **multiple Facebook feeds** from **any public Facebook page**, and completely match the look and feel of the site with tons of Facebook feed customization options!
16
 
17
  *"The perfect Facebook plugin with amazing support! What else do you want? Get it!"* - [JoeJeffries](http://wordpress.org/support/topic/you-dont-already-have-this?facebook)
18
 
19
+ *"I honestly cannot recommend this Facebook plugin enough. The plugin itself is gorgeous and super customizable, and if you run into trouble...support will get you out of it. Five Stars across the board."* - [pamsavoybarnett](http://wordpress.org/support/topic/love-this-plugin-w-awesome-support?facebook)
20
 
21
+ **Please note:** This free Facebook plugin allows you to display text and links from Facebook posts. To display **photos, videos, comments,** and more, we offer a Pro version of the plugin. See the Pro Version section below for more information.
22
 
23
  ### Facebook Feed Features
24
 
25
  * **Super simple to set up** - 1 minute quick setup with no Facebook Developer App required
26
+ * **Display feeds from ANY Facebook page** - even Facebook pages you aren't an admin of
27
+ * **Completely Customizable** - By default the Facebook feed will adopt the style of your website, but your Facebook feeds can be completely customized to look however you like - with tons of styling and customization options!
28
  * Facebook feed content is **crawlable by search engines** adding SEO value to your site - other Facebook plugins embed the feed using iframes which are not crawlable
29
+ * Completely **responsive** and mobile optimized Facebook feeds - layout looks great on any screen size and in any container width
30
+ * Display **feeds from multiple different Facebook pages** and use the shortcode to embed your Facebook feeds into a page, post or widget anywhere on your site
 
31
  * **Caching** means that your Facebook posts load lightning fast. Set your own caching time - check for new posts on Facebook every few seconds, minutes, hours or days. You decide.
32
  * Show and hide certain parts of each Facebook post
33
+ * Show or hide the Facebook profile picture and name of the author above each Facebook post
34
  * Display Facebook posts by just the page owner, everyone who posts on your Facebook page, or only other people
35
  * Control the width, height, padding and background color of your Facebook feed
36
+ * Customize the size, weight and color of text in your Facebook posts
37
  * Choose to set a background color and rounded corners on your Facebook posts
38
  * Supports Facebook tags - creates links when using the @ symbol to tag people in your Facebook posts
39
  * Automatically links hashtags used in posts to the hashtag page on Facebook
40
+ * Select the number of Facebook posts to display in your Facebook feed
 
 
41
  * Use the shortcode options to style multiple Facebook feeds in completely different ways
42
  * Set a maximum character length for both the text and descriptions of your Facebook posts
43
+ * Create a customizable Facebook header with a range of icons for your Custom Facebook Feed
44
+ * Localization/i18n support to allow every part of the Facebook feed to be displayed in your language
45
+ * Add your own **custom CSS**
46
 
47
  ### Pro Version (Custom Facebook Feed Pro)
48
 
49
+ In order to maintain the free version of the Custom Facebook Feed plugin on an ongoing basis, and to provide quick and effective support for free, we offer a Pro version of the plugin. Custom Facebook Feed Pro allows you to display photos, videos, the number of likes, shares, reactions and comments for each Facebook post, choose from multiple layout options, filter Facebook posts by type or #hashtag/string, load more Facebook posts into your feed, and more. [Click here](https://smashballoon.com/differences-between-the-free-version-and-pro-version-of-the-custom-facebook-feed-plugin/ "Differences between free and Pro version of Custom Facebook Feed plugin") for a full list of all differences between the Custom Facebook Feed free and Pro versions.
50
 
51
+ * [Find out more about Custom Facebook Feed Pro](https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free-readme&utm_source=proversion&utm_medium=findout "Custom Facebook Feed Pro")
52
+ * [Try out the Custom Facebook Feed Pro demo](https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free-readme&utm_source=proversion&utm_medium=demo "Custom Facebook Feed Pro Demo").
53
 
54
  ### Benefits
55
 
56
  * **Increase social engagement** between you and your users, customers, or fans
57
  * **Save time** by using the Custom Facebook Feed to generate dynamic, search engine crawlable content on your website
58
  * **Get more likes** by displaying your Facebook content directly on your site
59
+ * **Improve your SEO** as all of that quality keyword-rich Facebook content from posts and Facebook comments is directly embedded into your website
60
  * Display your Facebook content your way to perfectly match your website's style
61
  * **No Coding Required** - choose from tons of built-in customization options to create a truly unique feed of your Facebook content.
62
+ * The Custom Facebook Feed plugin is **updated regularly** with new features, bug-fixes and Facebook API changes
63
  * Support is quick and effective
64
  * We're dedicated to providing the **most customizable**, **robust** and **well supported** Facebook feed plugin in the world!
65
 
66
+ ### How to use the Custom Facebook Feed plugin
67
 
68
+ One of our main priorities has always been to make our Custom Facebook Feed plugin as easy as possible to setup and use. Once you've installed the plugin there are only a few steps to get up and running:
69
 
70
+ * 1) Click the big blue Facebook button on the plugin settings page. This will prompt you to log into your Facebook account to authorize the plugin.
71
+ * 2) Once you've connected your Facebook account, save the plugin settings.
72
+ * 3) Then simply copy and paste the `[custom-facebook-feed]` shortcode onto any page, post, or widget where you want the Facebook feed to be displayed.
73
 
74
+ That's it! You can then customize the Facebook feed as needed using the settings on the Facebook Feed > Customize page.
75
 
76
+ For full step-by-step setup directions with screenshots, see [here](https://smashballoon.com/custom-facebook-feed/docs/free/?utm_campaign=facebook-free-readme&utm_source=howto&utm_medium=setup "Custom Facebook Feed Free Setup Doc").
77
 
78
  ### Requesting support
79
 
80
+ Customer support is a huge deal to us. We pride ourselves on always providing quick, effective, and courteous support to all of our users. If you're having an issue using the Custom Facebook Feed plugin then just let us know and we'll be there to help as soon as possible. You can either open a ticket on the support forum on [WordPress.org](https://wordpress.org/support/plugin/custom-facebook-feed/ "Custom Facebook Feed Free support forum"), or directly on the Custom Facebook Feed section of [our website](https://smashballoon.com/custom-facebook-feed/support/ "Custom Facebook Feed website support form"). We also have a large collection of help documentation and FAQs [on our website](https://smashballoon.com/custom-facebook-feed/faq/ "Custom Facebook Feed support FAQs") for all common issues related to the Custom Facebook Feed plugin.
81
 
82
  ### Who's behind this plugin?
83
 
84
+ We're Smash Balloon; a fun-loving WordPress plugin development company birthed into existence in early 2013. We specialize in creating social media plugins that are not only intuitive and simple to use, but also designed to integrate seamlessly into your website and allow you to display your social media content in powerful and unique ways. Over 1 million awesome people have decided to actively use our free plugins, which is an incredible honor that we don't take lightly. This compels us to try to provide the quickest and most effective customer support that we can, blowing users away with the best customer service they've ever experienced.
85
 
86
+ To find out more about the team, see [here](https://smashballoon.com/about/?utm_campaign=facebook-free-readme&utm_source=who&utm_medium=about "Team Smash Balloon").
87
 
88
+ Check out our other free plugins for [Instagram](https://wordpress.org/plugins/instagram-feed "Instagram Feed free plugin"), [Twitter](https://wordpress.org/plugins/custom-twitter-feeds/ "Custom Twitter Feeds free plugin"), and [YouTube](https://wordpress.org/plugins/feeds-for-youtube/ "Feeds for YouTube free plugin").
89
 
90
  == Installation ==
91
 
103
 
104
  If you have a Facebook **page** with a URL like this: `https://www.facebook.com/smashballoon` then the Page ID is just `smashballoon`. If your page URL is structured like this: `https://www.facebook.com/pages/smashballoon/123654123654123` then the Page ID is actually the number at the end, so in this case `123654123654123`.
105
 
106
+ Due to [recent changes](https://smashballoon.com/facebook-api-changes-april-4-2018/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=id) to the Facebook API it is unfortunately no longer possible to display a feed from a Facebook Group.
107
 
108
+ Copy and paste the ID into the [Pro demo](https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=demoid) to test it.
109
 
110
  = Are there any limitations on which Facebook page or group feeds I can display? =
111
 
129
 
130
  = Can I show photos and videos in my Custom Facebook feed? =
131
 
132
+ This free plugin only allows you to display text from your Facebook posts. To display photos and videos in your feed you would need to upgrade to the Pro version of the plugin. Try out a demo of the Pro version on the [Custom Facebook Feed website](https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=media "Custom Facebook Feed Demo"), and find out more about the Pro version [here](https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=pro "Custom Facebook Feed Pro"). [Click here](https://smashballoon.com/differences-between-the-free-version-and-pro-version-of-the-custom-facebook-feed-plugin/ "Differences between free and Pro version of Custom Facebook Feed plugin") for a full list of all differences between the free version and Pro version.
133
 
134
  = Can I show the comments, shares and likes associated with each Facebook post? =
135
 
136
+ This is a feature of the [Pro version of the plugin](https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=comments "Custom Facebook Feed Pro"). To display comments, shares and likes you would need to upgrade from the free version to the Pro version.
137
 
138
  = Is the content of my Custom Facebook Feed crawlable by search engines? =
139
 
145
 
146
  = My Facebook feed posts are not showing up, or all I can see is the Facebook Like box but no posts =
147
 
148
+ Please refer to [this FAQ](https://smashballoon.com/facebook-feed-doesnt-show-can-see-like-box-posts-gives/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=errors "My Facebook feed posts are not showing up, or all I can see is the Facebook Like box but no posts") for potential solutions on how to resolve this issue.
149
 
150
  = Create a basic slideshow from your Facebook posts =
151
 
181
 
182
  = Changing the font in your Facebook feed and using Google Fonts =
183
 
184
+ Please refer to [this FAQ](https://smashballoon.com/changing-the-font-in-your-facebook-feed-using-google-fonts/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=fonts "Changing the font in your Facebook feed and using Google Fonts") for directions on how to use Google fonts in your Facebook posts.
185
 
186
  = Can I display my Facebook posts horizontally or in multiple columns? =
187
 
188
+ Please refer to [this FAQ](https://smashballoon.com/can-display-facebook-post-horizontally-multiple-columns/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=horizontal "Can I display my Facebook posts horizontally or in multiple columns?") for directions on how to display your Facebook posts in multiple columns.
189
 
190
  = My Facebook feed appears to have stopped updating / working =
191
 
201
 
202
  = I'm receiving an error message when trying to display my Facebook posts =
203
 
204
+ Please refer to our [Error Message Reference page](https://smashballoon.com/custom-facebook-feed/docs/errors/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=errors "I'm receiving an error message when trying to display my Facebook posts") for information on how to resolve common error messages.
205
 
206
  = Creating a Masonry grid layout from your Facebook posts =
207
 
208
+ Please refer to [this FAQ](https://smashballoon.com/creating-a-masonry-grid-layout-from-your-facebook-posts/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=masonry "Creating a Masonry grid layout from your Facebook posts") for directions on how to create a Masonry grid layout from your Facebook feed posts.
209
 
210
  = How do I customize my Facebook feed? =
211
 
227
 
228
  3) Typo in the shortcode option
229
 
230
+ Ensure that there aren't any spelling errors in the shortcode options that you're using and that the format is consistent with that demonstrated on the [Shortcode Options reference page](https://smashballoon.com/custom-facebook-feed/docs/shortcodes/?utm_campaign=facebook-free-readme&utm_source=faq&utm_medium=shortcode "The shortcode options aren't working").
231
 
232
  = Facebook avatar pictures aren't showing up in my Facebook feed =
233
 
242
 
243
  == Screenshots ==
244
 
245
+ 1. By default the Facebook feed inherits your theme's default styles and the Facebook feed is completely responsive
246
  2. Completely customize the way your Facebook feed looks to perfectly match your site
247
  3. Use custom CSS to customize every part of the Facebook feed
248
+ 4. Display Facebook events in your Facebook feed
249
  5. Configuring the Custom Facebook Feed plugin
250
+ 6. General Facebook Feed options - Custom Facebook Feed Layout and Style page
251
+ 7. Facebook Feed Typography options - Custom Facebook Feed Layout and Style page
252
+ 8. Misc Facebook Feed options - Custom Facebook Feed Layout and Style page
253
  9. It's super easy to display your Facebook feed in any page or post
254
 
255
  == Changelog ==
256
+ = 2.14.1 =
257
+ * Fix: Some connection error notices not clearing automatically.
258
+
259
  = 2.14 =
260
+ * New: Email alerts for critical Facebook feed issues. If there's an issue with a Facebook feed on your website which hasn't been resolved yet then you'll receive an email notification to let you know. This is sent once per week until the issue is resolved. These emails can be disabled by using the following setting: Facebook Feed > Customize > Misc > Feed Issue Email Report.
261
+ * New: Admin notifications for critical Facebook feed issues. If there is an error with a Facebook feed, admins will see notices in the dashboard and on the front-end of the site along with instructions on how to resolve the issue. Front-end admin notifications can be disabled by using the following setting: Facebook Feed > Customize > Misc > Disable Admin Error Notice.
262
  * New: Added a WordPress 'Site Health' integration. If there is a critical error with your feeds, it will now be flagged in the site health page.
263
  * New: Added "About Us" page for those who would like to learn more about Smash Balloon and our other products. Go to Facebook Feed -> About Us in the dashboard.
264
 
265
  = 2.13 =
266
+ * New: Added a "Custom Facebook Feed" Gutenberg block to use in the block editor, allowing you to easily add a Facebook feed to posts and pages.
267
  * New: Added support for translations.
268
 
269
  = 2.12.4 =
272
  * Fix: Minor bug fixes
273
 
274
  = 2.12.3 =
275
+ * Tweak: Added a text link in the Facebook Feed settings page footer to our new free [YouTube plugin](https://wordpress.org/plugins/feeds-for-youtube/)
276
+ * Tweak: When reconnecting a Facebook account on the settings page, if there's an issue with the existing Facebook access token then it'll be automatically replaced.
277
  * Tweak: Added 'rel="noopener"' to all external links and added 'rel="noreferrer"' to all non-Facebook links. Thanks to Dev VIP for the suggestion.
278
+ * Fix: Fixed an issue with some Facebook call-to-action link URLs when a link protocol wasn't included
279
  * Fix: Fixed a JavaScript conflict with the [Forminator](https://wordpress.org/plugins/forminator/) plugin
280
+ * Fix: Fixed duplicate Facebook post message displaying due to ellipsis HTML character
281
+ * Fix: If a shared Facebook link post had no post text then the link title was used causing it to be displayed twice in the Facebook post
282
 
283
  = 2.12.2 =
284
  * Fix: Fixed a JavaScript error in the admin caused by the previous update. Apologies for any inconvenience.
285
 
286
  = 2.12.1 =
287
+ * Fix: Fixed an issue with Facebook post date timezones due to changes in the WordPress 5.3 update
288
+ * Fix: Fixed a rare issue where a JavaScript error would occur in the WordPress admin if a Facebook account was manually connected and the Facebook Page ID used was the full URL
289
  * Fix: Fixed a JavaScript error in the admin when using older web browsers
290
  * Tweak: Improved the manual account connection process
291
  * Tweak: Some minor UI tweaks to match the new WordPress 5.3 UI style
292
 
293
  = 2.12 =
294
+ * New: Added a backup cache so the Facebook feed will still display even if there's an error from the Facebook API.
295
+ * New: You can now easily manage multiple Facebook page or group accounts on the Facebook Feed plugin settings page allowing you to easily add them to other Facebook feeds on your site. When you connect a Facebook page or group you will now see it listed in the "Connected Accounts" section. You can add it to the primary Facebook feed or to another Facebook feed by using the new `account` shortcode option.
296
+ * Tweak: Added a filter which can be used to filter the Facebook API data when returned; `cff_filter_api_data`.
297
+ * Tweak: Updated Facebook API error messages
298
+ * Fix: Fixed an issue with some @tag links in Facebook post text due to a Facebook API change
299
+ * Fix: Fixed a rare issue with ellipsis chracter symbols in Facebook shared link descriptions causing the entire link description not to be displayed
300
 
301
  = 2.11.1 =
302
+ * Tweak: Added the link source URL below the title for Facebook shared link posts
303
+ * Fix: Some themes would prevent the Facebook "Share" link from working successfully
304
+ * Fix: Fixed an issue with the "Feed Columns" setting not working if the minified versions of the Custom Facebook Feed plugin CSS/JavaScript files were being used
305
 
306
  = 2.11 =
307
+ * New: Added a "Feed Columns" setting to allow you to display your Facebook feed in multiple columns. This can be found under the "General" tab on the "Customize" page, or by using the `cols` and `colsmobile` shortcode settings.
308
  * New: Updated to use v4.0 of the Facebook API
309
 
310
  = 2.10 =
311
+ * New: Facebook Groups are making their long-awaited return to the Custom Facebook Feed plugin! Just click the 'Log in and get my Facebook Access Token' button on the Facebook Feed Settings page and select 'Facebook Group'. Follow the prompts to connect your Facebook Group and display your feed.
312
+ * Fix: Fixed an issue where a lists of Facebook groups or pages wouldn't be displayed when retrieving a Facebook Access Token due to a server configuration issue
313
+ * Fix: Photo icons weren't showing for Facebook album posts
314
+ * Tweak: Now uses the Facebook `visitor_posts` endpoint to display visitor Facebook post feeds
315
 
316
  = 2.9.1 =
317
  * New: Added support for v3.3 of the Facebook API.
318
+ * Fix: The Facebook Access Token selection area was being cut off on small screens when a lot of Facebook pages were listed.
319
 
320
  = 2.9 =
321
+ * New: You can now select between a "Regular" or "Boxed" Facebook post style. Settings for this can be found at: `Facebook Feed > Customize > Style Posts > Post Item`. A Box Shadow setting has been added to the "Boxed" Facebook post style.
322
  * New: Added some settings to control the size and color of the Facebook shared link URLs and descriptions. These can be found at: `Facebook Feed > Customize > Style Posts > Shared Link Boxes`.
323
  * New: Improved the Facebook Access Token retrieval process to make it more intuitive.
324
+ * Tweak: Facebook avatar images are now circular to match Facebook.
325
+ * Tweak: Animated the social media icons when the Facebook "Share" button is clicked.
326
  * Tweak: Changed the way the Facebook Like Box loads to avoid a conflict with the Facebook Messenger widget. It no longer uses the Facebook JavaScript SDK.
327
  * Tweak: Changed the elements used for icons from `<i>` to `<span>` to aid accessibility.
328
  * Tweak: Removed the Google+ share option as the platform has been deprecated.
329
+ * Tweak: Removed the social media share widgets from the footer of the admin so that they're only loaded when the "Share the plugin" button is clicked.
330
+ * Fix: The Custom Facebook Feed plugin now uses the built-in WordPress HTTP API to get data from Facebook instead of making it's own cURL requests to the Facebook API.
331
+ * Fix: Fixed an issue where the Facebook avatars of people posting to the Facebook page weren't being displayed. Individual Facebook API requests for avatars have now been removed and bundled into the main Facebook API request.
332
+ * Fix: If the link to the Facebook profile of a visitor posting to your page is not available then remove the link from the Facebook avatar and author name.
333
+ * Fix: Fixed an accessibility error caused by the Facebook share icons being empty links.
334
  * Fix: Removed the use of the ENT_HTML5 constant as it isn't supported in PHP 5.4.
335
+ * Fix: Fixed a rare issue with Facebook tags in Facebook post stories when the locale was set to be Greek.
336
 
337
  = 2.8 =
338
+ * New: Added support for Facebook Notes in timeline feeds. If your Facebook timeline feed contains a note then the Custom Facebook Feed plugin will now get the content from the note and display it within the Facebook post.
339
+ * New: Facebook call-to-action buttons - such as "Learn More", "Shop Now", and "Message Facebook Page" - are now supported in your Facebook posts. These text strings can be translated using the settings at: Facebook Feed > Customize > Custom Text/Translate
340
  * New: Added a setting that you can enable if you are displaying Facebook posts from a restricted (non-public) Facebook page. This will allow the Facebook page avatar to be displayed, and is located at: Facebook Feed > Customize > Misc > Misc Settings > Is Facebook Page restricted?
341
+ * New: If a Facebook visitor posts to your Facebook page then their avatar will now be displayed and cached for 6 months. To clear the cache of these Facebook avatar images use the button located at: Facebook Feed > Customize > Misc > Misc Settings > Clear Avatar Cache
342
+ * Tweak: The Timezone setting can now be set in the Custom Facebook Feed shortcode. Eg: `timezone="America/Los_Angeles"`
343
+ * Tweak: Minor UI changes to the Facebook Feed admin pages
344
  * Tweak: Reduced some of the Facebook data in the System Info
345
  * Fix: If you backdate a Facebook post it will now be ordered correctly in your Facebook feed
346
+ * Fix: Fixed a theme conflict related to the Color Picker in the Facebook Feed admin section
347
  * Verified compatibility with WordPress 5.0 and Gutenburg
348
 
349
  = 2.7.2 =
354
  * Tweak: Made some adjustments to the Facebook Access Token login process
355
 
356
  = 2.7 =
357
+ * New: Now easily get your own Facebook Access Token to avoid any Facebook connection issues. Simply click the blue Facebook "Log in and get my Facebook Access Token" button on the Custom Facebook Feed settings page and connect your Facebook account to get your token. The Facebook Access Token will work to get Facebook posts from ANY Facebook page. Thanks to our friends at SlickRemix for powering our new login and getting the Custom Facebook Feed plugin back up and running again!
358
  * Tweak: Removed the minimum caching time if you're using your own Facebook Page Access Token
359
 
360
  = 2.6.4 =
361
+ * **Important:** If you are displaying Facebook posts from a Facebook page that **you are an admin of** then it is now highly recommended that you retrieve your own Facebook Access Token for that Facebook page to avoid any Facebook API rate limit errors. Simply follow these [step-by-step](https://smashballoon.com/custom-facebook-feed/page-token/?utm_campaign=facebook-free-readme&utm_source=changelog&utm_medium=limits) instructions to obtain one.
362
 
363
  = 2.6.3 =
364
  * Fix: Fixed an issue where Facebook API errors were being cached
365
 
366
  = 2.6.2 =
367
+ * Fix: Replaced all HTTP links in the Facebook feed with HTTPS
368
  * Fix: Fixed a rare issue which affected the layout of other Facebook widgets
369
  * Fix: Automatically remove slashes at the end of the Facebook Page ID as it caused an error
370
+ * Fix: The API response test in the System Info now only tests with your Facebook token if you have the "Use my own Facebook Access Token" setting enabled
371
  * Fix: Fixed an issue which caused an occasional Facebook API rate limit error
372
 
373
  = 2.6.1 =
374
  * Fix: Removed an unnecessary Facebook API call
375
  * Fix: Removed a PHP notice which was displayed under rare circumstances
376
+ * Fix: Minor Facebook bug fixes
377
 
378
  = 2.6 =
379
  * Fix: Fixed an issue connecting to the Facebook API caused by a recent Facebook platform change
380
  * Tweak: Increased the minimum caching time to be 15 minutes to reduce Facebook API requests
381
 
382
  = 2.5.2 =
383
+ * Important: Due to sudden changes in the Facebook API it is no longer possible to display Facebook posts from a Facebook Group. Please [see here](https://smashballoon.com/facebook-api-changes-april-4-2018/) for more information. We apologize for any frustration or inconvenience this has caused.
384
+ * Removed: Due to Facebook API restrictions, it is no longer possible to display information about a Facebook event when it is posted or shared to your Facebook Page timeline.
385
 
386
  = 2.5.1 =
387
+ * Fix: Prevented a PHP notice which would be displayed under rare circumstances in the Facebook feed
388
  * Fix: Replaced a function due to a deprecation in PHP 7.2
389
 
390
  = 2.5 =
391
+ * New: Added the Facebook post story as part of the page/author name at the top of the Facebook post
392
  * New: Added an option to use minified versions of the plugin CSS and JavaScript files: `Facebook Feed > Customize > Misc > Misc Settings > Minify CSS and JavaScript files`
393
  * New: Added support for clearing the cache of major caching plugins when the Facebook feed cache is cleared. You can enable this by setting the following setting to be "Yes": `Facebook Feed > Customize > Misc > Misc Settings > Force cache to clear on interval`
394
+ * Tweak: Improved the text truncation so that it applies to both the Facebook post text and Facebook description as one block of text and accounts for HTML link tags
395
+ * Tweak: Added an "Auto" option to the Facebook Post Limit setting where it will automatically adjust the post limit based on the number of Facebook posts you choose to display in your Facebook feed
396
+ * Tweak: Reorganized the Custom Facebook Feed settings pages to be more intuitive
397
  * Tweak: Added aria-hidden=true to icons to help improve accessibility
398
+ * Tweak: The icon font stylesheet handle has been renamed so it will only be loaded once if another of our social media plugins is installed
399
+ * Tweak: Facebook error messages are now only shown to admins
400
+ * Tweak: Added a setting to workaround a theme issue that affects the shortening of the Facebook post text. If you're experiencing an issue with the shortening of Facebook post text then you can enable the following setting: `Facebook Feed > Customize > Misc > Misc Settings > Fix Facebook text shortening issue`
401
+ * Fix: Included a fallback in case the Facebook author name and avatar aren't available in visitor Facebook posts
402
+ * Fix: Fixed an issue with apostrophes in the Facebook feed header not being escaped correctly
403
+ * Fix: Fixed an issue with the Facebook icons when Font Awesome 5 was added to a site
404
+ * Fix: Added support for the @[ID:page-name] Facebook tagging format
405
+ * Fix: The Facebook post description is now able to be displayed even if the Facebook post text is hidden
406
+
407
+ [See changelog for all versions](https://plugins.svn.wordpress.org/custom-facebook-feed/trunk/changelog.txt).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
admin/PluginSilentUpgrader.php CHANGED
@@ -1,576 +1,576 @@
1
- <?php
2
-
3
- namespace CFF\Helpers;
4
-
5
- use WP_Error;
6
- use WP_Upgrader;
7
- use WP_Filesystem_Base;
8
-
9
- /** \WP_Upgrader class */
10
- require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
11
-
12
- /** \Plugin_Upgrader class */
13
- require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
14
-
15
- /**
16
- * In WP 5.3 a PHP 5.6 splat operator (...$args) was added to \WP_Upgrader_Skin::feedback().
17
- * We need to remove all calls to *Skin::feedback() method, as we can't override it in own Skins
18
- * without breaking support for PHP 5.3-5.5.
19
- *
20
- * @internal Please do not use this class outside of core WPForms development. May be removed at any time.
21
- *
22
- * @since 1.5.6.1
23
- */
24
- class PluginSilentUpgrader extends \Plugin_Upgrader {
25
-
26
- /**
27
- * Run an upgrade/installation.
28
- *
29
- * Attempts to download the package (if it is not a local file), unpack it, and
30
- * install it in the destination folder.
31
- *
32
- * @since 1.5.6.1
33
- *
34
- * @param array $options {
35
- * Array or string of arguments for upgrading/installing a package.
36
- *
37
- * @type string $package The full path or URI of the package to install.
38
- * Default empty.
39
- * @type string $destination The full path to the destination folder.
40
- * Default empty.
41
- * @type bool $clear_destination Whether to delete any files already in the
42
- * destination folder. Default false.
43
- * @type bool $clear_working Whether to delete the files form the working
44
- * directory after copying to the destination.
45
- * Default false.
46
- * @type bool $abort_if_destination_exists Whether to abort the installation if the destination
47
- * folder already exists. When true, `$clear_destination`
48
- * should be false. Default true.
49
- * @type bool $is_multi Whether this run is one of multiple upgrade/installation
50
- * actions being performed in bulk. When true, the skin
51
- * WP_Upgrader::header() and WP_Upgrader::footer()
52
- * aren't called. Default false.
53
- * @type array $hook_extra Extra arguments to pass to the filter hooks called by
54
- * WP_Upgrader::run().
55
- * }
56
- * @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error,
57
- * or false if unable to connect to the filesystem.
58
- */
59
- public function run( $options ) {
60
-
61
- $defaults = array(
62
- 'package' => '', // Please always pass this.
63
- 'destination' => '', // And this
64
- 'clear_destination' => false,
65
- 'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please
66
- 'clear_working' => true,
67
- 'is_multi' => false,
68
- 'hook_extra' => array(), // Pass any extra $hook_extra args here, this will be passed to any hooked filters.
69
- );
70
-
71
- $options = wp_parse_args( $options, $defaults );
72
-
73
- /**
74
- * Filters the package options before running an update.
75
- *
76
- * See also {@see 'upgrader_process_complete'}.
77
- *
78
- * @since 4.3.0
79
- *
80
- * @param array $options {
81
- * Options used by the upgrader.
82
- *
83
- * @type string $package Package for update.
84
- * @type string $destination Update location.
85
- * @type bool $clear_destination Clear the destination resource.
86
- * @type bool $clear_working Clear the working resource.
87
- * @type bool $abort_if_destination_exists Abort if the Destination directory exists.
88
- * @type bool $is_multi Whether the upgrader is running multiple times.
89
- * @type array $hook_extra {
90
- * Extra hook arguments.
91
- *
92
- * @type string $action Type of action. Default 'update'.
93
- * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'.
94
- * @type bool $bulk Whether the update process is a bulk update. Default true.
95
- * @type string $plugin Path to the plugin file relative to the plugins directory.
96
- * @type string $theme The stylesheet or template name of the theme.
97
- * @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme',
98
- * or 'core'.
99
- * @type object $language_update The language pack update offer.
100
- * }
101
- * }
102
- */
103
- $options = apply_filters( 'upgrader_package_options', $options );
104
-
105
- if ( ! $options['is_multi'] ) { // call $this->header separately if running multiple times
106
- $this->skin->header();
107
- }
108
-
109
- // Connect to the Filesystem first.
110
- $res = $this->fs_connect( array( WP_CONTENT_DIR, $options['destination'] ) );
111
- // Mainly for non-connected filesystem.
112
- if ( ! $res ) {
113
- if ( ! $options['is_multi'] ) {
114
- $this->skin->footer();
115
- }
116
- return false;
117
- }
118
-
119
- $this->skin->before();
120
-
121
- if ( is_wp_error( $res ) ) {
122
- $this->skin->error( $res );
123
- $this->skin->after();
124
- if ( ! $options['is_multi'] ) {
125
- $this->skin->footer();
126
- }
127
- return $res;
128
- }
129
-
130
- /*
131
- * Download the package (Note, This just returns the filename
132
- * of the file if the package is a local file)
133
- */
134
- $download = $this->download_package( $options['package'], true );
135
-
136
- // Allow for signature soft-fail.
137
- // WARNING: This may be removed in the future.
138
- if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) {
139
-
140
- // Don't output the 'no signature could be found' failure message for now.
141
- if ( 'signature_verification_no_signature' != $download->get_error_code() || WP_DEBUG ) {
142
- // Outout the failure error as a normal feedback, and not as an error:
143
- //$this->skin->feedback( $download->get_error_message() );
144
-
145
- // Report this failure back to WordPress.org for debugging purposes.
146
- wp_version_check(
147
- array(
148
- 'signature_failure_code' => $download->get_error_code(),
149
- 'signature_failure_data' => $download->get_error_data(),
150
- )
151
- );
152
- }
153
-
154
- // Pretend this error didn't happen.
155
- $download = $download->get_error_data( 'softfail-filename' );
156
- }
157
-
158
- if ( is_wp_error( $download ) ) {
159
- $this->skin->error( $download );
160
- $this->skin->after();
161
- if ( ! $options['is_multi'] ) {
162
- $this->skin->footer();
163
- }
164
- return $download;
165
- }
166
-
167
- $delete_package = ( $download != $options['package'] ); // Do not delete a "local" file
168
-
169
- // Unzips the file into a temporary directory.
170
- $working_dir = $this->unpack_package( $download, $delete_package );
171
- if ( is_wp_error( $working_dir ) ) {
172
- $this->skin->error( $working_dir );
173
- $this->skin->after();
174
- if ( ! $options['is_multi'] ) {
175
- $this->skin->footer();
176
- }
177
- return $working_dir;
178
- }
179
-
180
- // With the given options, this installs it to the destination directory.
181
- $result = $this->install_package(
182
- array(
183
- 'source' => $working_dir,
184
- 'destination' => $options['destination'],
185
- 'clear_destination' => $options['clear_destination'],
186
- 'abort_if_destination_exists' => $options['abort_if_destination_exists'],
187
- 'clear_working' => $options['clear_working'],
188
- 'hook_extra' => $options['hook_extra'],
189
- )
190
- );
191
-
192
- $this->skin->set_result( $result );
193
- if ( is_wp_error( $result ) ) {
194
- $this->skin->error( $result );
195
- //$this->skin->feedback( 'process_failed' );
196
- } else {
197
- // Installation succeeded.
198
- //$this->skin->feedback( 'process_success' );
199
- }
200
-
201
- $this->skin->after();
202
-
203
- if ( ! $options['is_multi'] ) {
204
-
205
- /**
206
- * Fires when the upgrader process is complete.
207
- *
208
- * See also {@see 'upgrader_package_options'}.
209
- *
210
- * @since 3.6.0
211
- * @since 3.7.0 Added to WP_Upgrader::run().
212
- * @since 4.6.0 `$translations` was added as a possible argument to `$hook_extra`.
213
- *
214
- * @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a
215
- * Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance.
216
- * @param array $hook_extra {
217
- * Array of bulk item update data.
218
- *
219
- * @type string $action Type of action. Default 'update'.
220
- * @type string $type Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'.
221
- * @type bool $bulk Whether the update process is a bulk update. Default true.
222
- * @type array $plugins Array of the basename paths of the plugins' main files.
223
- * @type array $themes The theme slugs.
224
- * @type array $translations {
225
- * Array of translations update data.
226
- *
227
- * @type string $language The locale the translation is for.
228
- * @type string $type Type of translation. Accepts 'plugin', 'theme', or 'core'.
229
- * @type string $slug Text domain the translation is for. The slug of a theme/plugin or
230
- * 'default' for core translations.
231
- * @type string $version The version of a theme, plugin, or core.
232
- * }
233
- * }
234
- */
235
- do_action( 'upgrader_process_complete', $this, $options['hook_extra'] );
236
-
237
- $this->skin->footer();
238
- }
239
-
240
- return $result;
241
- }
242
-
243
- /**
244
- * Toggle maintenance mode for the site.
245
- *
246
- * Create/delete the maintenance file to enable/disable maintenance mode.
247
- *
248
- * @since 2.8.0
249
- *
250
- * @global WP_Filesystem_Base $wp_filesystem Subclass
251
- *
252
- * @param bool $enable True to enable maintenance mode, false to disable.
253
- */
254
- public function maintenance_mode( $enable = false ) {
255
- global $wp_filesystem;
256
- $file = $wp_filesystem->abspath() . '.maintenance';
257
- if ( $enable ) {
258
- //$this->skin->feedback( 'maintenance_start' );
259
- // Create maintenance file to signal that we are upgrading
260
- $maintenance_string = '<?php $upgrading = ' . time() . '; ?>';
261
- $wp_filesystem->delete( $file );
262
- $wp_filesystem->put_contents( $file, $maintenance_string, FS_CHMOD_FILE );
263
- } elseif ( ! $enable && $wp_filesystem->exists( $file ) ) {
264
- //$this->skin->feedback( 'maintenance_end' );
265
- $wp_filesystem->delete( $file );
266
- }
267
- }
268
-
269
- /**
270
- * Download a package.
271
- *
272
- * @since 2.8.0
273
- *
274
- * @param string $package The URI of the package. If this is the full path to an
275
- * existing local file, it will be returned untouched.
276
- * @param bool $check_signatures Whether to validate file signatures. Default false.
277
- * @return string|WP_Error The full path to the downloaded package file, or a WP_Error object.
278
- */
279
- public function download_package( $package, $check_signatures = false ) {
280
-
281
- /**
282
- * Filters whether to return the package.
283
- *
284
- * @since 3.7.0
285
- *
286
- * @param bool $reply Whether to bail without returning the package.
287
- * Default false.
288
- * @param string $package The package file name.
289
- * @param WP_Upgrader $this The WP_Upgrader instance.
290
- */
291
- $reply = apply_filters( 'upgrader_pre_download', false, $package, $this );
292
- if ( false !== $reply ) {
293
- return $reply;
294
- }
295
-
296
- if ( ! preg_match( '!^(http|https|ftp)://!i', $package ) && file_exists( $package ) ) { //Local file or remote?
297
- return $package; //must be a local file..
298
- }
299
-
300
- if ( empty( $package ) ) {
301
- return new WP_Error( 'no_package', $this->strings['no_package'] );
302
- }
303
-
304
- //$this->skin->feedback( 'downloading_package', $package );
305
-
306
- $download_file = download_url( $package, 300, $check_signatures );
307
-
308
- if ( is_wp_error( $download_file ) && ! $download_file->get_error_data( 'softfail-filename' ) ) {
309
- return new WP_Error( 'download_failed', $this->strings['download_failed'], $download_file->get_error_message() );
310
- }
311
-
312
- return $download_file;
313
- }
314
-
315
- /**
316
- * Unpack a compressed package file.
317
- *
318
- * @since 2.8.0
319
- *
320
- * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
321
- *
322
- * @param string $package Full path to the package file.
323
- * @param bool $delete_package Optional. Whether to delete the package file after attempting
324
- * to unpack it. Default true.
325
- * @return string|WP_Error The path to the unpacked contents, or a WP_Error on failure.
326
- */
327
- public function unpack_package( $package, $delete_package = true ) {
328
- global $wp_filesystem;
329
-
330
- //$this->skin->feedback( 'unpack_package' );
331
-
332
- $upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/';
333
-
334
- //Clean up contents of upgrade directory beforehand.
335
- $upgrade_files = $wp_filesystem->dirlist( $upgrade_folder );
336
- if ( ! empty( $upgrade_files ) ) {
337
- foreach ( $upgrade_files as $file ) {
338
- $wp_filesystem->delete( $upgrade_folder . $file['name'], true );
339
- }
340
- }
341
-
342
- // We need a working directory - Strip off any .tmp or .zip suffixes
343
- $working_dir = $upgrade_folder . basename( basename( $package, '.tmp' ), '.zip' );
344
-
345
- // Clean up working directory
346
- if ( $wp_filesystem->is_dir( $working_dir ) ) {
347
- $wp_filesystem->delete( $working_dir, true );
348
- }
349
-
350
- // Unzip package to working directory
351
- $result = unzip_file( $package, $working_dir );
352
-
353
- // Once extracted, delete the package if required.
354
- if ( $delete_package ) {
355
- unlink( $package );
356
- }
357
-
358
- if ( is_wp_error( $result ) ) {
359
- $wp_filesystem->delete( $working_dir, true );
360
- if ( 'incompatible_archive' == $result->get_error_code() ) {
361
- return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], $result->get_error_data() );
362
- }
363
- return $result;
364
- }
365
-
366
- return $working_dir;
367
- }
368
-
369
- /**
370
- * Install a package.
371
- *
372
- * Copies the contents of a package form a source directory, and installs them in
373
- * a destination directory. Optionally removes the source. It can also optionally
374
- * clear out the destination folder if it already exists.
375
- *
376
- * @since 2.8.0
377
- *
378
- * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
379
- * @global array $wp_theme_directories
380
- *
381
- * @param array|string $args {
382
- * Optional. Array or string of arguments for installing a package. Default empty array.
383
- *
384
- * @type string $source Required path to the package source. Default empty.
385
- * @type string $destination Required path to a folder to install the package in.
386
- * Default empty.
387
- * @type bool $clear_destination Whether to delete any files already in the destination
388
- * folder. Default false.
389
- * @type bool $clear_working Whether to delete the files form the working directory
390
- * after copying to the destination. Default false.
391
- * @type bool $abort_if_destination_exists Whether to abort the installation if
392
- * the destination folder already exists. Default true.
393
- * @type array $hook_extra Extra arguments to pass to the filter hooks called by
394
- * WP_Upgrader::install_package(). Default empty array.
395
- * }
396
- *
397
- * @return array|WP_Error The result (also stored in `WP_Upgrader::$result`), or a WP_Error on failure.
398
- */
399
- public function install_package( $args = array() ) {
400
- global $wp_filesystem, $wp_theme_directories;
401
-
402
- $defaults = array(
403
- 'source' => '', // Please always pass this
404
- 'destination' => '', // and this
405
- 'clear_destination' => false,
406
- 'clear_working' => false,
407
- 'abort_if_destination_exists' => true,
408
- 'hook_extra' => array(),
409
- );
410
-
411
- $args = wp_parse_args( $args, $defaults );
412
-
413
- // These were previously extract()'d.
414
- $source = $args['source'];
415
- $destination = $args['destination'];
416
- $clear_destination = $args['clear_destination'];
417
-
418
- set_time_limit( 300 );
419
-
420
- if ( empty( $source ) || empty( $destination ) ) {
421
- return new WP_Error( 'bad_request', $this->strings['bad_request'] );
422
- }
423
- //$this->skin->feedback( 'installing_package' );
424
-
425
- /**
426
- * Filters the install response before the installation has started.
427
- *
428
- * Returning a truthy value, or one that could be evaluated as a WP_Error
429
- * will effectively short-circuit the installation, returning that value
430
- * instead.
431
- *
432
- * @since 2.8.0
433
- *
434
- * @param bool|WP_Error $response Response.
435
- * @param array $hook_extra Extra arguments passed to hooked filters.
436
- */
437
- $res = apply_filters( 'upgrader_pre_install', true, $args['hook_extra'] );
438
-
439
- if ( is_wp_error( $res ) ) {
440
- return $res;
441
- }
442
-
443
- //Retain the Original source and destinations
444
- $remote_source = $args['source'];
445
- $local_destination = $destination;
446
-
447
- $source_files = array_keys( $wp_filesystem->dirlist( $remote_source ) );
448
- $remote_destination = $wp_filesystem->find_folder( $local_destination );
449
-
450
- //Locate which directory to copy to the new folder, This is based on the actual folder holding the files.
451
- if ( 1 == count( $source_files ) && $wp_filesystem->is_dir( trailingslashit( $args['source'] ) . $source_files[0] . '/' ) ) { //Only one folder? Then we want its contents.
452
- $source = trailingslashit( $args['source'] ) . trailingslashit( $source_files[0] );
453
- } elseif ( count( $source_files ) == 0 ) {
454
- return new WP_Error( 'incompatible_archive_empty', $this->strings['incompatible_archive'], $this->strings['no_files'] ); // There are no files?
455
- } else { // It's only a single file, the upgrader will use the folder name of this file as the destination folder. Folder name is based on zip filename.
456
- $source = trailingslashit( $args['source'] );
457
- }
458
-
459
- /**
460
- * Filters the source file location for the upgrade package.
461
- *
462
- * @since 2.8.0
463
- * @since 4.4.0 The $hook_extra parameter became available.
464
- *
465
- * @param string $source File source location.
466
- * @param string $remote_source Remote file source location.
467
- * @param WP_Upgrader $this WP_Upgrader instance.
468
- * @param array $hook_extra Extra arguments passed to hooked filters.
469
- */
470
- $source = apply_filters( 'upgrader_source_selection', $source, $remote_source, $this, $args['hook_extra'] );
471
-
472
- if ( is_wp_error( $source ) ) {
473
- return $source;
474
- }
475
-
476
- // Has the source location changed? If so, we need a new source_files list.
477
- if ( $source !== $remote_source ) {
478
- $source_files = array_keys( $wp_filesystem->dirlist( $source ) );
479
- }
480
-
481
- /*
482
- * Protection against deleting files in any important base directories.
483
- * Theme_Upgrader & Plugin_Upgrader also trigger this, as they pass the
484
- * destination directory (WP_PLUGIN_DIR / wp-content/themes) intending
485
- * to copy the directory into the directory, whilst they pass the source
486
- * as the actual files to copy.
487
- */
488
- $protected_directories = array( ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR, WP_CONTENT_DIR . '/themes' );
489
-
490
- if ( is_array( $wp_theme_directories ) ) {
491
- $protected_directories = array_merge( $protected_directories, $wp_theme_directories );
492
- }
493
-
494
- if ( in_array( $destination, $protected_directories ) ) {
495
- $remote_destination = trailingslashit( $remote_destination ) . trailingslashit( basename( $source ) );
496
- $destination = trailingslashit( $destination ) . trailingslashit( basename( $source ) );
497
- }
498
-
499
- if ( $clear_destination ) {
500
- // We're going to clear the destination if there's something there.
501
- //$this->skin->feedback( 'remove_old' );
502
-
503
- $removed = $this->clear_destination( $remote_destination );
504
-
505
- /**
506
- * Filters whether the upgrader cleared the destination.
507
- *
508
- * @since 2.8.0
509
- *
510
- * @param mixed $removed Whether the destination was cleared. true on success, WP_Error on failure
511
- * @param string $local_destination The local package destination.
512
- * @param string $remote_destination The remote package destination.
513
- * @param array $hook_extra Extra arguments passed to hooked filters.
514
- */
515
- $removed = apply_filters( 'upgrader_clear_destination', $removed, $local_destination, $remote_destination, $args['hook_extra'] );
516
-
517
- if ( is_wp_error( $removed ) ) {
518
- return $removed;
519
- }
520
- } elseif ( $args['abort_if_destination_exists'] && $wp_filesystem->exists( $remote_destination ) ) {
521
- //If we're not clearing the destination folder and something exists there already, Bail.
522
- //But first check to see if there are actually any files in the folder.
523
- $_files = $wp_filesystem->dirlist( $remote_destination );
524
- if ( ! empty( $_files ) ) {
525
- $wp_filesystem->delete( $remote_source, true ); //Clear out the source files.
526
- return new WP_Error( 'folder_exists', $this->strings['folder_exists'], $remote_destination );
527
- }
528
- }
529
-
530
- //Create destination if needed
531
- if ( ! $wp_filesystem->exists( $remote_destination ) ) {
532
- if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) {
533
- return new WP_Error( 'mkdir_failed_destination', $this->strings['mkdir_failed'], $remote_destination );
534
- }
535
- }
536
- // Copy new version of item into place.
537
- $result = copy_dir( $source, $remote_destination );
538
- if ( is_wp_error( $result ) ) {
539
- if ( $args['clear_working'] ) {
540
- $wp_filesystem->delete( $remote_source, true );
541
- }
542
- return $result;
543
- }
544
-
545
- //Clear the Working folder?
546
- if ( $args['clear_working'] ) {
547
- $wp_filesystem->delete( $remote_source, true );
548
- }
549
-
550
- $destination_name = basename( str_replace( $local_destination, '', $destination ) );
551
- if ( '.' == $destination_name ) {
552
- $destination_name = '';
553
- }
554
-
555
- $this->result = compact( 'source', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination' );
556
-
557
- /**
558
- * Filters the installation response after the installation has finished.
559
- *
560
- * @since 2.8.0
561
- *
562
- * @param bool $response Installation response.
563
- * @param array $hook_extra Extra arguments passed to hooked filters.
564
- * @param array $result Installation result data.
565
- */
566
- $res = apply_filters( 'upgrader_post_install', true, $args['hook_extra'], $this->result );
567
-
568
- if ( is_wp_error( $res ) ) {
569
- $this->result = $res;
570
- return $res;
571
- }
572
-
573
- //Bombard the calling function will all the info which we've just used.
574
- return $this->result;
575
- }
576
- }
1
+ <?php
2
+
3
+ namespace CFF\Helpers;
4
+
5
+ use WP_Error;
6
+ use WP_Upgrader;
7
+ use WP_Filesystem_Base;
8
+
9
+ /** \WP_Upgrader class */
10
+ require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
11
+
12
+ /** \Plugin_Upgrader class */
13
+ require_once ABSPATH . 'wp-admin/includes/class-plugin-upgrader.php';
14
+
15
+ /**
16
+ * In WP 5.3 a PHP 5.6 splat operator (...$args) was added to \WP_Upgrader_Skin::feedback().
17
+ * We need to remove all calls to *Skin::feedback() method, as we can't override it in own Skins
18
+ * without breaking support for PHP 5.3-5.5.
19
+ *
20
+ * @internal Please do not use this class outside of core WPForms development. May be removed at any time.
21
+ *
22
+ * @since 1.5.6.1
23
+ */
24
+ class PluginSilentUpgrader extends \Plugin_Upgrader {
25
+
26
+ /**
27
+ * Run an upgrade/installation.
28
+ *
29
+ * Attempts to download the package (if it is not a local file), unpack it, and
30
+ * install it in the destination folder.
31
+ *
32
+ * @since 1.5.6.1
33
+ *
34
+ * @param array $options {
35
+ * Array or string of arguments for upgrading/installing a package.
36
+ *
37
+ * @type string $package The full path or URI of the package to install.
38
+ * Default empty.
39
+ * @type string $destination The full path to the destination folder.
40
+ * Default empty.
41
+ * @type bool $clear_destination Whether to delete any files already in the
42
+ * destination folder. Default false.
43
+ * @type bool $clear_working Whether to delete the files form the working
44
+ * directory after copying to the destination.
45
+ * Default false.
46
+ * @type bool $abort_if_destination_exists Whether to abort the installation if the destination
47
+ * folder already exists. When true, `$clear_destination`
48
+ * should be false. Default true.
49
+ * @type bool $is_multi Whether this run is one of multiple upgrade/installation
50
+ * actions being performed in bulk. When true, the skin
51
+ * WP_Upgrader::header() and WP_Upgrader::footer()
52
+ * aren't called. Default false.
53
+ * @type array $hook_extra Extra arguments to pass to the filter hooks called by
54
+ * WP_Upgrader::run().
55
+ * }
56
+ * @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error,
57
+ * or false if unable to connect to the filesystem.
58
+ */
59
+ public function run( $options ) {
60
+
61
+ $defaults = array(
62
+ 'package' => '', // Please always pass this.
63
+ 'destination' => '', // And this
64
+ 'clear_destination' => false,
65
+ 'abort_if_destination_exists' => true, // Abort if the Destination directory exists, Pass clear_destination as false please
66
+ 'clear_working' => true,
67
+ 'is_multi' => false,
68
+ 'hook_extra' => array(), // Pass any extra $hook_extra args here, this will be passed to any hooked filters.
69
+ );
70
+
71
+ $options = wp_parse_args( $options, $defaults );
72
+
73
+ /**
74
+ * Filters the package options before running an update.
75
+ *
76
+ * See also {@see 'upgrader_process_complete'}.
77
+ *
78
+ * @since 4.3.0
79
+ *
80
+ * @param array $options {
81
+ * Options used by the upgrader.
82
+ *
83
+ * @type string $package Package for update.
84
+ * @type string $destination Update location.
85
+ * @type bool $clear_destination Clear the destination resource.
86
+ * @type bool $clear_working Clear the working resource.
87
+ * @type bool $abort_if_destination_exists Abort if the Destination directory exists.
88
+ * @type bool $is_multi Whether the upgrader is running multiple times.
89
+ * @type array $hook_extra {
90
+ * Extra hook arguments.
91
+ *
92
+ * @type string $action Type of action. Default 'update'.
93
+ * @type string $type Type of update process. Accepts 'plugin', 'theme', or 'core'.
94
+ * @type bool $bulk Whether the update process is a bulk update. Default true.
95
+ * @type string $plugin Path to the plugin file relative to the plugins directory.
96
+ * @type string $theme The stylesheet or template name of the theme.
97
+ * @type string $language_update_type The language pack update type. Accepts 'plugin', 'theme',
98
+ * or 'core'.
99
+ * @type object $language_update The language pack update offer.
100
+ * }
101
+ * }
102
+ */
103
+ $options = apply_filters( 'upgrader_package_options', $options );
104
+
105
+ if ( ! $options['is_multi'] ) { // call $this->header separately if running multiple times
106
+ $this->skin->header();
107
+ }
108
+
109
+ // Connect to the Filesystem first.
110
+ $res = $this->fs_connect( array( WP_CONTENT_DIR, $options['destination'] ) );
111
+ // Mainly for non-connected filesystem.
112
+ if ( ! $res ) {
113
+ if ( ! $options['is_multi'] ) {
114
+ $this->skin->footer();
115
+ }
116
+ return false;
117
+ }
118
+
119
+ $this->skin->before();
120
+
121
+ if ( is_wp_error( $res ) ) {
122
+ $this->skin->error( $res );
123
+ $this->skin->after();
124
+ if ( ! $options['is_multi'] ) {
125
+ $this->skin->footer();
126
+ }
127
+ return $res;
128
+ }
129
+
130
+ /*
131
+ * Download the package (Note, This just returns the filename
132
+ * of the file if the package is a local file)
133
+ */
134
+ $download = $this->download_package( $options['package'], true );
135
+
136
+ // Allow for signature soft-fail.
137
+ // WARNING: This may be removed in the future.
138
+ if ( is_wp_error( $download ) && $download->get_error_data( 'softfail-filename' ) ) {
139
+
140
+ // Don't output the 'no signature could be found' failure message for now.
141
+ if ( 'signature_verification_no_signature' != $download->get_error_code() || WP_DEBUG ) {
142
+ // Outout the failure error as a normal feedback, and not as an error:
143
+ //$this->skin->feedback( $download->get_error_message() );
144
+
145
+ // Report this failure back to WordPress.org for debugging purposes.
146
+ wp_version_check(
147
+ array(
148
+ 'signature_failure_code' => $download->get_error_code(),
149
+ 'signature_failure_data' => $download->get_error_data(),
150
+ )
151
+ );
152
+ }
153
+
154
+ // Pretend this error didn't happen.
155
+ $download = $download->get_error_data( 'softfail-filename' );
156
+ }
157
+
158
+ if ( is_wp_error( $download ) ) {
159
+ $this->skin->error( $download );
160
+ $this->skin->after();
161
+ if ( ! $options['is_multi'] ) {
162
+ $this->skin->footer();
163
+ }
164
+ return $download;
165
+ }
166
+
167
+ $delete_package = ( $download != $options['package'] ); // Do not delete a "local" file
168
+
169
+ // Unzips the file into a temporary directory.
170
+ $working_dir = $this->unpack_package( $download, $delete_package );
171
+ if ( is_wp_error( $working_dir ) ) {
172
+ $this->skin->error( $working_dir );
173
+ $this->skin->after();
174
+ if ( ! $options['is_multi'] ) {
175
+ $this->skin->footer();
176
+ }
177
+ return $working_dir;
178
+ }
179
+
180
+ // With the given options, this installs it to the destination directory.
181
+ $result = $this->install_package(
182
+ array(
183
+ 'source' => $working_dir,
184
+ 'destination' => $options['destination'],
185
+ 'clear_destination' => $options['clear_destination'],
186
+ 'abort_if_destination_exists' => $options['abort_if_destination_exists'],
187
+ 'clear_working' => $options['clear_working'],
188
+ 'hook_extra' => $options['hook_extra'],
189
+ )
190
+ );
191
+
192
+ $this->skin->set_result( $result );
193
+ if ( is_wp_error( $result ) ) {
194
+ $this->skin->error( $result );
195
+ //$this->skin->feedback( 'process_failed' );
196
+ } else {
197
+ // Installation succeeded.
198
+ //$this->skin->feedback( 'process_success' );
199
+ }
200
+
201
+ $this->skin->after();
202
+
203
+ if ( ! $options['is_multi'] ) {
204
+
205
+ /**
206
+ * Fires when the upgrader process is complete.
207
+ *
208
+ * See also {@see 'upgrader_package_options'}.
209
+ *
210
+ * @since 3.6.0
211
+ * @since 3.7.0 Added to WP_Upgrader::run().
212
+ * @since 4.6.0 `$translations` was added as a possible argument to `$hook_extra`.
213
+ *
214
+ * @param WP_Upgrader $this WP_Upgrader instance. In other contexts, $this, might be a
215
+ * Theme_Upgrader, Plugin_Upgrader, Core_Upgrade, or Language_Pack_Upgrader instance.
216
+ * @param array $hook_extra {
217
+ * Array of bulk item update data.
218
+ *
219
+ * @type string $action Type of action. Default 'update'.
220
+ * @type string $type Type of update process. Accepts 'plugin', 'theme', 'translation', or 'core'.
221
+ * @type bool $bulk Whether the update process is a bulk update. Default true.
222
+ * @type array $plugins Array of the basename paths of the plugins' main files.
223
+ * @type array $themes The theme slugs.
224
+ * @type array $translations {
225
+ * Array of translations update data.
226
+ *
227
+ * @type string $language The locale the translation is for.
228
+ * @type string $type Type of translation. Accepts 'plugin', 'theme', or 'core'.
229
+ * @type string $slug Text domain the translation is for. The slug of a theme/plugin or
230
+ * 'default' for core translations.
231
+ * @type string $version The version of a theme, plugin, or core.
232
+ * }
233
+ * }
234
+ */
235
+ do_action( 'upgrader_process_complete', $this, $options['hook_extra'] );
236
+
237
+ $this->skin->footer();
238
+ }
239
+
240
+ return $result;
241
+ }
242
+
243
+ /**
244
+ * Toggle maintenance mode for the site.
245
+ *
246
+ * Create/delete the maintenance file to enable/disable maintenance mode.
247
+ *
248
+ * @since 2.8.0
249
+ *
250
+ * @global WP_Filesystem_Base $wp_filesystem Subclass
251
+ *
252
+ * @param bool $enable True to enable maintenance mode, false to disable.
253
+ */
254
+ public function maintenance_mode( $enable = false ) {
255
+ global $wp_filesystem;
256
+ $file = $wp_filesystem->abspath() . '.maintenance';
257
+ if ( $enable ) {
258
+ //$this->skin->feedback( 'maintenance_start' );
259
+ // Create maintenance file to signal that we are upgrading
260
+ $maintenance_string = '<?php $upgrading = ' . time() . '; ?>';
261
+ $wp_filesystem->delete( $file );
262
+ $wp_filesystem->put_contents( $file, $maintenance_string, FS_CHMOD_FILE );
263
+ } elseif ( ! $enable && $wp_filesystem->exists( $file ) ) {
264
+ //$this->skin->feedback( 'maintenance_end' );
265
+ $wp_filesystem->delete( $file );
266
+ }
267
+ }
268
+
269
+ /**
270
+ * Download a package.
271
+ *
272
+ * @since 2.8.0
273
+ *
274
+ * @param string $package The URI of the package. If this is the full path to an
275
+ * existing local file, it will be returned untouched.
276
+ * @param bool $check_signatures Whether to validate file signatures. Default false.
277
+ * @return string|WP_Error The full path to the downloaded package file, or a WP_Error object.
278
+ */
279
+ public function download_package( $package, $check_signatures = false ) {
280
+
281
+ /**
282
+ * Filters whether to return the package.
283
+ *
284
+ * @since 3.7.0
285
+ *
286
+ * @param bool $reply Whether to bail without returning the package.
287
+ * Default false.
288
+ * @param string $package The package file name.
289
+ * @param WP_Upgrader $this The WP_Upgrader instance.
290
+ */
291
+ $reply = apply_filters( 'upgrader_pre_download', false, $package, $this );
292
+ if ( false !== $reply ) {
293
+ return $reply;
294
+ }
295
+
296
+ if ( ! preg_match( '!^(http|https|ftp)://!i', $package ) && file_exists( $package ) ) { //Local file or remote?
297
+ return $package; //must be a local file..
298
+ }
299
+
300
+ if ( empty( $package ) ) {
301
+ return new WP_Error( 'no_package', $this->strings['no_package'] );
302
+ }
303
+
304
+ //$this->skin->feedback( 'downloading_package', $package );
305
+
306
+ $download_file = download_url( $package, 300, $check_signatures );
307
+
308
+ if ( is_wp_error( $download_file ) && ! $download_file->get_error_data( 'softfail-filename' ) ) {
309
+ return new WP_Error( 'download_failed', $this->strings['download_failed'], $download_file->get_error_message() );
310
+ }
311
+
312
+ return $download_file;
313
+ }
314
+
315
+ /**
316
+ * Unpack a compressed package file.
317
+ *
318
+ * @since 2.8.0
319
+ *
320
+ * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
321
+ *
322
+ * @param string $package Full path to the package file.
323
+ * @param bool $delete_package Optional. Whether to delete the package file after attempting
324
+ * to unpack it. Default true.
325
+ * @return string|WP_Error The path to the unpacked contents, or a WP_Error on failure.
326
+ */
327
+ public function unpack_package( $package, $delete_package = true ) {
328
+ global $wp_filesystem;
329
+
330
+ //$this->skin->feedback( 'unpack_package' );
331
+
332
+ $upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/';
333
+
334
+ //Clean up contents of upgrade directory beforehand.
335
+ $upgrade_files = $wp_filesystem->dirlist( $upgrade_folder );
336
+ if ( ! empty( $upgrade_files ) ) {
337
+ foreach ( $upgrade_files as $file ) {
338
+ $wp_filesystem->delete( $upgrade_folder . $file['name'], true );
339
+ }
340
+ }
341
+
342
+ // We need a working directory - Strip off any .tmp or .zip suffixes
343
+ $working_dir = $upgrade_folder . basename( basename( $package, '.tmp' ), '.zip' );
344
+
345
+ // Clean up working directory
346
+ if ( $wp_filesystem->is_dir( $working_dir ) ) {
347
+ $wp_filesystem->delete( $working_dir, true );
348
+ }
349
+
350
+ // Unzip package to working directory
351
+ $result = unzip_file( $package, $working_dir );
352
+
353
+ // Once extracted, delete the package if required.
354
+ if ( $delete_package ) {
355
+ unlink( $package );
356
+ }
357
+
358
+ if ( is_wp_error( $result ) ) {
359
+ $wp_filesystem->delete( $working_dir, true );
360
+ if ( 'incompatible_archive' == $result->get_error_code() ) {
361
+ return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], $result->get_error_data() );
362
+ }
363
+ return $result;
364
+ }
365
+
366
+ return $working_dir;
367
+ }
368
+
369
+ /**
370
+ * Install a package.
371
+ *
372
+ * Copies the contents of a package form a source directory, and installs them in
373
+ * a destination directory. Optionally removes the source. It can also optionally
374
+ * clear out the destination folder if it already exists.
375
+ *
376
+ * @since 2.8.0
377
+ *
378
+ * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass.
379
+ * @global array $wp_theme_directories
380
+ *
381
+ * @param array|string $args {
382
+ * Optional. Array or string of arguments for installing a package. Default empty array.
383
+ *
384
+ * @type string $source Required path to the package source. Default empty.
385
+ * @type string $destination Required path to a folder to install the package in.
386
+ * Default empty.
387
+ * @type bool $clear_destination Whether to delete any files already in the destination
388
+ * folder. Default false.
389
+ * @type bool $clear_working Whether to delete the files form the working directory
390
+ * after copying to the destination. Default false.
391
+ * @type bool $abort_if_destination_exists Whether to abort the installation if
392
+ * the destination folder already exists. Default true.
393
+ * @type array $hook_extra Extra arguments to pass to the filter hooks called by
394
+ * WP_Upgrader::install_package(). Default empty array.
395
+ * }
396
+ *
397
+ * @return array|WP_Error The result (also stored in `WP_Upgrader::$result`), or a WP_Error on failure.
398
+ */
399
+ public function install_package( $args = array() ) {
400
+ global $wp_filesystem, $wp_theme_directories;
401
+
402
+ $defaults = array(
403
+ 'source' => '', // Please always pass this
404
+ 'destination' => '', // and this
405
+ 'clear_destination' => false,
406
+ 'clear_working' => false,
407
+ 'abort_if_destination_exists' => true,
408
+ 'hook_extra' => array(),
409
+ );
410
+
411
+ $args = wp_parse_args( $args, $defaults );
412
+
413
+ // These were previously extract()'d.
414
+ $source = $args['source'];
415
+ $destination = $args['destination'];
416
+ $clear_destination = $args['clear_destination'];
417
+
418
+ set_time_limit( 300 );
419
+
420
+ if ( empty( $source ) || empty( $destination ) ) {
421
+ return new WP_Error( 'bad_request', $this->strings['bad_request'] );
422
+ }
423
+ //$this->skin->feedback( 'installing_package' );
424
+
425
+ /**
426
+ * Filters the install response before the installation has started.
427
+ *
428
+ * Returning a truthy value, or one that could be evaluated as a WP_Error
429
+ * will effectively short-circuit the installation, returning that value
430
+ * instead.
431
+ *
432
+ * @since 2.8.0
433
+ *
434
+ * @param bool|WP_Error $response Response.
435
+ * @param array $hook_extra Extra arguments passed to hooked filters.
436
+ */
437
+ $res = apply_filters( 'upgrader_pre_install', true, $args['hook_extra'] );
438
+
439
+ if ( is_wp_error( $res ) ) {
440
+ return $res;
441
+ }
442
+
443
+ //Retain the Original source and destinations
444
+ $remote_source = $args['source'];
445
+ $local_destination = $destination;
446
+
447
+ $source_files = array_keys( $wp_filesystem->dirlist( $remote_source ) );
448
+ $remote_destination = $wp_filesystem->find_folder( $local_destination );
449
+
450
+ //Locate which directory to copy to the new folder, This is based on the actual folder holding the files.
451
+ if ( 1 == count( $source_files ) && $wp_filesystem->is_dir( trailingslashit( $args['source'] ) . $source_files[0] . '/' ) ) { //Only one folder? Then we want its contents.
452
+ $source = trailingslashit( $args['source'] ) . trailingslashit( $source_files[0] );
453
+ } elseif ( count( $source_files ) == 0 ) {
454
+ return new WP_Error( 'incompatible_archive_empty', $this->strings['incompatible_archive'], $this->strings['no_files'] ); // There are no files?
455
+ } else { // It's only a single file, the upgrader will use the folder name of this file as the destination folder. Folder name is based on zip filename.
456
+ $source = trailingslashit( $args['source'] );
457
+ }
458
+
459
+ /**
460
+ * Filters the source file location for the upgrade package.
461
+ *
462
+ * @since 2.8.0
463
+ * @since 4.4.0 The $hook_extra parameter became available.
464
+ *
465
+ * @param string $source File source location.
466
+ * @param string $remote_source Remote file source location.
467
+ * @param WP_Upgrader $this WP_Upgrader instance.
468
+ * @param array $hook_extra Extra arguments passed to hooked filters.
469
+ */
470
+ $source = apply_filters( 'upgrader_source_selection', $source, $remote_source, $this, $args['hook_extra'] );
471
+
472
+ if ( is_wp_error( $source ) ) {
473
+ return $source;
474
+ }
475
+
476
+ // Has the source location changed? If so, we need a new source_files list.
477
+ if ( $source !== $remote_source ) {
478
+ $source_files = array_keys( $wp_filesystem->dirlist( $source ) );
479
+ }
480
+
481
+ /*
482
+ * Protection against deleting files in any important base directories.
483
+ * Theme_Upgrader & Plugin_Upgrader also trigger this, as they pass the
484
+ * destination directory (WP_PLUGIN_DIR / wp-content/themes) intending
485
+ * to copy the directory into the directory, whilst they pass the source
486
+ * as the actual files to copy.
487
+ */
488
+ $protected_directories = array( ABSPATH, WP_CONTENT_DIR, WP_PLUGIN_DIR, WP_CONTENT_DIR . '/themes' );
489
+
490
+ if ( is_array( $wp_theme_directories ) ) {
491
+ $protected_directories = array_merge( $protected_directories, $wp_theme_directories );
492
+ }
493
+
494
+ if ( in_array( $destination, $protected_directories ) ) {
495
+ $remote_destination = trailingslashit( $remote_destination ) . trailingslashit( basename( $source ) );
496
+ $destination = trailingslashit( $destination ) . trailingslashit( basename( $source ) );
497
+ }
498
+
499
+ if ( $clear_destination ) {
500
+ // We're going to clear the destination if there's something there.
501
+ //$this->skin->feedback( 'remove_old' );
502
+
503
+ $removed = $this->clear_destination( $remote_destination );
504
+
505
+ /**
506
+ * Filters whether the upgrader cleared the destination.
507
+ *
508
+ * @since 2.8.0
509
+ *
510
+ * @param mixed $removed Whether the destination was cleared. true on success, WP_Error on failure
511
+ * @param string $local_destination The local package destination.
512
+ * @param string $remote_destination The remote package destination.
513
+ * @param array $hook_extra Extra arguments passed to hooked filters.
514
+ */
515
+ $removed = apply_filters( 'upgrader_clear_destination', $removed, $local_destination, $remote_destination, $args['hook_extra'] );
516
+
517
+ if ( is_wp_error( $removed ) ) {
518
+ return $removed;
519
+ }
520
+ } elseif ( $args['abort_if_destination_exists'] && $wp_filesystem->exists( $remote_destination ) ) {
521
+ //If we're not clearing the destination folder and something exists there already, Bail.
522
+ //But first check to see if there are actually any files in the folder.
523
+ $_files = $wp_filesystem->dirlist( $remote_destination );
524
+ if ( ! empty( $_files ) ) {
525
+ $wp_filesystem->delete( $remote_source, true ); //Clear out the source files.
526
+ return new WP_Error( 'folder_exists', $this->strings['folder_exists'], $remote_destination );
527
+ }
528
+ }
529
+
530
+ //Create destination if needed
531
+ if ( ! $wp_filesystem->exists( $remote_destination ) ) {
532
+ if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) {
533
+ return new WP_Error( 'mkdir_failed_destination', $this->strings['mkdir_failed'], $remote_destination );
534
+ }
535
+ }
536
+ // Copy new version of item into place.
537
+ $result = copy_dir( $source, $remote_destination );
538
+ if ( is_wp_error( $result ) ) {
539
+ if ( $args['clear_working'] ) {
540
+ $wp_filesystem->delete( $remote_source, true );
541
+ }
542
+ return $result;
543
+ }
544
+
545
+ //Clear the Working folder?
546
+ if ( $args['clear_working'] ) {
547
+ $wp_filesystem->delete( $remote_source, true );
548
+ }
549
+
550
+ $destination_name = basename( str_replace( $local_destination, '', $destination ) );
551
+ if ( '.' == $destination_name ) {
552
+ $destination_name = '';
553
+ }
554
+
555
+ $this->result = compact( 'source', 'source_files', 'destination', 'destination_name', 'local_destination', 'remote_destination', 'clear_destination' );
556
+
557
+ /**
558
+ * Filters the installation response after the installation has finished.
559
+ *
560
+ * @since 2.8.0
561
+ *
562
+ * @param bool $response Installation response.
563
+ * @param array $hook_extra Extra arguments passed to hooked filters.
564
+ * @param array $result Installation result data.
565
+ */
566
+ $res = apply_filters( 'upgrader_post_install', true, $args['hook_extra'], $this->result );
567
+
568
+ if ( is_wp_error( $res ) ) {
569
+ $this->result = $res;
570
+ return $res;
571
+ }
572
+
573
+ //Bombard the calling function will all the info which we've just used.
574
+ return $this->result;
575
+ }
576
+ }
admin/PluginSilentUpgraderSkin.php CHANGED
@@ -1,57 +1,57 @@
1
- <?php
2
-
3
- namespace CFF\Helpers;
4
-
5
- /** \WP_Upgrader_Skin class */
6
- require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php';
7
-
8
- /**
9
- * Class PluginSilentUpgraderSkin.
10
- *
11
- * @internal Please do not use this class outside of core WPForms development. May be removed at any time.
12
- *
13
- * @since 1.5.6.1
14
- */
15
- class PluginSilentUpgraderSkin extends \WP_Upgrader_Skin {
16
-
17
- /**
18
- * Empty out the header of its HTML content and only check to see if it has
19
- * been performed or not.
20
- *
21
- * @since 1.5.6.1
22
- */
23
- public function header() {
24
- }
25
-
26
- /**
27
- * Empty out the footer of its HTML contents.
28
- *
29
- * @since 1.5.6.1
30
- */
31
- public function footer() {
32
- }
33
-
34
- /**
35
- * Instead of outputting HTML for errors, just return them.
36
- * Ajax request will just ignore it.
37
- *
38
- * @since 1.5.6.1
39
- *
40
- * @param array $errors Array of errors with the install process.
41
- *
42
- * @return array
43
- */
44
- public function error( $errors ) {
45
- return $errors;
46
- }
47
-
48
- /**
49
- * Empty out JavaScript output that calls function to decrement the update counts.
50
- *
51
- * @since 1.5.6.1
52
- *
53
- * @param string $type Type of update count to decrement.
54
- */
55
- public function decrement_update_count( $type ) {
56
- }
57
- }
1
+ <?php
2
+
3
+ namespace CFF\Helpers;
4
+
5
+ /** \WP_Upgrader_Skin class */
6
+ require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader-skin.php';
7
+
8
+ /**
9
+ * Class PluginSilentUpgraderSkin.
10
+ *
11
+ * @internal Please do not use this class outside of core WPForms development. May be removed at any time.
12
+ *
13
+ * @since 1.5.6.1
14
+ */
15
+ class PluginSilentUpgraderSkin extends \WP_Upgrader_Skin {
16
+
17
+ /**
18
+ * Empty out the header of its HTML content and only check to see if it has
19
+ * been performed or not.
20
+ *
21
+ * @since 1.5.6.1
22
+ */
23
+ public function header() {
24
+ }
25
+
26
+ /**
27
+ * Empty out the footer of its HTML contents.
28
+ *
29
+ * @since 1.5.6.1
30
+ */
31
+ public function footer() {
32
+ }
33
+
34
+ /**
35
+ * Instead of outputting HTML for errors, just return them.
36
+ * Ajax request will just ignore it.
37
+ *
38
+ * @since 1.5.6.1
39
+ *
40
+ * @param array $errors Array of errors with the install process.
41
+ *
42
+ * @return array
43
+ */
44
+ public function error( $errors ) {
45
+ return $errors;
46
+ }
47
+
48
+ /**
49
+ * Empty out JavaScript output that calls function to decrement the update counts.
50
+ *
51
+ * @since 1.5.6.1
52
+ *
53
+ * @param string $type Type of update count to decrement.
54
+ */
55
+ public function decrement_update_count( $type ) {
56
+ }
57
+ }
admin/addon-functions.php CHANGED
@@ -1,175 +1,175 @@
1
- <?php
2
- if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
-
4
- /**
5
- * Deactivate addon.
6
- *
7
- * @since 1.0.0
8
- */
9
- function cff_deactivate_addon() {
10
-
11
- // Run a security check.
12
- check_ajax_referer( 'cff-admin', 'nonce' );
13
-
14
- // Check for permissions.
15
- if ( ! current_user_can( 'manage_instagram_feed_options' ) ) {
16
- wp_send_json_error();
17
- }
18
-
19
- $type = 'addon';
20
- if ( ! empty( $_POST['type'] ) ) {
21
- $type = sanitize_key( $_POST['type'] );
22
- }
23
-
24
- if ( isset( $_POST['plugin'] ) ) {
25
- deactivate_plugins( $_POST['plugin'] );
26
-
27
- if ( 'plugin' === $type ) {
28
- wp_send_json_success( esc_html__( 'Plugin deactivated.', 'custom-facebook-feed' ) );
29
- } else {
30
- wp_send_json_success( esc_html__( 'Addon deactivated.', 'custom-facebook-feed' ) );
31
- }
32
- }
33
-
34
- wp_send_json_error( esc_html__( 'Could not deactivate the addon. Please deactivate from the Plugins page.', 'custom-facebook-feed' ) );
35
- }
36
- add_action( 'wp_ajax_cff_deactivate_addon', 'cff_deactivate_addon' );
37
-
38
- /**
39
- * Activate addon.
40
- *
41
- * @since 1.0.0
42
- */
43
- function cff_activate_addon() {
44
-
45
- // Run a security check.
46
- check_ajax_referer( 'cff-admin', 'nonce' );
47
-
48
- // Check for permissions.
49
- if ( ! current_user_can( 'manage_options' ) ) {
50
- wp_send_json_error();
51
- }
52
-
53
- if ( isset( $_POST['plugin'] ) ) {
54
-
55
- $type = 'addon';
56
- if ( ! empty( $_POST['type'] ) ) {
57
- $type = sanitize_key( $_POST['type'] );
58
- }
59
-
60
- $activate = activate_plugins( $_POST['plugin'] );
61
-
62
- if ( ! is_wp_error( $activate ) ) {
63
- if ( 'plugin' === $type ) {
64
- wp_send_json_success( esc_html__( 'Plugin activated.', 'custom-facebook-feed' ) );
65
- } else {
66
- wp_send_json_success( esc_html__( 'Addon activated.', 'custom-facebook-feed' ) );
67
- }
68
- }
69
- }
70
-
71
- wp_send_json_error( esc_html__( 'Could not activate addon. Please activate from the Plugins page.', 'custom-facebook-feed' ) );
72
- }
73
- add_action( 'wp_ajax_cff_activate_addon', 'cff_activate_addon' );
74
-
75
- /**
76
- * Install addon.
77
- *
78
- * @since 1.0.0
79
- */
80
- function cff_install_addon() {
81
-
82
- // Run a security check.
83
- check_ajax_referer( 'cff-admin', 'nonce' );
84
-
85
- // Check for permissions.
86
- if ( ! current_user_can( 'manage_options' ) ) {
87
- wp_send_json_error();
88
- }
89
-
90
- $error = esc_html__( 'Could not install addon. Please download from smashballoon.com and install manually.', 'custom-facebook-feed' );
91
-
92
- if ( empty( $_POST['plugin'] ) ) {
93
- wp_send_json_error( $error );
94
- }
95
-
96
- // Set the current screen to avoid undefined notices.
97
- set_current_screen( 'cff-about' );
98
-
99
- // Prepare variables.
100
- $url = esc_url_raw(
101
- add_query_arg(
102
- array(
103
- 'page' => 'cff-about',
104
- ),
105
- admin_url( 'admin.php' )
106
- )
107
- );
108
-
109
- $creds = request_filesystem_credentials( $url, '', false, false, null );
110
-
111
- // Check for file system permissions.
112
- if ( false === $creds ) {
113
- wp_send_json_error( $error );
114
- }
115
-
116
- if ( ! WP_Filesystem( $creds ) ) {
117
- wp_send_json_error( $error );
118
- }
119
-
120
- /*
121
- * We do not need any extra credentials if we have gotten this far, so let's install the plugin.
122
- */
123
-
124
- require_once CFF_PLUGIN_DIR . 'admin/class-install-skin.php';
125
-
126
- // Do not allow WordPress to search/download translations, as this will break JS output.
127
- remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
128
-
129
- // Create the plugin upgrader with our custom skin.
130
- $installer = new CFF\Helpers\PluginSilentUpgrader( new CFF_Install_Skin() );
131
-
132
- // Error check.
133
- if ( ! method_exists( $installer, 'install' ) || empty( $_POST['plugin'] ) ) {
134
- wp_send_json_error( $error );
135
- }
136
-
137
- $installer->install( $_POST['plugin'] ); // phpcs:ignore
138
-
139
- // Flush the cache and return the newly installed plugin basename.
140
- wp_cache_flush();
141
-
142
- $plugin_basename = $installer->plugin_info();
143
-
144
- if ( $plugin_basename ) {
145
-
146
- $type = 'addon';
147
- if ( ! empty( $_POST['type'] ) ) {
148
- $type = sanitize_key( $_POST['type'] );
149
- }
150
-
151
- // Activate the plugin silently.
152
- $activated = activate_plugin( $plugin_basename );
153
-
154
- if ( ! is_wp_error( $activated ) ) {
155
- wp_send_json_success(
156
- array(
157
- 'msg' => 'plugin' === $type ? esc_html__( 'Plugin installed & activated.', 'custom-facebook-feed' ) : esc_html__( 'Addon installed & activated.', 'custom-facebook-feed' ),
158
- 'is_activated' => true,
159
- 'basename' => $plugin_basename,
160
- )
161
- );
162
- } else {
163
- wp_send_json_success(
164
- array(
165
- 'msg' => 'plugin' === $type ? esc_html__( 'Plugin installed.', 'custom-facebook-feed' ) : esc_html__( 'Addon installed.', 'custom-facebook-feed' ),
166
- 'is_activated' => false,
167
- 'basename' => $plugin_basename,
168
- )
169
- );
170
- }
171
- }
172
-
173
- wp_send_json_error( $error );
174
- }
175
  add_action( 'wp_ajax_cff_install_addon', 'cff_install_addon' );
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
+
4
+ /**
5
+ * Deactivate addon.
6
+ *
7
+ * @since 1.0.0
8
+ */
9
+ function cff_deactivate_addon() {
10
+
11
+ // Run a security check.
12
+ check_ajax_referer( 'cff-admin', 'nonce' );
13
+
14
+ // Check for permissions.
15
+ if ( ! current_user_can( 'manage_instagram_feed_options' ) ) {
16
+ wp_send_json_error();
17
+ }
18
+
19
+ $type = 'addon';
20
+ if ( ! empty( $_POST['type'] ) ) {
21
+ $type = sanitize_key( $_POST['type'] );
22
+ }
23
+
24
+ if ( isset( $_POST['plugin'] ) ) {
25
+ deactivate_plugins( $_POST['plugin'] );
26
+
27
+ if ( 'plugin' === $type ) {
28
+ wp_send_json_success( esc_html__( 'Plugin deactivated.', 'custom-facebook-feed' ) );
29
+ } else {
30
+ wp_send_json_success( esc_html__( 'Addon deactivated.', 'custom-facebook-feed' ) );
31
+ }
32
+ }
33
+
34
+ wp_send_json_error( esc_html__( 'Could not deactivate the addon. Please deactivate from the Plugins page.', 'custom-facebook-feed' ) );
35
+ }
36
+ add_action( 'wp_ajax_cff_deactivate_addon', 'cff_deactivate_addon' );
37
+
38
+ /**
39
+ * Activate addon.
40
+ *
41
+ * @since 1.0.0
42
+ */
43
+ function cff_activate_addon() {
44
+
45
+ // Run a security check.
46
+ check_ajax_referer( 'cff-admin', 'nonce' );
47
+
48
+ // Check for permissions.
49
+ if ( ! current_user_can( 'manage_options' ) ) {
50
+ wp_send_json_error();
51
+ }
52
+
53
+ if ( isset( $_POST['plugin'] ) ) {
54
+
55
+ $type = 'addon';
56
+ if ( ! empty( $_POST['type'] ) ) {
57
+ $type = sanitize_key( $_POST['type'] );
58
+ }
59
+
60
+ $activate = activate_plugins( $_POST['plugin'] );
61
+
62
+ if ( ! is_wp_error( $activate ) ) {
63
+ if ( 'plugin' === $type ) {
64
+ wp_send_json_success( esc_html__( 'Plugin activated.', 'custom-facebook-feed' ) );
65
+ } else {
66
+ wp_send_json_success( esc_html__( 'Addon activated.', 'custom-facebook-feed' ) );
67
+ }
68
+ }
69
+ }
70
+
71
+ wp_send_json_error( esc_html__( 'Could not activate addon. Please activate from the Plugins page.', 'custom-facebook-feed' ) );
72
+ }
73
+ add_action( 'wp_ajax_cff_activate_addon', 'cff_activate_addon' );
74
+
75
+ /**
76
+ * Install addon.
77
+ *
78
+ * @since 1.0.0
79
+ */
80
+ function cff_install_addon() {
81
+
82
+ // Run a security check.
83
+ check_ajax_referer( 'cff-admin', 'nonce' );
84
+
85
+ // Check for permissions.
86
+ if ( ! current_user_can( 'manage_options' ) ) {
87
+ wp_send_json_error();
88
+ }
89
+
90
+ $error = esc_html__( 'Could not install addon. Please download from smashballoon.com and install manually.', 'custom-facebook-feed' );
91
+
92
+ if ( empty( $_POST['plugin'] ) ) {
93
+ wp_send_json_error( $error );
94
+ }
95
+
96
+ // Set the current screen to avoid undefined notices.
97
+ set_current_screen( 'cff-about' );
98
+
99
+ // Prepare variables.
100
+ $url = esc_url_raw(
101
+ add_query_arg(
102
+ array(
103
+ 'page' => 'cff-about',
104
+ ),
105
+ admin_url( 'admin.php' )
106
+ )
107
+ );
108
+
109
+ $creds = request_filesystem_credentials( $url, '', false, false, null );
110
+
111
+ // Check for file system permissions.
112
+ if ( false === $creds ) {
113
+ wp_send_json_error( $error );
114
+ }
115
+
116
+ if ( ! WP_Filesystem( $creds ) ) {
117
+ wp_send_json_error( $error );
118
+ }
119
+
120
+ /*
121
+ * We do not need any extra credentials if we have gotten this far, so let's install the plugin.
122
+ */
123
+
124
+ require_once CFF_PLUGIN_DIR . 'admin/class-install-skin.php';
125
+
126
+ // Do not allow WordPress to search/download translations, as this will break JS output.
127
+ remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
128
+
129
+ // Create the plugin upgrader with our custom skin.
130
+ $installer = new CFF\Helpers\PluginSilentUpgrader( new CFF_Install_Skin() );
131
+
132
+ // Error check.
133
+ if ( ! method_exists( $installer, 'install' ) || empty( $_POST['plugin'] ) ) {
134
+ wp_send_json_error( $error );
135
+ }
136
+
137
+ $installer->install( $_POST['plugin'] ); // phpcs:ignore
138
+
139
+ // Flush the cache and return the newly installed plugin basename.
140
+ wp_cache_flush();
141
+
142
+ $plugin_basename = $installer->plugin_info();
143
+
144
+ if ( $plugin_basename ) {
145
+
146
+ $type = 'addon';
147
+ if ( ! empty( $_POST['type'] ) ) {
148
+ $type = sanitize_key( $_POST['type'] );
149
+ }
150
+
151
+ // Activate the plugin silently.
152
+ $activated = activate_plugin( $plugin_basename );
153
+
154
+ if ( ! is_wp_error( $activated ) ) {
155
+ wp_send_json_success(
156
+ array(
157
+ 'msg' => 'plugin' === $type ? esc_html__( 'Plugin installed & activated.', 'custom-facebook-feed' ) : esc_html__( 'Addon installed & activated.', 'custom-facebook-feed' ),
158
+ 'is_activated' => true,
159
+ 'basename' => $plugin_basename,
160
+ )
161
+ );
162
+ } else {
163
+ wp_send_json_success(
164
+ array(
165
+ 'msg' => 'plugin' === $type ? esc_html__( 'Plugin installed.', 'custom-facebook-feed' ) : esc_html__( 'Addon installed.', 'custom-facebook-feed' ),
166
+ 'is_activated' => false,
167
+ 'basename' => $plugin_basename,
168
+ )
169
+ );
170
+ }
171
+ }
172
+
173
+ wp_send_json_error( $error );
174
+ }
175
  add_action( 'wp_ajax_cff_install_addon', 'cff_install_addon' );
admin/class-cff-about.php CHANGED
@@ -1,1351 +1,1351 @@
1
- <?php
2
-
3
- /**
4
- * About Sbi admin page class.
5
- *
6
- * @since 2.4/5.5
7
- */
8
- class CFF_About {
9
-
10
- /**
11
- * Admin menu page slug.
12
- *
13
- * @since 2.4/5.5
14
- *
15
- * @var string
16
- */
17
- const SLUG = 'cff-about';
18
-
19
- /**
20
- * Default view for a page.
21
- *
22
- * @since 2.4/5.5
23
- *
24
- * @var string
25
- */
26
- const DEFAULT_TAB = 'about';
27
-
28
- /**
29
- * Array of license types, that are considered being top level and has no features difference.
30
- *
31
- * @since 2.4/5.5
32
- *
33
- * @var array
34
- */
35
- public static $licenses_top = array( 'pro', 'agency', 'ultimate', 'elite' );
36
-
37
- /**
38
- * List of features that licenses are different with.
39
- *
40
- * @since 2.4/5.5
41
- *
42
- * @var array
43
- */
44
- public static $licenses_features = array();
45
-
46
- /**
47
- * The current active tab.
48
- *
49
- * @since 2.4/5.5
50
- *
51
- * @var string
52
- */
53
- public $view;
54
-
55
- /**
56
- * The core views.
57
- *
58
- * @since 2.4/5.5
59
- *
60
- * @var array
61
- */
62
- public $views = array();
63
-
64
- /**
65
- * Primary class constructor.
66
- *
67
- * @since 2.4/5.5
68
- */
69
- public function __construct() {
70
-
71
- // In old PHP we can't define this elsewhere.
72
- self::$licenses_features = array(
73
- 'entries' => esc_html__( 'Media Display', 'custom-facebook-feed' ),
74
- //'fields' => esc_html__( 'Layouts', 'custom-facebook-feed' ),
75
- // 'templates' => esc_html__( 'Post Display', 'custom-facebook-feed' ),
76
- //'conditionals' => esc_html__( 'Image and Video Display', 'custom-facebook-feed' ),
77
- 'addons' => esc_html__( 'Post Source', 'custom-facebook-feed' ),
78
- 'addons1' => esc_html__( 'Number of Posts', 'custom-facebook-feed' ),
79
- 'addons2' => esc_html__( 'Filtering', 'custom-facebook-feed' ),
80
-
81
- //'marketing' => esc_html__( 'Filtering', 'custom-facebook-feed' ),
82
- //'marketing' => esc_html__( 'Instagram Stories', 'custom-facebook-feed' ),
83
- 'payments' => esc_html__( 'Feed Layout', 'custom-facebook-feed' ),
84
- 'surveys' => esc_html__( 'Post Information', 'custom-facebook-feed' ),
85
- 'advanced' => esc_html__( 'Comments', 'custom-facebook-feed' ),
86
- 'extensions' => esc_html__( 'Extensions', 'custom-facebook-feed' ),
87
- 'support' => esc_html__( 'Customer Support', 'custom-facebook-feed' ),
88
- );
89
-
90
- // Maybe load tools page.
91
- add_action( 'admin_init', array( $this, 'init' ) );
92
- }
93
-
94
- /**
95
- * Determining if the user is viewing the our page, if so, party on.
96
- *
97
- * @since 2.4/5.5
98
- */
99
- public function init() {
100
-
101
- // Check what page we are on.
102
- $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
103
-
104
- // Only load if we are actually on the settings page.
105
- if ( self::SLUG !== $page ) {
106
- return;
107
- }
108
-
109
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
110
-
111
- /*
112
- * Define the core views for the our tab.
113
- */
114
- $this->views = apply_filters(
115
- 'cff_admin_about_views',
116
- array(
117
- esc_html__( 'About Us', 'custom-facebook-feed' ) => array( 'about' ),
118
- esc_html__( 'Getting Started', 'custom-facebook-feed' ) => array( 'getting-started' ),
119
- )
120
- );
121
-
122
- $license = $this->get_license_type();
123
-
124
- if (
125
- (
126
- $license === 'pro' ||
127
- ! in_array( $license, self::$licenses_top, true )
128
- )
129
- //cff_debug()
130
- ) {
131
- $vs_tab_name = sprintf( /* translators: %1$s - current license type, %2$s - suggested license type. */
132
- esc_html__( '%1$s vs %2$s', 'custom-facebook-feed' ),
133
- ucfirst( $license ),
134
- $this->get_next_license( $license )
135
- );
136
-
137
- $this->views[ $vs_tab_name ] = array( 'versus' );
138
- }
139
-
140
- // Determine the current active settings tab.
141
- $this->view = ! empty( $_GET['view'] ) ? esc_html( $_GET['view'] ) : self::DEFAULT_TAB;
142
-
143
- // If the user tries to load an invalid view - fallback to About Us.
144
- if (
145
- ! in_array( $this->view, call_user_func_array( 'array_merge', $this->views ), true ) &&
146
- ! has_action( 'cff_admin_about_display_tab_' . sanitize_key( $this->view ) )
147
- ) {
148
- $this->view = self::DEFAULT_TAB;
149
- }
150
-
151
- add_action( 'cff_admin_page', array( $this, 'output' ) );
152
-
153
- // Hook for addons.
154
- do_action( 'cff_admin_about_init' );
155
- }
156
-
157
- /**
158
- * Enqueue assets for the the page.
159
- *
160
- * @since 2.4/5.5
161
- */
162
- public function enqueues() {
163
-
164
- wp_enqueue_script(
165
- 'jquery-matchheight',
166
- CFF_PLUGIN_URL . 'js/jquery.matchHeight-min.js',
167
- array( 'jquery' ),
168
- '0.7.0',
169
- false
170
- );
171
- }
172
-
173
- /**
174
- * Output the basic page structure.
175
- *
176
- * @since 2.4/5.5
177
- */
178
- public function output() {
179
-
180
- $show_nav = false;
181
- foreach ( $this->views as $view ) {
182
- if ( in_array( $this->view, (array) $view, true ) ) {
183
- $show_nav = true;
184
- break;
185
- }
186
- }
187
- ?>
188
-
189
- <div id="cff-admin-about" class="wrap cff-admin-wrap">
190
-
191
- <?php
192
- if ( $show_nav ) {
193
- $license = $this->get_license_type();
194
- $next_license = $this->get_next_license( $license );
195
- echo '<ul class="cff-admin-tabs">';
196
- foreach ( $this->views as $label => $view ) {
197
- $class = in_array( $this->view, $view, true ) ? 'active' : '';
198
- echo '<li>';
199
- printf(
200
- '<a href="%s" class="%s">%s</a>',
201
- esc_url( admin_url( 'admin.php?page=' . self::SLUG . '&view=' . sanitize_key( $view[0] ) ) ),
202
- esc_attr( $class ),
203
- esc_html( $label )
204
- );
205
- echo '</li>';
206
- }
207
- echo '</ul>';
208
- }
209
- ?>
210
-
211
- <h1 class="cff-h1-placeholder"></h1>
212
-
213
- <?php
214
- switch ( $this->view ) {
215
- case 'about':
216
- $this->output_about();
217
- break;
218
- case 'getting-started':
219
- $this->output_getting_started();
220
- break;
221
- case 'versus':
222
- $this->output_versus();
223
- break;
224
- default:
225
- do_action( 'cff_admin_about_display_tab_' . sanitize_key( $this->view ) );
226
- break;
227
- }
228
- ?>
229
-
230
- </div>
231
-
232
- <?php
233
- }
234
-
235
- /**
236
- * Display the About tab content.
237
- *
238
- * @since 2.4/5.5
239
- */
240
- protected function output_about() {
241
-
242
- $this->output_about_info();
243
- $this->output_about_addons();
244
- }
245
-
246
- /**
247
- * Display the General Info section of About tab.
248
- *
249
- * @since 1.5.8
250
- */
251
- protected function output_about_info() {
252
-
253
- ?>
254
-
255
- <div class="cff-admin-about-section cff-admin-columns">
256
-
257
- <div class="cff-admin-about-text" style="min-height: 340px;">
258
- <h3>
259
- <?php esc_html_e( 'Hello and welcome to the Custom Facebook Feed plugin, the most customizable, clean, and simple Facebook feed plugin in the world. At Smash Balloon, we build software that helps you create beautiful responsive social media feeds for your website in minutes.', 'custom-facebook-feed' ); ?>
260
- </h3>
261
-
262
- <p>
263
- <?php esc_html_e( 'Smash Balloon is a fun-loving WordPress plugin development company birthed into existence in early 2013. We specialize in creating plugins that are not only intuitive and simple to use, but also designed to integrate seamlessly into your website and allow you to display your social media content in powerful and unique ways. Over 1 million awesome people have decided to actively use our plugins, which is an incredible honor that we don’t take lightly. This compels us to try to provide the quickest and most effective customer support that we can, blowing users away with the best customer service they’ve ever experienced.', 'custom-facebook-feed' ); ?>
264
- </p>
265
- <p>
266
- <?php esc_html_e( 'We’re a small, but dedicated, team based in Minnesota in the USA.', 'custom-facebook-feed' ); ?>
267
- </p>
268
-
269
- </div>
270
-
271
- <div class="cff-admin-about-image cff-admin-column-last">
272
- <figure>
273
- <img src="<?php echo CFF_PLUGIN_URL; ?>img/about/team.jpg" alt="<?php esc_attr_e( 'The Sbi Team photo', 'custom-facebook-feed' ); ?>">
274
- <figcaption>
275
- <?php esc_html_e( 'The Smash Balloon Team', 'custom-facebook-feed' ); ?><br>
276
- </figcaption>
277
- </figure>
278
- </div>
279
-
280
- </div>
281
- <?php
282
- }
283
-
284
- /**
285
- * Display the Addons section of About tab.
286
- *
287
- * @since 1.5.8
288
- */
289
- protected function output_about_addons() {
290
-
291
- if ( ! current_user_can( 'manage_custom_facebook_feed_options' ) || version_compare( PHP_VERSION, '5.3.0' ) <= 0 ) {
292
- return;
293
- }
294
-
295
- $all_plugins = get_plugins();
296
- $am_plugins = $this->get_am_plugins();
297
-
298
- ?>
299
- <div id="cff-admin-addons">
300
- <div class="addons-container">
301
- <h3><?php echo __( 'Our Other Plugins', 'custom-facebook-feed' ); ?></h3>
302
- <?php
303
- foreach ( $am_plugins as $plugin => $details ) :
304
-
305
- $plugin_data = $this->get_plugin_data( $plugin, $details, $all_plugins );
306
-
307
- if ( $plugin === 'wpforms-lite/wpforms.php' ) {
308
- echo '<h3>' .__( 'Plugins We Recommend', 'custom-facebook-feed' ). '</h3>';
309
- }
310
-
311
- ?>
312
- <div class="addon-container">
313
- <div class="addon-item">
314
- <div class="details cff-clear">
315
- <img src="<?php echo esc_url( $plugin_data['details']['icon'] ); ?>">
316
- <h5 class="addon-name">
317
- <?php echo esc_html( $plugin_data['details']['name'] ); ?>
318
- </h5>
319
- <p class="addon-desc">
320
- <?php echo wp_kses_post( $plugin_data['details']['desc'] ); ?>
321
- </p>
322
- </div>
323
- <div class="actions cff-clear">
324
- <div class="status">
325
- <strong>
326
- <?php
327
- printf(
328
- /* translators: %s - addon status label. */
329
- esc_html__( 'Status: %s', 'custom-facebook-feed' ),
330
- '<span class="status-label ' . esc_attr( $plugin_data['status_class'] ) . '">' . wp_kses_post( $plugin_data['status_text'] ) . '</span>'
331
- );
332
- ?>
333
- </strong>
334
- </div>
335
- <div class="action-button">
336
- <button class="<?php echo esc_attr( $plugin_data['action_class'] ); ?>" data-plugin="<?php echo esc_attr( $plugin_data['plugin_src'] ); ?>" data-type="plugin">
337
- <?php echo wp_kses_post( $plugin_data['action_text'] ); ?>
338
- </button>
339
- </div>
340
- </div>
341
- </div>
342
- </div>
343
- <?php endforeach; ?>
344
- </div>
345
- </div>
346
- <?php
347
- }
348
-
349
- /**
350
- * Get AM plugin data to display in the Addons section of About tab.
351
- *
352
- * @since 1.5.8
353
- *
354
- * @param string $plugin Plugin slug.
355
- * @param array $details Plugin details.
356
- * @param array $all_plugins List of all plugins.
357
- *
358
- * @return array
359
- */
360
- protected function get_plugin_data( $plugin, $details, $all_plugins ) {
361
-
362
- $have_pro = ( ! empty( $details['pro'] ) && ! empty( $details['pro']['plug'] ) );
363
- $show_pro = false;
364
-
365
- $plugin_data = array();
366
-
367
- if ( $have_pro ) {
368
- if ( array_key_exists( $plugin, $all_plugins ) ) {
369
- if ( is_plugin_active( $plugin ) ) {
370
- $show_pro = true;
371
- }
372
- }
373
- if ( array_key_exists( $details['pro']['plug'], $all_plugins ) ) {
374
- $show_pro = true;
375
- }
376
- if ( $show_pro ) {
377
- $plugin = $details['pro']['plug'];
378
- $details = $details['pro'];
379
- }
380
- }
381
-
382
- if ( array_key_exists( $plugin, $all_plugins ) ) {
383
- if ( is_plugin_active( $plugin ) ) {
384
- // Status text/status.
385
- $plugin_data['status_class'] = 'status-active';
386
- $plugin_data['status_text'] = esc_html__( 'Active', 'custom-facebook-feed' );
387
- // Button text/status.
388
- $plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-secondary disabled';
389
- $plugin_data['action_text'] = esc_html__( 'Activated', 'custom-facebook-feed' );
390
- $plugin_data['plugin_src'] = esc_attr( $plugin );
391
- } else {
392
- // Status text/status.
393
- $plugin_data['status_class'] = 'status-inactive';
394
- $plugin_data['status_text'] = esc_html__( 'Inactive', 'custom-facebook-feed' );
395
- // Button text/status.
396
- $plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-secondary';
397
- $plugin_data['action_text'] = esc_html__( 'Activate', 'custom-facebook-feed' );
398
- $plugin_data['plugin_src'] = esc_attr( $plugin );
399
- }
400
- } else {
401
- // Doesn't exist, install.
402
- // Status text/status.
403
- $plugin_data['status_class'] = 'status-download';
404
- if ( isset( $details['act'] ) && 'go-to-url' === $details['act'] ) {
405
- $plugin_data['status_class'] = 'status-go-to-url';
406
- }
407
- $plugin_data['status_text'] = esc_html__( 'Not Installed', 'custom-facebook-feed' );
408
- // Button text/status.
409
- $plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-primary';
410
- $plugin_data['action_text'] = esc_html__( 'Install Plugin', 'custom-facebook-feed' );
411
- $plugin_data['plugin_src'] = esc_url( $details['url'] );
412
- }
413
-
414
- $plugin_data['details'] = $details;
415
-
416
- return $plugin_data;
417
- }
418
-
419
- /**
420
- * Display the Getting Started tab content.
421
- *
422
- * @since 2.4/5.5
423
- */
424
- protected function output_getting_started() {
425
-
426
- $license = $this->get_license_type();
427
- ?>
428
-
429
- <div class="cff-admin-about-section cff-admin-about-section-first-form" style="display:flex;">
430
-
431
- <div class="cff-admin-about-section-first-form-text">
432
-
433
- <h2>
434
- <?php esc_html_e( 'Creating Your First Feed', 'custom-facebook-feed' ); ?>
435
- </h2>
436
-
437
- <p>
438
- <?php esc_html_e( 'Want to get started creating your first feed with Custom Facebook Feed? By following the step by step instructions in this walkthrough, you can easily publish your first feed on your site.', 'custom-facebook-feed' ); ?>
439
- </p>
440
-
441
- <p>
442
- <?php esc_html_e( 'Navigate to Facebook Feed in the admin sidebar to go the Configure page.', 'custom-facebook-feed' ); ?>
443
- </p>
444
-
445
- <p>
446
- <?php esc_html_e( 'Click on the large blue button to connect your Facebook account.', 'custom-facebook-feed' ); ?>
447
- </p>
448
-
449
- <p>
450
- <?php esc_html_e( 'Once you connect a Facebook account, you can display your feed on any post, page or widget using the shortcode [custom-facebook-feed]. You can also use the Custom Facebook Feed Gutenberg block if your site has the WordPress block editor enabled.', 'custom-facebook-feed' ); ?>
451
- </p>
452
-
453
- <ul class="list-plain">
454
- <li>
455
- <a href="https://smashballoon.com/can-display-feeds-multiple-facebook-pages/?utm_source=WordPress&utm_medium=cff-about-page&utm_campaign=gettingstarted#multiple-feeds" target="_blank" rel="noopener noreferrer">
456
- <?php esc_html_e( 'Display Multiple Feeds', 'custom-facebook-feed' ); ?>
457
- </a>
458
- </li>
459
- <li>
460
- <a href="https://smashballoon.com/using-shortcode-options-customize-facebook-feeds/?utm_source=WordPress&utm_medium=cff-about-page&utm_campaign=gettingstarted#differentaccount" target="_blank" rel="noopener noreferrer">
461
- <?php esc_html_e( 'Shortcode Settings Guide', 'custom-facebook-feed' ); ?>
462
- </a>
463
- </li>
464
- <li>
465
- <a href="https://smashballoon.com/find-facebook-page-group-id/?utm_source=WordPress&utm_medium=cff-about-page&utm_campaign=gettingstarted#display-form" target="_blank" rel="noopener noreferrer">
466
- <?php esc_html_e( 'Find My Page ID', 'custom-facebook-feed' ); ?>
467
- </a>
468
- </li>
469
- </ul>
470
-
471
- </div>
472
-
473
- <div class="cff-admin-about-section-first-form-video">
474
- <iframe src="https://www.youtube-nocookie.com/embed/0gykYq3JSrY?rel=0" width="540" height="304" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
475
- </div>
476
-
477
- </div>
478
-
479
- <?php if ( ! in_array( $license, self::$licenses_top, true ) ) { ?>
480
- <div class="cff-admin-about-section cff-admin-about-section-hero">
481
-
482
- <div class="cff-admin-about-section-hero-main">
483
- <h2>
484
- <?php esc_html_e( 'Get Custom Facebook Feed Pro and Unlock all the Powerful Features', 'custom-facebook-feed' ); ?>
485
- </h2>
486
-
487
- <p class="bigger">
488
- <?php
489
- echo wp_kses(
490
- __( 'Thanks for being a loyal Custom Facebook Feed Lite user. <strong>Upgrade to Custom Facebook Feed Pro</strong> to unlock all the awesome features and experience<br>why Custom Facebook Feed is the most popular Facebook feed plugin.', 'custom-facebook-feed' ),
491
- array(
492
- 'br' => array(),
493
- 'strong' => array(),
494
- )
495
- );
496
- ?>
497
- </p>
498
-
499
- <p>
500
- <?php
501
- printf(
502
- wp_kses(
503
- /* translators: %s - stars. */
504
- __( 'We know that you will truly love Custom Facebook Feed. It has over <strong>1000+ five star ratings</strong> (%s) and is active on over 200,000 websites.', 'custom-facebook-feed' ),
505
- array(
506
- 'strong' => array(),
507
- )
508
- ),
509
- '<i class="fa fa-star" aria-hidden="true"></i>' .
510
- '<i class="fa fa-star" aria-hidden="true"></i>' .
511
- '<i class="fa fa-star" aria-hidden="true"></i>' .
512
- '<i class="fa fa-star" aria-hidden="true"></i>' .
513
- '<i class="fa fa-star" aria-hidden="true"></i>'
514
- );
515
- ?>
516
- </p>
517
- </div>
518
-
519
- <div class="cff-admin-about-section-hero-extra">
520
- <div class="cff-admin-columns">
521
- <div class="cff-admin-column-50">
522
- <ul class="list-features list-plain">
523
- <li>
524
- <i class="fa fa-check" aria-hidden="true"></i>
525
- <?php esc_html_e( 'Display photos, videos, and albums in your posts.', 'custom-facebook-feed' ); ?>
526
- </li>
527
- <li>
528
- <i class="fa fa-check" aria-hidden="true"></i>
529
- <?php esc_html_e( 'Choose which content type to display; posts, photos, albums, videos, links, or events.', 'custom-facebook-feed' ); ?>
530
- </li>
531
- <li>
532
- <i class="fa fa-check" aria-hidden="true"></i>
533
- <?php esc_html_e( 'Pop-up lightbox to view images and watch videos.', 'custom-facebook-feed' ); ?>
534
- </li>
535
- <li>
536
- <i class="fa fa-check" aria-hidden="true"></i>
537
- <?php esc_html_e( 'Show comments, likes, shares, reactions and comment replies.', 'custom-facebook-feed' ); ?>
538
- </li>
539
- <li>
540
- <i class="fa fa-check" aria-hidden="true"></i>
541
- <?php esc_html_e( 'Filter posts by hashtag or words.', 'custom-facebook-feed' ); ?>
542
- </li>
543
- </ul>
544
- </div>
545
- <div class="cff-admin-column-50 cff-admin-column-last">
546
- <ul class="list-features list-plain">
547
- <li>
548
- <i class="fa fa-check" aria-hidden="true"></i>
549
- <?php esc_html_e( 'Infinitely load more posts.', 'custom-facebook-feed' ); ?>
550
- </li>
551
- <li>
552
- <i class="fa fa-check" aria-hidden="true"></i>
553
- <?php esc_html_e( 'HD, 360 degree, and Live video support.', 'custom-facebook-feed' ); ?>
554
- </li>
555
- <li>
556
- <i class="fa fa-check" aria-hidden="true"></i>
557
- <?php esc_html_e( 'Support for Facebook Groups.', 'custom-facebook-feed' ); ?>
558
- </li>
559
- <li>
560
- <i class="fa fa-check" aria-hidden="true"></i>
561
- <?php esc_html_e( 'Multiple post layout options.', 'custom-facebook-feed' ); ?>
562
- </li>
563
- <li>
564
- <i class="fa fa-check" aria-hidden="true"></i>
565
- <?php esc_html_e( 'Priority Pro support from our team of experts.', 'custom-facebook-feed' ); ?>
566
- </li>
567
- </ul>
568
- </div>
569
- </div>
570
-
571
- <hr />
572
-
573
- <h3 class="call-to-action">
574
- <?php
575
- if ( 'lite' === $license ) {
576
- echo '<a href="https://smashballoon.com/custom-facebook-feed/pricing/?utm_source=plugin-free&utm_campaign=cff" target="_blank" rel="noopener noreferrer">';
577
- } else {
578
- echo '<a href="https://smashballoon.com/custom-facebook-feed/pricing/?utm_source=WordPress&utm_medium=cff-about-page&utm_campaign=gettingstarted" target="_blank" rel="noopener noreferrer">';
579
- }
580
- esc_html_e( 'Get Custom Facebook Feed Pro Today and Unlock all the Powerful Features', 'custom-facebook-feed' );
581
- ?>
582
- </a>
583
- </h3>
584
-
585
- <?php if ( 'lite' === $license ) { ?>
586
- <p>
587
- <?php
588
- echo wp_kses(
589
- __( 'Bonus: Custom Facebook Feed Lite users get <span class="price-20-off">50% off regular price</span>, automatically applied at checkout.', 'custom-facebook-feed' ),
590
- array(
591
- 'span' => array(
592
- 'class' => array(),
593
- ),
594
- )
595
- );
596
- ?>
597
- </p>
598
- <?php } ?>
599
- </div>
600
-
601
- </div>
602
- <?php } ?>
603
-
604
-
605
- <div class="cff-admin-about-section cff-admin-about-section-squashed cff-admin-about-section-post cff-admin-columns">
606
- <div class="cff-admin-column-20">
607
- <img src="<?php echo CFF_PLUGIN_URL; ?>img/about/steps.png" alt="">
608
- </div>
609
- <div class="cff-admin-column-80">
610
- <h2>
611
- <?php esc_html_e( 'Detailed Step-By-Step Guide', 'custom-facebook-feed' ); ?>
612
- </h2>
613
-
614
- <p>
615
- <?php esc_html_e( 'View detailed steps with related images on our website. We have a comprehensive guide to getting up and running with Custom Facebook Feed.', 'custom-facebook-feed' ); ?>
616
- </p>
617
-
618
- <a href="https://smashballoon.com/custom-facebook-feed/docs/free/?utm_source=WordPress&utm_medium=cff-about-page&utm_campaign=gettingstarted" target="_blank" rel="noopener noreferrer" class="cff-admin-about-section-post-link">
619
- <?php esc_html_e( 'Read Documentation', 'custom-facebook-feed' ); ?><i class="fa fa-external-link" aria-hidden="true"></i>
620
- </a>
621
- </div>
622
- </div>
623
-
624
- <div class="cff-admin-about-section cff-admin-about-section-squashed cff-admin-about-section-post cff-admin-columns">
625
- <div class="cff-admin-column-20">
626
- <img src="<?php echo CFF_PLUGIN_URL; ?>img/about/api-error.png" alt="">
627
- </div>
628
- <div class="cff-admin-column-80">
629
- <h2>
630
- <?php esc_html_e( 'Troubleshoot Connection and API Errors', 'custom-facebook-feed' ); ?>
631
- </h2>
632
-
633
- <p>
634
- <?php esc_html_e( 'Are you having trouble displaying your feed due to an error connecting an account or a Facebook API error? We have several articles to help you troubleshoot issues and help you solve them.', 'custom-facebook-feed' ); ?>
635
- </p>
636
-
637
- <a href="https://smashballoon.com/custom-facebook-feed/docs/errors/?utm_source=WordPress&utm_medium=cff-about-page&utm_campaign=gettingstarted" target="_blank" rel="noopener noreferrer" class="cff-admin-about-section-post-link">
638
- <?php esc_html_e( 'Read Documentation', 'custom-facebook-feed' ); ?><i class="fa fa-external-link" aria-hidden="true"></i>
639
- </a>
640
- </div>
641
- </div>
642
-
643
- <?php
644
- }
645
-
646
- /**
647
- * Get the next license type. Helper for Versus tab content.
648
- *
649
- * @since 1.5.5
650
- *
651
- * @param string $current Current license type slug.
652
- *
653
- * @return string Next license type slug.
654
- */
655
- protected function get_next_license( $current ) {
656
-
657
- return 'Pro';
658
- $current = ucfirst( $current );
659
- $license_pairs = array(
660
- 'Lite' => 'Pro',
661
- 'Basic' => 'Pro',
662
- 'Plus' => 'Pro',
663
- 'Pro' => 'Elite',
664
- );
665
-
666
- return ! empty( $license_pairs[ $current ] ) ? $license_pairs[ $current ] : 'Elite';
667
- }
668
-
669
- /**
670
- * Display the Versus tab content.
671
- *
672
- * @since 2.4/5.5
673
- */
674
- protected function output_versus() {
675
-
676
- //$license = $this->get_license_type();
677
- //$next_license = $this->get_next_license( $license );
678
- $license = 'lite';
679
- $next_license = 'pro';
680
- ?>
681
-
682
- <div class="cff-admin-about-section cff-admin-about-section-squashed">
683
- <h1 class="centered">
684
- <strong><?php echo esc_html( ucfirst( $license ) ); ?></strong> vs <strong><?php echo esc_html( ucfirst( $next_license ) ); ?></strong>
685
- </h1>
686
-
687
- <p class="centered">
688
- <?php esc_html_e( 'Get the most out of your Custom Facebook Feeds by upgrading to Pro and unlocking all of the powerful features.', 'custom-facebook-feed' ); ?>
689
- </p>
690
- </div>
691
-
692
- <div class="cff-admin-about-section cff-admin-about-section-squashed cff-admin-about-section-hero cff-admin-about-section-table">
693
-
694
- <div class="cff-admin-about-section-hero-main cff-admin-columns">
695
- <div class="cff-admin-column-33">
696
- <h3 class="no-margin">
697
- <?php esc_html_e( 'Feature', 'custom-facebook-feed' ); ?>
698
- </h3>
699
- </div>
700
- <div class="cff-admin-column-33">
701
- <h3 class="no-margin">
702
- <?php echo esc_html( ucfirst( $license ) ); ?>
703
- </h3>
704
- </div>
705
- <div class="cff-admin-column-33">
706
- <h3 class="no-margin">
707
- <?php echo esc_html( ucfirst( $next_license ) ); ?>
708
- </h3>
709
- </div>
710
- </div>
711
- <div class="cff-admin-about-section-hero-extra no-padding cff-admin-columns">
712
-
713
- <table>
714
- <?php
715
- foreach ( self::$licenses_features as $slug => $name ) {
716
- $current = $this->get_license_data( $slug, $license );
717
- $next = $this->get_license_data( $slug, strtolower( $next_license ) );
718
-
719
- if ( empty( $current ) || empty( $next ) ) {
720
- continue;
721
- }
722
- ?>
723
- <tr class="cff-admin-columns">
724
- <td class="cff-admin-column-33">
725
- <p><?php echo esc_html( $name ); ?></p>
726
- </td>
727
- <td class="cff-admin-column-33">
728
- <?php if ( is_array( $current ) ) : ?>
729
- <p class="features-<?php echo esc_attr( $current['status'] ); ?>">
730
- <?php echo wp_kses_post( implode( '<br>', $current['text'] ) ); ?>
731
- </p>
732
- <?php endif; ?>
733
- </td>
734
- <td class="cff-admin-column-33">
735
- <?php if ( is_array( $current ) ) : ?>
736
- <p class="features-full">
737
- <?php echo wp_kses_post( implode( '<br>', $next['text'] ) ); ?>
738
- </p>
739
- <?php endif; ?>
740
- </td>
741
- </tr>
742
- <?php
743
- }
744
- ?>
745
- </table>
746
-
747
- </div>
748
-
749
- </div>
750
-
751
- <div class="cff-admin-about-section cff-admin-about-section-hero">
752
- <div class="cff-admin-about-section-hero-main no-border">
753
- <h3 class="call-to-action centered">
754
- <?php
755
- if ( 'lite' === $license ) {
756
- echo '<a href="https://smashballoon.com/custom-facebook-feed/pricing/?utm_source=WordPress&utm_medium=cff-about-page&utm_campaign=gettingstarted" target="_blank" rel="noopener noreferrer">';
757
- } else {
758
- echo '<a href="https://smashballoon.com/custom-facebook-feed/pricing/?utm_source=WordPress&utm_medium=cff-about-page&utm_campaign=gettingstarted" target="_blank" rel="noopener noreferrer">';
759
- }
760
- printf( /* translators: %s - next license level. */
761
- esc_html__( 'Get Custom Facebook Feed Pro Today and Unlock all the Powerful Features', 'custom-facebook-feed' ),
762
- esc_html( $next_license )
763
- );
764
- ?>
765
- </a>
766
- </h3>
767
-
768
- <?php if ( 'lite' === $license ) { ?>
769
- <p class="centered">
770
- <?php
771
- echo wp_kses(
772
- __( 'Bonus: Custom Facebook Feed Lite users get <span class="price-20-off">50% off regular price</span>, automatically applied at checkout.', 'custom-facebook-feed' ),
773
- array(
774
- 'span' => array(
775
- 'class' => array(),
776
- ),
777
- )
778
- );
779
- ?>
780
- </p>
781
- <?php } ?>
782
- </div>
783
- </div>
784
-
785
- <?php
786
- }
787
-
788
- /**
789
- * List of AM plugins that we propose to install.
790
- *
791
- * @since 2.4/5.5
792
- *
793
- * @return array
794
- */
795
- protected function get_am_plugins() {
796
-
797
- $images_url = CFF_PLUGIN_URL . 'img/about/';
798
-
799
- return array(
800
- 'instagram-feed/instagram-feed.php' => array(
801
- 'icon' => $images_url . 'plugin-if.png',
802
- 'name' => esc_html__( 'Instagram Feed', 'custom-facebook-feed' ),
803
- 'desc' => esc_html__( 'Instagram Feed is a clean and beautiful way to add your Instagram posts to your website. Grab your visitors attention and keep them engaged with your site longer.', 'custom-facebook-feed' ),
804
- 'url' => 'https://downloads.wordpress.org/plugin/instagram-feed.zip',
805
- 'pro' => array(
806
- 'plug' => 'instagram-feed-pro/instagram-feed.php',
807
- 'icon' => $images_url . 'plugin-if.png',
808
- 'name' => esc_html__( 'Instagram Feed Pro', 'custom-facebook-feed' ),
809
- 'desc' => esc_html__( 'Instagram Feed is a clean and beautiful way to add your Instagram posts to your website. Grab your visitors attention and keep them engaged with your site longer.', 'custom-facebook-feed' ),
810
- 'url' => 'https://smashballoon.com/instagram-feed/?utm_source=WordPress&utm_campaign=facebook'.$this->get_license_type().'about',
811
- 'act' => 'go-to-url',
812
- ),
813
- ),
814
-
815
- 'custom-twitter-feeds/custom-twitter-feed.php' => array(
816
- 'icon' => $images_url . 'plugin-tw.jpg',
817
- 'name' => esc_html__( 'Custom Twitter Feeds', 'custom-facebook-feed' ),
818
- 'desc' => esc_html__( 'Custom Twitter Feeds is a highly customizable way to display tweets from your Twitter account. Promote your latest content and update your site content automatically.', 'custom-facebook-feed' ),
819
- 'url' => 'https://downloads.wordpress.org/plugin/custom-twitter-feeds.zip',
820
- 'pro' => array(
821
- 'plug' => 'custom-twitter-feeds-pro/custom-twitter-feed.php',
822
- 'icon' => $images_url . 'plugin-tw.jpg',
823
- 'name' => esc_html__( 'Custom Twitter Feeds Pro', 'custom-facebook-feed' ),
824
- 'desc' => esc_html__( 'Custom Twitter Feeds is a highly customizable way to display tweets from your Twitter account. Promote your latest content and update your site content automatically.', 'custom-facebook-feed' ),
825
- 'url' => 'https://smashballoon.com/custom-twitter-feeds/?utm_source=WordPress&utm_campaign=facebook'.$this->get_license_type().'about',
826
- 'act' => 'go-to-url',
827
- ),
828
- ),
829
-
830
- 'feeds-for-youtube/youtube-feed.php' => array(
831
- 'icon' => $images_url . 'plugin-yt.png',
832
- 'name' => esc_html__( 'Feeds for YouTube', 'custom-facebook-feed' ),
833
- 'desc' => esc_html__( 'Feeds for YouTube is a simple yet powerful way to display videos from YouTube on your website. Increase engagement with your channel while keeping visitors on your website.', 'custom-facebook-feed' ),
834
- 'url' => 'https://downloads.wordpress.org/plugin/feeds-for-youtube.zip',
835
- 'pro' => array(
836
- 'plug' => 'youtube-feed-pro/youtube-feed.php',
837
- 'icon' => $images_url . 'plugin-yt.png',
838
- 'name' => esc_html__( 'Feeds for YouTube Pro', 'custom-facebook-feed' ),
839
- 'desc' => esc_html__( 'Feeds for YouTube is a simple yet powerful way to display videos from YouTube on your website. Increase engagement with your channel while keeping visitors on your website.', 'custom-facebook-feed' ),
840
- 'url' => 'https://smashballoon.com/youtube-feed/?utm_source=WordPress&utm_campaign=facebook'.$this->get_license_type().'about',
841
- 'act' => 'go-to-url',
842
- ),
843
- ),
844
-
845
- 'wpforms-lite/wpforms.php' => array(
846
- 'icon' => $images_url . 'plugin-wpforms.png',
847
- 'name' => esc_html__( 'WPForms', 'custom-facebook-feed' ),
848
- 'desc' => esc_html__( 'The most beginner friendly drag & drop WordPress forms plugin allowing you to create beautiful contact forms, subscription forms, payment forms, and more in minutes, not hours!', 'custom-facebook-feed' ),
849
- 'url' => 'https://downloads.wordpress.org/plugin/wpforms-lite.zip',
850
- 'pro' => array(
851
- 'plug' => 'wpforms/wpforms.php',
852
- 'icon' => $images_url . 'plugin-wpforms.png',
853
- 'name' => esc_html__( 'WPForms', 'custom-facebook-feed' ),
854
- 'desc' => esc_html__( 'The most beginner friendly drag & drop WordPress forms plugin allowing you to create beautiful contact forms, subscription forms, payment forms, and more in minutes, not hours!', 'custom-facebook-feed' ),
855
- 'url' => 'https://wpforms.com/lite-upgrade/?utm_source=WordPress&utm_campaign=liteplugin&utm_medium=cff-about-page',
856
- 'act' => 'go-to-url',
857
- ),
858
- ),
859
-
860
- 'google-analytics-for-wordpress/googleanalytics.php' => array(
861
- 'icon' => $images_url . 'plugin-mi.png',
862
- 'name' => esc_html__( 'MonsterInsights', 'custom-facebook-feed' ),
863
- 'desc' => esc_html__( 'MonsterInsights makes it “effortless” to properly connect your WordPress site with Google Analytics, so you can start making data-driven decisions to grow your business.', 'custom-facebook-feed' ),
864
- 'url' => 'https://downloads.wordpress.org/plugin/google-analytics-for-wordpress.zip',
865
- 'pro' => array(
866
- 'plug' => 'google-analytics-premium/googleanalytics-premium.php',
867
- 'icon' => $images_url . 'plugin-mi.png',
868
- 'name' => esc_html__( 'MonsterInsights Pro', 'custom-facebook-feed' ),
869
- 'desc' => esc_html__( 'MonsterInsights makes it “effortless” to properly connect your WordPress site with Google Analytics, so you can start making data-driven decisions to grow your business.', 'custom-facebook-feed' ),
870
- 'url' => 'https://www.monsterinsights.com/?utm_source=proplugin&utm_medium=cff-about-page&utm_campaign=pluginurl&utm_content=7%2E0%2E0',
871
- 'act' => 'go-to-url',
872
- ),
873
- ),
874
-
875
- 'optinmonster/optin-monster-wp-api.php' => array(
876
- 'icon' => $images_url . 'plugin-om.png',
877
- 'name' => esc_html__( 'OptinMonster', 'custom-facebook-feed' ),
878
- 'desc' => esc_html__( 'Our high-converting optin forms like Exit-Intent® popups, Fullscreen Welcome Mats, and Scroll boxes help you dramatically boost conversions and get more email subscribers.', 'custom-facebook-feed' ),
879
- 'url' => 'https://downloads.wordpress.org/plugin/optinmonster.zip',
880
- ),
881
-
882
- 'wp-mail-smtp/wp_mail_smtp.php' => array(
883
- 'icon' => $images_url . 'plugin-smtp.png',
884
- 'name' => esc_html__( 'WP Mail SMTP', 'custom-facebook-feed' ),
885
- 'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'custom-facebook-feed' ),
886
- 'url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
887
- 'pro' => array(
888
- 'plug' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
889
- 'icon' => $images_url . 'plugin-smtp.png',
890
- 'name' => esc_html__( 'WP Mail SMTP Pro', 'custom-facebook-feed' ),
891
- 'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'custom-facebook-feed' ),
892
- 'url' => 'https://wpmailsmtp.com/pricing/',
893
- 'act' => 'go-to-url',
894
- ),
895
- ),
896
-
897
- 'rafflepress/rafflepress.php' => array(
898
- 'icon' => $images_url . 'plugin-rp.png',
899
- 'name' => esc_html__( 'RafflePress', 'custom-facebook-feed' ),
900
- 'desc' => esc_html__( 'Turn your visitors into brand ambassadors! Easily grow your email list, website traffic, and social media followers with powerful viral giveaways & contests.', 'custom-facebook-feed' ),
901
- 'url' => 'https://downloads.wordpress.org/plugin/rafflepress.zip',
902
- 'pro' => array(
903
- 'plug' => 'rafflepress-pro/rafflepress-pro.php',
904
- 'icon' => $images_url . 'plugin-rp.png',
905
- 'name' => esc_html__( 'RafflePress Pro', 'custom-facebook-feed' ),
906
- 'desc' => esc_html__( 'Turn your visitors into brand ambassadors! Easily grow your email list, website traffic, and social media followers with powerful viral giveaways & contests.', 'custom-facebook-feed' ),
907
- 'url' => 'https://rafflepress.com/pricing/',
908
- 'act' => 'go-to-url',
909
- ),
910
- ),
911
-
912
- 'all-in-one-seo-pack/all_in_one_seo_pack.php' => array(
913
- 'icon' => $images_url . 'plugin-seo.png',
914
- 'name' => esc_html__( 'All In One SEO Pack', 'custom-facebook-feed' ),
915
- 'desc' => esc_html__( 'Out-of-the-box SEO for WordPress. Features like XML Sitemaps, SEO for custom post types, SEO for blogs or business sites, SEO for ecommerce sites, and much more. More than 50 million downloads since 2007.', 'custom-facebook-feed' ),
916
- 'url' => 'https://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip',
917
- ),
918
- );
919
- }
920
-
921
- /**
922
- * Get the array of data that compared the license data.
923
- *
924
- * @since 2.4/5.5
925
- *
926
- * @param string $feature Feature name.
927
- * @param string $license License type to get data for.
928
- *
929
- * @return array|false
930
- */
931
- protected function get_license_data( $feature, $license ) {
932
-
933
- $data = array(
934
- 'entries' => array(
935
- 'lite' => array(
936
- 'status' => 'none',
937
- 'text' => array(
938
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
939
- ),
940
- ),
941
- 'basic' => array(
942
- 'status' => 'full',
943
- 'text' => array(
944
- '<strong>' . esc_html__( 'User, Hashtag, and Tagged Feeds', 'custom-facebook-feed' ) . '</strong>',
945
- ),
946
- ),
947
- 'plus' => array(
948
- 'status' => 'full',
949
- 'text' => array(
950
- '<strong>' . esc_html__( 'Complete Entry Management inside WordPress', 'custom-facebook-feed' ) . '</strong>',
951
- ),
952
- ),
953
- 'pro' => array(
954
- 'status' => 'full',
955
- 'text' => array(
956
- '<strong>' . esc_html__( 'Display photos and videos in your posts', 'custom-facebook-feed' ) . '</strong>',
957
- ),
958
- ),
959
- ),
960
- 'fields' => array(
961
- 'lite' => array(
962
- 'status' => 'none',
963
- 'text' => array(
964
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
965
- ),
966
- ),
967
- 'basic' => array(
968
- 'status' => 'full',
969
- 'text' => array(
970
- '<strong>' . esc_html__( 'Access to all Standard and Fancy Fields', 'custom-facebook-feed' ) . '</strong>',
971
- esc_html__( 'Address, Phone, Website URL, Date/Time, Password, File Upload, HTML, Pagebreaks, Section Dividers, Ratings, and Hidden Field', 'custom-facebook-feed' ),
972
- ),
973
- ),
974
- 'plus' => array(
975
- 'status' => 'full',
976
- 'text' => array(
977
- '<strong>' . esc_html__( 'Access to all Standard and Fancy Fields', 'custom-facebook-feed' ) . '</strong>',
978
- esc_html__( 'Address, Phone, Website URL, Date/Time, Password, File Upload, HTML, Pagebreaks, Section Dividers, Ratings, and Hidden Field', 'custom-facebook-feed' ),
979
- ),
980
- ),
981
- 'pro' => array(
982
- 'status' => 'full',
983
- 'text' => array(
984
- '<strong>' . esc_html__( 'Grid, highlight, masonry, and carousel layouts', 'custom-facebook-feed' ) . '</strong>',
985
- ),
986
- ),
987
- ),
988
- 'conditionals' => array(
989
- 'lite' => array(
990
- 'status' => 'partial',
991
- 'text' => array(
992
- '<strong>' . esc_html__( 'Image, carousel, and video thumbnails', 'custom-facebook-feed' ) . '</strong>',
993
- ),
994
- ),
995
- 'basic' => array(
996
- 'status' => 'full',
997
- 'text' => array(
998
- '<strong>' . esc_html__( 'Powerful Form Logic for Building Smart Forms', 'custom-facebook-feed' ) . '</strong>',
999
- ),
1000
- ),
1001
- 'plus' => array(
1002
- 'status' => 'full',
1003
- 'text' => array(
1004
- '<strong>' . esc_html__( 'Powerful Form Logic for Building Smart Forms', 'custom-facebook-feed' ) . '</strong>',
1005
- ),
1006
- ),
1007
- 'pro' => array(
1008
- 'status' => 'full',
1009
- 'text' => array(
1010
- '<strong>' . esc_html__( 'Display images, swipe through carousel posts, and play videos in a pop-up lightbox', 'custom-facebook-feed' ) . '</strong>',
1011
- ),
1012
- ),
1013
- ),
1014
- 'marketing' => array(
1015
- 'lite' => array(
1016
- 'status' => 'none',
1017
- 'text' => array(
1018
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1019
- ),
1020
- ),
1021
- 'basic' => array(
1022
- 'status' => 'partial',
1023
- 'text' => array(
1024
- '<strong>' . esc_html__( 'Limited Marketing Integration', 'custom-facebook-feed' ) . '</strong>',
1025
- esc_html__( 'Constant Contact only', 'custom-facebook-feed' ),
1026
- ),
1027
- ),
1028
- 'plus' => array(
1029
- 'status' => 'partial',
1030
- 'text' => array(
1031
- '<strong>' . esc_html__( '6 Email Marketing Integrations', 'custom-facebook-feed' ) . '</strong>',
1032
- esc_html__( 'Constant Contact, Mailchimp, AWeber, GetResponse, Campaign Monitor, and Drip', 'custom-facebook-feed' ),
1033
- ),
1034
- ),
1035
- 'pro' => array(
1036
- 'status' => 'full',
1037
- 'text' => array(
1038
- '<strong>' . esc_html__( 'Display images and play videos in a pop-up lightbox', 'custom-facebook-feed' ) . '</strong>',
1039
- ),
1040
- ),
1041
- ),
1042
- 'payments' => array(
1043
- 'lite' => array(
1044
- 'status' => 'partial',
1045
- 'text' => array(
1046
- '<strong>' . esc_html__( 'Default post layout', 'custom-facebook-feed' ) . '</strong>',
1047
- ),
1048
- ),
1049
- 'basic' => array(
1050
- 'status' => 'none',
1051
- 'text' => array(
1052
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1053
- ),
1054
- ),
1055
- 'plus' => array(
1056
- 'status' => 'none',
1057
- 'text' => array(
1058
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1059
- ),
1060
- ),
1061
- 'pro' => array(
1062
- 'status' => 'full',
1063
- 'text' => array(
1064
- '<strong>' . esc_html__( 'Choose from thumbnail, half-width or full-width post layouts, and grid layout for photo, album, and video feeds.', 'custom-facebook-feed' ) . '</strong>',
1065
- ),
1066
- ),
1067
- ),
1068
- 'surveys' => array(
1069
- 'lite' => array(
1070
- 'status' => 'partial',
1071
- 'text' => array(
1072
- '<strong>' . esc_html__( 'Basic post information', 'custom-facebook-feed' ) . '</strong>',
1073
- ),
1074
- ),
1075
- 'basic' => array(
1076
- 'status' => 'none',
1077
- 'text' => array(
1078
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1079
- ),
1080
- ),
1081
- 'plus' => array(
1082
- 'status' => 'none',
1083
- 'text' => array(
1084
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1085
- ),
1086
- ),
1087
- 'pro' => array(
1088
- 'status' => 'full',
1089
- 'text' => array(
1090
- '<strong>' . esc_html__( 'Display the number of likes, shares, comments, and reactions below each post', 'custom-facebook-feed' ) . '</strong>',
1091
- ),
1092
- ),
1093
- ),
1094
- 'advanced' => array(
1095
- 'lite' => array(
1096
- 'status' => 'none',
1097
- 'text' => array(
1098
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1099
- ),
1100
- ),
1101
- 'basic' => array(
1102
- 'status' => 'partial',
1103
- 'text' => array(
1104
- '<strong>' . esc_html__( 'Limited Advanced Features', 'custom-facebook-feed' ) . '</strong>',
1105
- esc_html__( 'Multi-page Forms, File Upload Forms, Multiple Form Notifications, Conditional Form Confirmation', 'custom-facebook-feed' ),
1106
- ),
1107
- ),
1108
- 'plus' => array(
1109
- 'status' => 'partial',
1110
- 'text' => array(
1111
- '<strong>' . esc_html__( 'Limited Advanced Features', 'custom-facebook-feed' ) . '</strong>',
1112
- esc_html__( 'Multi-page Forms, File Upload Forms, Multiple Form Notifications, Conditional Form Confirmation', 'custom-facebook-feed' ),
1113
- ),
1114
- ),
1115
- 'pro' => array(
1116
- 'status' => 'full',
1117
- 'text' => array(
1118
- '<strong>' . esc_html__( 'Display comments below each post and in the pop-up lightbox', 'custom-facebook-feed' ) . '</strong>',
1119
- ),
1120
- ),
1121
- ),
1122
- 'addons' => array(
1123
- 'lite' => array(
1124
- 'status' => 'partial',
1125
- 'text' => array(
1126
- '<strong>' . esc_html__( 'Show feeds from a timeline', 'custom-facebook-feed' ) . '</strong>',
1127
- ),
1128
- ),
1129
- 'basic' => array(
1130
- 'status' => 'partial',
1131
- 'text' => array(
1132
- '<strong>' . esc_html__( 'Custom Captcha Addon included', 'custom-facebook-feed' ) . '</strong>',
1133
- ),
1134
- ),
1135
- 'plus' => array(
1136
- 'status' => 'partial',
1137
- 'text' => array(
1138
- '<strong>' . esc_html__( 'Email Marketing Addons included', 'custom-facebook-feed' ) . '</strong>',
1139
- ),
1140
- ),
1141
- 'pro' => array(
1142
- 'status' => 'full',
1143
- 'text' => array(
1144
- '<strong>' . esc_html__( 'Timeline feeds, Photo Grids, Album feeds, Video feeds, Event feeds', 'custom-facebook-feed' ) . '</strong>',
1145
- ),
1146
- ),
1147
- ),
1148
- 'addons1' => array(
1149
- 'lite' => array(
1150
- 'status' => 'partial',
1151
- 'text' => array(
1152
- '<strong>' . esc_html__( 'Choose how many posts to display', 'custom-facebook-feed' ) . '</strong>',
1153
- ),
1154
- ),
1155
- 'basic' => array(
1156
- 'status' => 'partial',
1157
- 'text' => array(
1158
- '<strong>' . esc_html__( 'Custom Captcha Addon included', 'custom-facebook-feed' ) . '</strong>',
1159
- ),
1160
- ),
1161
- 'plus' => array(
1162
- 'status' => 'partial',
1163
- 'text' => array(
1164
- '<strong>' . esc_html__( 'Email Marketing Addons included', 'custom-facebook-feed' ) . '</strong>',
1165
- ),
1166
- ),
1167
- 'pro' => array(
1168
- 'status' => 'full',
1169
- 'text' => array(
1170
- '<strong>' . esc_html__( 'Choose to dynamically load more posts using the Load More button', 'custom-facebook-feed' ) . '</strong>',
1171
- ),
1172
- ),
1173
- ),
1174
- 'addons2' => array(
1175
- 'lite' => array(
1176
- 'status' => 'none',
1177
- 'text' => array(
1178
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1179
- ),
1180
- ),
1181
- 'basic' => array(
1182
- 'status' => 'partial',
1183
- 'text' => array(
1184
- '<strong>' . esc_html__( 'Custom Captcha Addon included', 'custom-facebook-feed' ) . '</strong>',
1185
- ),
1186
- ),
1187
- 'plus' => array(
1188
- 'status' => 'partial',
1189
- 'text' => array(
1190
- '<strong>' . esc_html__( 'Email Marketing Addons included', 'custom-facebook-feed' ) . '</strong>',
1191
- ),
1192
- ),
1193
- 'pro' => array(
1194
- 'status' => 'full',
1195
- 'text' => array(
1196
- '<strong>' . esc_html__( 'Filter posts in your feed based on a particular hashtag, word, or phrase', 'custom-facebook-feed' ) . '</strong>',
1197
- ),
1198
- ),
1199
- ),
1200
- 'extensions' => array(
1201
- 'lite' => array(
1202
- 'status' => 'none',
1203
- 'text' => array(
1204
- '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1205
- ),
1206
- ),
1207
- 'basic' => array(
1208
- 'status' => 'partial',
1209
- 'text' => array(
1210
- '<strong>' . esc_html__( 'Custom Captcha Addon included', 'custom-facebook-feed' ) . '</strong>',
1211
- ),
1212
- ),
1213
- 'plus' => array(
1214
- 'status' => 'partial',
1215
- 'text' => array(
1216
- '<strong>' . esc_html__( 'Email Marketing Addons included', 'custom-facebook-feed' ) . '</strong>',
1217
- ),
1218
- ),
1219
- 'pro' => array(
1220
- 'status' => 'full',
1221
- 'text' => array(
1222
- '<strong>' . esc_html__( 'Supports all add-on extensions; Reviews, Multifeed, Date Range, Album Embed, Featured Post, and Carousel.', 'custom-facebook-feed' ) . '</strong>',
1223
- ),
1224
- ),
1225
- ),
1226
- 'support' => array(
1227
- 'lite' => array(
1228
- 'status' => 'partial',
1229
- 'text' => array(
1230
- '<strong>' . esc_html__( 'Limited support', 'custom-facebook-feed' ) . '</strong>',
1231
- ),
1232
- ),
1233
- 'basic' => array(
1234
- 'status' => 'partial',
1235
- 'text' => array(
1236
- '<strong>' . esc_html__( 'Standard Support', 'custom-facebook-feed' ) . '</strong>',
1237
- ),
1238
- ),
1239
- 'plus' => array(
1240
- 'status' => 'partial',
1241
- 'text' => array(
1242
- '<strong>' . esc_html__( 'Standard Support', 'custom-facebook-feed' ) . '</strong>',
1243
- ),
1244
- ),
1245
- 'pro' => array(
1246
- 'status' => 'full',
1247
- 'text' => array(
1248
- '<strong>' . esc_html__( 'Priority support', 'custom-facebook-feed' ) . '</strong>',
1249
- ),
1250
- ),
1251
- 'elite' => array(
1252
- 'status' => 'full',
1253
- 'text' => array(
1254
- '<strong>' . esc_html__( 'Premium Support', 'custom-facebook-feed' ) . '</strong>',
1255
- ),
1256
- ),
1257
- 'ultimate' => array(
1258
- 'status' => 'full',
1259
- 'text' => array(
1260
- '<strong>' . esc_html__( 'Premium Support', 'custom-facebook-feed' ) . '</strong>',
1261
- ),
1262
- ),
1263
- 'agency' => array(
1264
- 'status' => 'full',
1265
- 'text' => array(
1266
- '<strong>' . esc_html__( 'Premium Support', 'custom-facebook-feed' ) . '</strong>',
1267
- ),
1268
- ),
1269
- ),
1270
- 'sites' => array(
1271
- 'basic' => array(
1272
- 'status' => 'partial',
1273
- 'text' => array(
1274
- '<strong>' . esc_html__( '1 Site', 'custom-facebook-feed' ) . '</strong>',
1275
- ),
1276
- ),
1277
- 'plus' => array(
1278
- 'status' => 'partial',
1279
- 'text' => array(
1280
- '<strong>' . esc_html__( '3 Sites', 'custom-facebook-feed' ) . '</strong>',
1281
- ),
1282
- ),
1283
- 'pro' => array(
1284
- 'status' => 'full',
1285
- 'text' => array(
1286
- '<strong>' . esc_html__( '5 Sites', 'custom-facebook-feed' ) . '</strong>',
1287
- ),
1288
- ),
1289
- 'elite' => array(
1290
- 'status' => 'full',
1291
- 'text' => array(
1292
- '<strong>' . esc_html__( 'Unlimited Sites', 'custom-facebook-feed' ) . '</strong>',
1293
- ),
1294
- ),
1295
- 'ultimate' => array(
1296
- 'status' => 'full',
1297
- 'text' => array(
1298
- '<strong>' . esc_html__( 'Unlimited Sites', 'custom-facebook-feed' ) . '</strong>',
1299
- ),
1300
- ),
1301
- 'agency' => array(
1302
- 'status' => 'full',
1303
- 'text' => array(
1304
- '<strong>' . esc_html__( 'Unlimited Sites', 'custom-facebook-feed' ) . '</strong>',
1305
- ),
1306
- ),
1307
- ),
1308
- );
1309
-
1310
- // Wrong feature?
1311
- if ( ! isset( $data[ $feature ] ) ) {
1312
- return false;
1313
- }
1314
-
1315
- // Is a top level license?
1316
- $is_licenses_top = in_array( $license, self::$licenses_top, true );
1317
-
1318
- // Wrong license type?
1319
- if ( ! isset( $data[ $feature ][ $license ] ) && ! $is_licenses_top ) {
1320
- return false;
1321
- }
1322
-
1323
- // Some licenses have partial data.
1324
- if ( isset( $data[ $feature ][ $license ] ) ) {
1325
- return $data[ $feature ][ $license ];
1326
- }
1327
-
1328
- // Top level plans has no feature difference with `pro` plan in most cases.
1329
- return $is_licenses_top ? $data[ $feature ]['pro'] : $data[ $feature ][ $license ];
1330
- }
1331
-
1332
- /**
1333
- * Get the current installation license type (always lowercase).
1334
- *
1335
- * @since 2.4/5.5
1336
- *
1337
- * @return string
1338
- */
1339
- protected function get_license_type() {
1340
-
1341
- //$type = cff_setting( 'type', '', 'cff_license' );
1342
-
1343
- //if ( empty( $type ) || ! cff()->pro ) {
1344
- $type = 'free';
1345
- //}
1346
-
1347
- return strtolower( $type );
1348
- }
1349
- }
1350
-
1351
- new CFF_About();
1
+ <?php
2
+
3
+ /**
4
+ * About Sbi admin page class.
5
+ *
6
+ * @since 2.4/5.5
7
+ */
8
+ class CFF_About {
9
+
10
+ /**
11
+ * Admin menu page slug.
12
+ *
13
+ * @since 2.4/5.5
14
+ *
15
+ * @var string
16
+ */
17
+ const SLUG = 'cff-about';
18
+
19
+ /**
20
+ * Default view for a page.
21
+ *
22
+ * @since 2.4/5.5
23
+ *
24
+ * @var string
25
+ */
26
+ const DEFAULT_TAB = 'about';
27
+
28
+ /**
29
+ * Array of license types, that are considered being top level and has no features difference.
30
+ *
31
+ * @since 2.4/5.5
32
+ *
33
+ * @var array
34
+ */
35
+ public static $licenses_top = array( 'pro', 'agency', 'ultimate', 'elite' );
36
+
37
+ /**
38
+ * List of features that licenses are different with.
39
+ *
40
+ * @since 2.4/5.5
41
+ *
42
+ * @var array
43
+ */
44
+ public static $licenses_features = array();
45
+
46
+ /**
47
+ * The current active tab.
48
+ *
49
+ * @since 2.4/5.5
50
+ *
51
+ * @var string
52
+ */
53
+ public $view;
54
+
55
+ /**
56
+ * The core views.
57
+ *
58
+ * @since 2.4/5.5
59
+ *
60
+ * @var array
61
+ */
62
+ public $views = array();
63
+
64
+ /**
65
+ * Primary class constructor.
66
+ *
67
+ * @since 2.4/5.5
68
+ */
69
+ public function __construct() {
70
+
71
+ // In old PHP we can't define this elsewhere.
72
+ self::$licenses_features = array(
73
+ 'entries' => esc_html__( 'Media Display', 'custom-facebook-feed' ),
74
+ //'fields' => esc_html__( 'Layouts', 'custom-facebook-feed' ),
75
+ // 'templates' => esc_html__( 'Post Display', 'custom-facebook-feed' ),
76
+ //'conditionals' => esc_html__( 'Image and Video Display', 'custom-facebook-feed' ),
77
+ 'addons' => esc_html__( 'Post Source', 'custom-facebook-feed' ),
78
+ 'addons1' => esc_html__( 'Number of Posts', 'custom-facebook-feed' ),
79
+ 'addons2' => esc_html__( 'Filtering', 'custom-facebook-feed' ),
80
+
81
+ //'marketing' => esc_html__( 'Filtering', 'custom-facebook-feed' ),
82
+ //'marketing' => esc_html__( 'Instagram Stories', 'custom-facebook-feed' ),
83
+ 'payments' => esc_html__( 'Feed Layout', 'custom-facebook-feed' ),
84
+ 'surveys' => esc_html__( 'Post Information', 'custom-facebook-feed' ),
85
+ 'advanced' => esc_html__( 'Comments', 'custom-facebook-feed' ),
86
+ 'extensions' => esc_html__( 'Extensions', 'custom-facebook-feed' ),
87
+ 'support' => esc_html__( 'Customer Support', 'custom-facebook-feed' ),
88
+ );
89
+
90
+ // Maybe load tools page.
91
+ add_action( 'admin_init', array( $this, 'init' ) );
92
+ }
93
+
94
+ /**
95
+ * Determining if the user is viewing the our page, if so, party on.
96
+ *
97
+ * @since 2.4/5.5
98
+ */
99
+ public function init() {
100
+
101
+ // Check what page we are on.
102
+ $page = isset( $_GET['page'] ) ? $_GET['page'] : '';
103
+
104
+ // Only load if we are actually on the settings page.
105
+ if ( self::SLUG !== $page ) {
106
+ return;
107
+ }
108
+
109
+ add_action( 'admin_enqueue_scripts', array( $this, 'enqueues' ) );
110
+
111
+ /*
112
+ * Define the core views for the our tab.
113
+ */
114
+ $this->views = apply_filters(
115
+ 'cff_admin_about_views',
116
+ array(
117
+ esc_html__( 'About Us', 'custom-facebook-feed' ) => array( 'about' ),
118
+ esc_html__( 'Getting Started', 'custom-facebook-feed' ) => array( 'getting-started' ),
119
+ )
120
+ );
121
+
122
+ $license = $this->get_license_type();
123
+
124
+ if (
125
+ (
126
+ $license === 'pro' ||
127
+ ! in_array( $license, self::$licenses_top, true )
128
+ )
129
+ //cff_debug()
130
+ ) {
131
+ $vs_tab_name = sprintf( /* translators: %1$s - current license type, %2$s - suggested license type. */
132
+ esc_html__( '%1$s vs %2$s', 'custom-facebook-feed' ),
133
+ ucfirst( $license ),
134
+ $this->get_next_license( $license )
135
+ );
136
+
137
+ $this->views[ $vs_tab_name ] = array( 'versus' );
138
+ }
139
+
140
+ // Determine the current active settings tab.
141
+ $this->view = ! empty( $_GET['view'] ) ? esc_html( $_GET['view'] ) : self::DEFAULT_TAB;
142
+
143
+ // If the user tries to load an invalid view - fallback to About Us.
144
+ if (
145
+ ! in_array( $this->view, call_user_func_array( 'array_merge', $this->views ), true ) &&
146
+ ! has_action( 'cff_admin_about_display_tab_' . sanitize_key( $this->view ) )
147
+ ) {
148
+ $this->view = self::DEFAULT_TAB;
149
+ }
150
+
151
+ add_action( 'cff_admin_page', array( $this, 'output' ) );
152
+
153
+ // Hook for addons.
154
+ do_action( 'cff_admin_about_init' );
155
+ }
156
+
157
+ /**
158
+ * Enqueue assets for the the page.
159
+ *
160
+ * @since 2.4/5.5
161
+ */
162
+ public function enqueues() {
163
+
164
+ wp_enqueue_script(
165
+ 'jquery-matchheight',
166
+ CFF_PLUGIN_URL . 'js/jquery.matchHeight-min.js',
167
+ array( 'jquery' ),
168
+ '0.7.0',
169
+ false
170
+ );
171
+ }
172
+
173
+ /**
174
+ * Output the basic page structure.
175
+ *
176
+ * @since 2.4/5.5
177
+ */
178
+ public function output() {
179
+
180
+ $show_nav = false;
181
+ foreach ( $this->views as $view ) {
182
+ if ( in_array( $this->view, (array) $view, true ) ) {
183
+ $show_nav = true;
184
+ break;
185
+ }
186
+ }
187
+ ?>
188
+
189
+ <div id="cff-admin-about" class="wrap cff-admin-wrap">
190
+
191
+ <?php
192
+ if ( $show_nav ) {
193
+ $license = $this->get_license_type();
194
+ $next_license = $this->get_next_license( $license );
195
+ echo '<ul class="cff-admin-tabs">';
196
+ foreach ( $this->views as $label => $view ) {
197
+ $class = in_array( $this->view, $view, true ) ? 'active' : '';
198
+ echo '<li>';
199
+ printf(
200
+ '<a href="%s" class="%s">%s</a>',
201
+ esc_url( admin_url( 'admin.php?page=' . self::SLUG . '&view=' . sanitize_key( $view[0] ) ) ),
202
+ esc_attr( $class ),
203
+ esc_html( $label )
204
+ );
205
+ echo '</li>';
206
+ }
207
+ echo '</ul>';
208
+ }
209
+ ?>
210
+
211
+ <h1 class="cff-h1-placeholder"></h1>
212
+
213
+ <?php
214
+ switch ( $this->view ) {
215
+ case 'about':
216
+ $this->output_about();
217
+ break;
218
+ case 'getting-started':
219
+ $this->output_getting_started();
220
+ break;
221
+ case 'versus':
222
+ $this->output_versus();
223
+ break;
224
+ default:
225
+ do_action( 'cff_admin_about_display_tab_' . sanitize_key( $this->view ) );
226
+ break;
227
+ }
228
+ ?>
229
+
230
+ </div>
231
+
232
+ <?php
233
+ }
234
+
235
+ /**
236
+ * Display the About tab content.
237
+ *
238
+ * @since 2.4/5.5
239
+ */
240
+ protected function output_about() {
241
+
242
+ $this->output_about_info();
243
+ $this->output_about_addons();
244
+ }
245
+
246
+ /**
247
+ * Display the General Info section of About tab.
248
+ *
249
+ * @since 1.5.8
250
+ */
251
+ protected function output_about_info() {
252
+
253
+ ?>
254
+
255
+ <div class="cff-admin-about-section cff-admin-columns">
256
+
257
+ <div class="cff-admin-about-text" style="min-height: 340px;">
258
+ <h3>
259
+ <?php esc_html_e( 'Hello and welcome to the Custom Facebook Feed plugin, the most customizable, clean, and simple Facebook feed plugin in the world. At Smash Balloon, we build software that helps you create beautiful responsive social media feeds for your website in minutes.', 'custom-facebook-feed' ); ?>
260
+ </h3>
261
+
262
+ <p>
263
+ <?php esc_html_e( 'Smash Balloon is a fun-loving WordPress plugin development company birthed into existence in early 2013. We specialize in creating plugins that are not only intuitive and simple to use, but also designed to integrate seamlessly into your website and allow you to display your social media content in powerful and unique ways. Over 1 million awesome people have decided to actively use our plugins, which is an incredible honor that we don’t take lightly. This compels us to try to provide the quickest and most effective customer support that we can, blowing users away with the best customer service they’ve ever experienced.', 'custom-facebook-feed' ); ?>
264
+ </p>
265
+ <p>
266
+ <?php esc_html_e( 'We’re a small, but dedicated, team based in Minnesota in the USA.', 'custom-facebook-feed' ); ?>
267
+ </p>
268
+
269
+ </div>
270
+
271
+ <div class="cff-admin-about-image cff-admin-column-last">
272
+ <figure>
273
+ <img src="<?php echo CFF_PLUGIN_URL; ?>img/about/team.jpg" alt="<?php esc_attr_e( 'The Sbi Team photo', 'custom-facebook-feed' ); ?>">
274
+ <figcaption>
275
+ <?php esc_html_e( 'The Smash Balloon Team', 'custom-facebook-feed' ); ?><br>
276
+ </figcaption>
277
+ </figure>
278
+ </div>
279
+
280
+ </div>
281
+ <?php
282
+ }
283
+
284
+ /**
285
+ * Display the Addons section of About tab.
286
+ *
287
+ * @since 1.5.8
288
+ */
289
+ protected function output_about_addons() {
290
+
291
+ if ( ! current_user_can( 'manage_custom_facebook_feed_options' ) || version_compare( PHP_VERSION, '5.3.0' ) <= 0 ) {
292
+ return;
293
+ }
294
+
295
+ $all_plugins = get_plugins();
296
+ $am_plugins = $this->get_am_plugins();
297
+
298
+ ?>
299
+ <div id="cff-admin-addons">
300
+ <div class="addons-container">
301
+ <h3><?php echo __( 'Our Other Plugins', 'custom-facebook-feed' ); ?></h3>
302
+ <?php
303
+ foreach ( $am_plugins as $plugin => $details ) :
304
+
305
+ $plugin_data = $this->get_plugin_data( $plugin, $details, $all_plugins );
306
+
307
+ if ( $plugin === 'wpforms-lite/wpforms.php' ) {
308
+ echo '<h3>' .__( 'Plugins We Recommend', 'custom-facebook-feed' ). '</h3>';
309
+ }
310
+
311
+ ?>
312
+ <div class="addon-container">
313
+ <div class="addon-item">
314
+ <div class="details cff-clear">
315
+ <img src="<?php echo esc_url( $plugin_data['details']['icon'] ); ?>">
316
+ <h5 class="addon-name">
317
+ <?php echo esc_html( $plugin_data['details']['name'] ); ?>
318
+ </h5>
319
+ <p class="addon-desc">
320
+ <?php echo wp_kses_post( $plugin_data['details']['desc'] ); ?>
321
+ </p>
322
+ </div>
323
+ <div class="actions cff-clear">
324
+ <div class="status">
325
+ <strong>
326
+ <?php
327
+ printf(
328
+ /* translators: %s - addon status label. */
329
+ esc_html__( 'Status: %s', 'custom-facebook-feed' ),
330
+ '<span class="status-label ' . esc_attr( $plugin_data['status_class'] ) . '">' . wp_kses_post( $plugin_data['status_text'] ) . '</span>'
331
+ );
332
+ ?>
333
+ </strong>
334
+ </div>
335
+ <div class="action-button">
336
+ <button class="<?php echo esc_attr( $plugin_data['action_class'] ); ?>" data-plugin="<?php echo esc_attr( $plugin_data['plugin_src'] ); ?>" data-type="plugin">
337
+ <?php echo wp_kses_post( $plugin_data['action_text'] ); ?>
338
+ </button>
339
+ </div>
340
+ </div>
341
+ </div>
342
+ </div>
343
+ <?php endforeach; ?>
344
+ </div>
345
+ </div>
346
+ <?php
347
+ }
348
+
349
+ /**
350
+ * Get AM plugin data to display in the Addons section of About tab.
351
+ *
352
+ * @since 1.5.8
353
+ *
354
+ * @param string $plugin Plugin slug.
355
+ * @param array $details Plugin details.
356
+ * @param array $all_plugins List of all plugins.
357
+ *
358
+ * @return array
359
+ */
360
+ protected function get_plugin_data( $plugin, $details, $all_plugins ) {
361
+
362
+ $have_pro = ( ! empty( $details['pro'] ) && ! empty( $details['pro']['plug'] ) );
363
+ $show_pro = false;
364
+
365
+ $plugin_data = array();
366
+
367
+ if ( $have_pro ) {
368
+ if ( array_key_exists( $plugin, $all_plugins ) ) {
369
+ if ( is_plugin_active( $plugin ) ) {
370
+ $show_pro = true;
371
+ }
372
+ }
373
+ if ( array_key_exists( $details['pro']['plug'], $all_plugins ) ) {
374
+ $show_pro = true;
375
+ }
376
+ if ( $show_pro ) {
377
+ $plugin = $details['pro']['plug'];
378
+ $details = $details['pro'];
379
+ }
380
+ }
381
+
382
+ if ( array_key_exists( $plugin, $all_plugins ) ) {
383
+ if ( is_plugin_active( $plugin ) ) {
384
+ // Status text/status.
385
+ $plugin_data['status_class'] = 'status-active';
386
+ $plugin_data['status_text'] = esc_html__( 'Active', 'custom-facebook-feed' );
387
+ // Button text/status.
388
+ $plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-secondary disabled';
389
+ $plugin_data['action_text'] = esc_html__( 'Activated', 'custom-facebook-feed' );
390
+ $plugin_data['plugin_src'] = esc_attr( $plugin );
391
+ } else {
392
+ // Status text/status.
393
+ $plugin_data['status_class'] = 'status-inactive';
394
+ $plugin_data['status_text'] = esc_html__( 'Inactive', 'custom-facebook-feed' );
395
+ // Button text/status.
396
+ $plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-secondary';
397
+ $plugin_data['action_text'] = esc_html__( 'Activate', 'custom-facebook-feed' );
398
+ $plugin_data['plugin_src'] = esc_attr( $plugin );
399
+ }
400
+ } else {
401
+ // Doesn't exist, install.
402
+ // Status text/status.
403
+ $plugin_data['status_class'] = 'status-download';
404
+ if ( isset( $details['act'] ) && 'go-to-url' === $details['act'] ) {
405
+ $plugin_data['status_class'] = 'status-go-to-url';
406
+ }
407
+ $plugin_data['status_text'] = esc_html__( 'Not Installed', 'custom-facebook-feed' );
408
+ // Button text/status.
409
+ $plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-primary';
410
+ $plugin_data['action_text'] = esc_html__( 'Install Plugin', 'custom-facebook-feed' );
411
+ $plugin_data['plugin_src'] = esc_url( $details['url'] );
412
+ }
413
+
414
+ $plugin_data['details'] = $details;
415
+
416
+ return $plugin_data;
417
+ }
418
+
419
+ /**
420
+ * Display the Getting Started tab content.
421
+ *
422
+ * @since 2.4/5.5
423
+ */
424
+ protected function output_getting_started() {
425
+
426
+ $license = $this->get_license_type();
427
+ ?>
428
+
429
+ <div class="cff-admin-about-section cff-admin-about-section-first-form" style="display:flex;">
430
+
431
+ <div class="cff-admin-about-section-first-form-text">
432
+
433
+ <h2>
434
+ <?php esc_html_e( 'Creating Your First Feed', 'custom-facebook-feed' ); ?>
435
+ </h2>
436
+
437
+ <p>
438
+ <?php esc_html_e( 'Want to get started creating your first feed with Custom Facebook Feed? By following the step by step instructions in this walkthrough, you can easily publish your first feed on your site.', 'custom-facebook-feed' ); ?>
439
+ </p>
440
+
441
+ <p>
442
+ <?php esc_html_e( 'Navigate to Facebook Feed in the admin sidebar to go the Configure page.', 'custom-facebook-feed' ); ?>
443
+ </p>
444
+
445
+ <p>
446
+ <?php esc_html_e( 'Click on the large blue button to connect your Facebook account.', 'custom-facebook-feed' ); ?>
447
+ </p>
448
+
449
+ <p>
450
+ <?php esc_html_e( 'Once you connect a Facebook account, you can display your feed on any post, page or widget using the shortcode [custom-facebook-feed]. You can also use the Custom Facebook Feed Gutenberg block if your site has the WordPress block editor enabled.', 'custom-facebook-feed' ); ?>
451
+ </p>
452
+
453
+ <ul class="list-plain">
454
+ <li>
455
+ <a href="https://smashballoon.com/can-display-feeds-multiple-facebook-pages/?utm_campaign=facebook-free&utm_source=gettingstarted&utm_medium=multiplefeeds" target="_blank" rel="noopener noreferrer">
456
+ <?php esc_html_e( 'Display Multiple Feeds', 'custom-facebook-feed' ); ?>
457
+ </a>
458
+ </li>
459
+ <li>
460
+ <a href="https://smashballoon.com/using-shortcode-options-customize-facebook-feeds/?utm_campaign=facebook-free&utm_source=gettingstarted&utm_medium=shortcode" target="_blank" rel="noopener noreferrer">
461
+ <?php esc_html_e( 'Shortcode Settings Guide', 'custom-facebook-feed' ); ?>
462
+ </a>
463
+ </li>
464
+ <li>
465
+ <a href="https://smashballoon.com/find-facebook-page-group-id/?utm_campaign=facebook-free&utm_source=gettingstarted&utm_medium=pageid" target="_blank" rel="noopener noreferrer">
466
+ <?php esc_html_e( 'Find My Page ID', 'custom-facebook-feed' ); ?>
467
+ </a>
468
+ </li>
469
+ </ul>
470
+
471
+ </div>
472
+
473
+ <div class="cff-admin-about-section-first-form-video">
474
+ <iframe src="https://www.youtube-nocookie.com/embed/0gykYq3JSrY?rel=0" width="540" height="304" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
475
+ </div>
476
+
477
+ </div>
478
+
479
+ <?php if ( ! in_array( $license, self::$licenses_top, true ) ) { ?>
480
+ <div class="cff-admin-about-section cff-admin-about-section-hero">
481
+
482
+ <div class="cff-admin-about-section-hero-main">
483
+ <h2>
484
+ <?php esc_html_e( 'Get Custom Facebook Feed Pro and Unlock all the Powerful Features', 'custom-facebook-feed' ); ?>
485
+ </h2>
486
+
487
+ <p class="bigger">
488
+ <?php
489
+ echo wp_kses(
490
+ __( 'Thanks for being a loyal Custom Facebook Feed Lite user. <strong>Upgrade to Custom Facebook Feed Pro</strong> to unlock all the awesome features and experience<br>why Custom Facebook Feed is the most popular Facebook feed plugin.', 'custom-facebook-feed' ),
491
+ array(
492
+ 'br' => array(),
493
+ 'strong' => array(),
494
+ )
495
+ );
496
+ ?>
497
+ </p>
498
+
499
+ <p>
500
+ <?php
501
+ printf(
502
+ wp_kses(
503
+ /* translators: %s - stars. */
504
+ __( 'We know that you will truly love Custom Facebook Feed. It has over <strong>1000+ five star ratings</strong> (%s) and is active on over 200,000 websites.', 'custom-facebook-feed' ),
505
+ array(
506
+ 'strong' => array(),
507
+ )
508
+ ),
509
+ '<i class="fa fa-star" aria-hidden="true"></i>' .
510
+ '<i class="fa fa-star" aria-hidden="true"></i>' .
511
+ '<i class="fa fa-star" aria-hidden="true"></i>' .
512
+ '<i class="fa fa-star" aria-hidden="true"></i>' .
513
+ '<i class="fa fa-star" aria-hidden="true"></i>'
514
+ );
515
+ ?>
516
+ </p>
517
+ </div>
518
+
519
+ <div class="cff-admin-about-section-hero-extra">
520
+ <div class="cff-admin-columns">
521
+ <div class="cff-admin-column-50">
522
+ <ul class="list-features list-plain">
523
+ <li>
524
+ <i class="fa fa-check" aria-hidden="true"></i>
525
+ <?php esc_html_e( 'Display photos, videos, and albums in your posts.', 'custom-facebook-feed' ); ?>
526
+ </li>
527
+ <li>
528
+ <i class="fa fa-check" aria-hidden="true"></i>
529
+ <?php esc_html_e( 'Choose which content type to display; posts, photos, albums, videos, links, or events.', 'custom-facebook-feed' ); ?>
530
+ </li>
531
+ <li>
532
+ <i class="fa fa-check" aria-hidden="true"></i>
533
+ <?php esc_html_e( 'Pop-up lightbox to view images and watch videos.', 'custom-facebook-feed' ); ?>
534
+ </li>
535
+ <li>
536
+ <i class="fa fa-check" aria-hidden="true"></i>
537
+ <?php esc_html_e( 'Show comments, likes, shares, reactions and comment replies.', 'custom-facebook-feed' ); ?>
538
+ </li>
539
+ <li>
540
+ <i class="fa fa-check" aria-hidden="true"></i>
541
+ <?php esc_html_e( 'Filter posts by hashtag or words.', 'custom-facebook-feed' ); ?>
542
+ </li>
543
+ </ul>
544
+ </div>
545
+ <div class="cff-admin-column-50 cff-admin-column-last">
546
+ <ul class="list-features list-plain">
547
+ <li>
548
+ <i class="fa fa-check" aria-hidden="true"></i>
549
+ <?php esc_html_e( 'Infinitely load more posts.', 'custom-facebook-feed' ); ?>
550
+ </li>
551
+ <li>
552
+ <i class="fa fa-check" aria-hidden="true"></i>
553
+ <?php esc_html_e( 'HD, 360 degree, and Live video support.', 'custom-facebook-feed' ); ?>
554
+ </li>
555
+ <li>
556
+ <i class="fa fa-check" aria-hidden="true"></i>
557
+ <?php esc_html_e( 'Support for Facebook Groups.', 'custom-facebook-feed' ); ?>
558
+ </li>
559
+ <li>
560
+ <i class="fa fa-check" aria-hidden="true"></i>
561
+ <?php esc_html_e( 'Multiple post layout options.', 'custom-facebook-feed' ); ?>
562
+ </li>
563
+ <li>
564
+ <i class="fa fa-check" aria-hidden="true"></i>
565
+ <?php esc_html_e( 'Priority Pro support from our team of experts.', 'custom-facebook-feed' ); ?>
566
+ </li>
567
+ </ul>
568
+ </div>
569
+ </div>
570
+
571
+ <hr />
572
+
573
+ <h3 class="call-to-action">
574
+ <?php
575
+ if ( 'lite' === $license ) {
576
+ echo '<a href="https://smashballoon.com/custom-facebook-feed/pricing/?utm_campaign=facebook-free&utm_source=gettingstarted&utm_medium=profeaturescompare" target="_blank" rel="noopener noreferrer">';
577
+ } else {
578
+ echo '<a href="https://smashballoon.com/custom-facebook-feed/pricing/?utm_campaign=facebook-pro&utm_source=gettingstarted&utm_medium=profeaturescompare" target="_blank" rel="noopener noreferrer">';
579
+ }
580
+ esc_html_e( 'Get Custom Facebook Feed Pro Today and Unlock all the Powerful Features', 'custom-facebook-feed' );
581
+ ?>
582
+ </a>
583
+ </h3>
584
+
585
+ <?php if ( 'lite' === $license ) { ?>
586
+ <p>
587
+ <?php
588
+ echo wp_kses(
589
+ __( 'Bonus: Custom Facebook Feed Lite users get <span class="price-20-off">50% off regular price</span>, automatically applied at checkout.', 'custom-facebook-feed' ),
590
+ array(
591
+ 'span' => array(
592
+ 'class' => array(),
593
+ ),
594
+ )
595
+ );
596
+ ?>
597
+ </p>
598
+ <?php } ?>
599
+ </div>
600
+
601
+ </div>
602
+ <?php } ?>
603
+
604
+
605
+ <div class="cff-admin-about-section cff-admin-about-section-squashed cff-admin-about-section-post cff-admin-columns">
606
+ <div class="cff-admin-column-20">
607
+ <img src="<?php echo CFF_PLUGIN_URL; ?>img/about/steps.png" alt="">
608
+ </div>
609
+ <div class="cff-admin-column-80">
610
+ <h2>
611
+ <?php esc_html_e( 'Detailed Step-By-Step Guide', 'custom-facebook-feed' ); ?>
612
+ </h2>
613
+
614
+ <p>
615
+ <?php esc_html_e( 'View detailed steps with related images on our website. We have a comprehensive guide to getting up and running with Custom Facebook Feed.', 'custom-facebook-feed' ); ?>
616
+ </p>
617
+
618
+ <a href="https://smashballoon.com/custom-facebook-feed/docs/free/?utm_campaign=facebook-free&utm_source=gettingstarted&utm_medium=readsetup" target="_blank" rel="noopener noreferrer" class="cff-admin-about-section-post-link">
619
+ <?php esc_html_e( 'Read Documentation', 'custom-facebook-feed' ); ?><i class="fa fa-external-link" aria-hidden="true"></i>
620
+ </a>
621
+ </div>
622
+ </div>
623
+
624
+ <div class="cff-admin-about-section cff-admin-about-section-squashed cff-admin-about-section-post cff-admin-columns">
625
+ <div class="cff-admin-column-20">
626
+ <img src="<?php echo CFF_PLUGIN_URL; ?>img/about/api-error.png" alt="">
627
+ </div>
628
+ <div class="cff-admin-column-80">
629
+ <h2>
630
+ <?php esc_html_e( 'Troubleshoot Connection and API Errors', 'custom-facebook-feed' ); ?>
631
+ </h2>
632
+
633
+ <p>
634
+ <?php esc_html_e( 'Are you having trouble displaying your feed due to an error connecting an account or a Facebook API error? We have several articles to help you troubleshoot issues and help you solve them.', 'custom-facebook-feed' ); ?>
635
+ </p>
636
+
637
+ <a href="https://smashballoon.com/custom-facebook-feed/docs/errors/?utm_campaign=facebook-free&utm_source=gettingstarted&utm_medium=readerrordoc" target="_blank" rel="noopener noreferrer" class="cff-admin-about-section-post-link">
638
+ <?php esc_html_e( 'Read Documentation', 'custom-facebook-feed' ); ?><i class="fa fa-external-link" aria-hidden="true"></i>
639
+ </a>
640
+ </div>
641
+ </div>
642
+
643
+ <?php
644
+ }
645
+
646
+ /**
647
+ * Get the next license type. Helper for Versus tab content.
648
+ *
649
+ * @since 1.5.5
650
+ *
651
+ * @param string $current Current license type slug.
652
+ *
653
+ * @return string Next license type slug.
654
+ */
655
+ protected function get_next_license( $current ) {
656
+
657
+ return 'Pro';
658
+ $current = ucfirst( $current );
659
+ $license_pairs = array(
660
+ 'Lite' => 'Pro',
661
+ 'Basic' => 'Pro',
662
+ 'Plus' => 'Pro',
663
+ 'Pro' => 'Elite',
664
+ );
665
+
666
+ return ! empty( $license_pairs[ $current ] ) ? $license_pairs[ $current ] : 'Elite';
667
+ }
668
+
669
+ /**
670
+ * Display the Versus tab content.
671
+ *
672
+ * @since 2.4/5.5
673
+ */
674
+ protected function output_versus() {
675
+
676
+ //$license = $this->get_license_type();
677
+ //$next_license = $this->get_next_license( $license );
678
+ $license = 'lite';
679
+ $next_license = 'pro';
680
+ ?>
681
+
682
+ <div class="cff-admin-about-section cff-admin-about-section-squashed">
683
+ <h1 class="centered">
684
+ <strong><?php echo esc_html( ucfirst( $license ) ); ?></strong> vs <strong><?php echo esc_html( ucfirst( $next_license ) ); ?></strong>
685
+ </h1>
686
+
687
+ <p class="centered">
688
+ <?php esc_html_e( 'Get the most out of your Custom Facebook Feeds by upgrading to Pro and unlocking all of the powerful features.', 'custom-facebook-feed' ); ?>
689
+ </p>
690
+ </div>
691
+
692
+ <div class="cff-admin-about-section cff-admin-about-section-squashed cff-admin-about-section-hero cff-admin-about-section-table">
693
+
694
+ <div class="cff-admin-about-section-hero-main cff-admin-columns">
695
+ <div class="cff-admin-column-33">
696
+ <h3 class="no-margin">
697
+ <?php esc_html_e( 'Feature', 'custom-facebook-feed' ); ?>
698
+ </h3>
699
+ </div>
700
+ <div class="cff-admin-column-33">
701
+ <h3 class="no-margin">
702
+ <?php echo esc_html( ucfirst( $license ) ); ?>
703
+ </h3>
704
+ </div>
705
+ <div class="cff-admin-column-33">
706
+ <h3 class="no-margin">
707
+ <?php echo esc_html( ucfirst( $next_license ) ); ?>
708
+ </h3>
709
+ </div>
710
+ </div>
711
+ <div class="cff-admin-about-section-hero-extra no-padding cff-admin-columns">
712
+
713
+ <table>
714
+ <?php
715
+ foreach ( self::$licenses_features as $slug => $name ) {
716
+ $current = $this->get_license_data( $slug, $license );
717
+ $next = $this->get_license_data( $slug, strtolower( $next_license ) );
718
+
719
+ if ( empty( $current ) || empty( $next ) ) {
720
+ continue;
721
+ }
722
+ ?>
723
+ <tr class="cff-admin-columns">
724
+ <td class="cff-admin-column-33">
725
+ <p><?php echo esc_html( $name ); ?></p>
726
+ </td>
727
+ <td class="cff-admin-column-33">
728
+ <?php if ( is_array( $current ) ) : ?>
729
+ <p class="features-<?php echo esc_attr( $current['status'] ); ?>">
730
+ <?php echo wp_kses_post( implode( '<br>', $current['text'] ) ); ?>
731
+ </p>
732
+ <?php endif; ?>
733
+ </td>
734
+ <td class="cff-admin-column-33">
735
+ <?php if ( is_array( $current ) ) : ?>
736
+ <p class="features-full">
737
+ <?php echo wp_kses_post( implode( '<br>', $next['text'] ) ); ?>
738
+ </p>
739
+ <?php endif; ?>
740
+ </td>
741
+ </tr>
742
+ <?php
743
+ }
744
+ ?>
745
+ </table>
746
+
747
+ </div>
748
+
749
+ </div>
750
+
751
+ <div class="cff-admin-about-section cff-admin-about-section-hero">
752
+ <div class="cff-admin-about-section-hero-main no-border">
753
+ <h3 class="call-to-action centered">
754
+ <?php
755
+ if ( 'lite' === $license ) {
756
+ echo '<a href="https://smashballoon.com/custom-facebook-feed/pricing/?utm_campaign=facebook-free&utm_source=gettingstarted&utm_medium=profeaturescompare" target="_blank" rel="noopener noreferrer">';
757
+ } else {
758
+ echo '<a href="https://smashballoon.com/custom-facebook-feed/pricing/?utm_campaign=facebook-pro&utm_source=gettingstarted&utm_medium=profeaturescompare" target="_blank" rel="noopener noreferrer">';
759
+ }
760
+ printf( /* translators: %s - next license level. */
761
+ esc_html__( 'Get Custom Facebook Feed Pro Today and Unlock all the Powerful Features', 'custom-facebook-feed' ),
762
+ esc_html( $next_license )
763
+ );
764
+ ?>
765
+ </a>
766
+ </h3>
767
+
768
+ <?php if ( 'lite' === $license ) { ?>
769
+ <p class="centered">
770
+ <?php
771
+ echo wp_kses(
772
+ __( 'Bonus: Custom Facebook Feed Lite users get <span class="price-20-off">50% off regular price</span>, automatically applied at checkout.', 'custom-facebook-feed' ),
773
+ array(
774
+ 'span' => array(
775
+ 'class' => array(),
776
+ ),
777
+ )
778
+ );
779
+ ?>
780
+ </p>
781
+ <?php } ?>
782
+ </div>
783
+ </div>
784
+
785
+ <?php
786
+ }
787
+
788
+ /**
789
+ * List of AM plugins that we propose to install.
790
+ *
791
+ * @since 2.4/5.5
792
+ *
793
+ * @return array
794
+ */
795
+ protected function get_am_plugins() {
796
+
797
+ $images_url = CFF_PLUGIN_URL . 'img/about/';
798
+
799
+ return array(
800
+ 'instagram-feed/instagram-feed.php' => array(
801
+ 'icon' => $images_url . 'plugin-if.png',
802
+ 'name' => esc_html__( 'Instagram Feed', 'custom-facebook-feed' ),
803
+ 'desc' => esc_html__( 'Instagram Feed is a clean and beautiful way to add your Instagram posts to your website. Grab your visitors attention and keep them engaged with your site longer.', 'custom-facebook-feed' ),
804
+ 'url' => 'https://downloads.wordpress.org/plugin/instagram-feed.zip',
805
+ 'pro' => array(
806
+ 'plug' => 'instagram-feed-pro/instagram-feed.php',
807
+ 'icon' => $images_url . 'plugin-if.png',
808
+ 'name' => esc_html__( 'Instagram Feed Pro', 'custom-facebook-feed' ),
809
+ 'desc' => esc_html__( 'Instagram Feed is a clean and beautiful way to add your Instagram posts to your website. Grab your visitors attention and keep them engaged with your site longer.', 'custom-facebook-feed' ),
810
+ 'url' => 'https://smashballoon.com/instagram-feed/?utm_campaign=facebook-free&utm_source=cross&utm_medium=sbiinstaller',
811
+ 'act' => 'go-to-url',
812
+ ),
813
+ ),
814
+
815
+ 'custom-twitter-feeds/custom-twitter-feed.php' => array(
816
+ 'icon' => $images_url . 'plugin-tw.jpg',
817
+ 'name' => esc_html__( 'Custom Twitter Feeds', 'custom-facebook-feed' ),
818
+ 'desc' => esc_html__( 'Custom Twitter Feeds is a highly customizable way to display tweets from your Twitter account. Promote your latest content and update your site content automatically.', 'custom-facebook-feed' ),
819
+ 'url' => 'https://downloads.wordpress.org/plugin/custom-twitter-feeds.zip',
820
+ 'pro' => array(
821
+ 'plug' => 'custom-twitter-feeds-pro/custom-twitter-feed.php',
822
+ 'icon' => $images_url . 'plugin-tw.jpg',
823
+ 'name' => esc_html__( 'Custom Twitter Feeds Pro', 'custom-facebook-feed' ),
824
+ 'desc' => esc_html__( 'Custom Twitter Feeds is a highly customizable way to display tweets from your Twitter account. Promote your latest content and update your site content automatically.', 'custom-facebook-feed' ),
825
+ 'url' => 'https://smashballoon.com/custom-twitter-feeds/?utm_campaign=facebook-free&utm_source=cross&utm_medium=ctfinstaller',
826
+ 'act' => 'go-to-url',
827
+ ),
828
+ ),
829
+
830
+ 'feeds-for-youtube/youtube-feed.php' => array(
831
+ 'icon' => $images_url . 'plugin-yt.png',
832
+ 'name' => esc_html__( 'Feeds for YouTube', 'custom-facebook-feed' ),
833
+ 'desc' => esc_html__( 'Feeds for YouTube is a simple yet powerful way to display videos from YouTube on your website. Increase engagement with your channel while keeping visitors on your website.', 'custom-facebook-feed' ),
834
+ 'url' => 'https://downloads.wordpress.org/plugin/feeds-for-youtube.zip',
835
+ 'pro' => array(
836
+ 'plug' => 'youtube-feed-pro/youtube-feed.php',
837
+ 'icon' => $images_url . 'plugin-yt.png',
838
+ 'name' => esc_html__( 'Feeds for YouTube Pro', 'custom-facebook-feed' ),
839
+ 'desc' => esc_html__( 'Feeds for YouTube is a simple yet powerful way to display videos from YouTube on your website. Increase engagement with your channel while keeping visitors on your website.', 'custom-facebook-feed' ),
840
+ 'url' => 'https://smashballoon.com/youtube-feed/?utm_campaign=facebook-free&utm_source=cross&utm_medium=sbyinstaller',
841
+ 'act' => 'go-to-url',
842
+ ),
843
+ ),
844
+
845
+ 'wpforms-lite/wpforms.php' => array(
846
+ 'icon' => $images_url . 'plugin-wpforms.png',
847
+ 'name' => esc_html__( 'WPForms', 'custom-facebook-feed' ),
848
+ 'desc' => esc_html__( 'The most beginner friendly drag & drop WordPress forms plugin allowing you to create beautiful contact forms, subscription forms, payment forms, and more in minutes, not hours!', 'custom-facebook-feed' ),
849
+ 'url' => 'https://downloads.wordpress.org/plugin/wpforms-lite.zip',
850
+ 'pro' => array(
851
+ 'plug' => 'wpforms/wpforms.php',
852
+ 'icon' => $images_url . 'plugin-wpforms.png',
853
+ 'name' => esc_html__( 'WPForms', 'custom-facebook-feed' ),
854
+ 'desc' => esc_html__( 'The most beginner friendly drag & drop WordPress forms plugin allowing you to create beautiful contact forms, subscription forms, payment forms, and more in minutes, not hours!', 'custom-facebook-feed' ),
855
+ 'url' => 'https://wpforms.com/lite-upgrade/?utm_source=WordPress&utm_campaign=liteplugin&utm_medium=cff-about-page',
856
+ 'act' => 'go-to-url',
857
+ ),
858
+ ),
859
+
860
+ 'google-analytics-for-wordpress/googleanalytics.php' => array(
861
+ 'icon' => $images_url . 'plugin-mi.png',
862
+ 'name' => esc_html__( 'MonsterInsights', 'custom-facebook-feed' ),
863
+ 'desc' => esc_html__( 'MonsterInsights makes it “effortless” to properly connect your WordPress site with Google Analytics, so you can start making data-driven decisions to grow your business.', 'custom-facebook-feed' ),
864
+ 'url' => 'https://downloads.wordpress.org/plugin/google-analytics-for-wordpress.zip',
865
+ 'pro' => array(
866
+ 'plug' => 'google-analytics-premium/googleanalytics-premium.php',
867
+ 'icon' => $images_url . 'plugin-mi.png',
868
+ 'name' => esc_html__( 'MonsterInsights Pro', 'custom-facebook-feed' ),
869
+ 'desc' => esc_html__( 'MonsterInsights makes it “effortless” to properly connect your WordPress site with Google Analytics, so you can start making data-driven decisions to grow your business.', 'custom-facebook-feed' ),
870
+ 'url' => 'https://www.monsterinsights.com/?utm_source=proplugin&utm_medium=cff-about-page&utm_campaign=pluginurl&utm_content=7%2E0%2E0',
871
+ 'act' => 'go-to-url',
872
+ ),
873
+ ),
874
+
875
+ 'optinmonster/optin-monster-wp-api.php' => array(
876
+ 'icon' => $images_url . 'plugin-om.png',
877
+ 'name' => esc_html__( 'OptinMonster', 'custom-facebook-feed' ),
878
+ 'desc' => esc_html__( 'Our high-converting optin forms like Exit-Intent® popups, Fullscreen Welcome Mats, and Scroll boxes help you dramatically boost conversions and get more email subscribers.', 'custom-facebook-feed' ),
879
+ 'url' => 'https://downloads.wordpress.org/plugin/optinmonster.zip',
880
+ ),
881
+
882
+ 'wp-mail-smtp/wp_mail_smtp.php' => array(
883
+ 'icon' => $images_url . 'plugin-smtp.png',
884
+ 'name' => esc_html__( 'WP Mail SMTP', 'custom-facebook-feed' ),
885
+ 'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'custom-facebook-feed' ),
886
+ 'url' => 'https://downloads.wordpress.org/plugin/wp-mail-smtp.zip',
887
+ 'pro' => array(
888
+ 'plug' => 'wp-mail-smtp-pro/wp_mail_smtp.php',
889
+ 'icon' => $images_url . 'plugin-smtp.png',
890
+ 'name' => esc_html__( 'WP Mail SMTP Pro', 'custom-facebook-feed' ),
891
+ 'desc' => esc_html__( 'Make sure your website\'s emails reach the inbox. Our goal is to make email deliverability easy and reliable. Trusted by over 1 million websites.', 'custom-facebook-feed' ),
892
+ 'url' => 'https://wpmailsmtp.com/pricing/',
893
+ 'act' => 'go-to-url',
894
+ ),
895
+ ),
896
+
897
+ 'rafflepress/rafflepress.php' => array(
898
+ 'icon' => $images_url . 'plugin-rp.png',
899
+ 'name' => esc_html__( 'RafflePress', 'custom-facebook-feed' ),
900
+ 'desc' => esc_html__( 'Turn your visitors into brand ambassadors! Easily grow your email list, website traffic, and social media followers with powerful viral giveaways & contests.', 'custom-facebook-feed' ),
901
+ 'url' => 'https://downloads.wordpress.org/plugin/rafflepress.zip',
902
+ 'pro' => array(
903
+ 'plug' => 'rafflepress-pro/rafflepress-pro.php',
904
+ 'icon' => $images_url . 'plugin-rp.png',
905
+ 'name' => esc_html__( 'RafflePress Pro', 'custom-facebook-feed' ),
906
+ 'desc' => esc_html__( 'Turn your visitors into brand ambassadors! Easily grow your email list, website traffic, and social media followers with powerful viral giveaways & contests.', 'custom-facebook-feed' ),
907
+ 'url' => 'https://rafflepress.com/pricing/',
908
+ 'act' => 'go-to-url',
909
+ ),
910
+ ),
911
+
912
+ 'all-in-one-seo-pack/all_in_one_seo_pack.php' => array(
913
+ 'icon' => $images_url . 'plugin-seo.png',
914
+ 'name' => esc_html__( 'All In One SEO Pack', 'custom-facebook-feed' ),
915
+ 'desc' => esc_html__( 'Out-of-the-box SEO for WordPress. Features like XML Sitemaps, SEO for custom post types, SEO for blogs or business sites, SEO for ecommerce sites, and much more. More than 50 million downloads since 2007.', 'custom-facebook-feed' ),
916
+ 'url' => 'https://downloads.wordpress.org/plugin/all-in-one-seo-pack.zip',
917
+ ),
918
+ );
919
+ }
920
+
921
+ /**
922
+ * Get the array of data that compared the license data.
923
+ *
924
+ * @since 2.4/5.5
925
+ *
926
+ * @param string $feature Feature name.
927
+ * @param string $license License type to get data for.
928
+ *
929
+ * @return array|false
930
+ */
931
+ protected function get_license_data( $feature, $license ) {
932
+
933
+ $data = array(
934
+ 'entries' => array(
935
+ 'lite' => array(
936
+ 'status' => 'none',
937
+ 'text' => array(
938
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
939
+ ),
940
+ ),
941
+ 'basic' => array(
942
+ 'status' => 'full',
943
+ 'text' => array(
944
+ '<strong>' . esc_html__( 'User, Hashtag, and Tagged Feeds', 'custom-facebook-feed' ) . '</strong>',
945
+ ),
946
+ ),
947
+ 'plus' => array(
948
+ 'status' => 'full',
949
+ 'text' => array(
950
+ '<strong>' . esc_html__( 'Complete Entry Management inside WordPress', 'custom-facebook-feed' ) . '</strong>',
951
+ ),
952
+ ),
953
+ 'pro' => array(
954
+ 'status' => 'full',
955
+ 'text' => array(
956
+ '<strong>' . esc_html__( 'Display photos and videos in your posts', 'custom-facebook-feed' ) . '</strong>',
957
+ ),
958
+ ),
959
+ ),
960
+ 'fields' => array(
961
+ 'lite' => array(
962
+ 'status' => 'none',
963
+ 'text' => array(
964
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
965
+ ),
966
+ ),
967
+ 'basic' => array(
968
+ 'status' => 'full',
969
+ 'text' => array(
970
+ '<strong>' . esc_html__( 'Access to all Standard and Fancy Fields', 'custom-facebook-feed' ) . '</strong>',
971
+ esc_html__( 'Address, Phone, Website URL, Date/Time, Password, File Upload, HTML, Pagebreaks, Section Dividers, Ratings, and Hidden Field', 'custom-facebook-feed' ),
972
+ ),
973
+ ),
974
+ 'plus' => array(
975
+ 'status' => 'full',
976
+ 'text' => array(
977
+ '<strong>' . esc_html__( 'Access to all Standard and Fancy Fields', 'custom-facebook-feed' ) . '</strong>',
978
+ esc_html__( 'Address, Phone, Website URL, Date/Time, Password, File Upload, HTML, Pagebreaks, Section Dividers, Ratings, and Hidden Field', 'custom-facebook-feed' ),
979
+ ),
980
+ ),
981
+ 'pro' => array(
982
+ 'status' => 'full',
983
+ 'text' => array(
984
+ '<strong>' . esc_html__( 'Grid, highlight, masonry, and carousel layouts', 'custom-facebook-feed' ) . '</strong>',
985
+ ),
986
+ ),
987
+ ),
988
+ 'conditionals' => array(
989
+ 'lite' => array(
990
+ 'status' => 'partial',
991
+ 'text' => array(
992
+ '<strong>' . esc_html__( 'Image, carousel, and video thumbnails', 'custom-facebook-feed' ) . '</strong>',
993
+ ),
994
+ ),
995
+ 'basic' => array(
996
+ 'status' => 'full',
997
+ 'text' => array(
998
+ '<strong>' . esc_html__( 'Powerful Form Logic for Building Smart Forms', 'custom-facebook-feed' ) . '</strong>',
999
+ ),
1000
+ ),
1001
+ 'plus' => array(
1002
+ 'status' => 'full',
1003
+ 'text' => array(
1004
+ '<strong>' . esc_html__( 'Powerful Form Logic for Building Smart Forms', 'custom-facebook-feed' ) . '</strong>',
1005
+ ),
1006
+ ),
1007
+ 'pro' => array(
1008
+ 'status' => 'full',
1009
+ 'text' => array(
1010
+ '<strong>' . esc_html__( 'Display images, swipe through carousel posts, and play videos in a pop-up lightbox', 'custom-facebook-feed' ) . '</strong>',
1011
+ ),
1012
+ ),
1013
+ ),
1014
+ 'marketing' => array(
1015
+ 'lite' => array(
1016
+ 'status' => 'none',
1017
+ 'text' => array(
1018
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1019
+ ),
1020
+ ),
1021
+ 'basic' => array(
1022
+ 'status' => 'partial',
1023
+ 'text' => array(
1024
+ '<strong>' . esc_html__( 'Limited Marketing Integration', 'custom-facebook-feed' ) . '</strong>',
1025
+ esc_html__( 'Constant Contact only', 'custom-facebook-feed' ),
1026
+ ),
1027
+ ),
1028
+ 'plus' => array(
1029
+ 'status' => 'partial',
1030
+ 'text' => array(
1031
+ '<strong>' . esc_html__( '6 Email Marketing Integrations', 'custom-facebook-feed' ) . '</strong>',
1032
+ esc_html__( 'Constant Contact, Mailchimp, AWeber, GetResponse, Campaign Monitor, and Drip', 'custom-facebook-feed' ),
1033
+ ),
1034
+ ),
1035
+ 'pro' => array(
1036
+ 'status' => 'full',
1037
+ 'text' => array(
1038
+ '<strong>' . esc_html__( 'Display images and play videos in a pop-up lightbox', 'custom-facebook-feed' ) . '</strong>',
1039
+ ),
1040
+ ),
1041
+ ),
1042
+ 'payments' => array(
1043
+ 'lite' => array(
1044
+ 'status' => 'partial',
1045
+ 'text' => array(
1046
+ '<strong>' . esc_html__( 'Default post layout', 'custom-facebook-feed' ) . '</strong>',
1047
+ ),
1048
+ ),
1049
+ 'basic' => array(
1050
+ 'status' => 'none',
1051
+ 'text' => array(
1052
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1053
+ ),
1054
+ ),
1055
+ 'plus' => array(
1056
+ 'status' => 'none',
1057
+ 'text' => array(
1058
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1059
+ ),
1060
+ ),
1061
+ 'pro' => array(
1062
+ 'status' => 'full',
1063
+ 'text' => array(
1064
+ '<strong>' . esc_html__( 'Choose from thumbnail, half-width or full-width post layouts, and grid layout for photo, album, and video feeds.', 'custom-facebook-feed' ) . '</strong>',
1065
+ ),
1066
+ ),
1067
+ ),
1068
+ 'surveys' => array(
1069
+ 'lite' => array(
1070
+ 'status' => 'partial',
1071
+ 'text' => array(
1072
+ '<strong>' . esc_html__( 'Basic post information', 'custom-facebook-feed' ) . '</strong>',
1073
+ ),
1074
+ ),
1075
+ 'basic' => array(
1076
+ 'status' => 'none',
1077
+ 'text' => array(
1078
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1079
+ ),
1080
+ ),
1081
+ 'plus' => array(
1082
+ 'status' => 'none',
1083
+ 'text' => array(
1084
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1085
+ ),
1086
+ ),
1087
+ 'pro' => array(
1088
+ 'status' => 'full',
1089
+ 'text' => array(
1090
+ '<strong>' . esc_html__( 'Display the number of likes, shares, comments, and reactions below each post', 'custom-facebook-feed' ) . '</strong>',
1091
+ ),
1092
+ ),
1093
+ ),
1094
+ 'advanced' => array(
1095
+ 'lite' => array(
1096
+ 'status' => 'none',
1097
+ 'text' => array(
1098
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1099
+ ),
1100
+ ),
1101
+ 'basic' => array(
1102
+ 'status' => 'partial',
1103
+ 'text' => array(
1104
+ '<strong>' . esc_html__( 'Limited Advanced Features', 'custom-facebook-feed' ) . '</strong>',
1105
+ esc_html__( 'Multi-page Forms, File Upload Forms, Multiple Form Notifications, Conditional Form Confirmation', 'custom-facebook-feed' ),
1106
+ ),
1107
+ ),
1108
+ 'plus' => array(
1109
+ 'status' => 'partial',
1110
+ 'text' => array(
1111
+ '<strong>' . esc_html__( 'Limited Advanced Features', 'custom-facebook-feed' ) . '</strong>',
1112
+ esc_html__( 'Multi-page Forms, File Upload Forms, Multiple Form Notifications, Conditional Form Confirmation', 'custom-facebook-feed' ),
1113
+ ),
1114
+ ),
1115
+ 'pro' => array(
1116
+ 'status' => 'full',
1117
+ 'text' => array(
1118
+ '<strong>' . esc_html__( 'Display comments below each post and in the pop-up lightbox', 'custom-facebook-feed' ) . '</strong>',
1119
+ ),
1120
+ ),
1121
+ ),
1122
+ 'addons' => array(
1123
+ 'lite' => array(
1124
+ 'status' => 'partial',
1125
+ 'text' => array(
1126
+ '<strong>' . esc_html__( 'Show feeds from a timeline', 'custom-facebook-feed' ) . '</strong>',
1127
+ ),
1128
+ ),
1129
+ 'basic' => array(
1130
+ 'status' => 'partial',
1131
+ 'text' => array(
1132
+ '<strong>' . esc_html__( 'Custom Captcha Addon included', 'custom-facebook-feed' ) . '</strong>',
1133
+ ),
1134
+ ),
1135
+ 'plus' => array(
1136
+ 'status' => 'partial',
1137
+ 'text' => array(
1138
+ '<strong>' . esc_html__( 'Email Marketing Addons included', 'custom-facebook-feed' ) . '</strong>',
1139
+ ),
1140
+ ),
1141
+ 'pro' => array(
1142
+ 'status' => 'full',
1143
+ 'text' => array(
1144
+ '<strong>' . esc_html__( 'Timeline feeds, Photo Grids, Album feeds, Video feeds, Event feeds', 'custom-facebook-feed' ) . '</strong>',
1145
+ ),
1146
+ ),
1147
+ ),
1148
+ 'addons1' => array(
1149
+ 'lite' => array(
1150
+ 'status' => 'partial',
1151
+ 'text' => array(
1152
+ '<strong>' . esc_html__( 'Choose how many posts to display', 'custom-facebook-feed' ) . '</strong>',
1153
+ ),
1154
+ ),
1155
+ 'basic' => array(
1156
+ 'status' => 'partial',
1157
+ 'text' => array(
1158
+ '<strong>' . esc_html__( 'Custom Captcha Addon included', 'custom-facebook-feed' ) . '</strong>',
1159
+ ),
1160
+ ),
1161
+ 'plus' => array(
1162
+ 'status' => 'partial',
1163
+ 'text' => array(
1164
+ '<strong>' . esc_html__( 'Email Marketing Addons included', 'custom-facebook-feed' ) . '</strong>',
1165
+ ),
1166
+ ),
1167
+ 'pro' => array(
1168
+ 'status' => 'full',
1169
+ 'text' => array(
1170
+ '<strong>' . esc_html__( 'Choose to dynamically load more posts using the Load More button', 'custom-facebook-feed' ) . '</strong>',
1171
+ ),
1172
+ ),
1173
+ ),
1174
+ 'addons2' => array(
1175
+ 'lite' => array(
1176
+ 'status' => 'none',
1177
+ 'text' => array(
1178
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1179
+ ),
1180
+ ),
1181
+ 'basic' => array(
1182
+ 'status' => 'partial',
1183
+ 'text' => array(
1184
+ '<strong>' . esc_html__( 'Custom Captcha Addon included', 'custom-facebook-feed' ) . '</strong>',
1185
+ ),
1186
+ ),
1187
+ 'plus' => array(
1188
+ 'status' => 'partial',
1189
+ 'text' => array(
1190
+ '<strong>' . esc_html__( 'Email Marketing Addons included', 'custom-facebook-feed' ) . '</strong>',
1191
+ ),
1192
+ ),
1193
+ 'pro' => array(
1194
+ 'status' => 'full',
1195
+ 'text' => array(
1196
+ '<strong>' . esc_html__( 'Filter posts in your feed based on a particular hashtag, word, or phrase', 'custom-facebook-feed' ) . '</strong>',
1197
+ ),
1198
+ ),
1199
+ ),
1200
+ 'extensions' => array(
1201
+ 'lite' => array(
1202
+ 'status' => 'none',
1203
+ 'text' => array(
1204
+ '<strong>' . esc_html__( 'Not available', 'custom-facebook-feed' ) . '</strong>',
1205
+ ),
1206
+ ),
1207
+ 'basic' => array(
1208
+ 'status' => 'partial',
1209
+ 'text' => array(
1210
+ '<strong>' . esc_html__( 'Custom Captcha Addon included', 'custom-facebook-feed' ) . '</strong>',
1211
+ ),
1212
+ ),
1213
+ 'plus' => array(
1214
+ 'status' => 'partial',
1215
+ 'text' => array(
1216
+ '<strong>' . esc_html__( 'Email Marketing Addons included', 'custom-facebook-feed' ) . '</strong>',
1217
+ ),
1218
+ ),
1219
+ 'pro' => array(
1220
+ 'status' => 'full',
1221
+ 'text' => array(
1222
+ '<strong>' . esc_html__( 'Supports all add-on extensions; Reviews, Multifeed, Date Range, Album Embed, Featured Post, and Carousel.', 'custom-facebook-feed' ) . '</strong>',
1223
+ ),
1224
+ ),
1225
+ ),
1226
+ 'support' => array(
1227
+ 'lite' => array(
1228
+ 'status' => 'partial',
1229
+ 'text' => array(
1230
+ '<strong>' . esc_html__( 'Limited support', 'custom-facebook-feed' ) . '</strong>',
1231
+ ),
1232
+ ),
1233
+ 'basic' => array(
1234
+ 'status' => 'partial',
1235
+ 'text' => array(
1236
+ '<strong>' . esc_html__( 'Standard Support', 'custom-facebook-feed' ) . '</strong>',
1237
+ ),
1238
+ ),
1239
+ 'plus' => array(
1240
+ 'status' => 'partial',
1241
+ 'text' => array(
1242
+ '<strong>' . esc_html__( 'Standard Support', 'custom-facebook-feed' ) . '</strong>',
1243
+ ),
1244
+ ),
1245
+ 'pro' => array(
1246
+ 'status' => 'full',
1247
+ 'text' => array(
1248
+ '<strong>' . esc_html__( 'Priority support', 'custom-facebook-feed' ) . '</strong>',
1249
+ ),
1250
+ ),
1251
+ 'elite' => array(
1252
+ 'status' => 'full',
1253
+ 'text' => array(
1254
+ '<strong>' . esc_html__( 'Premium Support', 'custom-facebook-feed' ) . '</strong>',
1255
+ ),
1256
+ ),
1257
+ 'ultimate' => array(
1258
+ 'status' => 'full',
1259
+ 'text' => array(
1260
+ '<strong>' . esc_html__( 'Premium Support', 'custom-facebook-feed' ) . '</strong>',
1261
+ ),
1262
+ ),
1263
+ 'agency' => array(
1264
+ 'status' => 'full',
1265
+ 'text' => array(
1266
+ '<strong>' . esc_html__( 'Premium Support', 'custom-facebook-feed' ) . '</strong>',
1267
+ ),
1268
+ ),
1269
+ ),
1270
+ 'sites' => array(
1271
+ 'basic' => array(
1272
+ 'status' => 'partial',
1273
+ 'text' => array(
1274
+ '<strong>' . esc_html__( '1 Site', 'custom-facebook-feed' ) . '</strong>',
1275
+ ),
1276
+ ),
1277
+ 'plus' => array(
1278
+ 'status' => 'partial',
1279
+ 'text' => array(
1280
+ '<strong>' . esc_html__( '3 Sites', 'custom-facebook-feed' ) . '</strong>',
1281
+ ),
1282
+ ),
1283
+ 'pro' => array(
1284
+ 'status' => 'full',
1285
+ 'text' => array(
1286
+ '<strong>' . esc_html__( '5 Sites', 'custom-facebook-feed' ) . '</strong>',
1287
+ ),
1288
+ ),
1289
+ 'elite' => array(
1290
+ 'status' => 'full',
1291
+ 'text' => array(
1292
+ '<strong>' . esc_html__( 'Unlimited Sites', 'custom-facebook-feed' ) . '</strong>',
1293
+ ),
1294
+ ),
1295
+ 'ultimate' => array(
1296
+ 'status' => 'full',
1297
+ 'text' => array(
1298
+ '<strong>' . esc_html__( 'Unlimited Sites', 'custom-facebook-feed' ) . '</strong>',
1299
+ ),
1300
+ ),
1301
+ 'agency' => array(
1302
+ 'status' => 'full',
1303
+ 'text' => array(
1304
+ '<strong>' . esc_html__( 'Unlimited Sites', 'custom-facebook-feed' ) . '</strong>',
1305
+ ),
1306
+ ),
1307
+ ),
1308
+ );
1309
+
1310
+ // Wrong feature?
1311
+ if ( ! isset( $data[ $feature ] ) ) {
1312
+ return false;
1313
+ }
1314
+
1315
+ // Is a top level license?
1316
+ $is_licenses_top = in_array( $license, self::$licenses_top, true );
1317
+
1318
+ // Wrong license type?
1319
+ if ( ! isset( $data[ $feature ][ $license ] ) && ! $is_licenses_top ) {
1320
+ return false;
1321
+ }
1322
+
1323
+ // Some licenses have partial data.
1324
+ if ( isset( $data[ $feature ][ $license ] ) ) {
1325
+ return $data[ $feature ][ $license ];
1326
+ }
1327
+
1328
+ // Top level plans has no feature difference with `pro` plan in most cases.
1329
+ return $is_licenses_top ? $data[ $feature ]['pro'] : $data[ $feature ][ $license ];
1330
+ }
1331
+
1332
+ /**
1333
+ * Get the current installation license type (always lowercase).
1334
+ *
1335
+ * @since 2.4/5.5
1336
+ *
1337
+ * @return string
1338
+ */
1339
+ protected function get_license_type() {
1340
+
1341
+ //$type = cff_setting( 'type', '', 'cff_license' );
1342
+
1343
+ //if ( empty( $type ) || ! cff()->pro ) {
1344
+ $type = 'free';
1345
+ //}
1346
+
1347
+ return strtolower( $type );
1348
+ }
1349
+ }
1350
+
1351
+ new CFF_About();
admin/class-install-skin.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- use CFF\Helpers\PluginSilentUpgraderSkin;
4
-
5
- /**
6
- * Skin for on-the-fly addon installations.
7
- *
8
- * @since 1.0.0
9
- * @since 1.5.6.1 Extend PluginSilentUpgraderSkin and clean up the class.
10
- */
11
- class CFF_Install_Skin extends PluginSilentUpgraderSkin {
12
-
13
- /**
14
- * Instead of outputting HTML for errors, json_encode the errors and send them
15
- * back to the Ajax script for processing.
16
- *
17
- * @since 1.0.0
18
- *
19
- * @param array $errors Array of errors with the install process.
20
- */
21
- public function error( $errors ) {
22
-
23
- if ( ! empty( $errors ) ) {
24
- wp_send_json_error( $errors );
25
- }
26
- }
27
- }
1
+ <?php
2
+
3
+ use CFF\Helpers\PluginSilentUpgraderSkin;
4
+
5
+ /**
6
+ * Skin for on-the-fly addon installations.
7
+ *
8
+ * @since 1.0.0
9
+ * @since 1.5.6.1 Extend PluginSilentUpgraderSkin and clean up the class.
10
+ */
11
+ class CFF_Install_Skin extends PluginSilentUpgraderSkin {
12
+
13
+ /**
14
+ * Instead of outputting HTML for errors, json_encode the errors and send them
15
+ * back to the Ajax script for processing.
16
+ *
17
+ * @since 1.0.0
18
+ *
19
+ * @param array $errors Array of errors with the install process.
20
+ */
21
+ public function error( $errors ) {
22
+
23
+ if ( ! empty( $errors ) ) {
24
+ wp_send_json_error( $errors );
25
+ }
26
+ }
27
+ }
blocks/class-cff-blocks.php CHANGED
@@ -1,150 +1,153 @@
1
- <?php
2
- /**
3
- * Custom Facebook Feed block with live preview.
4
- *
5
- * @since 2.3
6
- */
7
- class CFF_Blocks {
8
-
9
- /**
10
- * Indicates if current integration is allowed to load.
11
- *
12
- * @since 1.8
13
- *
14
- * @return bool
15
- */
16
- public function allow_load() {
17
- return function_exists( 'register_block_type' );
18
- }
19
-
20
- /**
21
- * Loads an integration.
22
- *
23
- * @since 2.3
24
- */
25
- public function load() {
26
- $this->hooks();
27
- }
28
-
29
- /**
30
- * Integration hooks.
31
- *
32
- * @since 2.3
33
- */
34
- protected function hooks() {
35
- add_action( 'init', array( $this, 'register_block' ) );
36
- add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_block_editor_assets' ) );
37
- }
38
-
39
- /**
40
- * Register Custom Facebook Feed Gutenberg block on the backend.
41
- *
42
- * @since 2.3
43
- */
44
- public function register_block() {
45
-
46
- wp_register_style(
47
- 'cff-blocks-styles',
48
- trailingslashit( CFF_PLUGIN_URL ) . 'css/cff-blocks.css',
49
- array( 'wp-edit-blocks' ),
50
- CFFVER
51
- );
52
-
53
- $attributes = array(
54
- 'shortcodeSettings' => array(
55
- 'type' => 'string',
56
- ),
57
- 'noNewChanges' => array(
58
- 'type' => 'boolean',
59
- )
60
- );
61
-
62
- register_block_type(
63
- 'cff/cff-feed-block',
64
- array(
65
- 'attributes' => $attributes,
66
- 'render_callback' => array( $this, 'get_feed_html' ),
67
- )
68
- );
69
- }
70
-
71
- /**
72
- * Load Custom Facebook Feed Gutenberg block scripts.
73
- *
74
- * @since 2.3
75
- */
76
- public function enqueue_block_editor_assets() {
77
- $access_token = get_option('cff_access_token');
78
-
79
- cff_add_my_stylesheet();
80
- cff_scripts_method();
81
-
82
- wp_enqueue_style( 'cff-blocks-styles' );
83
- wp_enqueue_script(
84
- 'cff-feed-block',
85
- trailingslashit( CFF_PLUGIN_URL ) . 'js/cff-blocks.js',
86
- array( 'wp-blocks', 'wp-i18n', 'wp-element' ),
87
- CFFVER,
88
- true
89
- );
90
-
91
- $shortcodeSettings = '';
92
-
93
- $i18n = array(
94
- 'addSettings' => esc_html__( 'Add Settings', 'instagram-feed' ),
95
- 'shortcodeSettings' => esc_html__( 'Shortcode Settings', 'instagram-feed' ),
96
- 'example' => esc_html__( 'Example', 'instagram-feed' ),
97
- 'preview' => esc_html__( 'Apply Changes', 'instagram-feed' ),
98
-
99
- );
100
-
101
- wp_localize_script(
102
- 'cff-feed-block',
103
- 'cff_block_editor',
104
- array(
105
- 'wpnonce' => wp_create_nonce( 'facebook-blocks' ),
106
- 'canShowFeed' => ! empty( $access_token ),
107
- 'configureLink' => get_admin_url() . '?page=cff-top',
108
- 'shortcodeSettings' => $shortcodeSettings,
109
- 'i18n' => $i18n,
110
- )
111
- );
112
- }
113
-
114
- /**
115
- * Get form HTML to display in a Custom Facebook Feed Gutenberg block.
116
- *
117
- * @param array $attr Attributes passed by Custom Facebook Feed Gutenberg block.
118
- *
119
- * @since 2.3
120
- *
121
- * @return string
122
- */
123
- public function get_feed_html( $attr ) {
124
-
125
- $return = '';
126
-
127
- $shortcode_settings = isset( $attr['shortcodeSettings'] ) ? $attr['shortcodeSettings'] : '';
128
-
129
- $shortcode_settings = str_replace(array( '[custom-facebook-feed', ']' ), '', $shortcode_settings);
130
-
131
- $return .= do_shortcode( '[custom-facebook-feed '.$shortcode_settings.']' );
132
-
133
- return $return;
134
-
135
- }
136
-
137
- /**
138
- * Checking if is Gutenberg REST API call.
139
- *
140
- * @since 2.3
141
- *
142
- * @return bool True if is Gutenberg REST API call.
143
- */
144
- public static function is_gb_editor() {
145
-
146
- // TODO: Find a better way to check if is GB editor API call.
147
- return defined( 'REST_REQUEST' ) && REST_REQUEST && ! empty( $_REQUEST['context'] ) && 'edit' === $_REQUEST['context']; // phpcs:ignore
148
- }
149
-
150
- }
 
 
 
1
+ <?php
2
+ /**
3
+ * Custom Facebook Feed block with live preview.
4
+ *
5
+ * @since 2.3
6
+ */
7
+ class CFF_Blocks {
8
+
9
+ /**
10
+ * Indicates if current integration is allowed to load.
11
+ *
12
+ * @since 1.8
13
+ *
14
+ * @return bool
15
+ */
16
+ public function allow_load() {
17
+ return function_exists( 'register_block_type' );
18
+ }
19
+
20
+ /**
21
+ * Loads an integration.
22
+ *
23
+ * @since 2.3
24
+ */
25
+ public function load() {
26
+ $this->hooks();
27
+ }
28
+
29
+ /**
30
+ * Integration hooks.
31
+ *
32
+ * @since 2.3
33
+ */
34
+ protected function hooks() {
35
+ add_action( 'init', array( $this, 'register_block' ) );
36
+ add_action( 'enqueue_block_editor_assets', array( $this, 'enqueue_block_editor_assets' ) );
37
+ }
38
+
39
+ /**
40
+ * Register Custom Facebook Feed Gutenberg block on the backend.
41
+ *
42
+ * @since 2.3
43
+ */
44
+ public function register_block() {
45
+
46
+ wp_register_style(
47
+ 'cff-blocks-styles',
48
+ trailingslashit( CFF_PLUGIN_URL ) . 'css/cff-blocks.css',
49
+ array( 'wp-edit-blocks' ),
50
+ CFFVER
51
+ );
52
+
53
+ $attributes = array(
54
+ 'shortcodeSettings' => array(
55
+ 'type' => 'string',
56
+ ),
57
+ 'noNewChanges' => array(
58
+ 'type' => 'boolean',
59
+ ),
60
+ 'executed' => array(
61
+ 'type' => 'boolean',
62
+ )
63
+ );
64
+
65
+ register_block_type(
66
+ 'cff/cff-feed-block',
67
+ array(
68
+ 'attributes' => $attributes,
69
+ 'render_callback' => array( $this, 'get_feed_html' ),
70
+ )
71
+ );
72
+ }
73
+
74
+ /**
75
+ * Load Custom Facebook Feed Gutenberg block scripts.
76
+ *
77
+ * @since 2.3
78
+ */
79
+ public function enqueue_block_editor_assets() {
80
+ $access_token = get_option('cff_access_token');
81
+
82
+ cff_add_my_stylesheet();
83
+ cff_scripts_method();
84
+
85
+ wp_enqueue_style( 'cff-blocks-styles' );
86
+ wp_enqueue_script(
87
+ 'cff-feed-block',
88
+ trailingslashit( CFF_PLUGIN_URL ) . 'js/cff-blocks.js',
89
+ array( 'wp-blocks', 'wp-i18n', 'wp-element' ),
90
+ CFFVER,
91
+ true
92
+ );
93
+
94
+ $shortcodeSettings = '';
95
+
96
+ $i18n = array(
97
+ 'addSettings' => esc_html__( 'Add Settings', 'instagram-feed' ),
98
+ 'shortcodeSettings' => esc_html__( 'Shortcode Settings', 'instagram-feed' ),
99
+ 'example' => esc_html__( 'Example', 'instagram-feed' ),
100
+ 'preview' => esc_html__( 'Apply Changes', 'instagram-feed' ),
101
+
102
+ );
103
+
104
+ wp_localize_script(
105
+ 'cff-feed-block',
106
+ 'cff_block_editor',
107
+ array(
108
+ 'wpnonce' => wp_create_nonce( 'facebook-blocks' ),
109
+ 'canShowFeed' => ! empty( $access_token ),
110
+ 'configureLink' => get_admin_url() . '?page=cff-top',
111
+ 'shortcodeSettings' => $shortcodeSettings,
112
+ 'i18n' => $i18n,
113
+ )
114
+ );
115
+ }
116
+
117
+ /**
118
+ * Get form HTML to display in a Custom Facebook Feed Gutenberg block.
119
+ *
120
+ * @param array $attr Attributes passed by Custom Facebook Feed Gutenberg block.
121
+ *
122
+ * @since 2.3
123
+ *
124
+ * @return string
125
+ */
126
+ public function get_feed_html( $attr ) {
127
+
128
+ $return = '';
129
+
130
+ $shortcode_settings = isset( $attr['shortcodeSettings'] ) ? $attr['shortcodeSettings'] : '';
131
+
132
+ $shortcode_settings = str_replace(array( '[custom-facebook-feed', ']' ), '', $shortcode_settings);
133
+
134
+ $return .= do_shortcode( '[custom-facebook-feed '.$shortcode_settings.']' );
135
+
136
+ return $return;
137
+
138
+ }
139
+
140
+ /**
141
+ * Checking if is Gutenberg REST API call.
142
+ *
143
+ * @since 2.3
144
+ *
145
+ * @return bool True if is Gutenberg REST API call.
146
+ */
147
+ public static function is_gb_editor() {
148
+
149
+ // TODO: Find a better way to check if is GB editor API call.
150
+ return defined( 'REST_REQUEST' ) && REST_REQUEST && ! empty( $_REQUEST['context'] ) && 'edit' === $_REQUEST['context']; // phpcs:ignore
151
+ }
152
+
153
+ }
changelog.txt ADDED
@@ -0,0 +1,603 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ == Changelog ==
2
+ = 2.14 =
3
+ * New: Email alerts for critical issues. If there's an issue with a Facebook feed on your website which hasn't been resolved yet then you'll receive an email notification to let you know. This is sent once per week until the issue is resolved. These emails can be disabled by using the following setting: Facebook Feed > Customize > Misc > Feed Issue Email Report.
4
+ * New: Admin notifications for critical issues. If there is an error with the feed, admins will see notices in the dashboard and on the front-end of the site along with instructions on how to resolve the issue. Front-end admin notifications can be disabled by using the following setting: Facebook Feed > Customize > Misc > Disable Admin Error Notice.
5
+ * New: Added a WordPress 'Site Health' integration. If there is a critical error with your feeds, it will now be flagged in the site health page.
6
+ * New: Added "About Us" page for those who would like to learn more about Smash Balloon and our other products. Go to Facebook Feed -> About Us in the dashboard.
7
+
8
+ = 2.13 =
9
+ * New: Added a “Custom Facebook Feed” Gutenberg block to use in the block editor, allowing you to easily add a feed to posts and pages.
10
+ * New: Added support for translations.
11
+
12
+ = 2.12.4 =
13
+ * Tested with upcoming WordPress 5.4 update.
14
+ * Tweak: Updated Facebook API calls
15
+ * Fix: Minor bug fixes
16
+
17
+ = 2.12.3 =
18
+ * Tweak: Added a text link in the settings page footer to our new free [YouTube plugin](https://wordpress.org/plugins/feeds-for-youtube/)
19
+ * Tweak: When reconnecting an account on the settings page, if there's an issue with the existing access token then it'll be automatically replaced.
20
+ * Tweak: Added 'rel="noopener"' to all external links and added 'rel="noreferrer"' to all non-Facebook links. Thanks to Dev VIP for the suggestion.
21
+ * Fix: Fixed an issue with some call-to-action link URLs when a link protocol wasn't included
22
+ * Fix: Fixed a JavaScript conflict with the [Forminator](https://wordpress.org/plugins/forminator/) plugin
23
+ * Fix: Fixed duplicate post message displaying due to ellipsis HTML character
24
+ * Fix: If a shared link post had no post text then the link title was used causing it to be displayed twice in the post
25
+
26
+ = 2.12.2 =
27
+ * Fix: Fixed a JavaScript error in the admin caused by the previous update. Apologies for any inconvenience.
28
+
29
+ = 2.12.1 =
30
+ * Fix: Fixed an issue with post date timezones due to changes in the WordPress 5.3 update
31
+ * Fix: Fixed a rare issue where a JavaScript error would occur in the WordPress admin if a Facebook account was manually connected and the Page ID used was the full URL
32
+ * Fix: Fixed a JavaScript error in the admin when using older web browsers
33
+ * Tweak: Improved the manual account connection process
34
+ * Tweak: Some minor UI tweaks to match the new WordPress 5.3 UI style
35
+
36
+ = 2.12 =
37
+ * New: Added a backup cache so the feed will still display even if there's an error from the Facebook API.
38
+ * New: You can now easily manage multiple page or group accounts on the plugin settings page allowing you to easily add them to other feeds on your site. When you connect a page or group you will now see it listed in the "Connected Accounts" section. You can add it to the primary feed or to another feed by using the new `account` shortcode option.
39
+ * Tweak: Added a filter which can be used to filter the API data when returned; `cff_filter_api_data`.
40
+ * Tweak: Updated API error messages
41
+ * Fix: Fixed an issue with some @tag links in post text due to a Facebook API change
42
+ * Fix: Fixed a rare issue with ellipsis chracter symbols in shared link descriptions causing the entire link description not to be displayed
43
+
44
+ = 2.11.1 =
45
+ * Tweak: Added the link source URL below the title for shared link posts
46
+ * Fix: Some themes would prevent the "Share" link from working successfully
47
+ * Fix: Fixed an issue with the "Feed Columns" setting not working if the minified versions of the plugin CSS/JavaScript files were being used
48
+
49
+ = 2.11 =
50
+ * New: Added a "Feed Columns" setting to allow you to display your feed in multiple columns. This can be found under the "General" tab on the "Customize" page, or by using the `cols` and `colsmobile` shortcode settings.
51
+ * New: Updated to use v4.0 of the Facebook API
52
+
53
+ = 2.10 =
54
+ * New: Facebook Groups are making their long-awaited return to the plugin! Just click the 'Log in and get my Access Token' button on the plugin's Settings page and select 'Facebook Group'. Follow the prompts to connect your Group and display your feed.
55
+ * Fix: Fixed an issue where a lists of groups or pages wouldn't be displayed when retrieving an Access Token due to a server configuration issue
56
+ * Fix: Photo icons weren't showing for album posts
57
+ * Tweak: Now uses the `visitor_posts` endpoint to display visitor post feeds
58
+
59
+ = 2.9.1 =
60
+ * New: Added support for v3.3 of the Facebook API.
61
+ * Fix: The Access Token selection area was being cut off on small screens when a lot of Facebook pages were listed.
62
+
63
+ = 2.9 =
64
+ * New: You can now select between a "Regular" or "Boxed" post style. Settings for this can be found at: `Facebook Feed > Customize > Style Posts > Post Item`. A Box Shadow setting has been added to the "Boxed" post style.
65
+ * New: Added some settings to control the size and color of the Facebook shared link URLs and descriptions. These can be found at: `Facebook Feed > Customize > Style Posts > Shared Link Boxes`.
66
+ * New: Improved the Facebook Access Token retrieval process to make it more intuitive.
67
+ * Tweak: Avatar images are now circular to match Facebook.
68
+ * Tweak: Animated the social media icons when the "Share" button is clicked.
69
+ * Tweak: Changed the way the Facebook Like Box loads to avoid a conflict with the Facebook Messenger widget. It no longer uses the Facebook JavaScript SDK.
70
+ * Tweak: Changed the elements used for icons from `<i>` to `<span>` to aid accessibility.
71
+ * Tweak: Removed the Google+ share option as the platform has been deprecated.
72
+ * Tweak: Removed the share widgets from the footer of the admin so that they're only loaded when the "Share the plugin" button is clicked.
73
+ * Fix: The plugin now uses the built-in WordPress HTTP API to get data from Facebook instead of making it's own cURL requests to the Facebook API.
74
+ * Fix: Fixed an issue where the avatars of people posting to the Facebook page weren't being displayed. Individual Facebook API requests for avatars have now been removed and bundled into the main Facebook API request.
75
+ * Fix: If the link to the Facebook profile of a visitor posting to your page is not available then remove the link from the avatar and author name.
76
+ * Fix: Fixed an accessibility error caused by the share icons being empty links.
77
+ * Fix: Removed the use of the ENT_HTML5 constant as it isn't supported in PHP 5.4.
78
+ * Fix: Fixed a rare issue with tags in Facebook post stories when the locale was set to be Greek.
79
+
80
+ = 2.8 =
81
+ * New: Added support for Facebook Notes in timeline feeds. If your Facebook timeline feed contains a note then the plugin will now get the content from the note and display it within the Facebook post.
82
+ * New: Facebook call-to-action buttons - such as "Learn More", "Shop Now", and "Message Page" - are now supported in your Facebook posts. These text strings can be translated using the settings at: Facebook Feed > Customize > Custom Text/Translate
83
+ * New: Added a setting that you can enable if you are displaying Facebook posts from a restricted (non-public) Facebook page. This will allow the Facebook page avatar to be displayed, and is located at: Facebook Feed > Customize > Misc > Misc Settings > Is Facebook Page restricted?
84
+ * New: If a visitor posts to your Facebook page then their avatar will now be displayed and cached for 6 months. To clear the cache of these avatar images use the button located at: Facebook Feed > Customize > Misc > Misc Settings > Clear Avatar Cache
85
+ * Tweak: The Timezone setting can now be set in the shortcode. Eg: `timezone="America/Los_Angeles"`
86
+ * Tweak: Minor UI changes to the admin pages
87
+ * Tweak: Reduced some of the Facebook data in the System Info
88
+ * Fix: If you backdate a Facebook post it will now be ordered correctly in your Facebook feed
89
+ * Fix: Fixed a theme conflict related to the Color Picker in the admins section
90
+ * Verified compatibility with WordPress 5.0 and Gutenburg
91
+
92
+ = 2.7.2 =
93
+ * **Important:** If you are displaying a Facebook feed from a Facebook page which you are *not* an admin of then it is advised that you obtain a new Facebook Access Token in the plugin using the "Log in and get my Access Token" button. This will switch you from using the "SlickRemix" app to using our own "Smash Balloon" Facebook app which was recently approved by Facebook, and will prevent you from experiencing any potential interuptions in your Facebook feeds going forward. This will be the final time this is required.
94
+ * Fix: Fixed a rare issue caused by some themes including the JavaScript file incorrectly
95
+
96
+ = 2.7.1 =
97
+ * Tweak: Made some adjustments to the Facebook Access Token login process
98
+
99
+ = 2.7 =
100
+ * New: Now easily get your own Facebook Access Token to avoid any Facebook connection issues. Simply click the blue Facebook "Log in and get my Access Token" button on the Custom Facebook Feed settings page and connect your Facebook account to get your token. The Facebook Access Token will work to get Facebook posts from ANY Facebook page. Thanks to our friends at SlickRemix for powering our new login and getting the plugin back up and running again!
101
+ * Tweak: Removed the minimum caching time if you're using your own Facebook Page Access Token
102
+
103
+ = 2.6.4 =
104
+ * **Important:** If you are displaying Facebook posts from a Facebook page that **you are an admin of** then it is now highly recommended that you retrieve your own Facebook Access Token for that Facebook page to avoid any Facebook API rate limit errors. Simply follow these [step-by-step](https://smashballoon.com/custom-facebook-feed/page-token/) instructions to obtain one.
105
+
106
+ = 2.6.3 =
107
+ * Fix: Fixed an issue where Facebook API errors were being cached
108
+
109
+ = 2.6.2 =
110
+ * Fix: Replaced all HTTP links with HTTPS
111
+ * Fix: Fixed a rare issue which affected the layout of other Facebook widgets
112
+ * Fix: Automatically remove slashes at the end of the Facebook Page ID as it caused an error
113
+ * Fix: The API response test in the System Info now only tests with your Facebook token if you have the "Use my own Access Token" setting enabled
114
+ * Fix: Fixed an issue which caused an occasional Facebook API rate limit error
115
+
116
+ = 2.6.1 =
117
+ * Fix: Removed an unnecessary Facebook API call
118
+ * Fix: Removed a PHP notice which was displayed under rare circumstances
119
+ * Fix: Minor bug fixes
120
+
121
+ = 2.6 =
122
+ * Fix: Fixed an issue connecting to the Facebook API caused by a recent Facebook platform change
123
+ * Tweak: Increased the minimum caching time to be 15 minutes to reduce Facebook API requests
124
+
125
+ = 2.5.2 =
126
+ * Important: Due to sudden changes in the Facebook API it is no longer possible to display posts from a Facebook Group. Please [see here](https://smashballoon.com/facebook-api-changes-april-4-2018/) for more information. We apologize for any frustration or inconvenience this has caused.
127
+ * Removed: Due to Facebook API restrictions, it is no longer possible to display information about an event when it is posted or shared to your Facebook Page timeline.
128
+
129
+ = 2.5.1 =
130
+ * Fix: Prevented a PHP notice which would be displayed under rare circumstances
131
+ * Fix: Replaced a function due to a deprecation in PHP 7.2
132
+
133
+ = 2.5 =
134
+ * New: Added the post story as part of the page/author name at the top of the post
135
+ * New: Added an option to use minified versions of the plugin CSS and JavaScript files: `Facebook Feed > Customize > Misc > Misc Settings > Minify CSS and JavaScript files`
136
+ * New: Added support for clearing the cache of major caching plugins when the Facebook feed cache is cleared. You can enable this by setting the following setting to be "Yes": `Facebook Feed > Customize > Misc > Misc Settings > Force cache to clear on interval`
137
+ * Tweak: Improved the text truncation so that it applies to both the post text and description as one block of text and accounts for HTML link tags
138
+ * Tweak: Added an "Auto" option to the Post Limit setting where it will automatically adjust the post limit based on the number of posts you choose to display
139
+ * Tweak: Reorganized the settings pages to be more intuitive
140
+ * Tweak: Added aria-hidden=true to icons to help improve accessibility
141
+ * Tweak: The icon font stylesheet handle has been renamed so it will only be loaded once if another of our plugins is installed
142
+ * Tweak: Error messages are now only shown to admins
143
+ * Tweak: Added a setting to workaround a theme issue that affects the shortening of the post text. If you're experiencing an issue with the shortening of post text then you can enable the following setting: `Facebook Feed > Customize > Misc > Misc Settings > Fix text shortening issue`
144
+ * Fix: Included a fallback in case the author name and avatar aren't available in visitor posts
145
+ * Fix: Fixed an issue with apostrophes in the header not being escaped correctly
146
+ * Fix: Fixed an issue with the icon font when Font Awesome 5 was added to a site
147
+ * Fix: Added support for the @[ID:page-name] tagging format
148
+ * Fix: The post description is now able to be displayed even if the post text is hidden
149
+
150
+ = 2.4.6 =
151
+ * Compatible with WordPress 4.8
152
+
153
+ = 2.4.5 =
154
+ * Tweak: Updated plugin links for new WordPress.org repo
155
+ * Fix: Minor bug fixes
156
+
157
+ = 2.4.4 =
158
+ * New: If your Facebook posts have been created in more than one language on Facebook then it's now possible to display each language by using the `locale` setting in the shortcode. Eg: English: `[custom-facebook-feed locale=en_EN]`, German: `[custom-facebook-feed locale=de_DE]`
159
+ * Fix: Fixed an issue with the order of group posts in some feeds
160
+
161
+ = 2.4.3 =
162
+ * Fix: Fixed a potential security vulnerability
163
+ * Tested with upcoming WordPress 4.6 update
164
+
165
+ = 2.4.2 =
166
+ * Tweak: Group wall feed posts are now ordered based on recent activity, rather than by the date they were created, to better reflect the order on the Facebook Group wall.
167
+ * Tweak: The "5 hours ago" date text strings can now be translated directly in the shortcode if you're displaying different feeds in different languages. See the bottom of the [Shortcode Options table](https://smashballoon.com/custom-facebook-feed/docs/shortcodes/) for more information.
168
+ * Tweak: Created some specific [setup directions](https://smashballoon.com/custom-facebook-feed/docs/free/) for the free version.
169
+ * Fix: Minor bug fixes
170
+
171
+ = 2.4.1.2 =
172
+ * Updated to be compatible with Facebook API version 2.6
173
+
174
+ = 2.4.1.1 =
175
+ * Fix: Fixed a JavaScript error in the admin area when using WordPress 4.5
176
+
177
+ = 2.4.1 =
178
+ * New: If a post contains either a photo or video then an icon and link are now added to view it on Facebook. You can disable this by unchecking the "Media Link" option in the following location: Customize > Post Layout > Show/Hide. You can also remove it by using the "exclude" shortcode option: exclude="medialink". You can translate or change the text for this link on the "Custom Text / Translate" settings page.
179
+ * Tweak: Tested with WordPress 4.5
180
+ * Fix: Fixed an issue where the "Share" button in the plugin Like Box wasn't working correctly
181
+ * Fix: Added support for wp-config proxy settings. Credit to [@usrlocaldick](https://wordpress.org/support/topic/proxy-support-1) for the patch.
182
+
183
+ = 2.4 =
184
+ * New: Added a setting to allow you to use a fixed pixel width for the Facebook feed on desktop but switch to a 100% width responsive layout on mobile
185
+ * New: You can now click on the name of a setting on the admin pages to reveal the corresponding shortcode for that setting
186
+ * New: Added quick links to the top of the Customize settings pages to make it easier to find certain settings
187
+ * New: Added a setting to allow you to disable the default plugin text and link styles (Customize > Misc > Disable default styles)
188
+ * New: Added a setting which allows you to manually change the request method used to fetch Facebook posts which is necessary for some server setups
189
+ * Tweak: Updated the Font Awesome icon font to version 4.5
190
+ * Tweak: Moved the 'Show Header' setting to the 'General' tab on the Customize page
191
+ * Fix: Hashtag linking now works with all languages and character sets
192
+ * Fix: Fixed an error that occurred when trying to activate the Pro version with the free version still activated
193
+ * Fix: Fixed a rare error which occurred when the Facebook post contained no text and no story
194
+ * Fix: Fixed an issue when trying to display Facebook posts by only visitors to your Facebook page caused by a recent Facebook API update
195
+
196
+ = 2.3.10 =
197
+ * Fix: If you're experiencing an issue with your Facebook feed not automatically updating successfully then please update the plugin and enable the following setting: Custom Facebook Feed > Customize > Misc > Misc Settings > Force cache to clear on interval. If you set this setting to 'Yes' then it should force your plugin cache to clear either every hour, 12 hours, or 24 hours, depending on how often you have the plugin set to check Facebook for new posts.
198
+
199
+ = 2.3.9 =
200
+ * Fix: Fixed an issue caused by the recent Facebook API 2.5 update where the posts wouldn't display when using a brand new Access Token
201
+
202
+ = 2.3.8 =
203
+ * Fix: Fixed a positioning issue with the Facebook "Like Box / Page Plugin" widget caused by a recent Facebook update which was causing it to overlap on top of other content
204
+ * Fix: Hashtags containing Chinese characters are now linked
205
+ * Fix: Fixed a minor issue in shared link posts where the post text linked to the shared link URL instead of the post on Facebook
206
+ * Tweak: Added a timezone for Sydney, Australia
207
+
208
+ = 2.3.7 =
209
+ * Fix: Fixed an issue caused by the WordPress 4.3 update where feeds from very long page IDs wouldn't update correctly due to the cache not clearing when expired
210
+ * Fix: Removed specific encoding parameters from the cURL request method to prevent encoding issues on some servers
211
+
212
+ = 2.3.6 =
213
+ * New: Added a couple of new customization options for the Facebook Like Box/Page Plugin which allow you to select a small/slim header for the Like Box and hide the call-to-action button (if available)
214
+ * Fix: The plugin now works with Access Tokens which use the new recently-released version 2.4 of the Facebook API
215
+
216
+ = 2.3.5 =
217
+ * New: Replace the Facebook 'Like Box' with the new Facebook 'Page Plugin' as the Facebook Like Box will be deprecated on June 23rd, 2015. Settings can be found under the Misc tab on the plugin's Customize page.
218
+ * Fix: Hashtags which contain foreign characters are now correctly linked to the hashtag on Facebook
219
+ * Fix: Links within Facebook post descriptions weren't opening in a new tab
220
+ * Fix: Removed empty style tags from some elements
221
+ * Fix: The URLs used for the 'Share' icons are now encoded to prevent any HTML validation errors
222
+ * Fix: Shared Facebook posts now link to the new shared post and not to the original post that was shared on Facebook
223
+ * Fix: Corrected a minor issue with the plugin caching string
224
+ * Fix: Fixed a minor issue with tags in the Facebook post text when creating/sharing an event
225
+ * Tweak: Add some stricter CSS to some parts of the feed to prevent theme conflicts
226
+ * Tweak: Automatically link the Facebook event name to the event now rather than it having to be enabled on the plugin's 'Typography' settings page
227
+
228
+ = 2.3.4 =
229
+ * Fix: The Facebook event description is no longer shown twice in event posts. It was previously shown in the post text itself and in the Facebook event details.
230
+ * Fix: Fixed a rare bug which would occur if your Facebook page or Facebook group name contained a number
231
+
232
+ = 2.3.3 =
233
+ * Fix: Removed a PHP notice which was missed in the last update. Apologies for the two updates in quick succession.
234
+
235
+ = 2.3.2 =
236
+ * Fix: Fixed some stray PHP notices which were inadvertently introduced in a recent update
237
+ * Tweak: Added an option to not load the icon font included in the plugin
238
+
239
+ = 2.3.1 =
240
+ * New: Added a shortcode option to allow you to offset the number of posts to be shown. Eg: offset=2
241
+ * New: Added an email link to the sharing icons
242
+ * New: Added a setting to load a local copy of the icon font instead of the CDN version. This can be found at the bottom of the 'Misc' settings page.
243
+ * Tweak: Added a prefix to the IDs on all Facebook posts so that they can now be targeted via CSS
244
+ * Tweak: Added "nofollow" to all links by default. This can be disabled by using `nofollow=false` in the shortcode.
245
+ * Tweak: Added some missing settings to the System Info section
246
+ * Tweak: Added the 'Timezone' setting to the main Settings page so that it's easier to find
247
+ * Fix: Added a workaround for Facebook changing the event URLs in their API from absolute to relative URLs
248
+ * Fix: Facebook removed the 'relevant_count' parameter from their API so added a workaround to get the number of photos attached to a Facebook post
249
+ * Fix: Fixed a minor bug in the WP_Http fallback method
250
+ * Fix: Removed duplicate IDs on the share icons and replaced with classes
251
+ * Fix: Added a check to the file_get_contents data retrieval method to check whether the Open SSL wrapper is enabled
252
+ * Fix: The `eventtitlelink` shortcode option now works correctly
253
+ * Fix: Added a workaround for 'story_tags' which Facebook deprecated from their API
254
+ * Fix: Removed query string from the end of CSS and JavaScript file references and replaced it with the wp_enqueue_script 'ver' parameter instead
255
+
256
+ = 2.3 =
257
+ * Happy New Year!
258
+ * New: Added a share link which allows you to share posts to Facebook, Twitter, Google+ or LinkedIn. This can be disabled at the very bottom of the Typography tab, or by using `showsharelink=false` in the [custom-facebook-feed] shortcode.
259
+ * Tweak: Using your own Facebook Access Token in the plugin is still optional but is now recommended in order to protect yourself against future Access Token related issues
260
+ * Tweak: Increased the accuracy of the character count when links are included in the Facebook text
261
+ * Tweak: Improved the efficiency of the Facebook post caching
262
+ * Tweak: Replaced the rel attribute with the HTML5 data attribute when storing data on an element
263
+ * Tweak: Added HTTPS stream wrapper check to the System Info to aid in troubleshooting
264
+ * Tweak: Updated the plugin's icon font to the latest version
265
+ * Tweak: Added the Smash Balloon logo to the credit link which can be optionally displayed at the bottom of your feed. The setting for this is at the bottom of the Misc tab on the Customize page.
266
+ * Tweak: Added a shortcode option to only show the Smash Balloon credit link on certain feeds: `[custom-facebook-feed credit=true]`
267
+ * Fix: Fixed an issue with quotes being escaped in custom/translated text
268
+ * Fix: Display an error message if WPHTTP function isn't working correctly
269
+ * Fix: The `postbgcolor` shortcode option is now working correctly
270
+
271
+ = 2.2.1 =
272
+ * Fix: Fixed a minor JavaScript error which occurs if a Facebook post doesn't contain any text
273
+
274
+ = 2.2 =
275
+ * New: Added a text area to the Support tab which contains all of the plugin settings and site info for easier troubleshooting
276
+ * New: You can now set the number of Facebook posts to '0' if you just want to show the Facebook Like box widget and no posts
277
+ * Tweak: If the user doesn't add a unit to the width, height or padding then automatically add 'px'
278
+ * Tweak: Added social media sharing links to the bottom of the settings page and an option to add a credit link to the bottom of the feed
279
+ * Fix: Fixed an issue with Facebook hashtags not being linked when followed immediately by punctuation
280
+ * Fix: When displaying a shared link if the caption is the same as the link URL then don't display it
281
+ * Fix: Added a space before the feed header's style attribute to remove HTML validation error
282
+ * Fix: Prefixed the 'top' and 'bottom' classes used on the Facebook Like box to prevent CSS conflicts
283
+ * Fix: Fixed an issue with the link color not being applied to Facebook hashtag links
284
+
285
+ = 2.1.3 =
286
+ * Fix: Fixed an issue with the Facebook Access Token used in the plugin hitting its request limit
287
+
288
+ = 2.1.2 =
289
+ * Fix: Added in a missing closing div tag to the Facebook feed when an error is being displayed
290
+
291
+ = 2.1.1 =
292
+ * Fix: Fixed an issue with the date not being hidden when unchecked in the Show/Hide section
293
+ * Fix: Fixed an issue with the date not being displayed below event posts when the date position was set to 'At the bottom of the post'
294
+
295
+ = 2.1 =
296
+ * New: Added an option to preserve/save your plugin options after uninstalling the plugin. This makes manually updating the plugin much easier.
297
+ * New: Added a 'Settings' link to the plugin on the Plugins page
298
+ * New: Added a field to the Misc settings page which allows users to enter their Facebook App ID in order to remove a couple of browser console warnings caused by the Facebook Like box widget
299
+ * Tweak: Reduced the size of the author's Facebook profile picture from 50px to 40px to match Facebook
300
+ * Tweak: The link description text is now 12px in size by default
301
+ * Tweak: Added some default character limits to the post text and descriptions
302
+ * Tweak: If the post author is being hidden then change the default date position to be the bottom of the post
303
+ * Fix: The post author link is no longer the full width of the post and is only wrapped around the author image and name which helps prevent inadvertently clicking on the post author
304
+ * Fix: Added a fb-root element to the Like box to prevent a browser console warning
305
+ * Fix: Renamed the ShowError function to prevent conflicts
306
+ * Fix: Fixed an issue with the 'seconds' custom text string not being saved correctly
307
+ * Fix: When linking the post text to the Facebook post the correct text color is now applied
308
+
309
+ = 2.0.1 =
310
+ * Tweak: Improved error handling and added an [Error Message reference](https://smashballoon.com/custom-facebook-feed/docs/errors/) to the website
311
+
312
+ = 2.0 =
313
+ * New: Added an option to display the post date immediately below the author name - as it is on Facebook. This is now the default date position.
314
+ * New: Added options to add a background color and rounded corners to your posts
315
+ * New: If your Facebook event has an end date then it will now be displayed after the start date
316
+ * New: Hashtags in the post descriptions are now also linked
317
+ * New: Tested and approved for the upcoming WordPress 4.0 release
318
+ * Tweak: Moved the 'View on Facebook' link to the left side
319
+ * Tweak: Added error handling to improve user experience
320
+ * Tweak: If the Facebook API can't be reached by the plugin for some reason then it no longer caches the empty response and instead keeps trying to retrieve the posts from Facebook until it is successful
321
+ * Fix: Removed some redundant inline CSS used on the posts
322
+ * Fix: If there is a token in the 'Access Token' field but the 'Enter my own Access Token' box is unchecked then the plugin will no longer use it
323
+ * Fix: Added the trim() function to the 'Test connection to Facebook API' function to improve reliability
324
+ * Fix: Fixed an occasional JavaScript error which occurred when the post text was hidden
325
+
326
+ = 1.9.9.3 =
327
+ * New: Hashtags in link, photo and video descriptions are now also linked
328
+ * Fix: Fixed an issue with hashtags being linked when the post text is also linked, which interfered with the text formatting
329
+
330
+ = 1.9.9.2 =
331
+ * Fix: Removed a couple of stray PHP notices
332
+
333
+ = 1.9.9.1 =
334
+ * Fix: Fixed an occasional issue with hashtags in inline CSS inadvertently being linked
335
+
336
+ = 1.9.9 =
337
+ * New: Hashtags in your posts are now linked to the hashtag search on Facebook. This can be disabled in the 'Post Text' section on the Typography settings page.
338
+ * New: Added a Facebook icon to the Custom Facebook Feed admin menu
339
+ * Fix: Corrected the left side margin on the "Like" box so that it aligns correctly with posts
340
+
341
+ = 1.9.8.1 =
342
+ * Fix: Fixed an admin JavaScript error introduced by the last update
343
+
344
+ = 1.9.8 =
345
+ * Tweak: The Access Token field is now hidden by default and is revealed by a checkbox
346
+ * Fix: Fixed an issue with link colors not being applied to all links
347
+ * Fix: Removed the link box container from posts which contain non-youtube/vimeo links
348
+ * Fix: Links which don't contain a 'http://' protocol are now linked correctly
349
+
350
+ = 1.9.7 =
351
+ * Fix: Fixed an issue with a generic function name which was occasionally causing an error
352
+
353
+ = 1.9.6 =
354
+ * Tweak: Added an HTML wrapper element around the feed
355
+
356
+ = 1.9.5 =
357
+ * New: Added an option to set a height on the Like box. This allows you to display more faces of your fans if you have that option selected.
358
+ * Tweak: Added a few stricter CSS styles to help minimize the chance of theme stylesheets distorting post formatting
359
+ * Tweak: Added a span to the header text to allow CSS to be applied
360
+ * Fix: Fixed a bug with the post author text bumping down below the author image in the Firefox browser
361
+ * Fix: Corrected a bug which caused some links not to have the color applied
362
+ * Fix: Fixed a float issue in Firefox which sometimes caused the feed to be pushed off the page
363
+
364
+ = 1.9.4 =
365
+ * New: Added background and border styling options to shared links
366
+ * Tweak: Reduced the clickable area of the post author
367
+ * Tweak: Added a 'Customize' tab to the Settings page
368
+ * Fix: Fixed an issue with post tag linking not working correctly in some languages
369
+ * Fix: Fixed an issue with line breaks not being respected in IE8
370
+
371
+ = 1.9.2 =
372
+ * Fix: Added title and alt attributes to the post author's Facebook profile picture
373
+ * Fix: Improved the reliability of the post tag linking
374
+ * Fix: Fixed an issue with HTML characters not rendering correctly when linking the post text
375
+ * Fix: Improved the reliability of the CSS clearing method used on the feed container
376
+ * Compatible with WordPress 3.9
377
+
378
+ = 1.9.1 =
379
+ * Fix: Fixed an issue with the 'textlink' shortcode option
380
+ * Fix: Fixed an bug with post text sometimes being duplicated when linked
381
+ * Fix: Removed error_reporting(0);
382
+
383
+ = 1.9.0 =
384
+ * New: Added the ability to change the text size and color of the post author
385
+ * New: Define the format, size and color of shared link titles
386
+ * New: You can now define the color of the links in your post text, descriptions and Facebook events
387
+ * Tweak: Moved the Feed Header options to the Typography page
388
+ * Tweak: Moved the Ajax setting to the Misc page
389
+ * Tweak: Now removes any query strings attached to the Facebook Page ID
390
+ * Fix: Fixed an issue with some themes causing the clear element to prevent links being clickable
391
+ * Fix: Some minor bug fixes
392
+
393
+ = 1.8.2.3 =
394
+ * New: Now supports Facebook tags - creates links when using the @ symbol to tag other people or Facebook pages in your posts
395
+ * Tweak: Changed the method used for link replacement in posts
396
+ * Fix: Fixed issue with php include
397
+
398
+ = 1.8.1 =
399
+ * New: Added an 'exclude' shortcode option to allow you to easily exclude specific parts of the post
400
+ * New: Timeline events are now cached to help reduce page load time
401
+ * New: Added an option for when the WordPress theme is loading the feed via AJAX so that the JavaScript runs after the feed has been loaded into the page
402
+ * Tweak: Changed author images back to loading via PHP rather than JavaScript due to issues with certain WordPress themes
403
+ * Fix: Reset the timezone after the shortcode has run
404
+ * Fix: Fixed an issue with the shared link descriptions not being hidden when specified
405
+ * Fix: Fixed a rare issue with the 'textlink' shortcode option
406
+ * Fix: Use a fallback JSON string if unable to find the cached version in the database
407
+
408
+ = 1.8.0 =
409
+ * New: Added a built-in color picker
410
+ * New: Added class to posts based on the author to allow for independent styling
411
+ * Tweak: Now loads the author's Facebook profile picture in using JavaScript to help speed up load times
412
+ * Tweak: Now automatically set the Facebook post limit based on the number of Facebook posts to be displayed
413
+ * Tweak: Core improvements to the way Facebook posts are output
414
+ * Tweak: Changed 'Layout & Style' page name to 'Customize'
415
+ * Tweak: Moved the Support information to a tab on the Settings page
416
+ * Tweak: Improved the 'Test connection to Facebook API' function
417
+ * Fix: Encode Facebook URLs so that they pass HTML validation
418
+ * Fix: Fixed an issue with Facebook post captions not displaying under some circumstances
419
+ * Fix: More robust method for stripping the URL when a user enters Facebook page URL instead of their Facebook Page ID
420
+
421
+ = 1.7.2 =
422
+ * Tweak: Moved the 'Show post author' option from the General settings tab to the Post Layout tab
423
+ * Tweak: Added the ability to show or hide the author to the 'include' shortcode option
424
+ * Fix: Added CSS box-sizing property to feed header so that padding doesn't increase its width
425
+ * Fix: Fixed showheader=false and headeroutside=false shortcode options
426
+ * Fix: Now allows users to enter their Facebook page URL as their Facebook Page ID
427
+
428
+ = 1.7.0 =
429
+ * New: Added ability to add a customizable header to your feed
430
+ * New: Added a Custom JavaScript section to allow you to add your own JS or jQuery functionality to the feed
431
+ * New: Added a 'Custom Text / Translate' tab to house all customizable text
432
+ * New: You can now choose to show posts only by other people on your Facebook page
433
+ * New: Set your timezone so that dates/times are displayed in your local time
434
+ * New: When a Facebook post contains a link to multiple images it now states the number of photos after the post text and links to the Facebook album
435
+ * Tweak: Plugin now detects whether the page is using SSL and pulls https resources
436
+ * Tweak: Added a button to test the connection to Facebook's API for easier troubleshooting
437
+ * Fix: Now using HTML encoding to parse any raw HTML tags in the Facebook post text or descriptions
438
+ * Fix: Added a protocol to the beginning of links which don't include one
439
+ * Fix: Fixed date width issue in IE7
440
+ * Fix: Removed stray PHP notices
441
+ * Fix: Added a space between the Like Box attributes
442
+
443
+ = 1.6.8.2 =
444
+ * Fix: Fixed a CSS bug in Firefox which was causing the page author name to bump down below the avatar
445
+
446
+ = 1.6.8.1 =
447
+ * Tweak: Moved 'View on Facebook' link up to be level with the date rather than on the line below it
448
+ * Fix: Don't show the caption when it is the same as the Facebook post text
449
+ * Fix: Fixed issue with enqueueing JavaScript file
450
+
451
+ = 1.6.8 =
452
+ * New: Added option to remove border from the Facebook Like box when showing faces
453
+ * New: Set Facebook "Like" box text color to either blue or white
454
+ * Tweak: Moved descripion below video or link title and added link source
455
+ * Tweak: Added ability to manually translate the '2 weeks ago' text
456
+ * Tweak: Replaced 'View Link' with 'View on Facebook' so that shared links now link to the Facebook post
457
+ * Tweak: Facebook "Like" box is now responsive
458
+ * Tweak: Displays Facebook post caption if no description is available
459
+ * Tweak: Vertically center multi-line author names rather than bumping them down below the Facebook profile picture
460
+ * Tweak: Checks whether the Access Token is inputted in the correct format
461
+ * Fix: Fixed bug in the 'Show posts on my page by others' option
462
+ * Fix: If displaying a Facebook group then automatically hides the Facebook "Like" box
463
+ * Fix: 'others=false' shortcode option now working correctly
464
+ * Fix: Strip any white space characters from beginning or end of Access Token and Facebook Page ID
465
+
466
+ = 1.6.7.1 =
467
+ * Fix: Fixed a bug in 1.6.7 which was causing an issue displaying the Facebook feed in some circumstances
468
+
469
+ = 1.6.7 =
470
+ * New: Your Facebook feed can now be completely displayed in any language - added i18n support for date translation
471
+ * Tweak: Improved documentation within the plugin
472
+ * Tweak: Changed order of methods used to retrieve Facebook feed data
473
+
474
+ = 1.6.6.3 =
475
+ * New: Added support for Facebook group events
476
+
477
+ = 1.6.6.1 =
478
+ * Fix: Resolved jQuery UI draggable bug which was causing issues with drag and drop
479
+
480
+ = 1.6.6 =
481
+ * New: Now works with Facebook groups
482
+ * Fix: Fixed an issue with the 'Show posts by others' option not working correctly in the previous version
483
+
484
+ = 1.6.4 =
485
+ * New: Added localization support. Full support for various languages coming soon
486
+ * New: Added CSS classes to different Facebook post types to allow for different styling based on post type
487
+ * New: Option to link statuses to either the status post itself or the directly to the Facebook page/timeline
488
+ * New: Added option to add thumbnail faces of fans to the Facebook Like box and define a width
489
+ * Tweak: Added separate classes to 'View on Facebook' and 'View Link' links so that they can be targeted with CSS
490
+ * Tweak: Prefixed every CSS class to prevent styling conflicts with theme stylesheets. Please note that if you used custom CSS to style parts of the feed that the CSS classes are now prefixed with 'cff-' to prevent theme conflicts. Eg. '.more' is now '.cff-more'.
491
+
492
+ = 1.6.3 =
493
+ * New: Added support for Facebook 'Offers'
494
+ * Fix: Fixed an issue with the 'others' shortcode option not working correctly
495
+ * Fix: Prefixed the 'clear' class to prevent conflicts
496
+
497
+ = 1.6.2 =
498
+ * New: Post caching now temporarily stores your Facebook post data in your WordPress database to allow for super quick load times
499
+ * New: Define your own caching time. Check for new Facebook posts every few seconds, minutes, hours or days. You decide.
500
+ * New: Define your own custom text for the 'See More' and 'See Less' buttons
501
+ * New: Add your own CSS class to your Custom Facebook Feeds
502
+ * New: Define a Facebook post limit which is higher or lower than the default 25
503
+ * New: Include the Facebook Like box inside or outside of the Facebook feed's container
504
+ * New: Customize the Facebook event date independently
505
+ * New: Improved layout of admin pages for easier navigation and customization
506
+ * Fix: Provided a fix for the Facebook API duplicate post bug
507
+ * Fix: Fixed bug which ocurred when multiple Facebook feeds are displayed on the same page with different text lengths defined
508
+
509
+ = 1.5.2 =
510
+ * Fix: Fixed JavaScript error in previous update
511
+
512
+ = 1.5.1 =
513
+ * New: Added a 'See More' link to expand any text which is longer than the character limit defined
514
+ * New: Choose to show Facebook posts by other people in your feed
515
+ * New: Option to show the post author's Facebook profile picture and name above each post
516
+ * New: Added options to customize and format the Facebook post date
517
+ * New: Add your own text before and after the date and in place of the 'View on Facebook' and 'View Link' text links
518
+ * New: Specify the format of the Facebook Event date
519
+ * Tweak: Default date format is less specific and better mimics Facebook's - credit Mark Bebbington
520
+ * Tweak: Changed the layout of the Typography section to allow for the additional options
521
+ * Fix: When a Facebook photo album is shared it now links to the album itself on Facebook and not just the cover photo
522
+ * Fix: Fixed issue with hyperlinks in post text which don't have a space before them not being converted to links
523
+
524
+ = 1.4.8 =
525
+ * Minor fixes
526
+
527
+ = 1.4.7 =
528
+ * Tweak: Added links to statuses which link to the Facebook page
529
+ * Tweak: Added classes to Facebook event date, location and description to allow custom styling
530
+ * Tweak: Removed 'Where' and 'When' text from Facebook events and made bold instead
531
+
532
+ = 1.4.6 =
533
+ * Fix: Fixed 'num' option in shortcode
534
+
535
+ = 1.4.4 =
536
+ * New: Added more shortcode options
537
+ * Minor tweaks
538
+
539
+ = 1.4.2 =
540
+ * New: Add your own custom CSS to allow for even deeper customization
541
+ * New: Optionally link your post text to the Facebook post
542
+ * New: Optionally link your event title to the Facebook event page
543
+ * Some minor modifications
544
+
545
+ = 1.4.1 =
546
+ * Fix: Set all parts of the Facebook feed to display by default on activation
547
+
548
+ = 1.4.0 =
549
+ * Major Update!
550
+ * New: Loads of new customization options for your Custom Facebook Feed
551
+ * New: Define Facebook feed width, height, padding and background color
552
+ * New: Change the font-size, font-weight and color of the Facebook post text, description, date, links and event details
553
+ * New: Choose whether to show or hide certain parts of the Facebook posts
554
+ * New: Select whether the Facebook Like box is shown at the top of bottom of the Facebook feed
555
+ * New: Choose Facebook Like box background color
556
+
557
+ = 1.3.6 =
558
+ * Minor modifications
559
+
560
+ = 1.3.5 =
561
+ * New: Shared Facebook events now display event details (name, location, date/time, description) directly in the Facebook feed
562
+
563
+ = 1.3.4 =
564
+ * New: Email addresses within the Facebook post text are now hyperlinked
565
+ * Fix: Links beginning with 'www' are now also hyperlinked
566
+
567
+ = 1.3.3 =
568
+ * New: Added support for Facebook events - display the Facebook event details (name, location, date/time, description) directly in the Facebook feed
569
+ * Fix: Links within the Facebook post text are now hyperlinked
570
+ * Tweak: Added additional methods for retrieving Facebook feed data
571
+
572
+ = 1.3.2 =
573
+ * Fix: Now using the built-in WordPress HTTP API to get retrieve the Facebook data
574
+
575
+ = 1.3.1 =
576
+ * Fix: Fixed issue with certain Facebook statuses not displaying correctly
577
+
578
+ = 1.3.0 =
579
+ * Tweak: If 'Number of Posts to show' is not set then default to 10 Facebook posts
580
+
581
+ = 1.2.9 =
582
+ * Fix: Now using cURL instead of file_get_contents to prevent issues with php.ini configuration on some web servers
583
+
584
+ = 1.2.8 =
585
+ * Fix: Fixed bug in specifying the number of Facebook posts to display
586
+
587
+ = 1.2.7 =
588
+ * Tweak: Prevented likes and comments by the page author showing up in the Facebook feed
589
+
590
+ = 1.2.6 =
591
+ * Tweak: Added help link to Custom Facebook Feed settings page
592
+
593
+ = 1.2.5 =
594
+ * Fix: Added clear fix
595
+
596
+ = 1.2.1 =
597
+ * Fix: Minor bug fixes
598
+
599
+ = 1.2 =
600
+ * New: Added the ability to define a maximum length for both the Facebook post text and description
601
+
602
+ = 1.0 =
603
+ * Launch!
class-cff-education.php CHANGED
@@ -1,135 +1,135 @@
1
- <?php
2
-
3
- /**
4
- *
5
- * @since 5.5
6
- */
7
- class CFF_Education {
8
-
9
- var $plugin_version;
10
-
11
- /**
12
- * Constructor.
13
- *
14
- * @since 5.5
15
- */
16
- public function __construct() {
17
-
18
- $this->hooks();
19
- }
20
-
21
- /**
22
- * Hooks.
23
- *
24
- * @since 5.5
25
- */
26
- public function hooks() {
27
- $this->plugin_version = defined( 'WPW_SL_STORE_URL' ) ? 'pro' : 'free';
28
- }
29
-
30
- /**
31
- * "Did You Know?" messages.
32
- *
33
- * @since 5.5
34
- */
35
- public function dyk_messages() {
36
-
37
- $free_messages = array(
38
- array(
39
- 'title' => esc_html__( 'Bring Your Feeds to Life with Media Content', 'custom-facebook-feeds' ),
40
- 'content' => esc_html__( 'You\'ve done the hard work of getting a visitor onto your site, now keep them there by displaying your Facebook photos and videos directly on your site, rather than sending your visitors away to Facebook.', 'custom-facebook-feeds' ),
41
- 'more' => 'https://smashballoon.com/custom-facebook-feed/',
42
- 'item' => 1,
43
- ),
44
- array(
45
- 'title' => esc_html__( 'Use Facebook Reviews to Boost Conversions', 'custom-facebook-feeds' ),
46
- 'content' => esc_html__( 'Reviews for your product or service are the best way to give users the confidence to take action. With the Reviews extension, easily add 5 star reviews and recommendations from Facebook to your website help increase conversions.', 'custom-facebook-feeds' ),
47
- 'more' => 'https://smashballoon.com/extensions/reviews/',
48
- 'item' => 2,
49
- ),
50
- array(
51
- 'title' => esc_html__( 'Bring the Conversation to Your Website', 'custom-facebook-feeds' ),
52
- 'content' => esc_html__( 'Include the Facebook comments with each of your posts to engage your website viewers, keep them on your site for longer, and encourage them to interact with your content.', 'custom-facebook-feeds' ),
53
- 'more' => 'https://smashballoon.com/custom-facebook-feed/wordpress-plugin/#comments',
54
- 'item' => 3,
55
- ),
56
- array(
57
- 'title' => esc_html__( 'Automatically Feed Facebook Events to Your Website', 'custom-facebook-feeds' ),
58
- 'content' => esc_html__( 'Save yourself the time and effort of posting events both to Facebook and your website by using the Custom Facebook Feed Pro plugin to automatically feeds events right to your site.', 'custom-facebook-feeds' ),
59
- 'more' => 'https://smashballoon.com/custom-facebook-feed/docs/displaying-facebook-events-using-wordpress-plugin/',
60
- 'item' => 4,
61
- ),
62
- );
63
-
64
- $pro_messages = array(
65
- array(
66
- 'title' => esc_html__( 'Automated YouTube Live Streaming', 'custom-facebook-feeds' ),
67
- 'content' => esc_html__( 'You can automatically feed live YouTube videos to your website using our Feeds For YouTube Pro plugin. It takes all the hassle out of publishing live videos to your site by automating the process.', 'custom-facebook-feeds' ),
68
- 'more' => 'https://smashballoon.com/youtube-feed/',
69
- 'item' => 1,
70
- ),
71
- array(
72
- 'title' => esc_html__( 'Use Facebook Reviews to Boost Conversions', 'custom-facebook-feeds' ),
73
- 'content' => esc_html__( 'Reviews for your product or service are the best way to give users the confidence to take action. With the Reviews extension, easily add 5 star reviews and recommendations from Facebook to your website help increase conversions.', 'custom-facebook-feeds' ),
74
- 'more' => 'https://smashballoon.com/extensions/reviews/',
75
- 'item' => 2,
76
- ),
77
- array(
78
- 'title' => esc_html__( 'Adding Social Proof with Twitter Feeds', 'custom-facebook-feeds' ),
79
- 'content' => esc_html__( 'Twitter testimonials are one of the best ways to add verifiable social proof to your website. They add credibility to your brand, product, or service by displaying reviews from real people to your site, helping to convert more visitors into customers. Our free Custom Twitter Feeds plugin makes displaying Tweets on your website a breeze.', 'custom-facebook-feeds' ),
80
- 'more' => 'https://wordpress.org/plugins/custom-twitter-feeds/',
81
- 'item' => 3,
82
- ),
83
- array(
84
- 'title' => esc_html__( 'Run Promotions with Instagram Hashtags', 'custom-facebook-feeds' ),
85
- 'content' => esc_html__( 'You can use hashtags on Instagram for so many things; but one of the most effective is for targeted promotions or competitions which engage with your audience and boost your exposure. Our Instagram Feed Pro plugin allows you to bring your hashtagged content into your website and display it in one centralized location.', 'custom-facebook-feeds' ),
86
- 'more' => 'https://smashballoon.com/instagram-feed/features/#hashtag',
87
- 'item' => 4,
88
- ),
89
- );
90
-
91
- if ( $this->plugin_version === 'pro' ) {
92
- return $pro_messages;
93
- }
94
- return $free_messages;
95
-
96
- }
97
-
98
- /**
99
- * "Did You Know?" random message.
100
- *
101
- * @since 5.5
102
- */
103
- public function dyk_message_rnd() {
104
-
105
- $messages = $this->dyk_messages();
106
-
107
- $index = array_rand( $messages );
108
-
109
- return $messages[ $index ];
110
- }
111
-
112
- /**
113
- * "Did You Know?" display message.
114
- *
115
- * @since 5.5
116
- *
117
- */
118
- public function dyk_display() {
119
-
120
- $dyk_message = $this->dyk_message_rnd();
121
-
122
- if ( ! empty( $dyk_message['more'] ) ) {
123
- $dyk_message['more'] = add_query_arg(
124
- array(
125
- 'utm_source' => 'plugin-'.$this->plugin_version,
126
- 'utm_campaign' => 'cff-issue-email',
127
- 'utm_content' => $dyk_message['item'],
128
- ),
129
- $dyk_message['more']
130
- );
131
- }
132
-
133
- return $dyk_message;
134
- }
135
- }
1
+ <?php
2
+
3
+ /**
4
+ *
5
+ * @since 5.5
6
+ */
7
+ class CFF_Education {
8
+
9
+ var $plugin_version;
10
+
11
+ /**
12
+ * Constructor.
13
+ *
14
+ * @since 5.5
15
+ */
16
+ public function __construct() {
17
+
18
+ $this->hooks();
19
+ }
20
+
21
+ /**
22
+ * Hooks.
23
+ *
24
+ * @since 5.5
25
+ */
26
+ public function hooks() {
27
+ $this->plugin_version = defined( 'WPW_SL_STORE_URL' ) ? 'pro' : 'free';
28
+ }
29
+
30
+ /**
31
+ * "Did You Know?" messages.
32
+ *
33
+ * @since 5.5
34
+ */
35
+ public function dyk_messages() {
36
+
37
+ $free_messages = array(
38
+ array(
39
+ 'title' => esc_html__( 'Bring Your Feeds to Life with Media Content', 'custom-facebook-feeds' ),
40
+ 'content' => esc_html__( 'You\'ve done the hard work of getting a visitor onto your site, now keep them there by displaying your Facebook photos and videos directly on your site, rather than sending your visitors away to Facebook.', 'custom-facebook-feeds' ),
41
+ 'more' => 'https://smashballoon.com/custom-facebook-feed/',
42
+ 'item' => 1,
43
+ ),
44
+ array(
45
+ 'title' => esc_html__( 'Use Facebook Reviews to Boost Conversions', 'custom-facebook-feeds' ),
46
+ 'content' => esc_html__( 'Reviews for your product or service are the best way to give users the confidence to take action. With the Reviews extension, easily add 5 star reviews and recommendations from Facebook to your website help increase conversions.', 'custom-facebook-feeds' ),
47
+ 'more' => 'https://smashballoon.com/extensions/reviews/',
48
+ 'item' => 2,
49
+ ),
50
+ array(
51
+ 'title' => esc_html__( 'Bring the Conversation to Your Website', 'custom-facebook-feeds' ),
52
+ 'content' => esc_html__( 'Include the Facebook comments with each of your posts to engage your website viewers, keep them on your site for longer, and encourage them to interact with your content.', 'custom-facebook-feeds' ),
53
+ 'more' => 'https://smashballoon.com/custom-facebook-feed/wordpress-plugin/#comments',
54
+ 'item' => 3,
55
+ ),
56
+ array(
57
+ 'title' => esc_html__( 'Automatically Feed Facebook Events to Your Website', 'custom-facebook-feeds' ),
58
+ 'content' => esc_html__( 'Save yourself the time and effort of posting events both to Facebook and your website by using the Custom Facebook Feed Pro plugin to automatically feeds events right to your site.', 'custom-facebook-feeds' ),
59
+ 'more' => 'https://smashballoon.com/custom-facebook-feed/docs/displaying-facebook-events-using-wordpress-plugin/',
60
+ 'item' => 4,
61
+ ),
62
+ );
63
+
64
+ $pro_messages = array(
65
+ array(
66
+ 'title' => esc_html__( 'Automated YouTube Live Streaming', 'custom-facebook-feeds' ),
67
+ 'content' => esc_html__( 'You can automatically feed live YouTube videos to your website using our Feeds For YouTube Pro plugin. It takes all the hassle out of publishing live videos to your site by automating the process.', 'custom-facebook-feeds' ),
68
+ 'more' => 'https://smashballoon.com/youtube-feed/',
69
+ 'item' => 1,
70
+ ),
71
+ array(
72
+ 'title' => esc_html__( 'Use Facebook Reviews to Boost Conversions', 'custom-facebook-feeds' ),
73
+ 'content' => esc_html__( 'Reviews for your product or service are the best way to give users the confidence to take action. With the Reviews extension, easily add 5 star reviews and recommendations from Facebook to your website help increase conversions.', 'custom-facebook-feeds' ),
74
+ 'more' => 'https://smashballoon.com/extensions/reviews/',
75
+ 'item' => 2,
76
+ ),
77
+ array(
78
+ 'title' => esc_html__( 'Adding Social Proof with Twitter Feeds', 'custom-facebook-feeds' ),
79
+ 'content' => esc_html__( 'Twitter testimonials are one of the best ways to add verifiable social proof to your website. They add credibility to your brand, product, or service by displaying reviews from real people to your site, helping to convert more visitors into customers. Our free Custom Twitter Feeds plugin makes displaying Tweets on your website a breeze.', 'custom-facebook-feeds' ),
80
+ 'more' => 'https://wordpress.org/plugins/custom-twitter-feeds/',
81
+ 'item' => 3,
82
+ ),
83
+ array(
84
+ 'title' => esc_html__( 'Run Promotions with Instagram Hashtags', 'custom-facebook-feeds' ),
85
+ 'content' => esc_html__( 'You can use hashtags on Instagram for so many things; but one of the most effective is for targeted promotions or competitions which engage with your audience and boost your exposure. Our Instagram Feed Pro plugin allows you to bring your hashtagged content into your website and display it in one centralized location.', 'custom-facebook-feeds' ),
86
+ 'more' => 'https://smashballoon.com/instagram-feed/features/#hashtag',
87
+ 'item' => 4,
88
+ ),
89
+ );
90
+
91
+ if ( $this->plugin_version === 'pro' ) {
92
+ return $pro_messages;
93
+ }
94
+ return $free_messages;
95
+
96
+ }
97
+
98
+ /**
99
+ * "Did You Know?" random message.
100
+ *
101
+ * @since 5.5
102
+ */
103
+ public function dyk_message_rnd() {
104
+
105
+ $messages = $this->dyk_messages();
106
+
107
+ $index = array_rand( $messages );
108
+
109
+ return $messages[ $index ];
110
+ }
111
+
112
+ /**
113
+ * "Did You Know?" display message.
114
+ *
115
+ * @since 5.5
116
+ *
117
+ */
118
+ public function dyk_display() {
119
+
120
+ $dyk_message = $this->dyk_message_rnd();
121
+
122
+ if ( ! empty( $dyk_message['more'] ) ) {
123
+ $dyk_message['more'] = add_query_arg(
124
+ array(
125
+ 'utm_campaign' => 'facebook-'.$this->plugin_version,
126
+ 'utm_source' => 'issueemail',
127
+ 'utm_content' => $dyk_message['item'],
128
+ ),
129
+ $dyk_message['more']
130
+ );
131
+ }
132
+
133
+ return $dyk_message;
134
+ }
135
+ }
class-cff-error-reporter.php CHANGED
@@ -1,444 +1,444 @@
1
- <?php
2
- /**
3
- * Class CFF_Error_Reporter
4
- *
5
- * Set as a global object to record and report errors
6
- *
7
- * @since
8
- */
9
-
10
- if ( ! defined( 'ABSPATH' ) ) {
11
- die( '-1' );
12
- }
13
-
14
- class CFF_Error_Reporter
15
- {
16
- /**
17
- * @var array
18
- */
19
- var $errors;
20
-
21
- /**
22
- * @var array
23
- */
24
- var $frontend_error;
25
-
26
- var $reporter_key;
27
-
28
- /**
29
- * CFF_Error_Reporter constructor.
30
- */
31
- public function __construct() {
32
- $this->reporter_key = 'cff_error_reporter';
33
- $this->errors = get_option( $this->reporter_key, array() );
34
- $this->frontend_error = '';
35
- add_action( 'cff_feed_issue_email', array( $this, 'maybe_trigger_report_email_send' ) );
36
- add_action( 'wp_ajax_cff_dismiss_critical_notice', array( $this, 'dismiss_critical_notice' ) );
37
- add_action( 'wp_footer', array( $this, 'critical_error_notice' ), 300 );
38
- add_action( 'admin_notices', array( $this, 'admin_error_notices' ) );
39
- }
40
-
41
- /**
42
- * @return array
43
- *
44
- * @since 2.0/4.0
45
- */
46
- public function get_errors() {
47
- return $this->errors;
48
- }
49
-
50
- /**
51
- * @param $type
52
- * @param $message_array
53
- *
54
- * @since 2.0/4.0
55
- */
56
- public function add_error( $type, $args ) {
57
- if ( $type === 'accesstoken' ) {
58
- $accesstoken_error_exists = false;
59
- if ( isset( $this->errors['accesstoken'] ) ) {
60
- foreach ($this->errors['accesstoken'] as $accesstoken ) {
61
- if ( $args['accesstoken'] === $accesstoken['accesstoken'] ) {
62
- $accesstoken_error_exists = true;
63
- }
64
- }
65
- }
66
-
67
- if ( !$accesstoken_error_exists ) {
68
- $this->errors['accesstoken'][] = array(
69
- 'accesstoken' => $args['accesstoken'],
70
- 'post_id' => $args['post_id'],
71
- 'errorno' => $args['errorno']
72
- );
73
- }
74
-
75
- } else {
76
- $this->errors[ $type ] = array(
77
- 'accesstoken' => $args['accesstoken'],
78
- 'public_message' => $args['public_message'],
79
- 'admin_message' => $args['admin_message'],
80
- 'frontend_directions' => $args['frontend_directions'],
81
- 'backend_directions' => $args['backend_directions'],
82
- 'post_id' => $args['post_id'],
83
- 'errorno' => $args['errorno']
84
- );
85
- }
86
-
87
- update_option( $this->reporter_key, $this->errors, false );
88
- }
89
-
90
- /**
91
- * @param $type
92
- *
93
- * @since 2.0/4.0
94
- */
95
- public function remove_error( $type ) {
96
- $errors = $this->errors;
97
-
98
- if ( isset( $errors[ $type ] ) ) {
99
- unset( $errors[ $type ] );
100
- }
101
-
102
- if ( empty( $errors ) ) {
103
- delete_option( $this->reporter_key );
104
- $this->errors = array();
105
- } else {
106
- update_option( $this->reporter_key, $errors, false );
107
- $this->errors = $errors;
108
- }
109
- }
110
-
111
- public function remove_all_errors() {
112
- delete_option( $this->reporter_key );
113
- $this->errors = array();
114
- }
115
-
116
- /**
117
- * @param $type
118
- * @param $message
119
- *
120
- * @since 2.0/5.0
121
- */
122
- public function add_frontend_error( $message, $directions ) {
123
- $this->frontend_error = $message . $directions;
124
- }
125
-
126
- public function remove_frontend_error() {
127
- $this->frontend_error = '';
128
- }
129
-
130
- /**
131
- * @return string
132
- *
133
- * @since 2.0/5.0
134
- */
135
- public function get_frontend_error() {
136
- return $this->frontend_error;
137
- }
138
-
139
- public function get_critical_errors() {
140
- $errors = $this->get_errors();
141
-
142
- return $errors;
143
- }
144
-
145
- public function are_critical_errors() {
146
- $are_errors = false;
147
-
148
- $errors = $this->get_errors();
149
-
150
- foreach ( $errors as $error ) {
151
- $are_errors = true;
152
- }
153
-
154
- return $are_errors;
155
- }
156
-
157
-
158
- /**
159
- * Load the critical notice for logged in users.
160
- */
161
- function critical_error_notice() {
162
- // Don't do anything for guests.
163
- if ( ! is_user_logged_in() ) {
164
- return;
165
- }
166
-
167
- // Only show this to users who are not tracked.
168
- if ( ! current_user_can( 'edit_posts' ) ) {
169
- return;
170
- }
171
-
172
- if ( ! $this->are_critical_errors() ) {
173
- return;
174
- }
175
-
176
-
177
- // Don't show if already dismissed.
178
- if ( get_option( 'cff_dismiss_critical_notice', false ) ) {
179
- return;
180
- }
181
-
182
- $options = get_option('cff_style_settings');
183
- if ( isset( $options['disable_admin_notice'] ) && $options['disable_admin_notice'] === 'on' ) {
184
- return;
185
- }
186
-
187
- ?>
188
- <div class="cff-critical-notice cff-critical-notice-hide">
189
- <div class="cff-critical-notice-icon">
190
- <img src="<?php echo CFF_PLUGIN_URL . 'img/cff-icon.png'; ?>" width="45" alt="Custom Facebook Feed icon" />
191
- </div>
192
- <div class="cff-critical-notice-text">
193
- <h3><?php esc_html_e( 'Custom Facebook Feed Critical Issue', 'custom-facebook-feed' ); ?></h3>
194
- <p>
195
- <?php
196
- $doc_url = admin_url() . 'admin.php?page=cff-top';
197
- // Translators: %s is the link to the article where more details about critical are listed.
198
- printf( esc_html__( 'An issue is preventing your Custom Facebook Feeds from updating. %1$sResolve this issue%2$s.', 'custom-facebook-feed' ), '<a href="' . esc_url( $doc_url ) . '" target="_blank">', '</a>' );
199
- ?>
200
- </p>
201
- </div>
202
- <div class="cff-critical-notice-close">&times;</div>
203
- </div>
204
- <style type="text/css">
205
- .cff-critical-notice {
206
- position: fixed;
207
- bottom: 20px;
208
- right: 15px;
209
- font-family: Arial, Helvetica, "Trebuchet MS", sans-serif;
210
- background: #fff;
211
- box-shadow: 0 0 10px 0 #dedede;
212
- padding: 10px 10px;
213
- display: flex;
214
- align-items: center;
215
- justify-content: center;
216
- width: 325px;
217
- max-width: calc( 100% - 30px );
218
- border-radius: 6px;
219
- transition: bottom 700ms ease;
220
- z-index: 10000;
221
- }
222
-
223
- .cff-critical-notice h3 {
224
- font-size: 13px;
225
- color: #222;
226
- font-weight: 700;
227
- margin: 0 0 4px;
228
- padding: 0;
229
- line-height: 1;
230
- border: none;
231
- }
232
-
233
- .cff-critical-notice p {
234
- font-size: 12px;
235
- color: #7f7f7f;
236
- font-weight: 400;
237
- margin: 0;
238
- padding: 0;
239
- line-height: 1.2;
240
- border: none;
241
- }
242
-
243
- .cff-critical-notice p a {
244
- color: #7f7f7f;
245
- font-size: 12px;
246
- line-height: 1.2;
247
- margin: 0;
248
- padding: 0;
249
- text-decoration: underline;
250
- font-weight: 400;
251
- }
252
-
253
- .cff-critical-notice p a:hover {
254
- color: #666;
255
- }
256
-
257
- .cff-critical-notice-icon img {
258
- height: auto;
259
- display: block;
260
- margin: 0;
261
- }
262
-
263
- .cff-critical-notice-icon {
264
- padding: 0;
265
- border-radius: 4px;
266
- flex-grow: 0;
267
- flex-shrink: 0;
268
- margin-right: 12px;
269
- overflow: hidden;
270
- }
271
-
272
- .cff-critical-notice-close {
273
- padding: 10px;
274
- margin: -12px -9px 0 0;
275
- border: none;
276
- box-shadow: none;
277
- border-radius: 0;
278
- color: #7f7f7f;
279
- background: transparent;
280
- line-height: 1;
281
- align-self: flex-start;
282
- cursor: pointer;
283
- font-weight: 400;
284
- }
285
- .cff-critical-notice-close:hover,
286
- .cff-critical-notice-close:focus{
287
- color: #111;
288
- }
289
-
290
- .cff-critical-notice.cff-critical-notice-hide {
291
- bottom: -200px;
292
- }
293
- </style>
294
- <?php
295
-
296
- if ( ! wp_script_is( 'jquery', 'queue' ) ) {
297
- wp_enqueue_script( 'jquery' );
298
- }
299
- ?>
300
- <script>
301
- if ( 'undefined' !== typeof jQuery ) {
302
- jQuery( document ).ready( function ( $ ) {
303
- /* Don't show the notice if we don't have a way to hide it (no js, no jQuery). */
304
- $( document.querySelector( '.cff-critical-notice' ) ).removeClass( 'cff-critical-notice-hide' );
305
- $( document.querySelector( '.cff-critical-notice-close' ) ).on( 'click', function ( e ) {
306
- e.preventDefault();
307
- $( this ).closest( '.cff-critical-notice' ).addClass( 'cff-critical-notice-hide' );
308
- $.ajax( {
309
- url: '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>',
310
- method: 'POST',
311
- data: {
312
- action: 'cff_dismiss_critical_notice',
313
- nonce: '<?php echo esc_js( wp_create_nonce( 'cff-critical-notice' ) ); ?>',
314
- }
315
- } );
316
- } );
317
- } );
318
- }
319
- </script>
320
- <?php
321
- }
322
-
323
- /**
324
- * Ajax handler to hide the critical notice.
325
- */
326
- public function dismiss_critical_notice() {
327
-
328
- check_ajax_referer( 'cff-critical-notice', 'nonce' );
329
-
330
- update_option( 'cff_dismiss_critical_notice', 1, false );
331
-
332
- wp_die();
333
-
334
- }
335
-
336
- public function send_report_email() {
337
- $options = get_option( 'cff_style_settings', array() );
338
-
339
- $to_string = ! empty( $options['email_notification_addresses'] ) ? str_replace( ' ', '', $options['email_notification_addresses'] ) : get_option( 'admin_email', '' );
340
-
341
- $to_array_raw = explode( ',', $to_string );
342
- $to_array = array();
343
-
344
- foreach ( $to_array_raw as $email ) {
345
- if ( is_email( $email ) ) {
346
- $to_array[] = $email;
347
- }
348
- }
349
-
350
- if ( empty( $to_array ) ) {
351
- return false;
352
- }
353
- $from_name = esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) );
354
- $email_from = $from_name . ' <' . get_option( 'admin_email', $to_array[0] ) . '>';
355
- $header_from = "From: " . $email_from;
356
-
357
- $headers = array( 'Content-Type: text/html; charset=utf-8', $header_from );
358
-
359
- $header_image = CFF_PLUGIN_URL . 'img/balloon-120.png';
360
- $title = __( 'Custom Facebook Feed Report for ' . home_url() );
361
- $link = admin_url( 'admin.php?page=cff-top');
362
- //&tab=customize-advanced
363
- $footer_link = admin_url('admin.php?page=cff-style&tab=misc&flag=emails');
364
- $bold = __( 'There\'s an Issue with a Facebook Feed on Your Website', 'custom-facebook-feed' );
365
- $details = '<p>' . __( 'A Custom Facebook Feed on your website is currently unable to connect to Facebook to retrieve new posts. Don\'t worry, your feed is still being displayed using a cached version, but is no longer able to display new posts.', 'custom-facebook-feed' ) . '</p>';
366
- $details .= '<p>' . sprintf( __( 'This is caused by an issue with your Facebook account connecting to the Facebook API. For information on the exact issue and directions on how to resolve it, please visit the %sCustom Facebook Feed settings page%s on your website.', 'custom-facebook-feed' ), '<a href="' . esc_url( $link ) . '">', '</a>' ). '</p>';
367
- $message_content = '<h6 style="padding:0;word-wrap:normal;font-family:\'Helvetica Neue\',Helvetica,Arial,sans-serif;font-weight:bold;line-height:130%;font-size: 16px;color:#444444;text-align:inherit;margin:0 0 20px 0;Margin:0 0 20px 0;">' . $bold . '</h6>' . $details;
368
- include_once CFF_PLUGIN_DIR . 'class-cff-education.php';
369
- $educator = new CFF_Education();
370
- $dyk_message = $educator->dyk_display();
371
- ob_start();
372
- include CFF_PLUGIN_DIR . 'email.php';
373
- $email_body = ob_get_contents();
374
- ob_get_clean();
375
- $sent = wp_mail( $to_array, $title, $email_body, $headers );
376
-
377
- return $sent;
378
- }
379
-
380
- public function maybe_trigger_report_email_send() {
381
- if ( ! $this->are_critical_errors() ) {
382
- return;
383
- }
384
- $options = get_option('cff_style_settings');
385
-
386
- if ( isset( $options['enable_email_report'] ) && empty( $options['enable_email_report'] ) ) {
387
- return;
388
- }
389
-
390
- $this->send_report_email();
391
- }
392
-
393
- public function admin_error_notices() {
394
- if ( isset( $_GET['page'] ) && in_array( $_GET['page'], array( 'cff-top', 'cff-style' )) ) {
395
-
396
- $errors = $this->get_critical_errors();
397
- if ( $this->are_critical_errors() && ! empty( $errors ) ) :
398
- if ( isset( $errors['wp_remote_get'] ) ) {
399
- $error = $errors['wp_remote_get'];
400
- $error_message = $error['admin_message'];
401
- $button = $error['backend_directions'];
402
- $post_id = $error['post_id'];
403
- $directions = '<p class="cff-error-directions">';
404
- $directions .= $button;
405
- $directions .= '<button data-url="'.get_the_permalink( $post_id ).'" class="cff-clear-errors-visit-page cff-space-left button button-secondary">' . __( 'View Feed and Retry', 'custom-facebook-feed' ) . '</button>';
406
- $directions .= '</p>';
407
- } elseif ( isset( $errors['api'] ) ) {
408
- $error = $errors['api'];
409
- $error_message = $error['admin_message'];
410
- $button = $error['backend_directions'];
411
- $post_id = $error['post_id'];
412
- $directions = '<p class="cff-error-directions">';
413
- $directions .= $button;
414
- $directions .= '<button data-url="'.get_the_permalink( $post_id ).'" class="cff-clear-errors-visit-page cff-space-left button button-secondary">' . __( 'View Feed and Retry', 'custom-facebook-feed' ) . '</button>';
415
- $directions .= '</p>';
416
- } else {
417
- $error = $errors['accesstoken'];
418
-
419
- $tokens = array();
420
- $post_id = false;
421
- foreach ( $error as $token ) {
422
- $tokens[] = $token['accesstoken'];
423
- $post_id = $token['post_id'];
424
- }
425
- $error_message = sprintf( __( 'The access token %s is invalid or has expired.', 'custom-facebook-feed' ), implode( $tokens, ', ' ) );
426
- $directions = '<p class="cff-error-directions">';
427
- $directions .= '<button class="button button-primary cff-reconnect">' . __( 'Reconnect Your Account', 'custom-facebook-feed' ) . '</button>';
428
- $directions .= '<button data-url="'.get_the_permalink( $post_id ).'" class="cff-clear-errors-visit-page cff-space-left button button-secondary">' . __( 'View Feed and Retry', 'custom-facebook-feed' ) . '</button>';
429
- $directions .= '</p>';
430
- }
431
- ?>
432
- <div class="notice notice-warning is-dismissible cff-admin-notice">
433
- <p><strong><?php echo esc_html__( 'Custom Facebook Feed is encountering an error and your feeds may not be updating due to the following reasons:', 'custom-facebook-feed') ; ?></strong></p>
434
-
435
- <?php echo $error_message; ?>
436
-
437
- <?php echo $directions; ?>
438
- </div>
439
- <?php endif;
440
- }
441
-
442
- }
443
-
444
  }
1
+ <?php
2
+ /**
3
+ * Class CFF_Error_Reporter
4
+ *
5
+ * Set as a global object to record and report errors
6
+ *
7
+ * @since
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) {
11
+ die( '-1' );
12
+ }
13
+
14
+ class CFF_Error_Reporter
15
+ {
16
+ /**
17
+ * @var array
18
+ */
19
+ var $errors;
20
+
21
+ /**
22
+ * @var array
23
+ */
24
+ var $frontend_error;
25
+
26
+ var $reporter_key;
27
+
28
+ /**
29
+ * CFF_Error_Reporter constructor.
30
+ */
31
+ public function __construct() {
32
+ $this->reporter_key = 'cff_error_reporter';
33
+ $this->errors = get_option( $this->reporter_key, array() );
34
+ $this->frontend_error = '';
35
+ add_action( 'cff_feed_issue_email', array( $this, 'maybe_trigger_report_email_send' ) );
36
+ add_action( 'wp_ajax_cff_dismiss_critical_notice', array( $this, 'dismiss_critical_notice' ) );
37
+ add_action( 'wp_footer', array( $this, 'critical_error_notice' ), 300 );
38
+ add_action( 'admin_notices', array( $this, 'admin_error_notices' ) );
39
+ }
40
+
41
+ /**
42
+ * @return array
43
+ *
44
+ * @since 2.0/4.0
45
+ */
46
+ public function get_errors() {
47
+ return $this->errors;
48
+ }
49
+
50
+ /**
51
+ * @param $type
52
+ * @param $message_array
53
+ *
54
+ * @since 2.0/4.0
55
+ */
56
+ public function add_error( $type, $args ) {
57
+ if ( $type === 'accesstoken' ) {
58
+ $accesstoken_error_exists = false;
59
+ if ( isset( $this->errors['accesstoken'] ) ) {
60
+ foreach ($this->errors['accesstoken'] as $accesstoken ) {
61
+ if ( $args['accesstoken'] === $accesstoken['accesstoken'] ) {
62
+ $accesstoken_error_exists = true;
63
+ }
64
+ }
65
+ }
66
+
67
+ if ( !$accesstoken_error_exists ) {
68
+ $this->errors['accesstoken'][] = array(
69
+ 'accesstoken' => $args['accesstoken'],
70
+ 'post_id' => $args['post_id'],
71
+ 'errorno' => $args['errorno']
72
+ );
73
+ }
74
+
75
+ } else {
76
+ $this->errors[ $type ] = array(
77
+ 'accesstoken' => $args['accesstoken'],
78
+ 'public_message' => $args['public_message'],
79
+ 'admin_message' => $args['admin_message'],
80
+ 'frontend_directions' => $args['frontend_directions'],
81
+ 'backend_directions' => $args['backend_directions'],
82
+ 'post_id' => $args['post_id'],
83
+ 'errorno' => $args['errorno']
84
+ );
85
+ }
86
+
87
+ update_option( $this->reporter_key, $this->errors, false );
88
+ }
89
+
90
+ /**
91
+ * @param $type
92
+ *
93
+ * @since 2.0/4.0
94
+ */
95
+ public function remove_error( $type ) {
96
+ $errors = $this->errors;
97
+
98
+ if ( isset( $errors[ $type ] ) ) {
99
+ unset( $errors[ $type ] );
100
+ }
101
+
102
+ if ( empty( $errors ) ) {
103
+ delete_option( $this->reporter_key );
104
+ $this->errors = array();
105
+ } else {
106
+ update_option( $this->reporter_key, $errors, false );
107
+ $this->errors = $errors;
108
+ }
109
+ }
110
+
111
+ public function remove_all_errors() {
112
+ delete_option( $this->reporter_key );
113
+ $this->errors = array();
114
+ }
115
+
116
+ /**
117
+ * @param $type
118
+ * @param $message
119
+ *
120
+ * @since 2.0/5.0
121
+ */
122
+ public function add_frontend_error( $message, $directions ) {
123
+ $this->frontend_error = $message . $directions;
124
+ }
125
+
126
+ public function remove_frontend_error() {
127
+ $this->frontend_error = '';
128
+ }
129
+
130
+ /**
131
+ * @return string
132
+ *
133
+ * @since 2.0/5.0
134
+ */
135
+ public function get_frontend_error() {
136
+ return $this->frontend_error;
137
+ }
138
+
139
+ public function get_critical_errors() {
140
+ $errors = $this->get_errors();
141
+
142
+ return $errors;
143
+ }
144
+
145
+ public function are_critical_errors() {
146
+ $are_errors = false;
147
+
148
+ $errors = $this->get_errors();
149
+
150
+ foreach ( $errors as $error ) {
151
+ $are_errors = true;
152
+ }
153
+
154
+ return $are_errors;
155
+ }
156
+
157
+
158
+ /**
159
+ * Load the critical notice for logged in users.
160
+ */
161
+ function critical_error_notice() {
162
+ // Don't do anything for guests.
163
+ if ( ! is_user_logged_in() ) {
164
+ return;
165
+ }
166
+
167
+ // Only show this to users who are not tracked.
168
+ if ( ! current_user_can( 'edit_posts' ) ) {
169
+ return;
170
+ }
171
+
172
+ if ( ! $this->are_critical_errors() ) {
173
+ return;
174
+ }
175
+
176
+
177
+ // Don't show if already dismissed.
178
+ if ( get_option( 'cff_dismiss_critical_notice', false ) ) {
179
+ return;
180
+ }
181
+
182
+ $options = get_option('cff_style_settings');
183
+ if ( isset( $options['disable_admin_notice'] ) && $options['disable_admin_notice'] === 'on' ) {
184
+ return;
185
+ }
186
+
187
+ ?>
188
+ <div class="cff-critical-notice cff-critical-notice-hide">
189
+ <div class="cff-critical-notice-icon">
190
+ <img src="<?php echo CFF_PLUGIN_URL . 'img/cff-icon.png'; ?>" width="45" alt="Custom Facebook Feed icon" />
191
+ </div>
192
+ <div class="cff-critical-notice-text">
193
+ <h3><?php esc_html_e( 'Custom Facebook Feed Critical Issue', 'custom-facebook-feed' ); ?></h3>
194
+ <p>
195
+ <?php
196
+ $doc_url = admin_url() . 'admin.php?page=cff-top';
197
+ // Translators: %s is the link to the article where more details about critical are listed.
198
+ printf( esc_html__( 'An issue is preventing your Custom Facebook Feeds from updating. %1$sResolve this issue%2$s.', 'custom-facebook-feed' ), '<a href="' . esc_url( $doc_url ) . '" target="_blank">', '</a>' );
199
+ ?>
200
+ </p>
201
+ </div>
202
+ <div class="cff-critical-notice-close">&times;</div>
203
+ </div>
204
+ <style type="text/css">
205
+ .cff-critical-notice {
206
+ position: fixed;
207
+ bottom: 20px;
208
+ right: 15px;
209
+ font-family: Arial, Helvetica, "Trebuchet MS", sans-serif;
210
+ background: #fff;
211
+ box-shadow: 0 0 10px 0 #dedede;
212
+ padding: 10px 10px;
213
+ display: flex;
214
+ align-items: center;
215
+ justify-content: center;
216
+ width: 325px;
217
+ max-width: calc( 100% - 30px );
218
+ border-radius: 6px;
219
+ transition: bottom 700ms ease;
220
+ z-index: 10000;
221
+ }
222
+
223
+ .cff-critical-notice h3 {
224
+ font-size: 13px;
225
+ color: #222;
226
+ font-weight: 700;
227
+ margin: 0 0 4px;
228
+ padding: 0;
229
+ line-height: 1;
230
+ border: none;
231
+ }
232
+
233
+ .cff-critical-notice p {
234
+ font-size: 12px;
235
+ color: #7f7f7f;
236
+ font-weight: 400;
237
+ margin: 0;
238
+ padding: 0;
239
+ line-height: 1.2;
240
+ border: none;
241
+ }
242
+
243
+ .cff-critical-notice p a {
244
+ color: #7f7f7f;
245
+ font-size: 12px;
246
+ line-height: 1.2;
247
+ margin: 0;
248
+ padding: 0;
249
+ text-decoration: underline;
250
+ font-weight: 400;
251
+ }
252
+
253
+ .cff-critical-notice p a:hover {
254
+ color: #666;
255
+ }
256
+
257
+ .cff-critical-notice-icon img {
258
+ height: auto;
259
+ display: block;
260
+ margin: 0;
261
+ }
262
+
263
+ .cff-critical-notice-icon {
264
+ padding: 0;
265
+ border-radius: 4px;
266
+ flex-grow: 0;
267
+ flex-shrink: 0;
268
+ margin-right: 12px;
269
+ overflow: hidden;
270
+ }
271
+
272
+ .cff-critical-notice-close {
273
+ padding: 10px;
274
+ margin: -12px -9px 0 0;
275
+ border: none;
276
+ box-shadow: none;
277
+ border-radius: 0;
278
+ color: #7f7f7f;
279
+ background: transparent;
280
+ line-height: 1;
281
+ align-self: flex-start;
282
+ cursor: pointer;
283
+ font-weight: 400;
284
+ }
285
+ .cff-critical-notice-close:hover,
286
+ .cff-critical-notice-close:focus{
287
+ color: #111;
288
+ }
289
+
290
+ .cff-critical-notice.cff-critical-notice-hide {
291
+ bottom: -200px;
292
+ }
293
+ </style>
294
+ <?php
295
+
296
+ if ( ! wp_script_is( 'jquery', 'queue' ) ) {
297
+ wp_enqueue_script( 'jquery' );
298
+ }
299
+ ?>
300
+ <script>
301
+ if ( 'undefined' !== typeof jQuery ) {
302
+ jQuery( document ).ready( function ( $ ) {
303
+ /* Don't show the notice if we don't have a way to hide it (no js, no jQuery). */
304
+ $( document.querySelector( '.cff-critical-notice' ) ).removeClass( 'cff-critical-notice-hide' );
305
+ $( document.querySelector( '.cff-critical-notice-close' ) ).on( 'click', function ( e ) {
306
+ e.preventDefault();
307
+ $( this ).closest( '.cff-critical-notice' ).addClass( 'cff-critical-notice-hide' );
308
+ $.ajax( {
309
+ url: '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>',
310
+ method: 'POST',
311
+ data: {
312
+ action: 'cff_dismiss_critical_notice',
313
+ nonce: '<?php echo esc_js( wp_create_nonce( 'cff-critical-notice' ) ); ?>',
314
+ }
315
+ } );
316
+ } );
317
+ } );
318
+ }
319
+ </script>
320
+ <?php
321
+ }
322
+
323
+ /**
324
+ * Ajax handler to hide the critical notice.
325
+ */
326
+ public function dismiss_critical_notice() {
327
+
328
+ check_ajax_referer( 'cff-critical-notice', 'nonce' );
329
+
330
+ update_option( 'cff_dismiss_critical_notice', 1, false );
331
+
332
+ wp_die();
333
+
334
+ }
335
+
336
+ public function send_report_email() {
337
+ $options = get_option( 'cff_style_settings', array() );
338
+
339
+ $to_string = ! empty( $options['email_notification_addresses'] ) ? str_replace( ' ', '', $options['email_notification_addresses'] ) : get_option( 'admin_email', '' );
340
+
341
+ $to_array_raw = explode( ',', $to_string );
342
+ $to_array = array();
343
+
344
+ foreach ( $to_array_raw as $email ) {
345
+ if ( is_email( $email ) ) {
346
+ $to_array[] = $email;
347
+ }
348
+ }
349
+
350
+ if ( empty( $to_array ) ) {
351
+ return false;
352
+ }
353
+ $from_name = esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) );
354
+ $email_from = $from_name . ' <' . get_option( 'admin_email', $to_array[0] ) . '>';
355
+ $header_from = "From: " . $email_from;
356
+
357
+ $headers = array( 'Content-Type: text/html; charset=utf-8', $header_from );
358
+
359
+ $header_image = CFF_PLUGIN_URL . 'img/balloon-120.png';
360
+ $title = __( 'Custom Facebook Feed Report for ' . home_url() );
361
+ $link = admin_url( 'admin.php?page=cff-top');
362
+ //&tab=customize-advanced
363
+ $footer_link = admin_url('admin.php?page=cff-style&tab=misc&flag=emails');
364
+ $bold = __( 'There\'s an Issue with a Facebook Feed on Your Website', 'custom-facebook-feed' );
365
+ $details = '<p>' . __( 'A Custom Facebook Feed on your website is currently unable to connect to Facebook to retrieve new posts. Don\'t worry, your feed is still being displayed using a cached version, but is no longer able to display new posts.', 'custom-facebook-feed' ) . '</p>';
366
+ $details .= '<p>' . sprintf( __( 'This is caused by an issue with your Facebook account connecting to the Facebook API. For information on the exact issue and directions on how to resolve it, please visit the %sCustom Facebook Feed settings page%s on your website.', 'custom-facebook-feed' ), '<a href="' . esc_url( $link ) . '">', '</a>' ). '</p>';
367
+ $message_content = '<h6 style="padding:0;word-wrap:normal;font-family:\'Helvetica Neue\',Helvetica,Arial,sans-serif;font-weight:bold;line-height:130%;font-size: 16px;color:#444444;text-align:inherit;margin:0 0 20px 0;Margin:0 0 20px 0;">' . $bold . '</h6>' . $details;
368
+ include_once CFF_PLUGIN_DIR . 'class-cff-education.php';
369
+ $educator = new CFF_Education();
370
+ $dyk_message = $educator->dyk_display();
371
+ ob_start();
372
+ include CFF_PLUGIN_DIR . 'email.php';
373
+ $email_body = ob_get_contents();
374
+ ob_get_clean();
375
+ $sent = wp_mail( $to_array, $title, $email_body, $headers );
376
+
377
+ return $sent;
378
+ }
379
+
380
+ public function maybe_trigger_report_email_send() {
381
+ if ( ! $this->are_critical_errors() ) {
382
+ return;
383
+ }
384
+ $options = get_option('cff_style_settings');
385
+
386
+ if ( isset( $options['enable_email_report'] ) && empty( $options['enable_email_report'] ) ) {
387
+ return;
388
+ }
389
+
390
+ $this->send_report_email();
391
+ }
392
+
393
+ public function admin_error_notices() {
394
+ if ( isset( $_GET['page'] ) && in_array( $_GET['page'], array( 'cff-top', 'cff-style' )) ) {
395
+
396
+ $errors = $this->get_critical_errors();
397
+ if ( $this->are_critical_errors() && ! empty( $errors ) ) :
398
+ if ( isset( $errors['wp_remote_get'] ) ) {
399
+ $error = $errors['wp_remote_get'];
400
+ $error_message = $error['admin_message'];
401
+ $button = $error['backend_directions'];
402
+ $post_id = $error['post_id'];
403
+ $directions = '<p class="cff-error-directions">';
404
+ $directions .= $button;
405
+ $directions .= '<button data-url="'.get_the_permalink( $post_id ).'" class="cff-clear-errors-visit-page cff-space-left button button-secondary">' . __( 'View Feed and Retry', 'custom-facebook-feed' ) . '</button>';
406
+ $directions .= '</p>';
407
+ } elseif ( isset( $errors['api'] ) ) {
408
+ $error = $errors['api'];
409
+ $error_message = $error['admin_message'];
410
+ $button = $error['backend_directions'];
411
+ $post_id = $error['post_id'];
412
+ $directions = '<p class="cff-error-directions">';
413
+ $directions .= $button;
414
+ $directions .= '<button data-url="'.get_the_permalink( $post_id ).'" class="cff-clear-errors-visit-page cff-space-left button button-secondary">' . __( 'View Feed and Retry', 'custom-facebook-feed' ) . '</button>';
415
+ $directions .= '</p>';
416
+ } else {
417
+ $error = $errors['accesstoken'];
418
+
419
+ $tokens = array();
420
+ $post_id = false;
421
+ foreach ( $error as $token ) {
422
+ $tokens[] = $token['accesstoken'];
423
+ $post_id = $token['post_id'];
424
+ }
425
+ $error_message = sprintf( __( 'The access token %s is invalid or has expired.', 'custom-facebook-feed' ), implode( $tokens, ', ' ) );
426
+ $directions = '<p class="cff-error-directions">';
427
+ $directions .= '<button class="button button-primary cff-reconnect">' . __( 'Reconnect Your Account', 'custom-facebook-feed' ) . '</button>';
428
+ $directions .= '<button data-url="'.get_the_permalink( $post_id ).'" class="cff-clear-errors-visit-page cff-space-left button button-secondary">' . __( 'View Feed and Retry', 'custom-facebook-feed' ) . '</button>';
429
+ $directions .= '</p>';
430
+ }
431
+ ?>
432
+ <div class="notice notice-warning is-dismissible cff-admin-notice">
433
+ <p><strong><?php echo esc_html__( 'Custom Facebook Feed is encountering an error and your feeds may not be updating due to the following reasons:', 'custom-facebook-feed') ; ?></strong></p>
434
+
435
+ <?php echo $error_message; ?>
436
+
437
+ <?php echo $directions; ?>
438
+ </div>
439
+ <?php endif;
440
+ }
441
+
442
+ }
443
+
444
  }
class-cff-sitehealth.php CHANGED
@@ -1,82 +1,82 @@
1
- <?php
2
-
3
- class CFF_SiteHealth {
4
-
5
- /**
6
- * Indicates if current integration is allowed to load.
7
- *
8
- * @since 1.5.5
9
- *
10
- * @return bool
11
- */
12
- public function allow_load() {
13
-
14
- global $wp_version;
15
-
16
- return version_compare( $wp_version, '5.2', '>=' );
17
- }
18
-
19
- /**
20
- * Loads an integration.
21
- *
22
- * @since 1.5.5
23
- */
24
- public function load() {
25
-
26
- $this->hooks();
27
- }
28
-
29
- /**
30
- * Integration hooks.
31
- *
32
- * @since 1.5.5
33
- */
34
- protected function hooks() {
35
- add_filter( 'site_status_tests', array( $this, 'add_tests' ) );
36
- }
37
-
38
- /**
39
- * Add MonsterInsights WP Site Health tests.
40
- *
41
- * @param array $tests The current filters array.
42
- *
43
- * @return array
44
- */
45
- public function add_tests( $tests ) {
46
- $tests['direct']['cff_test_check_errors'] = array(
47
- 'label' => __( 'Custom Facebook Feed Errors', 'custom-facebook-feed' ),
48
- 'test' => array( $this, 'test_check_errors' )
49
- );
50
-
51
- return $tests;
52
- }
53
-
54
- /**
55
- * Checks if there are Instagram API Errors
56
- */
57
- public function test_check_errors() {
58
- $result = array(
59
- 'label' => __( 'Custom Facebook Feed has no critical errors', 'custom-facebook-feed' ),
60
- 'status' => 'good',
61
- 'badge' => array(
62
- 'label' => __( 'Custom Facebook Feed', 'custom-facebook-feed' ),
63
- 'color' => 'blue',
64
- ),
65
- 'description' => __( 'No critical errors have been detected.', 'custom-facebook-feed' ),
66
- 'test' => 'cff_test_check_errors',
67
- );
68
-
69
- global $cff_error_reporter;
70
-
71
-
72
- if ( $cff_error_reporter->are_critical_errors() ) {
73
- $link = admin_url( 'admin.php?page=cff-top' );
74
- $result['status'] = 'critical';
75
- $result['label'] = __( 'Your Custom Facebook Feed is experiencing an error.', 'custom-facebook-feed' );
76
- $result['description'] = sprintf( __( 'A critical issue has been detected with your Custom Facebook Feed. Visit the %sCustom Facebook Feed settings page%s to fix the issue.', 'custom-facebook-feed' ), '<a href="' . esc_url( $link ) . '">', '</a>' );
77
- }
78
-
79
-
80
- return $result;
81
- }
82
  }
1
+ <?php
2
+
3
+ class CFF_SiteHealth {
4
+
5
+ /**
6
+ * Indicates if current integration is allowed to load.
7
+ *
8
+ * @since 1.5.5
9
+ *
10
+ * @return bool
11
+ */
12
+ public function allow_load() {
13
+
14
+ global $wp_version;
15
+
16
+ return version_compare( $wp_version, '5.2', '>=' );
17
+ }
18
+
19
+ /**
20
+ * Loads an integration.
21
+ *
22
+ * @since 1.5.5
23
+ */
24
+ public function load() {
25
+
26
+ $this->hooks();
27
+ }
28
+
29
+ /**
30
+ * Integration hooks.
31
+ *
32
+ * @since 1.5.5
33
+ */
34
+ protected function hooks() {
35
+ add_filter( 'site_status_tests', array( $this, 'add_tests' ) );
36
+ }
37
+
38
+ /**
39
+ * Add MonsterInsights WP Site Health tests.
40
+ *
41
+ * @param array $tests The current filters array.
42
+ *
43
+ * @return array
44
+ */
45
+ public function add_tests( $tests ) {
46
+ $tests['direct']['cff_test_check_errors'] = array(
47
+ 'label' => __( 'Custom Facebook Feed Errors', 'custom-facebook-feed' ),
48
+ 'test' => array( $this, 'test_check_errors' )
49
+ );
50
+
51
+ return $tests;
52
+ }
53
+
54
+ /**
55
+ * Checks if there are Instagram API Errors
56
+ */
57
+ public function test_check_errors() {
58
+ $result = array(
59
+ 'label' => __( 'Custom Facebook Feed has no critical errors', 'custom-facebook-feed' ),
60
+ 'status' => 'good',
61
+ 'badge' => array(
62
+ 'label' => __( 'Custom Facebook Feed', 'custom-facebook-feed' ),
63
+ 'color' => 'blue',
64
+ ),
65
+ 'description' => __( 'No critical errors have been detected.', 'custom-facebook-feed' ),
66
+ 'test' => 'cff_test_check_errors',
67
+ );
68
+
69
+ global $cff_error_reporter;
70
+
71
+
72
+ if ( $cff_error_reporter->are_critical_errors() ) {
73
+ $link = admin_url( 'admin.php?page=cff-top' );
74
+ $result['status'] = 'critical';
75
+ $result['label'] = __( 'Your Custom Facebook Feed is experiencing an error.', 'custom-facebook-feed' );
76
+ $result['description'] = sprintf( __( 'A critical issue has been detected with your Custom Facebook Feed. Visit the %sCustom Facebook Feed settings page%s to fix the issue.', 'custom-facebook-feed' ), '<a href="' . esc_url( $link ) . '">', '</a>' );
77
+ }
78
+
79
+
80
+ return $result;
81
+ }
82
  }
css/cff-blocks.css CHANGED
@@ -1,3 +1,3 @@
1
- .cff-wrapper {
2
- pointer-events: none !important;
3
  }
1
+ .cff-wrapper {
2
+ pointer-events: none !important;
3
  }
custom-facebook-feed-admin.php CHANGED
@@ -140,7 +140,7 @@ function cff_settings_page() {
140
  if ( ! $lite_notice_dismissed ) :
141
  ?>
142
  <div id="cff-notice-bar" style="display:none">
143
- <span class="cff-notice-bar-message"><?php _e( 'You\'re using Custom Facebook Feed Lite. To unlock more features consider <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=WordPress&utm_campaign=facebookliteplugin&utm_medium=notice-bar" target="_blank" rel="noopener noreferrer">upgrading to Pro</a>.', 'custom-facebook-feed'); ?></span>
144
  <button type="button" class="dismiss" title="<?php _e( 'Dismiss this message.', 'custom-facebook-feed'); ?>" data-page="overview">
145
  </button>
146
  </div>
@@ -790,10 +790,10 @@ function cff_settings_page() {
790
  <div class="cff_quickstart">
791
  <h3><i class="fa fa-rocket" aria-hidden="true"></i>&nbsp; Display your feed</h3>
792
  <p>Copy and paste this shortcode directly into the page, post or widget where you'd like to display the feed: <input type="text" value="[custom-facebook-feed]" size="22" readonly="readonly" style="text-align: center;" onclick="this.focus();this.select()" title="To copy, click the field then press Ctrl + C (PC) or Cmd + C (Mac)."></p>
793
- <p>Find out how to display <a href="https://smashballoon.com/using-shortcode-options-customize-facebook-feeds/?utm_source=plugin-free&utm_campaign=cff" target="_blank"><b>multiple feeds</b></a>.</p>
794
  </div>
795
 
796
- <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_source=plugin-free&utm_campaign=cff" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png?2019' , __FILE__ ) ?>" /></a>
797
 
798
  <p class="cff_plugins_promo dashicons-before dashicons-admin-plugins"> <?php _e('Check out our other free plugins for <a href="https://wordpress.org/plugins/instagram-feed/" target="_blank">Instagram</a>, <a href="https://wordpress.org/plugins/custom-twitter-feeds/" target="_blank">Twitter</a>, and <a href="https://wordpress.org/plugins/feeds-for-youtube/" target="_blank">YouTube</a>.', 'custom-facebook-feed' ); ?></p>
799
 
@@ -814,12 +814,12 @@ function cff_settings_page() {
814
  <h3 style="padding-bottom: 10px;">Need help?</h3>
815
 
816
  <p>
817
- <span class="cff-support-title"><i class="fa fa-life-ring" aria-hidden="true"></i>&nbsp; <a href="https://smashballoon.com/custom-facebook-feed/docs/free/?utm_source=plugin-free&utm_campaign=cff" target="_blank"><?php _e('Setup Directions'); ?></a></span>
818
  <?php _e('A step-by-step guide on how to setup and use the plugin.'); ?>
819
  </p>
820
 
821
  <p>
822
- <span class="cff-support-title"><i class="fa fa-question-circle" aria-hidden="true"></i>&nbsp; <a href="https://smashballoon.com/custom-facebook-feed/faq/?utm_source=plugin-free&utm_campaign=cff" target="_blank"><?php _e('FAQs and Docs'); ?></a></span>
823
  <?php _e('View our expansive library of FAQs and documentation to help solve your problem as quickly as possible.'); ?>
824
  </p>
825
 
@@ -827,23 +827,24 @@ function cff_settings_page() {
827
 
828
  <ul class="cff-faq-col-1">
829
  <li><b>FAQs</b></li>
830
- <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/category/custom-facebook-feed/faq/" target="_blank">General Questions</a>'); ?></li>
831
- <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/category/custom-facebook-feed/getting-started/" target="_blank">Getting Started</a>'); ?></li>
832
- <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/category/custom-facebook-feed/troubleshooting/" target="_blank">Common Issues</a>'); ?></li>
833
- <li style="margin-top: 8px; font-size: 12px;"><a href="https://smashballoon.com/custom-facebook-feed/faq/?utm_source=plugin-free&utm_campaign=cff" target="_blank">See all<i class="fa fa-chevron-right" aria-hidden="true"></i></a></li>
 
834
  </ul>
835
 
836
  <ul>
837
  <li><b>Documentation</b></li>
838
- <li>&bull;&nbsp; <?php _e('<a href="http://smashballoon.com/custom-facebook-feed/docs/free/" target="_blank">Installation and Configuration</a>'); ?></li>
839
- <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/custom-facebook-feed/docs/shortcodes/" target="_blank">Shortcode Reference</a>', 'custom-facebook-feed'); ?></li>
840
- <li>&bull;&nbsp; <?php _e('<a href=https://smashballoon.com/category/custom-facebook-feed/customizations/snippets/" target="_blank">Custom CSS and JavaScript Snippets</a>'); ?></li>
841
- <li style="margin-top: 8px; font-size: 12px;"><a href="https://smashballoon.com/custom-facebook-feed/docs/?utm_source=plugin-free&utm_campaign=cff" target="_blank">See all<i class="fa fa-chevron-right" aria-hidden="true"></i></a></li>
842
  </ul>
843
  </div>
844
 
845
  <p>
846
- <span class="cff-support-title"><i class="fa fa-envelope" aria-hidden="true"></i>&nbsp; <a href="http://smashballoon.com/custom-facebook-feed/support/" target="_blank"><?php _e('Request Support'); ?></a></span>
847
  <?php _e('Still need help? Submit a ticket and one of our support experts will get back to you as soon as possible.<br /><b>Important:</b> Please include your <b>System Info</b> below with all support requests.'); ?>
848
  </p>
849
  </div>
@@ -1097,7 +1098,7 @@ if( isset( $api_response_json->data ) ){
1097
  } ?>
1098
 
1099
 
1100
- ## Cron Events: ##
1101
  <?php
1102
  $cron = _get_cron_array();
1103
  foreach ( $cron as $key => $data ) {
@@ -1116,6 +1117,19 @@ foreach ( $cron as $key => $data ) {
1116
  echo "\n\n";
1117
  }
1118
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
1119
 
1120
  ?>
1121
  </textarea>
@@ -2035,7 +2049,7 @@ function cff_style_page() {
2035
  if ( ! $lite_notice_dismissed ) :
2036
  ?>
2037
  <div id="cff-notice-bar" style="display:none">
2038
- <span class="cff-notice-bar-message"><?php _e( 'You\'re using Custom Facebook Feed Lite. To unlock more features consider <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=WordPress&utm_campaign=facebookliteplugin&utm_medium=notice-bar" target="_blank" rel="noopener noreferrer">upgrading to Pro</a>.', 'custom-facebook-feed'); ?></span>
2039
  <button type="button" class="dismiss" title="<?php _e( 'Dismiss this message.', 'custom-facebook-feed'); ?>" data-page="overview">
2040
  </button>
2041
  </div>
@@ -2169,7 +2183,7 @@ function cff_style_page() {
2169
  <h3><?php _e('Post Types', 'custom-facebook-feed'); ?></h3>
2170
  <tr valign="top">
2171
  <th scope="row"><?php _e('Only show these types of posts:', 'custom-facebook-feed'); ?><br />
2172
- <i style="color: #666; font-size: 11px;"><a href="https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff" target="_blank"><?php _e('Upgrade to Pro to enable post types, photos, videos and more', 'custom-facebook-feed'); ?></a></i></th>
2173
  <td>
2174
  <div>
2175
  <input name="cff_show_status_type" type="checkbox" id="cff_show_status_type" disabled checked />
@@ -2441,7 +2455,7 @@ function cff_style_page() {
2441
  <hr />
2442
 
2443
  <h3><?php _e('"Load More" button'); ?></h3>
2444
- <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff" target="_blank">Upgrade to Pro to enable the Load More button</a>
2445
  <p class="submit cff-expand-button">
2446
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
2447
  </p>
@@ -2485,7 +2499,7 @@ function cff_style_page() {
2485
  <hr />
2486
 
2487
  <h3><?php _e('Lightbox'); ?></h3>
2488
- <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff" target="_blank">Upgrade to Pro to enable the Lightbox</a>
2489
  <p class="submit cff-expand-button">
2490
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
2491
  </p>
@@ -2531,7 +2545,7 @@ function cff_style_page() {
2531
  <hr />
2532
 
2533
  <h3><?php _e('Filter Content by String'); ?></h3>
2534
- <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff" target="_blank">Upgrade to Pro to enable Filtering</a>
2535
  <p class="submit cff-expand-button">
2536
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
2537
  </p>
@@ -2570,7 +2584,7 @@ function cff_style_page() {
2570
  </div>
2571
 
2572
 
2573
- <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_source=plugin-free&utm_campaign=cff" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png?2019' , __FILE__ ) ?>" /></a>
2574
 
2575
  <?php } //End General tab ?>
2576
  <?php if( $cff_active_tab == 'post_layout' ) { //Start Post Layout tab ?>
@@ -2583,7 +2597,7 @@ function cff_style_page() {
2583
  <input type="hidden" name="<?php echo $style_post_layout_hidden_field_name; ?>" value="Y">
2584
  <br />
2585
  <h3><?php _e('Post Layouts', 'custom-facebook-feed'); ?></h3>
2586
- <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff" target="_blank"><?php _e('Upgrade to Pro to enable layouts', 'custom-facebook-feed'); ?></a>
2587
  <p class="submit cff-expand-button">
2588
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
2589
  </p>
@@ -2750,7 +2764,7 @@ function cff_style_page() {
2750
  </table>
2751
 
2752
  <?php submit_button(); ?>
2753
- <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_source=plugin-free&utm_campaign=cff" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png' , __FILE__ ) ?>" /></a>
2754
  <?php } //End Post Layout tab ?>
2755
  <?php if( $cff_active_tab == 'typography' ) { //Start Typography tab ?>
2756
 
@@ -3746,7 +3760,7 @@ function cff_style_page() {
3746
  <hr />
3747
 
3748
  <h3><?php _e('Likes, Shares and Comments Box'); ?></h3>
3749
- <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff" target="_blank">Upgrade to Pro to enable likes, shares and comments</a>
3750
  <p class="submit cff-expand-button">
3751
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
3752
  </p>
@@ -3825,7 +3839,7 @@ function cff_style_page() {
3825
  <?php submit_button(); ?>
3826
  </div>
3827
 
3828
- <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_source=plugin-free&utm_campaign=cff" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png' , __FILE__ ) ?>" /></a>
3829
 
3830
  <?php } //End Typography tab ?>
3831
  <?php if( $cff_active_tab == 'misc' ) { //Start Misc tab ?>
@@ -3847,7 +3861,7 @@ function cff_style_page() {
3847
  <tbody>
3848
  <tr valign="top">
3849
  <td style="padding-top: 0;">
3850
- <p style="padding-bottom: 10px;"><?php _e('Enter your own custom CSS in the box below', 'custom-facebook-feed'); ?> <i style="margin-left: 5px; font-size: 11px;"><a href="https://smashballoon.com/category/custom-facebook-feed/customizations/snippets/" target="_blank"><?php _e('See some examples', 'custom-facebook-feed'); ?></a></i></p>
3851
  <textarea name="cff_custom_css" id="cff_custom_css" style="width: 70%;" rows="7"><?php echo esc_textarea( stripslashes($cff_custom_css), 'custom-facebook-feed' ); ?></textarea>
3852
  </td>
3853
  </tr>
@@ -3858,7 +3872,7 @@ function cff_style_page() {
3858
  <tbody>
3859
  <tr valign="top">
3860
  <td style="padding-top: 0;">
3861
- <p style="padding-bottom: 10px;"><?php _e('Enter your own custom JavaScript/jQuery in the box below', 'custom-facebook-feed'); ?> <i style="margin-left: 5px; font-size: 11px;"><a href="https://smashballoon.com/category/custom-facebook-feed/customizations/snippets/" target="_blank"><?php _e('See some examples', 'custom-facebook-feed'); ?></a></i></p>
3862
  <textarea name="cff_custom_js" id="cff_custom_js" style="width: 70%;" rows="7"><?php echo esc_textarea( stripslashes($cff_custom_js), 'custom-facebook-feed' ); ?></textarea>
3863
  </td>
3864
  </tr>
@@ -3869,7 +3883,7 @@ function cff_style_page() {
3869
 
3870
  <hr />
3871
  <h3><?php _e('Media'); ?></h3>
3872
- <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff" target="_blank">Upgrade to Pro to enable Media options</a>
3873
  <p class="submit cff-expand-button">
3874
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
3875
  </p>
@@ -4098,7 +4112,7 @@ function cff_style_page() {
4098
  </table>
4099
 
4100
  <?php submit_button(); ?>
4101
- <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_source=plugin-free&utm_campaign=cff" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png' , __FILE__ ) ?>" /></a>
4102
  <?php } //End Misc tab ?>
4103
 
4104
 
@@ -4244,7 +4258,7 @@ function cff_style_page() {
4244
  </table>
4245
 
4246
  <?php submit_button(); ?>
4247
- <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_source=plugin-free&utm_campaign=cff" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png' , __FILE__ ) ?>" /></a>
4248
  <?php } //End Custom Text tab ?>
4249
 
4250
  </form>
@@ -4504,7 +4518,7 @@ function cff_notices_html() {
4504
  $dismiss_url = add_query_arg( 'cff_ignore_rating_notice_nag', '1' );
4505
  $later_url = add_query_arg( 'cff_ignore_rating_notice_nag', 'later' );
4506
  if ( $should_show_bfcm_discount ) {
4507
- $other_notice_html = '<p class="cff_other_notice">' . __( 'PS. We currently have a <a href="https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff&discount='.$cff_bfcm_discount_code.'" target="_blank"><b style="font-weight: 700;">Black Friday deal</b></a> for 60% off the Pro version!', 'custom-facebook-feed' ) . '</p>';
4508
 
4509
  $dismiss_url = add_query_arg( array(
4510
  'cff_ignore_rating_notice_nag' => '1',
@@ -4551,7 +4565,7 @@ function cff_notices_html() {
4551
  <div class='cff-notice-text'>
4552
  <p>" . __( '<b style="font-weight: 700;">Exclusive offer!</b> We don\'t run promotions very often, but for a limited time we\'re offering <b style="font-weight: 700;">60% off</b> our Pro version to all users of our free Smash Balloon Custom Facebook Feed plugin.', 'custom-facebook-feed' ) . "</p>
4553
  <p class='cff-links'>
4554
- <a class='cff_notice_dismiss cff_offer_btn' href='https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff&discount=facebookthankyou' target='_blank'><b>" . __( 'Get this offer', 'custom-facebook-feed' ) . "</b></a>
4555
  <a class='cff_notice_dismiss' style='margin-left: 5px;' href='" . esc_url( add_query_arg( 'cff_ignore_new_user_sale_notice', 'always' ) ) . "'>" . __( 'I\'m not interested', 'custom-facebook-feed' ) . "</a>
4556
 
4557
  </p>
@@ -4569,7 +4583,7 @@ function cff_notices_html() {
4569
  <div class='cff-notice-text'>
4570
  <p>" . __( '<b style="font-weight: 700;">Black Friday/Cyber Monday Deal!</b> Thank you for using the free Smash Balloon Custom Facebook Feed plugin. For a limited time, we\'re offering <b style="font-weight: 700;">60% off</b> the Pro version for all of our users.', 'custom-facebook-feed' ) . "</p>
4571
  <p class='cff-links'>
4572
- <a class='cff_notice_dismiss cff_offer_btn' href='https://smashballoon.com/custom-facebook-feed/?utm_source=plugin-free&utm_campaign=cff&discount=".$cff_bfcm_discount_code."' target='_blank'><b>" . __( 'Get this offer', 'custom-facebook-feed' ) . "</b></a>
4573
  <a class='cff_notice_dismiss' style='margin-left: 5px;' href='" .esc_url( add_query_arg( 'cff_ignore_bfcm_sale_notice', date( 'Y', $current_time ) ) ). "'>" . __( 'I\'m not interested', 'custom-facebook-feed' ) . "</a>
4574
  </p>
4575
  </div>
140
  if ( ! $lite_notice_dismissed ) :
141
  ?>
142
  <div id="cff-notice-bar" style="display:none">
143
+ <span class="cff-notice-bar-message"><?php _e( 'You\'re using Custom Facebook Feed Lite. To unlock more features consider <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=notices&utm_medium=lite" target="_blank" rel="noopener noreferrer">upgrading to Pro</a>.', 'custom-facebook-feed'); ?></span>
144
  <button type="button" class="dismiss" title="<?php _e( 'Dismiss this message.', 'custom-facebook-feed'); ?>" data-page="overview">
145
  </button>
146
  </div>
790
  <div class="cff_quickstart">
791
  <h3><i class="fa fa-rocket" aria-hidden="true"></i>&nbsp; Display your feed</h3>
792
  <p>Copy and paste this shortcode directly into the page, post or widget where you'd like to display the feed: <input type="text" value="[custom-facebook-feed]" size="22" readonly="readonly" style="text-align: center;" onclick="this.focus();this.select()" title="To copy, click the field then press Ctrl + C (PC) or Cmd + C (Mac)."></p>
793
+ <p>Find out how to display <a href="https://smashballoon.com/using-shortcode-options-customize-facebook-feeds/?utm_campaign=facebook-free&utm_source=settings&utm_medium=multiple" target="_blank"><b>multiple feeds</b></a>.</p>
794
  </div>
795
 
796
+ <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free&utm_source=footer&utm_medium=ad" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png?2019' , __FILE__ ) ?>" /></a>
797
 
798
  <p class="cff_plugins_promo dashicons-before dashicons-admin-plugins"> <?php _e('Check out our other free plugins for <a href="https://wordpress.org/plugins/instagram-feed/" target="_blank">Instagram</a>, <a href="https://wordpress.org/plugins/custom-twitter-feeds/" target="_blank">Twitter</a>, and <a href="https://wordpress.org/plugins/feeds-for-youtube/" target="_blank">YouTube</a>.', 'custom-facebook-feed' ); ?></p>
799
 
814
  <h3 style="padding-bottom: 10px;">Need help?</h3>
815
 
816
  <p>
817
+ <span class="cff-support-title"><i class="fa fa-life-ring" aria-hidden="true"></i>&nbsp; <a href="https://smashballoon.com/custom-facebook-feed/docs/free/?utm_campaign=facebook-free&utm_source=support&utm_medium=setup" target="_blank"><?php _e('Setup Directions'); ?></a></span>
818
  <?php _e('A step-by-step guide on how to setup and use the plugin.'); ?>
819
  </p>
820
 
821
  <p>
822
+ <span class="cff-support-title"><i class="fa fa-question-circle" aria-hidden="true"></i>&nbsp; <a href="https://smashballoon.com/custom-facebook-feed/faq/?utm_campaign=facebook-free&utm_source=support&utm_medium=faqs" target="_blank"><?php _e('FAQs and Docs'); ?></a></span>
823
  <?php _e('View our expansive library of FAQs and documentation to help solve your problem as quickly as possible.'); ?>
824
  </p>
825
 
827
 
828
  <ul class="cff-faq-col-1">
829
  <li><b>FAQs</b></li>
830
+ <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/category/custom-facebook-feed/faq/?utm_campaign=facebook-free&utm_source=support&utm_medium=general" target="_blank">General Questions</a>'); ?></li>
831
+ <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/category/custom-facebook-feed/getting-started/?utm_campaign=facebook-free&utm_source=support&utm_medium=setup" target="_blank">Getting Started</a>'); ?></li>
832
+ <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/category/custom-facebook-feed/troubleshooting/?utm_campaign=facebook-free&utm_source=support&utm_medium=issues" target="_blank">Common Issues</a>'); ?></li>
833
+ <li style="margin-top: 8px; font-size: 12px;"><a href="https://smashballoon.com/custom-facebook-feed/faq/?utm_campaign=facebook-free&utm_source=support&utm_medium=faqs" target="_blank">See all<i class="fa fa-chevron-right" aria-hidden="true"></i></a></li>
834
+
835
  </ul>
836
 
837
  <ul>
838
  <li><b>Documentation</b></li>
839
+ <li>&bull;&nbsp; <?php _e('<a href="http://smashballoon.com/custom-facebook-feed/docs/free/?utm_campaign=facebook-free&utm_source=support&utm_medium=setup" target="_blank">Installation and Configuration</a>'); ?></li>
840
+ <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/custom-facebook-feed/docs/shortcodes/?utm_campaign=facebook-free&utm_source=support&utm_medium=shortcode" target="_blank">Shortcode Reference</a>', 'custom-facebook-feed'); ?></li>
841
+ <li>&bull;&nbsp; <?php _e('<a href="https://smashballoon.com/snippets/?utm_campaign=facebook-free&utm_source=support&utm_medium=snippets" target="_blank">Custom CSS and JavaScript Snippets</a>'); ?></li>
842
+ <li style="margin-top: 8px; font-size: 12px;"><a href="https://smashballoon.com/custom-facebook-feed/docs/?utm_campaign=facebook-free&utm_source=support&utm_medium=docs" target="_blank">See all<i class="fa fa-chevron-right" aria-hidden="true"></i></a></li>
843
  </ul>
844
  </div>
845
 
846
  <p>
847
+ <span class="cff-support-title"><i class="fa fa-envelope" aria-hidden="true"></i>&nbsp; <a href="http://smashballoon.com/custom-facebook-feed/support/?utm_campaign=facebook-free&utm_source=support&utm_medium=support" target="_blank"><?php _e('Request Support'); ?></a></span>
848
  <?php _e('Still need help? Submit a ticket and one of our support experts will get back to you as soon as possible.<br /><b>Important:</b> Please include your <b>System Info</b> below with all support requests.'); ?>
849
  </p>
850
  </div>
1098
  } ?>
1099
 
1100
 
1101
+ ## CRON EVENTS: ##
1102
  <?php
1103
  $cron = _get_cron_array();
1104
  foreach ( $cron as $key => $data ) {
1117
  echo "\n\n";
1118
  }
1119
  }
1120
+ ?>
1121
+
1122
+ ## Error Log: ##
1123
+ <?php
1124
+ global $cff_error_reporter;
1125
+ $errors = $cff_error_reporter->get_errors();
1126
+ if ( ! empty( $errors ) ) :
1127
+ foreach ( $errors as $error ) :
1128
+ echo $error['admin_message']."\n";
1129
+ echo 'Feed with error: ' . esc_url( get_the_permalink( $error['post_id'] ) )."\n";
1130
+
1131
+ endforeach;
1132
+ endif;
1133
 
1134
  ?>
1135
  </textarea>
2049
  if ( ! $lite_notice_dismissed ) :
2050
  ?>
2051
  <div id="cff-notice-bar" style="display:none">
2052
+ <span class="cff-notice-bar-message"><?php _e( 'You\'re using Custom Facebook Feed Lite. To unlock more features consider <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=notices&utm_medium=lite" target="_blank" rel="noopener noreferrer">upgrading to Pro</a>.', 'custom-facebook-feed'); ?></span>
2053
  <button type="button" class="dismiss" title="<?php _e( 'Dismiss this message.', 'custom-facebook-feed'); ?>" data-page="overview">
2054
  </button>
2055
  </div>
2183
  <h3><?php _e('Post Types', 'custom-facebook-feed'); ?></h3>
2184
  <tr valign="top">
2185
  <th scope="row"><?php _e('Only show these types of posts:', 'custom-facebook-feed'); ?><br />
2186
+ <i style="color: #666; font-size: 11px;"><a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=settings&utm_medium=types" target="_blank"><?php _e('Upgrade to Pro to enable post types, photos, videos and more', 'custom-facebook-feed'); ?></a></i></th>
2187
  <td>
2188
  <div>
2189
  <input name="cff_show_status_type" type="checkbox" id="cff_show_status_type" disabled checked />
2455
  <hr />
2456
 
2457
  <h3><?php _e('"Load More" button'); ?></h3>
2458
+ <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=settings&utm_medium=loadmore" target="_blank">Upgrade to Pro to enable the Load More button</a>
2459
  <p class="submit cff-expand-button">
2460
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
2461
  </p>
2499
  <hr />
2500
 
2501
  <h3><?php _e('Lightbox'); ?></h3>
2502
+ <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=settings&utm_medium=lightbox" target="_blank">Upgrade to Pro to enable the Lightbox</a>
2503
  <p class="submit cff-expand-button">
2504
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
2505
  </p>
2545
  <hr />
2546
 
2547
  <h3><?php _e('Filter Content by String'); ?></h3>
2548
+ <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=settings&utm_medium=filtering" target="_blank">Upgrade to Pro to enable Filtering</a>
2549
  <p class="submit cff-expand-button">
2550
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
2551
  </p>
2584
  </div>
2585
 
2586
 
2587
+ <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free&utm_source=footer&utm_medium=ad" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png?2019' , __FILE__ ) ?>" /></a>
2588
 
2589
  <?php } //End General tab ?>
2590
  <?php if( $cff_active_tab == 'post_layout' ) { //Start Post Layout tab ?>
2597
  <input type="hidden" name="<?php echo $style_post_layout_hidden_field_name; ?>" value="Y">
2598
  <br />
2599
  <h3><?php _e('Post Layouts', 'custom-facebook-feed'); ?></h3>
2600
+ <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=settings&utm_medium=layouts" target="_blank"><?php _e('Upgrade to Pro to enable layouts', 'custom-facebook-feed'); ?></a>
2601
  <p class="submit cff-expand-button">
2602
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
2603
  </p>
2764
  </table>
2765
 
2766
  <?php submit_button(); ?>
2767
+ <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free&utm_source=footer&utm_medium=ad" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png' , __FILE__ ) ?>" /></a>
2768
  <?php } //End Post Layout tab ?>
2769
  <?php if( $cff_active_tab == 'typography' ) { //Start Typography tab ?>
2770
 
3760
  <hr />
3761
 
3762
  <h3><?php _e('Likes, Shares and Comments Box'); ?></h3>
3763
+ <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=settings&utm_medium=likesharescom" target="_blank">Upgrade to Pro to enable likes, shares and comments</a>
3764
  <p class="submit cff-expand-button">
3765
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
3766
  </p>
3839
  <?php submit_button(); ?>
3840
  </div>
3841
 
3842
+ <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free&utm_source=footer&utm_medium=ad" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png' , __FILE__ ) ?>" /></a>
3843
 
3844
  <?php } //End Typography tab ?>
3845
  <?php if( $cff_active_tab == 'misc' ) { //Start Misc tab ?>
3861
  <tbody>
3862
  <tr valign="top">
3863
  <td style="padding-top: 0;">
3864
+ <p style="padding-bottom: 10px;"><?php _e('Enter your own custom CSS in the box below', 'custom-facebook-feed'); ?> <i style="margin-left: 5px; font-size: 11px;"><a href="https://smashballoon.com/snippets/" target="_blank"><?php _e('See some examples', 'custom-facebook-feed'); ?></a></i></p>
3865
  <textarea name="cff_custom_css" id="cff_custom_css" style="width: 70%;" rows="7"><?php echo esc_textarea( stripslashes($cff_custom_css), 'custom-facebook-feed' ); ?></textarea>
3866
  </td>
3867
  </tr>
3872
  <tbody>
3873
  <tr valign="top">
3874
  <td style="padding-top: 0;">
3875
+ <p style="padding-bottom: 10px;"><?php _e('Enter your own custom JavaScript/jQuery in the box below', 'custom-facebook-feed'); ?> <i style="margin-left: 5px; font-size: 11px;"><a href="https://smashballoon.com/snippets/" target="_blank"><?php _e('See some examples', 'custom-facebook-feed'); ?></a></i></p>
3876
  <textarea name="cff_custom_js" id="cff_custom_js" style="width: 70%;" rows="7"><?php echo esc_textarea( stripslashes($cff_custom_js), 'custom-facebook-feed' ); ?></textarea>
3877
  </td>
3878
  </tr>
3883
 
3884
  <hr />
3885
  <h3><?php _e('Media'); ?></h3>
3886
+ <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=settings&utm_medium=media" target="_blank">Upgrade to Pro to enable Media options</a>
3887
  <p class="submit cff-expand-button">
3888
  <a href="javascript:void(0);" class="button"><b>+</b> Show Pro Options</a>
3889
  </p>
4112
  </table>
4113
 
4114
  <?php submit_button(); ?>
4115
+ <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free&utm_source=footer&utm_medium=ad" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png' , __FILE__ ) ?>" /></a>
4116
  <?php } //End Misc tab ?>
4117
 
4118
 
4258
  </table>
4259
 
4260
  <?php submit_button(); ?>
4261
+ <a href="https://smashballoon.com/custom-facebook-feed/demo/?utm_campaign=facebook-free&utm_source=footer&utm_medium=ad" target="_blank" class="cff-pro-notice"><img src="<?php echo plugins_url( 'img/pro.png' , __FILE__ ) ?>" /></a>
4262
  <?php } //End Custom Text tab ?>
4263
 
4264
  </form>
4518
  $dismiss_url = add_query_arg( 'cff_ignore_rating_notice_nag', '1' );
4519
  $later_url = add_query_arg( 'cff_ignore_rating_notice_nag', 'later' );
4520
  if ( $should_show_bfcm_discount ) {
4521
+ $other_notice_html = '<p class="cff_other_notice">' . __( 'PS. We currently have a <a href="https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=notices&utm_medium=rating&discount='.$cff_bfcm_discount_code.'" target="_blank"><b style="font-weight: 700;">Black Friday deal</b></a> for 60% off the Pro version!', 'custom-facebook-feed' ) . '</p>';
4522
 
4523
  $dismiss_url = add_query_arg( array(
4524
  'cff_ignore_rating_notice_nag' => '1',
4565
  <div class='cff-notice-text'>
4566
  <p>" . __( '<b style="font-weight: 700;">Exclusive offer!</b> We don\'t run promotions very often, but for a limited time we\'re offering <b style="font-weight: 700;">60% off</b> our Pro version to all users of our free Smash Balloon Custom Facebook Feed plugin.', 'custom-facebook-feed' ) . "</p>
4567
  <p class='cff-links'>
4568
+ <a class='cff_notice_dismiss cff_offer_btn' href='https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=notices&utm_medium=newuser&discount=facebookthankyou' target='_blank'><b>" . __( 'Get this offer', 'custom-facebook-feed' ) . "</b></a>
4569
  <a class='cff_notice_dismiss' style='margin-left: 5px;' href='" . esc_url( add_query_arg( 'cff_ignore_new_user_sale_notice', 'always' ) ) . "'>" . __( 'I\'m not interested', 'custom-facebook-feed' ) . "</a>
4570
 
4571
  </p>
4583
  <div class='cff-notice-text'>
4584
  <p>" . __( '<b style="font-weight: 700;">Black Friday/Cyber Monday Deal!</b> Thank you for using the free Smash Balloon Custom Facebook Feed plugin. For a limited time, we\'re offering <b style="font-weight: 700;">60% off</b> the Pro version for all of our users.', 'custom-facebook-feed' ) . "</p>
4585
  <p class='cff-links'>
4586
+ <a class='cff_notice_dismiss cff_offer_btn' href='https://smashballoon.com/custom-facebook-feed/?utm_campaign=facebook-free&utm_source=notices&utm_medium=bfcm&discount=".$cff_bfcm_discount_code."' target='_blank'><b>" . __( 'Get this offer', 'custom-facebook-feed' ) . "</b></a>
4587
  <a class='cff_notice_dismiss' style='margin-left: 5px;' href='" .esc_url( add_query_arg( 'cff_ignore_bfcm_sale_notice', date( 'Y', $current_time ) ) ). "'>" . __( 'I\'m not interested', 'custom-facebook-feed' ) . "</a>
4588
  </p>
4589
  </div>
custom-facebook-feed.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Smash Balloon Custom Facebook Feed
4
  Plugin URI: https://smashballoon.com/custom-facebook-feed
5
  Description: Add completely customizable Facebook feeds to your WordPress site
6
- Version: 2.14
7
  Author: Smash Balloon
8
  Author URI: http://smashballoon.com/
9
  License: GPLv2 or later
@@ -24,7 +24,7 @@ along with this program; if not, write to the Free Software
24
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
  */
26
 
27
- define('CFFVER', '2.14');
28
 
29
  // Db version.
30
  if ( ! defined( 'CFF_DBVERSION' ) ) {
@@ -2199,7 +2199,15 @@ function cff_log_wp_error( $response, $url ) {
2199
  if ( is_wp_error( $response ) ) {
2200
  global $cff_error_reporter;
2201
  delete_option( 'cff_dismiss_critical_notice' );
2202
- $admin_message = sprintf( __( 'Error connecting to %s.', 'custom-facebook-feed' ), $url );
 
 
 
 
 
 
 
 
2203
  $public_message =__( 'Unable to make remote requests to the Facebook API. Log in as an admin to view more details.', 'custom-facebook-feed' );
2204
  $frontend_directions = '<p class="cff-error-directions"><a href="https://smashballoon.com/custom-facebook-feed/docs/errors/" target="_blank" rel="noopener">' . __( 'Directions on How to Resolve This Issue', 'custom-facebook-feed' ) . '</a></p>';
2205
  $backend_directions = '<a class="button button-primary" href="https://smashballoon.com/custom-facebook-feed/docs/errors/" target="_blank" rel="noopener">' . __( 'Directions on How to Resolve This Issue', 'custom-facebook-feed' ) . '</a>';
@@ -2272,9 +2280,6 @@ function cff_log_fb_error( $response, $url ) {
2272
  }
2273
  //Get JSON object of feed data
2274
  function cff_fetchUrl($url){
2275
- //return '{}';
2276
- //$response = wp_remote_get('fff'.$url);
2277
- //$url = str_replace( '100178597731', '200178597732', $url );
2278
  $response = wp_remote_get( $url );
2279
 
2280
  if ( !cff_is_wp_error( $response ) ) {
@@ -2284,7 +2289,7 @@ function cff_fetchUrl($url){
2284
  global $cff_error_reporter;
2285
 
2286
  $cff_error_reporter->remove_error( 'api' );
2287
- $cff_error_reporter->remove_error( 'connection' );
2288
 
2289
  $feedData = apply_filters( 'cff_filter_api_data', $feedData );
2290
 
3
  Plugin Name: Smash Balloon Custom Facebook Feed
4
  Plugin URI: https://smashballoon.com/custom-facebook-feed
5
  Description: Add completely customizable Facebook feeds to your WordPress site
6
+ Version: 2.14.1
7
  Author: Smash Balloon
8
  Author URI: http://smashballoon.com/
9
  License: GPLv2 or later
24
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
  */
26
 
27
+ define('CFFVER', '2.14.1');
28
 
29
  // Db version.
30
  if ( ! defined( 'CFF_DBVERSION' ) ) {
2199
  if ( is_wp_error( $response ) ) {
2200
  global $cff_error_reporter;
2201
  delete_option( 'cff_dismiss_critical_notice' );
2202
+
2203
+ $admin_message_error = '';
2204
+ if ( isset( $response ) && isset( $response->errors ) ) {
2205
+ foreach ( $response->errors as $key => $item ) {
2206
+ $admin_message_error .= ' '.$key . ' - ' . $item[0];
2207
+ }
2208
+ }
2209
+
2210
+ $admin_message = __( 'Error connecting to the Facebook API:', 'custom-facebook-feed' ) . ' ' . $admin_message_error;
2211
  $public_message =__( 'Unable to make remote requests to the Facebook API. Log in as an admin to view more details.', 'custom-facebook-feed' );
2212
  $frontend_directions = '<p class="cff-error-directions"><a href="https://smashballoon.com/custom-facebook-feed/docs/errors/" target="_blank" rel="noopener">' . __( 'Directions on How to Resolve This Issue', 'custom-facebook-feed' ) . '</a></p>';
2213
  $backend_directions = '<a class="button button-primary" href="https://smashballoon.com/custom-facebook-feed/docs/errors/" target="_blank" rel="noopener">' . __( 'Directions on How to Resolve This Issue', 'custom-facebook-feed' ) . '</a>';
2280
  }
2281
  //Get JSON object of feed data
2282
  function cff_fetchUrl($url){
 
 
 
2283
  $response = wp_remote_get( $url );
2284
 
2285
  if ( !cff_is_wp_error( $response ) ) {
2289
  global $cff_error_reporter;
2290
 
2291
  $cff_error_reporter->remove_error( 'api' );
2292
+ $cff_error_reporter->remove_error( 'wp_remote_get' );
2293
 
2294
  $feedData = apply_filters( 'cff_filter_api_data', $feedData );
2295
 
email.php CHANGED
@@ -1,102 +1,102 @@
1
- <?php
2
- /**
3
- * Email header template.
4
- */
5
-
6
- if ( ! defined( 'ABSPATH' ) ) {
7
- exit;
8
- }
9
-
10
- ?>
11
-
12
- <!DOCTYPE html>
13
- <html lang="en">
14
- <head>
15
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
16
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
17
- <meta name="viewport" content="width=device-width">
18
- <title><?php echo esc_html( $title ); ?></title>
19
- </head>
20
- <body>
21
- <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" style="border-collapse:collapse;border-spacing:0px;vertical-align:top;min-width:100%;box-sizing:border-box;background-color:rgb(233,234,236);color:rgb(68,68,68);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;padding:0px;margin:0px;text-align:left;font-size:14px;line-height:140%;height:100%;width:100%"><tbody><tr style="padding:0px;vertical-align:top;text-align:left">
22
- <td align="center" valign="top" style="vertical-align:top;color:rgb(68,68,68);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;padding:0px;margin:0px;font-size:14px;line-height:140%;text-align:center;border-collapse:collapse">
23
- <table border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;border-spacing:0px;padding:0px;vertical-align:top;width:600px;margin:0px auto;text-align:inherit">
24
- <tbody><tr style="padding:0px;vertical-align:top;text-align:left">
25
- <td align="center" valign="middle" style="vertical-align:top;color:rgb(68,68,68);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;margin:0px;font-size:14px;line-height:140%;text-align:center;padding:30px 30px 22px;border-collapse:collapse">
26
- <?php if ( ! empty( $header_image ) ) : ?>
27
- <img src="<?php echo esc_url( $header_image ); ?>" alt="<?php echo esc_attr( get_bloginfo( 'name' ) ); ?>" />
28
- <?php endif; ?>
29
- </td>
30
- </tr>
31
- <tr style="padding:0px;vertical-align:top;text-align:left">
32
- <td align="left" valign="top" style="vertical-align:top;color:rgb(68,68,68);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;margin:0px;text-align:left;font-size:14px;line-height:140%;background-color:rgb(255,255,255);padding:60px 75px 45px;border-width:3px 1px 1px;border-style:solid;border-color:rgb(227, 71, 22) rgb(221,221,221) rgb(221,221,221);border-collapse:collapse">
33
-
34
- <table style="border-collapse:collapse;border-spacing:0px;padding:0px;vertical-align:top;text-align:left;width:100%"><tbody><tr style="padding:0px;vertical-align:top;text-align:left">
35
- <td style="vertical-align:top;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;padding:0px;margin:0px;text-align:left;font-size:14px;line-height:140%;color:rgb(119,119,119);border-collapse:collapse">
36
- <?php echo $message_content; ?>
37
-
38
- <table class="summary-info-table" style="border-collapse: collapse; border-spacing: 0; padding: 0; vertical-align: top; text-align: left; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; margin: 38px 0 0 0; Margin: 38px 0 0 0; font-size: 15px; border: 1px solid #dddddd; border-radius: 6px; display: block;">
39
- <tbody><tr style="padding: 0; vertical-align: top; text-align: left;">
40
- <td class="summary-info-content" style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; margin: 0; Margin: 0; text-align: left; font-size: 14px; mso-line-height-rule: exactly; line-height: 140%; color: #777777; padding: 25px 30px 30px 30px;">
41
- <table style="border-collapse: collapse; border-spacing: 0; padding: 0; vertical-align: top; text-align: left; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;">
42
- <tbody><tr style="padding: 0; vertical-align: top; text-align: left;">
43
- <td class="text-center" style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; Margin: 0; font-size: 14px; mso-line-height-rule: exactly; line-height: 140%; text-align: center; color: #777777;">
44
- <h6 style="padding: 0; word-wrap: normal; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: bold; mso-line-height-rule: exactly; line-height: 130%; font-size: 18px; color: #444444; text-align: inherit; margin: 0 0 20px 0; Margin: 0 0 20px 0;"><?php echo esc_html( $dyk_message['title'] ); ?></h6>
45
- </td>
46
- </tr>
47
- <tr style="padding: 0; vertical-align: top; text-align: left;">
48
- <td class="text-center" style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; Margin: 0; font-size: 14px; mso-line-height-rule: exactly; line-height: 140%; text-align: center; color: #777777;">
49
- <?php echo esc_html( $dyk_message['content'] ); ?>
50
- </td>
51
- </tr>
52
- </tbody></table>
53
- </td>
54
- </tr>
55
- <tr style="padding: 0; vertical-align: top; text-align: left;">
56
- <td class="summary-info-content button-container" style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; margin: 0; Margin: 0; text-align: left; font-size: 14px; mso-line-height-rule: exactly; line-height: 140%; color: #777777; padding: 0 30px 30px 30px;">
57
- <center style="width: 100%;">
58
- <table class="button rounded-button" style="border-collapse: collapse; border-spacing: 0; padding: 0; vertical-align: top; text-align: left; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; width: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; overflow: hidden;margin: auto;Margin: auto;"><tbody><tr style="padding: 0; vertical-align: top; text-align: left;">
59
- <td style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; Margin: 0; text-align: left; font-size: 14px; mso-line-height-rule: exactly; line-height: 100%; color: #777777;">
60
- <table style="border-collapse: collapse; border-spacing: 0; padding: 0; vertical-align: top; text-align: left; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;"><tbody><tr style="padding: 0; vertical-align: top; text-align: left;">
61
- <td style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; Margin: 0; font-size: 14px; text-align: center; color: #ffffff; background: rgb(227, 71, 22); border: 1px solid #c45e1b; border-bottom: 3px solid #c45e1b; mso-line-height-rule: exactly; line-height: 100%;">
62
- <a href="<?php echo esc_url( $dyk_message['more'] ); ?>" rel="noopener noreferrer" target="_blank" style="-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; margin: 0; Margin: 0; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-weight: bold; color: #ffffff; text-decoration: none; text-align: center; display: inline-block; border: 0 solid #c45e1b; mso-line-height-rule: exactly; line-height: 100%; padding: 17px 30px 15px 30px;">
63
- <?php echo esc_html( __( 'Learn More', 'custom-facebook-feeds' ) ); ?>
64
- </a>
65
- </td>
66
- </tr></tbody></table>
67
- </td>
68
- </tr></tbody></table>
69
- </center>
70
- </td>
71
- </tr>
72
- </tbody>
73
- </table>
74
- </td>
75
- </tr></tbody></table>
76
- </td>
77
- </tr>
78
- <tr style="padding:0px;vertical-align:top;text-align:left">
79
- <td align="center" valign="top" style="vertical-align:top;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;margin:0px;line-height:140%;padding:30px;color:rgb(114,119,124);font-size:12px;text-align:center;border-collapse:collapse">
80
- <?php
81
- /* translators: %s - link to a site. */
82
- esc_html_e( 'This is a courtesy email sent from the Smash Balloon Custom Facebook Feed plugin on your website to alert you when there is an issue with one of your Facebook feeds.', 'custom-facebook-feeds' );
83
- ?>
84
- </td>
85
- </tr>
86
- <tr style="padding:0px;vertical-align:top;text-align:left">
87
- <td align="center" valign="top" style="vertical-align:top;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;margin:0px;line-height:140%;padding:30px;color:rgb(114,119,124);font-size:12px;text-align:center;border-collapse:collapse">
88
- <?php
89
- printf( esc_html__( 'Sent from %s', 'custom-facebook-feeds' ), '<a href="' . esc_url( home_url() ) . '">' . esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) ) . '</a>' );
90
- ?>
91
- <span>&#8226;</span>
92
- <?php
93
- printf( esc_html__( '%sLog in and disable these emails%s', 'custom-facebook-feeds' ), '<a href="' . esc_url( $footer_link ) . '">', '</a>' );
94
- ?>
95
- </td>
96
- </tr>
97
- </tbody>
98
- </table>
99
- </td>
100
- </tr></tbody></table>
101
- </body>
102
- </html>
1
+ <?php
2
+ /**
3
+ * Email header template.
4
+ */
5
+
6
+ if ( ! defined( 'ABSPATH' ) ) {
7
+ exit;
8
+ }
9
+
10
+ ?>
11
+
12
+ <!DOCTYPE html>
13
+ <html lang="en">
14
+ <head>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
16
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
17
+ <meta name="viewport" content="width=device-width">
18
+ <title><?php echo esc_html( $title ); ?></title>
19
+ </head>
20
+ <body>
21
+ <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" style="border-collapse:collapse;border-spacing:0px;vertical-align:top;min-width:100%;box-sizing:border-box;background-color:rgb(233,234,236);color:rgb(68,68,68);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;padding:0px;margin:0px;text-align:left;font-size:14px;line-height:140%;height:100%;width:100%"><tbody><tr style="padding:0px;vertical-align:top;text-align:left">
22
+ <td align="center" valign="top" style="vertical-align:top;color:rgb(68,68,68);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;padding:0px;margin:0px;font-size:14px;line-height:140%;text-align:center;border-collapse:collapse">
23
+ <table border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;border-spacing:0px;padding:0px;vertical-align:top;width:600px;margin:0px auto;text-align:inherit">
24
+ <tbody><tr style="padding:0px;vertical-align:top;text-align:left">
25
+ <td align="center" valign="middle" style="vertical-align:top;color:rgb(68,68,68);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;margin:0px;font-size:14px;line-height:140%;text-align:center;padding:30px 30px 22px;border-collapse:collapse">
26
+ <?php if ( ! empty( $header_image ) ) : ?>
27
+ <img src="<?php echo esc_url( $header_image ); ?>" alt="<?php echo esc_attr( get_bloginfo( 'name' ) ); ?>" />
28
+ <?php endif; ?>
29
+ </td>
30
+ </tr>
31
+ <tr style="padding:0px;vertical-align:top;text-align:left">
32
+ <td align="left" valign="top" style="vertical-align:top;color:rgb(68,68,68);font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;margin:0px;text-align:left;font-size:14px;line-height:140%;background-color:rgb(255,255,255);padding:60px 75px 45px;border-width:3px 1px 1px;border-style:solid;border-color:rgb(227, 71, 22) rgb(221,221,221) rgb(221,221,221);border-collapse:collapse">
33
+
34
+ <table style="border-collapse:collapse;border-spacing:0px;padding:0px;vertical-align:top;text-align:left;width:100%"><tbody><tr style="padding:0px;vertical-align:top;text-align:left">
35
+ <td style="vertical-align:top;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;padding:0px;margin:0px;text-align:left;font-size:14px;line-height:140%;color:rgb(119,119,119);border-collapse:collapse">
36
+ <?php echo $message_content; ?>
37
+
38
+ <table class="summary-info-table" style="border-collapse: collapse; border-spacing: 0; padding: 0; vertical-align: top; text-align: left; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; margin: 38px 0 0 0; Margin: 38px 0 0 0; font-size: 15px; border: 1px solid #dddddd; border-radius: 6px; display: block;">
39
+ <tbody><tr style="padding: 0; vertical-align: top; text-align: left;">
40
+ <td class="summary-info-content" style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; margin: 0; Margin: 0; text-align: left; font-size: 14px; mso-line-height-rule: exactly; line-height: 140%; color: #777777; padding: 25px 30px 30px 30px;">
41
+ <table style="border-collapse: collapse; border-spacing: 0; padding: 0; vertical-align: top; text-align: left; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;">
42
+ <tbody><tr style="padding: 0; vertical-align: top; text-align: left;">
43
+ <td class="text-center" style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; Margin: 0; font-size: 14px; mso-line-height-rule: exactly; line-height: 140%; text-align: center; color: #777777;">
44
+ <h6 style="padding: 0; word-wrap: normal; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: bold; mso-line-height-rule: exactly; line-height: 130%; font-size: 18px; color: #444444; text-align: inherit; margin: 0 0 20px 0; Margin: 0 0 20px 0;"><?php echo esc_html( $dyk_message['title'] ); ?></h6>
45
+ </td>
46
+ </tr>
47
+ <tr style="padding: 0; vertical-align: top; text-align: left;">
48
+ <td class="text-center" style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; Margin: 0; font-size: 14px; mso-line-height-rule: exactly; line-height: 140%; text-align: center; color: #777777;">
49
+ <?php echo esc_html( $dyk_message['content'] ); ?>
50
+ </td>
51
+ </tr>
52
+ </tbody></table>
53
+ </td>
54
+ </tr>
55
+ <tr style="padding: 0; vertical-align: top; text-align: left;">
56
+ <td class="summary-info-content button-container" style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; margin: 0; Margin: 0; text-align: left; font-size: 14px; mso-line-height-rule: exactly; line-height: 140%; color: #777777; padding: 0 30px 30px 30px;">
57
+ <center style="width: 100%;">
58
+ <table class="button rounded-button" style="border-collapse: collapse; border-spacing: 0; padding: 0; vertical-align: top; text-align: left; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; width: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; overflow: hidden;margin: auto;Margin: auto;"><tbody><tr style="padding: 0; vertical-align: top; text-align: left;">
59
+ <td style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; Margin: 0; text-align: left; font-size: 14px; mso-line-height-rule: exactly; line-height: 100%; color: #777777;">
60
+ <table style="border-collapse: collapse; border-spacing: 0; padding: 0; vertical-align: top; text-align: left; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;"><tbody><tr style="padding: 0; vertical-align: top; text-align: left;">
61
+ <td style="word-wrap: break-word; -webkit-hyphens: auto; -moz-hyphens: auto; hyphens: auto; border-collapse: collapse !important; vertical-align: top; mso-table-lspace: 0pt; mso-table-rspace: 0pt; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; Margin: 0; font-size: 14px; text-align: center; color: #ffffff; background: rgb(227, 71, 22); border: 1px solid #c45e1b; border-bottom: 3px solid #c45e1b; mso-line-height-rule: exactly; line-height: 100%;">
62
+ <a href="<?php echo esc_url( $dyk_message['more'] ); ?>" rel="noopener noreferrer" target="_blank" style="-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; margin: 0; Margin: 0; font-family: Helvetica, Arial, sans-serif; font-size: 16px; font-weight: bold; color: #ffffff; text-decoration: none; text-align: center; display: inline-block; border: 0 solid #c45e1b; mso-line-height-rule: exactly; line-height: 100%; padding: 17px 30px 15px 30px;">
63
+ <?php echo esc_html( __( 'Learn More', 'custom-facebook-feeds' ) ); ?>
64
+ </a>
65
+ </td>
66
+ </tr></tbody></table>
67
+ </td>
68
+ </tr></tbody></table>
69
+ </center>
70
+ </td>
71
+ </tr>
72
+ </tbody>
73
+ </table>
74
+ </td>
75
+ </tr></tbody></table>
76
+ </td>
77
+ </tr>
78
+ <tr style="padding:0px;vertical-align:top;text-align:left">
79
+ <td align="center" valign="top" style="vertical-align:top;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;margin:0px;line-height:140%;padding:30px;color:rgb(114,119,124);font-size:12px;text-align:center;border-collapse:collapse">
80
+ <?php
81
+ /* translators: %s - link to a site. */
82
+ esc_html_e( 'This is a courtesy email sent from the Smash Balloon Custom Facebook Feed plugin on your website to alert you when there is an issue with one of your Facebook feeds.', 'custom-facebook-feeds' );
83
+ ?>
84
+ </td>
85
+ </tr>
86
+ <tr style="padding:0px;vertical-align:top;text-align:left">
87
+ <td align="center" valign="top" style="vertical-align:top;font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-weight:normal;margin:0px;line-height:140%;padding:30px;color:rgb(114,119,124);font-size:12px;text-align:center;border-collapse:collapse">
88
+ <?php
89
+ printf( esc_html__( 'Sent from %s', 'custom-facebook-feeds' ), '<a href="' . esc_url( home_url() ) . '">' . esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) ) . '</a>' );
90
+ ?>
91
+ <span>&#8226;</span>
92
+ <?php
93
+ printf( esc_html__( '%sLog in and disable these emails%s', 'custom-facebook-feeds' ), '<a href="' . esc_url( $footer_link ) . '">', '</a>' );
94
+ ?>
95
+ </td>
96
+ </tr>
97
+ </tbody>
98
+ </table>
99
+ </td>
100
+ </tr></tbody></table>
101
+ </body>
102
+ </html>
img/about/icon-full.svg CHANGED
File without changes
img/about/icon-none.svg CHANGED
File without changes
img/about/icon-partial.svg CHANGED
File without changes
img/about/plugin-mi.png CHANGED
File without changes
img/about/plugin-om.png CHANGED
File without changes
img/about/plugin-rp.png CHANGED
File without changes
img/about/plugin-smtp.png CHANGED
File without changes
img/about/plugin-wpforms.png CHANGED
File without changes
js/cff-blocks.js CHANGED
@@ -1,114 +1,117 @@
1
- "use strict";
2
- window.cffmetatrans = false;
3
- (function () {
4
- var _wp = wp,
5
- _wp$serverSideRender = _wp.serverSideRender,
6
- createElement = wp.element.createElement,
7
- ServerSideRender = _wp$serverSideRender === void 0 ? wp.components.ServerSideRender : _wp$serverSideRender,
8
- _ref = wp.blockEditor || wp.editor,
9
- InspectorControls = _ref.InspectorControls,
10
- _wp$components = wp.components,
11
- TextareaControl = _wp$components.TextareaControl,
12
- Button = _wp$components.Button,
13
- PanelBody = _wp$components.PanelBody,
14
- Placeholder = _wp$components.Placeholder,
15
- registerBlockType = wp.blocks.registerBlockType;
16
-
17
- var cffIcon = createElement('svg', {
18
- width: 20,
19
- height: 20,
20
- viewBox: '0 0 448 512',
21
- className: 'dashicon'
22
- }, createElement('path', {
23
- fill: 'currentColor',
24
- d: 'M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z'
25
- }));
26
-
27
- registerBlockType('cff/cff-feed-block', {
28
- title: 'Custom Facebook Feed',
29
- icon: cffIcon,
30
- category: 'widgets',
31
- attributes: {
32
- noNewChanges: {
33
- type: 'boolean',
34
- },
35
- shortcodeSettings: {
36
- type: 'string',
37
- }
38
- },
39
- edit: function edit(props) {
40
- var _props = props,
41
- setAttributes = _props.setAttributes,
42
- _props$attributes = _props.attributes,
43
- _props$attributes$sho = _props$attributes.shortcodeSettings,
44
- shortcodeSettings = _props$attributes$sho === void 0 ? cff_block_editor.shortcodeSettings : _props$attributes$sho,
45
- _props$attributes$cli = _props$attributes.noNewChanges,
46
- noNewChanges = _props$attributes$cli === void 0 ? true : _props$attributes$cli;
47
-
48
- function setState(shortcodeSettingsContent) {
49
- setAttributes({
50
- noNewChanges: false,
51
- shortcodeSettings: shortcodeSettingsContent
52
- })
53
- }
54
-
55
- function previewClick(content) {
56
- setAttributes({
57
- noNewChanges: true,
58
- })
59
- }
60
- function afterRender() {
61
- var executed = false;
62
- // no way to run a script after AJAX call to get feed so we just try to execute it on a few intervals
63
- setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},1000);
64
- setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},2000);
65
- setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},3000);
66
- setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},5000);
67
- setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},10000);
68
- }
69
-
70
- var jsx = [React.createElement(InspectorControls, {
71
- key: "cff-gutenberg-setting-selector-inspector-controls"
72
- }, React.createElement(PanelBody, {
73
- title: cff_block_editor.i18n.addSettings
74
- }, React.createElement(TextareaControl, {
75
- key: "cff-gutenberg-settings",
76
- className: "cff-gutenberg-settings",
77
- label: cff_block_editor.i18n.shortcodeSettings,
78
- help: cff_block_editor.i18n.example + ": 'id=\"smashballoon\" showheader=\"true\"'",
79
- value: shortcodeSettings,
80
- onChange: setState
81
- }), React.createElement(Button, {
82
- key: "cff-gutenberg-preview",
83
- className: "cff-gutenberg-preview",
84
- onClick: previewClick,
85
- isDefault: true
86
- }, cff_block_editor.i18n.preview)))];
87
-
88
- if (noNewChanges) {
89
- afterRender();
90
- jsx.push(React.createElement(ServerSideRender, {
91
- key: "custom-facebook-feeds/custom-facebook-feeds",
92
- block: "cff/cff-feed-block",
93
- attributes: props.attributes,
94
- }));
95
- } else {
96
- props.attributes.noNewChanges = false;
97
- jsx.push(React.createElement(Placeholder, {
98
- key: "cff-gutenberg-setting-selector-select-wrap",
99
- className: "cff-gutenberg-setting-selector-select-wrap"
100
- }, React.createElement(Button, {
101
- key: "cff-gutenberg-preview",
102
- className: "cff-gutenberg-preview",
103
- onClick: previewClick,
104
- isDefault: true
105
- }, cff_block_editor.i18n.preview)));
106
- }
107
-
108
- return jsx;
109
- },
110
- save: function save() {
111
- return null;
112
- }
113
- });
 
 
 
114
  })();
1
+ "use strict";
2
+ window.cffmetatrans = false;
3
+ (function () {
4
+ var _wp = wp,
5
+ _wp$serverSideRender = _wp.serverSideRender,
6
+ createElement = wp.element.createElement,
7
+ ServerSideRender = _wp$serverSideRender === void 0 ? wp.components.ServerSideRender : _wp$serverSideRender,
8
+ _ref = wp.blockEditor || wp.editor,
9
+ InspectorControls = _ref.InspectorControls,
10
+ _wp$components = wp.components,
11
+ TextareaControl = _wp$components.TextareaControl,
12
+ Button = _wp$components.Button,
13
+ PanelBody = _wp$components.PanelBody,
14
+ Placeholder = _wp$components.Placeholder,
15
+ registerBlockType = wp.blocks.registerBlockType;
16
+
17
+ var cffIcon = createElement('svg', {
18
+ width: 20,
19
+ height: 20,
20
+ viewBox: '0 0 448 512',
21
+ className: 'dashicon'
22
+ }, createElement('path', {
23
+ fill: 'currentColor',
24
+ d: 'M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z'
25
+ }));
26
+
27
+ registerBlockType('cff/cff-feed-block', {
28
+ title: 'Custom Facebook Feed',
29
+ icon: cffIcon,
30
+ category: 'widgets',
31
+ attributes: {
32
+ noNewChanges: {
33
+ type: 'boolean',
34
+ },
35
+ shortcodeSettings: {
36
+ type: 'string',
37
+ },
38
+ executed: {
39
+ type: 'boolean'
40
+ }
41
+ },
42
+ edit: function edit(props) {
43
+ var _props = props,
44
+ setAttributes = _props.setAttributes,
45
+ _props$attributes = _props.attributes,
46
+ _props$attributes$sho = _props$attributes.shortcodeSettings,
47
+ shortcodeSettings = _props$attributes$sho === void 0 ? cff_block_editor.shortcodeSettings : _props$attributes$sho,
48
+ _props$attributes$cli = _props$attributes.noNewChanges,
49
+ noNewChanges = _props$attributes$cli === void 0 ? true : _props$attributes$cli;
50
+
51
+ function setState(shortcodeSettingsContent) {
52
+ setAttributes({
53
+ noNewChanges: false,
54
+ shortcodeSettings: shortcodeSettingsContent
55
+ })
56
+ }
57
+
58
+ function previewClick(content) {
59
+ setAttributes({
60
+ noNewChanges: true,
61
+ })
62
+ }
63
+ function afterRender() {
64
+ var executed = false;
65
+ // no way to run a script after AJAX call to get feed so we just try to execute it on a few intervals
66
+ setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},1000);
67
+ setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},2000);
68
+ setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},3000);
69
+ setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},5000);
70
+ setTimeout(function() { if (typeof cff_init !== 'undefined' && !executed) {executed = true;cff_init();}},10000);
71
+ }
72
+
73
+ var jsx = [React.createElement(InspectorControls, {
74
+ key: "cff-gutenberg-setting-selector-inspector-controls"
75
+ }, React.createElement(PanelBody, {
76
+ title: cff_block_editor.i18n.addSettings
77
+ }, React.createElement(TextareaControl, {
78
+ key: "cff-gutenberg-settings",
79
+ className: "cff-gutenberg-settings",
80
+ label: cff_block_editor.i18n.shortcodeSettings,
81
+ help: cff_block_editor.i18n.example + ": 'id=\"smashballoon\" showheader=\"true\"'",
82
+ value: shortcodeSettings,
83
+ onChange: setState
84
+ }), React.createElement(Button, {
85
+ key: "cff-gutenberg-preview",
86
+ className: "cff-gutenberg-preview",
87
+ onClick: previewClick,
88
+ isDefault: true
89
+ }, cff_block_editor.i18n.preview)))];
90
+
91
+ if (noNewChanges) {
92
+ afterRender();
93
+ jsx.push(React.createElement(ServerSideRender, {
94
+ key: "custom-facebook-feeds/custom-facebook-feeds",
95
+ block: "cff/cff-feed-block",
96
+ attributes: props.attributes,
97
+ }));
98
+ } else {
99
+ props.attributes.noNewChanges = false;
100
+ jsx.push(React.createElement(Placeholder, {
101
+ key: "cff-gutenberg-setting-selector-select-wrap",
102
+ className: "cff-gutenberg-setting-selector-select-wrap"
103
+ }, React.createElement(Button, {
104
+ key: "cff-gutenberg-preview",
105
+ className: "cff-gutenberg-preview",
106
+ onClick: previewClick,
107
+ isDefault: true
108
+ }, cff_block_editor.i18n.preview)));
109
+ }
110
+
111
+ return jsx;
112
+ },
113
+ save: function save() {
114
+ return null;
115
+ }
116
+ });
117
  })();
js/cff-scripts.min.js CHANGED
@@ -1,63 +1,63 @@
1
- var cff_js_exists=(typeof cff_js_exists!=='undefined')?!0:!1;if(!cff_js_exists){if(jQuery('#cff.cff-masonry-js').length){!function(a){function b(){}
2
- function c(a){function c(b){b.prototype.option||(b.prototype.option=function(b){a.isPlainObject(b)&&(this.options=a.extend(!0,this.options,b))})}
3
- function e(b,c){a.fn[b]=function(e){if("string"==typeof e){for(var g=d.call(arguments,1),h=0,i=this.length;i>h;h++){var j=this[h],k=a.data(j,b);if(k)if(a.isFunction(k[e])&&"_"!==e.charAt(0)){var l=k[e].apply(k,g);if(void 0!==l)return l}else f("no such method '"+e+"' for "+b+" instance");else f("cannot call methods on "+b+" prior to initialization; attempted to call '"+e+"'")}
4
- return this}
5
- return this.each(function(){var d=a.data(this,b);d?(d.option(e),d._init()):(d=new c(this,e),a.data(this,b,d))})}}
6
- if(a){var f="undefined"==typeof console?b:function(a){console.error(a)};return a.bridget=function(a,b){c(b),e(a,b)},a.bridget}}
7
- var d=Array.prototype.slice;"function"==typeof define&&define.amd?define("jquery-bridget/jquery.bridget",["jquery"],c):c("object"==typeof exports?require("jquery"):a.jQuery)}(window),function(a){function b(b){var c=a.event;return c.target=c.target||c.srcElement||b,c}
8
- var c=document.documentElement,d=function(){};c.addEventListener?d=function(a,b,c){a.addEventListener(b,c,!1)}:c.attachEvent&&(d=function(a,c,d){a[c+d]=d.handleEvent?function(){var c=b(a);d.handleEvent.call(d,c)}:function(){var c=b(a);d.call(a,c)},a.attachEvent("on"+c,a[c+d])});var e=function(){};c.removeEventListener?e=function(a,b,c){a.removeEventListener(b,c,!1)}:c.detachEvent&&(e=function(a,b,c){a.detachEvent("on"+b,a[b+c]);try{delete a[b+c]}catch(d){a[b+c]=void 0}});var f={bind:d,unbind:e};"function"==typeof define&&define.amd?define("eventie/eventie",f):"object"==typeof exports?module.exports=f:a.eventie=f}(window),function(){function a(){}
9
- function b(a,b){for(var c=a.length;c--;)if(a[c].listener===b)return c;return-1}
10
- function c(a){return function(){return this[a].apply(this,arguments)}}
11
- var d=a.prototype,e=this,f=e.EventEmitter;d.getListeners=function(a){var b,c,d=this._getEvents();if(a instanceof RegExp){b={};for(c in d)d.hasOwnProperty(c)&&a.test(c)&&(b[c]=d[c])}else b=d[a]||(d[a]=[]);return b},d.flattenListeners=function(a){var b,c=[];for(b=0;b<a.length;b+=1)c.push(a[b].listener);return c},d.getListenersAsObject=function(a){var b,c=this.getListeners(a);return c instanceof Array&&(b={},b[a]=c),b||c},d.addListener=function(a,c){var d,e=this.getListenersAsObject(a),f="object"==typeof c;for(d in e)e.hasOwnProperty(d)&&-1===b(e[d],c)&&e[d].push(f?c:{listener:c,once:!1});return this},d.on=c("addListener"),d.addOnceListener=function(a,b){return this.addListener(a,{listener:b,once:!0})},d.once=c("addOnceListener"),d.defineEvent=function(a){return this.getListeners(a),this},d.defineEvents=function(a){for(var b=0;b<a.length;b+=1)this.defineEvent(a[b]);return this},d.removeListener=function(a,c){var d,e,f=this.getListenersAsObject(a);for(e in f)f.hasOwnProperty(e)&&(d=b(f[e],c),-1!==d&&f[e].splice(d,1));return this},d.off=c("removeListener"),d.addListeners=function(a,b){return this.manipulateListeners(!1,a,b)},d.removeListeners=function(a,b){return this.manipulateListeners(!0,a,b)},d.manipulateListeners=function(a,b,c){var d,e,f=a?this.removeListener:this.addListener,g=a?this.removeListeners:this.addListeners;if("object"!=typeof b||b instanceof RegExp)for(d=c.length;d--;)f.call(this,b,c[d]);else for(d in b)b.hasOwnProperty(d)&&(e=b[d])&&("function"==typeof e?f.call(this,d,e):g.call(this,d,e));return this},d.removeEvent=function(a){var b,c=typeof a,d=this._getEvents();if("string"===c)delete d[a];else if(a instanceof RegExp)for(b in d)d.hasOwnProperty(b)&&a.test(b)&&delete d[b];else delete this._events;return this},d.removeAllListeners=c("removeEvent"),d.emitEvent=function(a,b){var c,d,e,f,g=this.getListenersAsObject(a);for(e in g)if(g.hasOwnProperty(e))for(d=g[e].length;d--;)c=g[e][d],c.once===!0&&this.removeListener(a,c.listener),f=c.listener.apply(this,b||[]),f===this._getOnceReturnValue()&&this.removeListener(a,c.listener);return this},d.trigger=c("emitEvent"),d.emit=function(a){var b=Array.prototype.slice.call(arguments,1);return this.emitEvent(a,b)},d.setOnceReturnValue=function(a){return this._onceReturnValue=a,this},d._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},d._getEvents=function(){return this._events||(this._events={})},a.noConflict=function(){return e.EventEmitter=f,a},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return a}):"object"==typeof module&&module.exports?module.exports=a:e.EventEmitter=a}.call(this),function(a){function b(a){if(a){if("string"==typeof d[a])return a;a=a.charAt(0).toUpperCase()+a.slice(1);for(var b,e=0,f=c.length;f>e;e++)if(b=c[e]+a,"string"==typeof d[b])return b}}
12
- var c="Webkit Moz ms Ms O".split(" "),d=document.documentElement.style;"function"==typeof define&&define.amd?define("get-style-property/get-style-property",[],function(){return b}):"object"==typeof exports?module.exports=b:a.getStyleProperty=b}(window),function(a){function b(a){var b=parseFloat(a),c=-1===a.indexOf("%")&&!isNaN(b);return c&&b}
13
- function c(){}
14
- function d(){for(var a={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},b=0,c=g.length;c>b;b++){var d=g[b];a[d]=0}
15
- return a}
16
- function e(c){function e(){if(!m){m=!0;var d=a.getComputedStyle;if(j=function(){var a=d?function(a){return d(a,null)}:function(a){return a.currentStyle};return function(b){var c=a(b);return c||f("Style returned "+c+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),c}}(),k=c("boxSizing")){var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style[k]="border-box";var g=document.body||document.documentElement;g.appendChild(e);var h=j(e);l=200===b(h.width),g.removeChild(e)}}}
17
- function h(a){if(e(),"string"==typeof a&&(a=document.querySelector(a)),a&&"object"==typeof a&&a.nodeType){var c=j(a);if("none"===c.display)return d();var f={};f.width=a.offsetWidth,f.height=a.offsetHeight;for(var h=f.isBorderBox=!(!k||!c[k]||"border-box"!==c[k]),m=0,n=g.length;n>m;m++){var o=g[m],p=c[o];p=i(a,p);var q=parseFloat(p);f[o]=isNaN(q)?0:q}
18
- var r=f.paddingLeft+f.paddingRight,s=f.paddingTop+f.paddingBottom,t=f.marginLeft+f.marginRight,u=f.marginTop+f.marginBottom,v=f.borderLeftWidth+f.borderRightWidth,w=f.borderTopWidth+f.borderBottomWidth,x=h&&l,y=b(c.width);y!==!1&&(f.width=y+(x?0:r+v));var z=b(c.height);return z!==!1&&(f.height=z+(x?0:s+w)),f.innerWidth=f.width-(r+v),f.innerHeight=f.height-(s+w),f.outerWidth=f.width+t,f.outerHeight=f.height+u,f}}
19
- function i(b,c){if(a.getComputedStyle||-1===c.indexOf("%"))return c;var d=b.style,e=d.left,f=b.runtimeStyle,g=f&&f.left;return g&&(f.left=b.currentStyle.left),d.left=c,c=d.pixelLeft,d.left=e,g&&(f.left=g),c}
20
- var j,k,l,m=!1;return h}
21
- var f="undefined"==typeof console?c:function(a){console.error(a)},g=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"];"function"==typeof define&&define.amd?define("get-size/get-size",["get-style-property/get-style-property"],e):"object"==typeof exports?module.exports=e(require("desandro-get-style-property")):a.getSize=e(a.getStyleProperty)}(window),function(a){function b(a){"function"==typeof a&&(b.isReady?a():g.push(a))}
22
- function c(a){var c="readystatechange"===a.type&&"complete"!==f.readyState;b.isReady||c||d()}
23
- function d(){b.isReady=!0;for(var a=0,c=g.length;c>a;a++){var d=g[a];d()}}
24
- function e(e){return"complete"===f.readyState?d():(e.bind(f,"DOMContentLoaded",c),e.bind(f,"readystatechange",c),e.bind(a,"load",c)),b}
25
- var f=a.document,g=[];b.isReady=!1,"function"==typeof define&&define.amd?define("doc-ready/doc-ready",["eventie/eventie"],e):"object"==typeof exports?module.exports=e(require("eventie")):a.docReady=e(a.eventie)}(window),function(a){function b(a,b){return a[g](b)}
26
- function c(a){if(!a.parentNode){var b=document.createDocumentFragment();b.appendChild(a)}}
27
- function d(a,b){c(a);for(var d=a.parentNode.querySelectorAll(b),e=0,f=d.length;f>e;e++)if(d[e]===a)return!0;return!1}
28
- function e(a,d){return c(a),b(a,d)}
29
- var f,g=function(){if(a.matches)return"matches";if(a.matchesSelector)return"matchesSelector";for(var b=["webkit","moz","ms","o"],c=0,d=b.length;d>c;c++){var e=b[c],f=e+"MatchesSelector";if(a[f])return f}}();if(g){var h=document.createElement("div"),i=b(h,"div");f=i?b:e}else f=d;"function"==typeof define&&define.amd?define("matches-selector/matches-selector",[],function(){return f}):"object"==typeof exports?module.exports=f:window.matchesSelector=f}(Element.prototype),function(a,b){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["doc-ready/doc-ready","matches-selector/matches-selector"],function(c,d){return b(a,c,d)}):"object"==typeof exports?module.exports=b(a,require("doc-ready"),require("desandro-matches-selector")):a.fizzyUIUtils=b(a,a.docReady,a.matchesSelector)}(window,function(a,b,c){var d={};d.extend=function(a,b){for(var c in b)a[c]=b[c];return a},d.modulo=function(a,b){return(a%b+b)%b};var e=Object.prototype.toString;d.isArray=function(a){return"[object Array]"==e.call(a)},d.makeArray=function(a){var b=[];if(d.isArray(a))b=a;else if(a&&"number"==typeof a.length)for(var c=0,e=a.length;e>c;c++)b.push(a[c]);else b.push(a);return b},d.indexOf=Array.prototype.indexOf?function(a,b){return a.indexOf(b)}:function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},d.removeFrom=function(a,b){var c=d.indexOf(a,b);-1!=c&&a.splice(c,1)},d.isElement="function"==typeof HTMLElement||"object"==typeof HTMLElement?function(a){return a instanceof HTMLElement}:function(a){return a&&"object"==typeof a&&1==a.nodeType&&"string"==typeof a.nodeName},d.setText=function(){function a(a,c){b=b||(void 0!==document.documentElement.textContent?"textContent":"innerText"),a[b]=c}
30
- var b;return a}(),d.getParent=function(a,b){for(;a!=document.body;)if(a=a.parentNode,c(a,b))return a},d.getQueryElement=function(a){return"string"==typeof a?document.querySelector(a):a},d.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},d.filterFindElements=function(a,b){a=d.makeArray(a);for(var e=[],f=0,g=a.length;g>f;f++){var h=a[f];if(d.isElement(h))if(b){c(h,b)&&e.push(h);for(var i=h.querySelectorAll(b),j=0,k=i.length;k>j;j++)e.push(i[j])}else e.push(h)}
31
- return e},d.debounceMethod=function(a,b,c){var d=a.prototype[b],e=b+"Timeout";a.prototype[b]=function(){var a=this[e];a&&clearTimeout(a);var b=arguments,f=this;this[e]=setTimeout(function(){d.apply(f,b),delete f[e]},c||100)}},d.toDashed=function(a){return a.replace(/(.)([A-Z])/g,function(a,b,c){return b+"-"+c}).toLowerCase()};var f=a.console;return d.htmlInit=function(c,e){b(function(){for(var b=d.toDashed(e),g=document.querySelectorAll(".js-"+b),h="data-"+b+"-options",i=0,j=g.length;j>i;i++){var k,l=g[i],m=l.getAttribute(h);try{k=m&&JSON.parse(m)}catch(n){f&&f.error("Error parsing "+h+" on "+l.nodeName.toLowerCase()+(l.id?"#"+l.id:"")+": "+n);continue}
32
- var o=new c(l,k),p=a.jQuery;p&&p.data(l,e,o)}})},d}),function(a,b){"function"==typeof define&&define.amd?define("outlayer/item",["eventEmitter/EventEmitter","get-size/get-size","get-style-property/get-style-property","fizzy-ui-utils/utils"],function(c,d,e,f){return b(a,c,d,e,f)}):"object"==typeof exports?module.exports=b(a,require("wolfy87-eventemitter"),require("get-size"),require("desandro-get-style-property"),require("fizzy-ui-utils")):(a.Outlayer={},a.Outlayer.Item=b(a,a.EventEmitter,a.getSize,a.getStyleProperty,a.fizzyUIUtils))}(window,function(a,b,c,d,e){function f(a){for(var b in a)return!1;return b=null,!0}
33
- function g(a,b){a&&(this.element=a,this.layout=b,this.position={x:0,y:0},this._create())}
34
- var h=a.getComputedStyle,i=h?function(a){return h(a,null)}:function(a){return a.currentStyle},j=d("transition"),k=d("transform"),l=j&&k,m=!!d("perspective"),n={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend",transition:"transitionend"}[j],o=["transform","transition","transitionDuration","transitionProperty"],p=function(){for(var a={},b=0,c=o.length;c>b;b++){var e=o[b],f=d(e);f&&f!==e&&(a[e]=f)}
35
- return a}();e.extend(g.prototype,b.prototype),g.prototype._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},g.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},g.prototype.getSize=function(){this.size=c(this.element)},g.prototype.css=function(a){var b=this.element.style;for(var c in a){var d=p[c]||c;b[d]=a[c]}},g.prototype.getPosition=function(){var a=i(this.element),b=this.layout.options,c=b.isOriginLeft,d=b.isOriginTop,e=parseInt(a[c?"left":"right"],10),f=parseInt(a[d?"top":"bottom"],10);e=isNaN(e)?0:e,f=isNaN(f)?0:f;var g=this.layout.size;e-=c?g.paddingLeft:g.paddingRight,f-=d?g.paddingTop:g.paddingBottom,this.position.x=e,this.position.y=f},g.prototype.layoutPosition=function(){var a=this.layout.size,b=this.layout.options,c={},d=b.isOriginLeft?"paddingLeft":"paddingRight",e=b.isOriginLeft?"left":"right",f=b.isOriginLeft?"right":"left",g=this.position.x+a[d];g=b.percentPosition&&!b.isHorizontal?g/a.width*100+"%":g+"px",c[e]=g,c[f]="";var h=b.isOriginTop?"paddingTop":"paddingBottom",i=b.isOriginTop?"top":"bottom",j=b.isOriginTop?"bottom":"top",k=this.position.y+a[h];k=b.percentPosition&&b.isHorizontal?k/a.height*100+"%":k+"px",c[i]=k,c[j]="",this.css(c),this.emitEvent("layout",[this])};var q=m?function(a,b){return"translate3d("+a+"px, "+b+"px, 0)"}:function(a,b){return"translate("+a+"px, "+b+"px)"};g.prototype._transitionTo=function(a,b){this.getPosition();var c=this.position.x,d=this.position.y,e=parseInt(a,10),f=parseInt(b,10),g=e===this.position.x&&f===this.position.y;if(this.setPosition(a,b),g&&!this.isTransitioning)return void this.layoutPosition();var h=a-c,i=b-d,j={},k=this.layout.options;h=k.isOriginLeft?h:-h,i=k.isOriginTop?i:-i,j.transform=q(h,i),this.transition({to:j,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},g.prototype.goTo=function(a,b){this.setPosition(a,b),this.layoutPosition()},g.prototype.moveTo=l?g.prototype._transitionTo:g.prototype.goTo,g.prototype.setPosition=function(a,b){this.position.x=parseInt(a,10),this.position.y=parseInt(b,10)},g.prototype._nonTransition=function(a){this.css(a.to),a.isCleaning&&this._removeStyles(a.to);for(var b in a.onTransitionEnd)a.onTransitionEnd[b].call(this)},g.prototype._transition=function(a){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(a);var b=this._transn;for(var c in a.onTransitionEnd)b.onEnd[c]=a.onTransitionEnd[c];for(c in a.to)b.ingProperties[c]=!0,a.isCleaning&&(b.clean[c]=!0);if(a.from){this.css(a.from);var d=this.element.offsetHeight;d=null}
36
- this.enableTransition(a.to),this.css(a.to),this.isTransitioning=!0};var r=k&&e.toDashed(k)+",opacity";g.prototype.enableTransition=function(){this.isTransitioning||(this.css({transitionProperty:r,transitionDuration:this.layout.options.transitionDuration}),this.element.addEventListener(n,this,!1))},g.prototype.transition=g.prototype[j?"_transition":"_nonTransition"],g.prototype.onwebkitTransitionEnd=function(a){this.ontransitionend(a)},g.prototype.onotransitionend=function(a){this.ontransitionend(a)};var s={"-webkit-transform":"transform","-moz-transform":"transform","-o-transform":"transform"};g.prototype.ontransitionend=function(a){if(a.target===this.element){var b=this._transn,c=s[a.propertyName]||a.propertyName;if(delete b.ingProperties[c],f(b.ingProperties)&&this.disableTransition(),c in b.clean&&(this.element.style[a.propertyName]="",delete b.clean[c]),c in b.onEnd){var d=b.onEnd[c];d.call(this),delete b.onEnd[c]}
37
- this.emitEvent("transitionEnd",[this])}},g.prototype.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(n,this,!1),this.isTransitioning=!1},g.prototype._removeStyles=function(a){var b={};for(var c in a)b[c]="";this.css(b)};var t={transitionProperty:"",transitionDuration:""};return g.prototype.removeTransitionStyles=function(){this.css(t)},g.prototype.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},g.prototype.remove=function(){if(!j||!parseFloat(this.layout.options.transitionDuration))return void this.removeElem();var a=this;this.once("transitionEnd",function(){a.removeElem()}),this.hide()},g.prototype.reveal=function(){delete this.isHidden,this.css({display:""});var a=this.layout.options,b={},c=this.getHideRevealTransitionEndProperty("visibleStyle");b[c]=this.onRevealTransitionEnd,this.transition({from:a.hiddenStyle,to:a.visibleStyle,isCleaning:!0,onTransitionEnd:b})},g.prototype.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},g.prototype.getHideRevealTransitionEndProperty=function(a){var b=this.layout.options[a];if(b.opacity)return"opacity";for(var c in b)return c},g.prototype.hide=function(){this.isHidden=!0,this.css({display:""});var a=this.layout.options,b={},c=this.getHideRevealTransitionEndProperty("hiddenStyle");b[c]=this.onHideTransitionEnd,this.transition({from:a.visibleStyle,to:a.hiddenStyle,isCleaning:!0,onTransitionEnd:b})},g.prototype.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},g.prototype.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},g}),function(a,b){"function"==typeof define&&define.amd?define("outlayer/outlayer",["eventie/eventie","eventEmitter/EventEmitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(c,d,e,f,g){return b(a,c,d,e,f,g)}):"object"==typeof exports?module.exports=b(a,require("eventie"),require("wolfy87-eventemitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):a.Outlayer=b(a,a.eventie,a.EventEmitter,a.getSize,a.fizzyUIUtils,a.Outlayer.Item)}(window,function(a,b,c,d,e,f){function g(a,b){var c=e.getQueryElement(a);if(!c)return void(h&&h.error("Bad element for "+this.constructor.namespace+": "+(c||a)));this.element=c,i&&(this.$element=i(this.element)),this.options=e.extend({},this.constructor.defaults),this.option(b);var d=++k;this.element.outlayerGUID=d,l[d]=this,this._create(),this.options.isInitLayout&&this.layout()}
38
- var h=a.console,i=a.jQuery,j=function(){},k=0,l={};return g.namespace="outlayer",g.Item=f,g.defaults={containerStyle:{position:"relative"},isInitLayout:!0,isOriginLeft:!0,isOriginTop:!0,isResizeBound:!0,isResizingContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}},e.extend(g.prototype,c.prototype),g.prototype.option=function(a){e.extend(this.options,a)},g.prototype._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),e.extend(this.element.style,this.options.containerStyle),this.options.isResizeBound&&this.bindResize()},g.prototype.reloadItems=function(){this.items=this._itemize(this.element.children)},g.prototype._itemize=function(a){for(var b=this._filterFindItemElements(a),c=this.constructor.Item,d=[],e=0,f=b.length;f>e;e++){var g=b[e],h=new c(g,this);d.push(h)}
39
- return d},g.prototype._filterFindItemElements=function(a){return e.filterFindElements(a,this.options.itemSelector)},g.prototype.getItemElements=function(){for(var a=[],b=0,c=this.items.length;c>b;b++)a.push(this.items[b].element);return a},g.prototype.layout=function(){this._resetLayout(),this._manageStamps();var a=void 0!==this.options.isLayoutInstant?this.options.isLayoutInstant:!this._isLayoutInited;this.layoutItems(this.items,a),this._isLayoutInited=!0},g.prototype._init=g.prototype.layout,g.prototype._resetLayout=function(){this.getSize()},g.prototype.getSize=function(){this.size=d(this.element)},g.prototype._getMeasurement=function(a,b){var c,f=this.options[a];f?("string"==typeof f?c=this.element.querySelector(f):e.isElement(f)&&(c=f),this[a]=c?d(c)[b]:f):this[a]=0},g.prototype.layoutItems=function(a,b){a=this._getItemsForLayout(a),this._layoutItems(a,b),this._postLayout()},g.prototype._getItemsForLayout=function(a){for(var b=[],c=0,d=a.length;d>c;c++){var e=a[c];e.isIgnored||b.push(e)}
40
- return b},g.prototype._layoutItems=function(a,b){if(this._emitCompleteOnItems("layout",a),a&&a.length){for(var c=[],d=0,e=a.length;e>d;d++){var f=a[d],g=this._getItemLayoutPosition(f);g.item=f,g.isInstant=b||f.isLayoutInstant,c.push(g)}
41
- this._processLayoutQueue(c)}},g.prototype._getItemLayoutPosition=function(){return{x:0,y:0}},g.prototype._processLayoutQueue=function(a){for(var b=0,c=a.length;c>b;b++){var d=a[b];this._positionItem(d.item,d.x,d.y,d.isInstant)}},g.prototype._positionItem=function(a,b,c,d){d?a.goTo(b,c):a.moveTo(b,c)},g.prototype._postLayout=function(){this.resizeContainer()},g.prototype.resizeContainer=function(){if(this.options.isResizingContainer){var a=this._getContainerSize();a&&(this._setContainerMeasure(a.width,!0),this._setContainerMeasure(a.height,!1))}},g.prototype._getContainerSize=j,g.prototype._setContainerMeasure=function(a,b){if(void 0!==a){var c=this.size;c.isBorderBox&&(a+=b?c.paddingLeft+c.paddingRight+c.borderLeftWidth+c.borderRightWidth:c.paddingBottom+c.paddingTop+c.borderTopWidth+c.borderBottomWidth),a=Math.max(a,0),this.element.style[b?"width":"height"]=a+"px"}},g.prototype._emitCompleteOnItems=function(a,b){function c(){e.emitEvent(a+"Complete",[b])}
42
- function d(){g++,g===f&&c()}
43
- var e=this,f=b.length;if(!b||!f)return void c();for(var g=0,h=0,i=b.length;i>h;h++){var j=b[h];j.once(a,d)}},g.prototype.ignore=function(a){var b=this.getItem(a);b&&(b.isIgnored=!0)},g.prototype.unignore=function(a){var b=this.getItem(a);b&&delete b.isIgnored},g.prototype.stamp=function(a){if(a=this._find(a)){this.stamps=this.stamps.concat(a);for(var b=0,c=a.length;c>b;b++){var d=a[b];this.ignore(d)}}},g.prototype.unstamp=function(a){if(a=this._find(a))for(var b=0,c=a.length;c>b;b++){var d=a[b];e.removeFrom(this.stamps,d),this.unignore(d)}},g.prototype._find=function(a){return a?("string"==typeof a&&(a=this.element.querySelectorAll(a)),a=e.makeArray(a)):void 0},g.prototype._manageStamps=function(){if(this.stamps&&this.stamps.length){this._getBoundingRect();for(var a=0,b=this.stamps.length;b>a;a++){var c=this.stamps[a];this._manageStamp(c)}}},g.prototype._getBoundingRect=function(){var a=this.element.getBoundingClientRect(),b=this.size;this._boundingRect={left:a.left+b.paddingLeft+b.borderLeftWidth,top:a.top+b.paddingTop+b.borderTopWidth,right:a.right-(b.paddingRight+b.borderRightWidth),bottom:a.bottom-(b.paddingBottom+b.borderBottomWidth)}},g.prototype._manageStamp=j,g.prototype._getElementOffset=function(a){var b=a.getBoundingClientRect(),c=this._boundingRect,e=d(a),f={left:b.left-c.left-e.marginLeft,top:b.top-c.top-e.marginTop,right:c.right-b.right-e.marginRight,bottom:c.bottom-b.bottom-e.marginBottom};return f},g.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},g.prototype.bindResize=function(){this.isResizeBound||(b.bind(a,"resize",this),this.isResizeBound=!0)},g.prototype.unbindResize=function(){this.isResizeBound&&b.unbind(a,"resize",this),this.isResizeBound=!1},g.prototype.onresize=function(){function a(){b.resize(),delete b.resizeTimeout}
44
- this.resizeTimeout&&clearTimeout(this.resizeTimeout);var b=this;this.resizeTimeout=setTimeout(a,100)},g.prototype.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},g.prototype.needsResizeLayout=function(){var a=d(this.element),b=this.size&&a;return b&&a.innerWidth!==this.size.innerWidth},g.prototype.addItems=function(a){var b=this._itemize(a);return b.length&&(this.items=this.items.concat(b)),b},g.prototype.appended=function(a){var b=this.addItems(a);b.length&&(this.layoutItems(b,!0),this.reveal(b))},g.prototype.prepended=function(a){var b=this._itemize(a);if(b.length){var c=this.items.slice(0);this.items=b.concat(c),this._resetLayout(),this._manageStamps(),this.layoutItems(b,!0),this.reveal(b),this.layoutItems(c)}},g.prototype.reveal=function(a){this._emitCompleteOnItems("reveal",a);for(var b=a&&a.length,c=0;b&&b>c;c++){var d=a[c];d.reveal()}},g.prototype.hide=function(a){this._emitCompleteOnItems("hide",a);for(var b=a&&a.length,c=0;b&&b>c;c++){var d=a[c];d.hide()}},g.prototype.revealItemElements=function(a){var b=this.getItems(a);this.reveal(b)},g.prototype.hideItemElements=function(a){var b=this.getItems(a);this.hide(b)},g.prototype.getItem=function(a){for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];if(d.element===a)return d}},g.prototype.getItems=function(a){a=e.makeArray(a);for(var b=[],c=0,d=a.length;d>c;c++){var f=a[c],g=this.getItem(f);g&&b.push(g)}
45
- return b},g.prototype.remove=function(a){var b=this.getItems(a);if(this._emitCompleteOnItems("remove",b),b&&b.length)for(var c=0,d=b.length;d>c;c++){var f=b[c];f.remove(),e.removeFrom(this.items,f)}},g.prototype.destroy=function(){var a=this.element.style;a.height="",a.position="",a.width="";for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];d.destroy()}
46
- this.unbindResize();var e=this.element.outlayerGUID;delete l[e],delete this.element.outlayerGUID,i&&i.removeData(this.element,this.constructor.namespace)},g.data=function(a){a=e.getQueryElement(a);var b=a&&a.outlayerGUID;return b&&l[b]},g.create=function(a,b){function c(){g.apply(this,arguments)}
47
- return Object.create?c.prototype=Object.create(g.prototype):e.extend(c.prototype,g.prototype),c.prototype.constructor=c,c.defaults=e.extend({},g.defaults),e.extend(c.defaults,b),c.prototype.settings={},c.namespace=a,c.data=g.data,c.Item=function(){f.apply(this,arguments)},c.Item.prototype=new f,e.htmlInit(c,a),i&&i.bridget&&i.bridget(a,c),c},g.Item=f,g}),function(a,b){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size","fizzy-ui-utils/utils"],b):"object"==typeof exports?module.exports=b(require("outlayer"),require("get-size"),require("fizzy-ui-utils")):a.Masonry=b(a.Outlayer,a.getSize,a.fizzyUIUtils)}(window,function(a,b,c){var d=a.create("masonry");return d.prototype._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns();var a=this.cols;for(this.colYs=[];a--;)this.colYs.push(0);this.maxY=0},d.prototype.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var a=this.items[0],c=a&&a.element;this.columnWidth=c&&b(c).outerWidth||this.containerWidth}
48
- var d=this.columnWidth+=this.gutter,e=this.containerWidth+this.gutter,f=e/d,g=d-e%d,h=g&&1>g?"round":"floor";f=Math[h](f),this.cols=Math.max(f,1)},d.prototype.getContainerWidth=function(){var a=this.options.isFitWidth?this.element.parentNode:this.element,c=b(a);this.containerWidth=c&&c.innerWidth},d.prototype._getItemLayoutPosition=function(a){a.getSize();var b=a.size.outerWidth%this.columnWidth,d=b&&1>b?"round":"ceil",e=Math[d](a.size.outerWidth/this.columnWidth);e=Math.min(e,this.cols);for(var f=this._getColGroup(e),g=Math.min.apply(Math,f),h=c.indexOf(f,g),i={x:this.columnWidth*h,y:g},j=g+a.size.outerHeight,k=this.cols+1-f.length,l=0;k>l;l++)this.colYs[h+l]=j;return i},d.prototype._getColGroup=function(a){if(2>a)return this.colYs;for(var b=[],c=this.cols+1-a,d=0;c>d;d++){var e=this.colYs.slice(d,d+a);b[d]=Math.max.apply(Math,e)}
49
- return b},d.prototype._manageStamp=function(a){var c=b(a),d=this._getElementOffset(a),e=this.options.isOriginLeft?d.left:d.right,f=e+c.outerWidth,g=Math.floor(e/this.columnWidth);g=Math.max(0,g);var h=Math.floor(f/this.columnWidth);h-=f%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var i=(this.options.isOriginTop?d.top:d.bottom)+c.outerHeight,j=g;h>=j;j++)this.colYs[j]=Math.max(i,this.colYs[j])},d.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var a={height:this.maxY};return this.options.isFitWidth&&(a.width=this._getContainerFitWidth()),a},d.prototype._getContainerFitWidth=function(){for(var a=0,b=this.cols;--b&&0===this.colYs[b];)a++;return(this.cols-a)*this.columnWidth-this.gutter},d.prototype.needsResizeLayout=function(){var a=this.containerWidth;return this.getContainerWidth(),a!==this.containerWidth},d})
50
- function cffAddMasonry($self){if(jQuery(window).width()>780||$self.hasClass('masonry-2-mobile')){$self.addClass('cff-masonry cff-masonry-js').removeClass('cff-disable-masonry');if($self.find('.cff-item').length){$self.masonry({itemSelector:'.cff-new, .cff-item, .cff-likebox'});$self.find('.cff-item').each(function(){jQuery(this).css('margin-bottom','15px')})}else if($self.find('.cff-album-item').length){$self.masonry({itemSelector:'.cff-album-item'})}}else{$self.addClass('cff-disable-masonry')}}}
51
- function cff_init(){jQuery('.cff-likebox iframe').each(function(){var $likebox=jQuery(this),likeboxWidth=$likebox.attr('data-likebox-width'),cffFeedWidth=$likebox.parent().width();if(likeboxWidth=='')likeboxWidth=340;if(cffFeedWidth<likeboxWidth)likeboxWidth=cffFeedWidth;$likebox.attr('src','https://www.facebook.com/plugins/page.php?href=https%3A%2F%2Fwww.facebook.com%2F'+$likebox.attr('data-likebox-id')+'%2F&tabs&width='+likeboxWidth+'&small_header='+$likebox.attr('data-likebox-header')+'&adapt_container_width=true&hide_cover='+$likebox.attr('data-hide-cover')+'&hide_cta='+$likebox.attr('data-hide-cta')+'&show_facepile='+$likebox.attr('data-likebox-faces')+'&locale='+$likebox.attr('data-locale'))});jQuery('#cff .cff-item').each(function(){var $self=jQuery(this);if($self.find('.cff-viewpost-facebook').parent('p').length){$self.find('.cff-viewpost-facebook').unwrap('p')}
52
- if($self.find('.cff-author').parent('p').length){$self.find('.cff-author').eq(1).unwrap('p');$self.find('.cff-author').eq(1).remove()}
53
- if($self.find('#cff .cff-link').parent('p').length){$self.find('#cff .cff-link').unwrap('p')}
54
- var expanded=!1,$post_text=$self.find('.cff-post-text .cff-text'),text_limit=$self.closest('#cff').attr('data-char');if(typeof text_limit==='undefined'||text_limit=='')text_limit=99999;if($post_text.find('a.cff-post-text-link').length)$post_text=$self.find('.cff-post-text .cff-text a');var full_text=$post_text.html();if(full_text==undefined)full_text='';var cff_trunc_regx=new RegExp(/(<[^>]*>)/g);var cff_trunc_counter=0;full_text_arr=full_text.split(cff_trunc_regx);for(var i=0,len=full_text_arr.length;i<len;i++){if(!(cff_trunc_regx.test(full_text_arr[i]))){if(cff_trunc_counter==text_limit){full_text_arr.splice(i,1);continue}
55
- cff_trunc_counter=cff_trunc_counter+full_text_arr[i].length;if(cff_trunc_counter>text_limit){var diff=cff_trunc_counter-text_limit;full_text_arr[i]=full_text_arr[i].slice(0,-diff);cff_trunc_counter=text_limit;if(full_text.length>text_limit)$self.find('.cff-expand').show()}}}
56
- var short_text=full_text_arr.join('');short_text=short_text.replace(/(<(?!\/)[^>]+>)+(<\/[^>]+>)/g,"");var lastChar=short_text.substr(short_text.length-1);if(lastChar=='<')short_text=short_text.substring(0,short_text.length-1);short_text=short_text.replace(/(<br>\s*)+$/,'');short_text=short_text.replace(/(<img class="cff-linebreak">\s*)+$/,'');$post_text.html(short_text);$self.find('.cff-expand a').unbind('click').bind('click',function(e){e.preventDefault();var $expand=jQuery(this),$more=$expand.find('.cff-more'),$less=$expand.find('.cff-less');if(expanded==!1){$post_text.html(full_text);expanded=!0;$more.hide();$less.show()}else{$post_text.html(short_text);expanded=!1;$more.show();$less.hide()}
57
- cffLinkHashtags();$post_text.find('a').attr('target','_blank')});$post_text.find('a').add($self.find('.cff-post-desc a')).attr({'target':'_blank','rel':'nofollow'});$sharedLink=$self.find('.cff-shared-link');if($sharedLink.text()==''){$sharedLink.remove()}
58
- function cffLinkHashtags(){var cffTextStr=$self.find('.cff-text').html(),cffDescStr=$self.find('.cff-post-desc').html(),regex=/(^|\s)#(\w*[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+\w*)/gi,linkcolor=$self.find('.cff-text').attr('data-color');function replacer(hash){var replacementString=jQuery.trim(hash);if(/^#[0-9A-F]{6}$/i.test(replacementString)){return replacementString}else{return' <a href="https://www.facebook.com/hashtag/'+replacementString.substring(1)+'" target="_blank" rel="nofollow" style="color:#'+linkcolor+'">'+replacementString+'</a>'}}
59
- if(typeof cfflinkhashtags=='undefined')cfflinkhashtags='true';if(cfflinkhashtags=='true'){var $cffText=$self.find('.cff-text');if($cffText.length>0){cffTextStr=cffTextStr.replace(/<br>/g,"<br> ");$cffText.html(cffTextStr.replace(regex,replacer))}}
60
- if($self.find('.cff-post-desc').length>0)$self.find('.cff-post-desc').html(cffDescStr.replace(regex,replacer))}
61
- cffLinkHashtags();$self.find('.cff-text a').add($self.find('.cff-post-desc a')).attr({'target':'_blank','rel':'nofollow noopener noreferrer'});$self.find('.cff-share-link').unbind().bind('click',function(e){e.preventDefault();var $cffShareTooltip=$self.find('.cff-share-tooltip')
62
- if($cffShareTooltip.is(':visible')){$cffShareTooltip.hide().find('a').removeClass('cff-show')}else{$cffShareTooltip.show();var time=0;$cffShareTooltip.find('a').each(function(){var $cffShareIcon=jQuery(this);setTimeout(function(){$cffShareIcon.addClass('cff-show')},time);time+=20})}})});jQuery('.cff-wrapper').each(function(){var $cff=jQuery(this).find('#cff');if($cff.hasClass('cff-masonry-js')){cffAddMasonry($cff);setTimeout(function(){cffAddMasonry($cff)},500);jQuery(window).resize(function(){setTimeout(function(){cffAddMasonry($cff)},500)});if($cff.find('.cff-credit').length)$cff.css('padding-bottom',30)}})}
63
  cff_init()}
1
+ var cff_js_exists=(typeof cff_js_exists!=='undefined')?!0:!1;if(!cff_js_exists){if(jQuery('#cff.cff-masonry-js').length){!function(a){function b(){}
2
+ function c(a){function c(b){b.prototype.option||(b.prototype.option=function(b){a.isPlainObject(b)&&(this.options=a.extend(!0,this.options,b))})}
3
+ function e(b,c){a.fn[b]=function(e){if("string"==typeof e){for(var g=d.call(arguments,1),h=0,i=this.length;i>h;h++){var j=this[h],k=a.data(j,b);if(k)if(a.isFunction(k[e])&&"_"!==e.charAt(0)){var l=k[e].apply(k,g);if(void 0!==l)return l}else f("no such method '"+e+"' for "+b+" instance");else f("cannot call methods on "+b+" prior to initialization; attempted to call '"+e+"'")}
4
+ return this}
5
+ return this.each(function(){var d=a.data(this,b);d?(d.option(e),d._init()):(d=new c(this,e),a.data(this,b,d))})}}
6
+ if(a){var f="undefined"==typeof console?b:function(a){console.error(a)};return a.bridget=function(a,b){c(b),e(a,b)},a.bridget}}
7
+ var d=Array.prototype.slice;"function"==typeof define&&define.amd?define("jquery-bridget/jquery.bridget",["jquery"],c):c("object"==typeof exports?require("jquery"):a.jQuery)}(window),function(a){function b(b){var c=a.event;return c.target=c.target||c.srcElement||b,c}
8
+ var c=document.documentElement,d=function(){};c.addEventListener?d=function(a,b,c){a.addEventListener(b,c,!1)}:c.attachEvent&&(d=function(a,c,d){a[c+d]=d.handleEvent?function(){var c=b(a);d.handleEvent.call(d,c)}:function(){var c=b(a);d.call(a,c)},a.attachEvent("on"+c,a[c+d])});var e=function(){};c.removeEventListener?e=function(a,b,c){a.removeEventListener(b,c,!1)}:c.detachEvent&&(e=function(a,b,c){a.detachEvent("on"+b,a[b+c]);try{delete a[b+c]}catch(d){a[b+c]=void 0}});var f={bind:d,unbind:e};"function"==typeof define&&define.amd?define("eventie/eventie",f):"object"==typeof exports?module.exports=f:a.eventie=f}(window),function(){function a(){}
9
+ function b(a,b){for(var c=a.length;c--;)if(a[c].listener===b)return c;return-1}
10
+ function c(a){return function(){return this[a].apply(this,arguments)}}
11
+ var d=a.prototype,e=this,f=e.EventEmitter;d.getListeners=function(a){var b,c,d=this._getEvents();if(a instanceof RegExp){b={};for(c in d)d.hasOwnProperty(c)&&a.test(c)&&(b[c]=d[c])}else b=d[a]||(d[a]=[]);return b},d.flattenListeners=function(a){var b,c=[];for(b=0;b<a.length;b+=1)c.push(a[b].listener);return c},d.getListenersAsObject=function(a){var b,c=this.getListeners(a);return c instanceof Array&&(b={},b[a]=c),b||c},d.addListener=function(a,c){var d,e=this.getListenersAsObject(a),f="object"==typeof c;for(d in e)e.hasOwnProperty(d)&&-1===b(e[d],c)&&e[d].push(f?c:{listener:c,once:!1});return this},d.on=c("addListener"),d.addOnceListener=function(a,b){return this.addListener(a,{listener:b,once:!0})},d.once=c("addOnceListener"),d.defineEvent=function(a){return this.getListeners(a),this},d.defineEvents=function(a){for(var b=0;b<a.length;b+=1)this.defineEvent(a[b]);return this},d.removeListener=function(a,c){var d,e,f=this.getListenersAsObject(a);for(e in f)f.hasOwnProperty(e)&&(d=b(f[e],c),-1!==d&&f[e].splice(d,1));return this},d.off=c("removeListener"),d.addListeners=function(a,b){return this.manipulateListeners(!1,a,b)},d.removeListeners=function(a,b){return this.manipulateListeners(!0,a,b)},d.manipulateListeners=function(a,b,c){var d,e,f=a?this.removeListener:this.addListener,g=a?this.removeListeners:this.addListeners;if("object"!=typeof b||b instanceof RegExp)for(d=c.length;d--;)f.call(this,b,c[d]);else for(d in b)b.hasOwnProperty(d)&&(e=b[d])&&("function"==typeof e?f.call(this,d,e):g.call(this,d,e));return this},d.removeEvent=function(a){var b,c=typeof a,d=this._getEvents();if("string"===c)delete d[a];else if(a instanceof RegExp)for(b in d)d.hasOwnProperty(b)&&a.test(b)&&delete d[b];else delete this._events;return this},d.removeAllListeners=c("removeEvent"),d.emitEvent=function(a,b){var c,d,e,f,g=this.getListenersAsObject(a);for(e in g)if(g.hasOwnProperty(e))for(d=g[e].length;d--;)c=g[e][d],c.once===!0&&this.removeListener(a,c.listener),f=c.listener.apply(this,b||[]),f===this._getOnceReturnValue()&&this.removeListener(a,c.listener);return this},d.trigger=c("emitEvent"),d.emit=function(a){var b=Array.prototype.slice.call(arguments,1);return this.emitEvent(a,b)},d.setOnceReturnValue=function(a){return this._onceReturnValue=a,this},d._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},d._getEvents=function(){return this._events||(this._events={})},a.noConflict=function(){return e.EventEmitter=f,a},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return a}):"object"==typeof module&&module.exports?module.exports=a:e.EventEmitter=a}.call(this),function(a){function b(a){if(a){if("string"==typeof d[a])return a;a=a.charAt(0).toUpperCase()+a.slice(1);for(var b,e=0,f=c.length;f>e;e++)if(b=c[e]+a,"string"==typeof d[b])return b}}
12
+ var c="Webkit Moz ms Ms O".split(" "),d=document.documentElement.style;"function"==typeof define&&define.amd?define("get-style-property/get-style-property",[],function(){return b}):"object"==typeof exports?module.exports=b:a.getStyleProperty=b}(window),function(a){function b(a){var b=parseFloat(a),c=-1===a.indexOf("%")&&!isNaN(b);return c&&b}
13
+ function c(){}
14
+ function d(){for(var a={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},b=0,c=g.length;c>b;b++){var d=g[b];a[d]=0}
15
+ return a}
16
+ function e(c){function e(){if(!m){m=!0;var d=a.getComputedStyle;if(j=function(){var a=d?function(a){return d(a,null)}:function(a){return a.currentStyle};return function(b){var c=a(b);return c||f("Style returned "+c+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),c}}(),k=c("boxSizing")){var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style[k]="border-box";var g=document.body||document.documentElement;g.appendChild(e);var h=j(e);l=200===b(h.width),g.removeChild(e)}}}
17
+ function h(a){if(e(),"string"==typeof a&&(a=document.querySelector(a)),a&&"object"==typeof a&&a.nodeType){var c=j(a);if("none"===c.display)return d();var f={};f.width=a.offsetWidth,f.height=a.offsetHeight;for(var h=f.isBorderBox=!(!k||!c[k]||"border-box"!==c[k]),m=0,n=g.length;n>m;m++){var o=g[m],p=c[o];p=i(a,p);var q=parseFloat(p);f[o]=isNaN(q)?0:q}
18
+ var r=f.paddingLeft+f.paddingRight,s=f.paddingTop+f.paddingBottom,t=f.marginLeft+f.marginRight,u=f.marginTop+f.marginBottom,v=f.borderLeftWidth+f.borderRightWidth,w=f.borderTopWidth+f.borderBottomWidth,x=h&&l,y=b(c.width);y!==!1&&(f.width=y+(x?0:r+v));var z=b(c.height);return z!==!1&&(f.height=z+(x?0:s+w)),f.innerWidth=f.width-(r+v),f.innerHeight=f.height-(s+w),f.outerWidth=f.width+t,f.outerHeight=f.height+u,f}}
19
+ function i(b,c){if(a.getComputedStyle||-1===c.indexOf("%"))return c;var d=b.style,e=d.left,f=b.runtimeStyle,g=f&&f.left;return g&&(f.left=b.currentStyle.left),d.left=c,c=d.pixelLeft,d.left=e,g&&(f.left=g),c}
20
+ var j,k,l,m=!1;return h}
21
+ var f="undefined"==typeof console?c:function(a){console.error(a)},g=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"];"function"==typeof define&&define.amd?define("get-size/get-size",["get-style-property/get-style-property"],e):"object"==typeof exports?module.exports=e(require("desandro-get-style-property")):a.getSize=e(a.getStyleProperty)}(window),function(a){function b(a){"function"==typeof a&&(b.isReady?a():g.push(a))}
22
+ function c(a){var c="readystatechange"===a.type&&"complete"!==f.readyState;b.isReady||c||d()}
23
+ function d(){b.isReady=!0;for(var a=0,c=g.length;c>a;a++){var d=g[a];d()}}
24
+ function e(e){return"complete"===f.readyState?d():(e.bind(f,"DOMContentLoaded",c),e.bind(f,"readystatechange",c),e.bind(a,"load",c)),b}
25
+ var f=a.document,g=[];b.isReady=!1,"function"==typeof define&&define.amd?define("doc-ready/doc-ready",["eventie/eventie"],e):"object"==typeof exports?module.exports=e(require("eventie")):a.docReady=e(a.eventie)}(window),function(a){function b(a,b){return a[g](b)}
26
+ function c(a){if(!a.parentNode){var b=document.createDocumentFragment();b.appendChild(a)}}
27
+ function d(a,b){c(a);for(var d=a.parentNode.querySelectorAll(b),e=0,f=d.length;f>e;e++)if(d[e]===a)return!0;return!1}
28
+ function e(a,d){return c(a),b(a,d)}
29
+ var f,g=function(){if(a.matches)return"matches";if(a.matchesSelector)return"matchesSelector";for(var b=["webkit","moz","ms","o"],c=0,d=b.length;d>c;c++){var e=b[c],f=e+"MatchesSelector";if(a[f])return f}}();if(g){var h=document.createElement("div"),i=b(h,"div");f=i?b:e}else f=d;"function"==typeof define&&define.amd?define("matches-selector/matches-selector",[],function(){return f}):"object"==typeof exports?module.exports=f:window.matchesSelector=f}(Element.prototype),function(a,b){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["doc-ready/doc-ready","matches-selector/matches-selector"],function(c,d){return b(a,c,d)}):"object"==typeof exports?module.exports=b(a,require("doc-ready"),require("desandro-matches-selector")):a.fizzyUIUtils=b(a,a.docReady,a.matchesSelector)}(window,function(a,b,c){var d={};d.extend=function(a,b){for(var c in b)a[c]=b[c];return a},d.modulo=function(a,b){return(a%b+b)%b};var e=Object.prototype.toString;d.isArray=function(a){return"[object Array]"==e.call(a)},d.makeArray=function(a){var b=[];if(d.isArray(a))b=a;else if(a&&"number"==typeof a.length)for(var c=0,e=a.length;e>c;c++)b.push(a[c]);else b.push(a);return b},d.indexOf=Array.prototype.indexOf?function(a,b){return a.indexOf(b)}:function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},d.removeFrom=function(a,b){var c=d.indexOf(a,b);-1!=c&&a.splice(c,1)},d.isElement="function"==typeof HTMLElement||"object"==typeof HTMLElement?function(a){return a instanceof HTMLElement}:function(a){return a&&"object"==typeof a&&1==a.nodeType&&"string"==typeof a.nodeName},d.setText=function(){function a(a,c){b=b||(void 0!==document.documentElement.textContent?"textContent":"innerText"),a[b]=c}
30
+ var b;return a}(),d.getParent=function(a,b){for(;a!=document.body;)if(a=a.parentNode,c(a,b))return a},d.getQueryElement=function(a){return"string"==typeof a?document.querySelector(a):a},d.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},d.filterFindElements=function(a,b){a=d.makeArray(a);for(var e=[],f=0,g=a.length;g>f;f++){var h=a[f];if(d.isElement(h))if(b){c(h,b)&&e.push(h);for(var i=h.querySelectorAll(b),j=0,k=i.length;k>j;j++)e.push(i[j])}else e.push(h)}
31
+ return e},d.debounceMethod=function(a,b,c){var d=a.prototype[b],e=b+"Timeout";a.prototype[b]=function(){var a=this[e];a&&clearTimeout(a);var b=arguments,f=this;this[e]=setTimeout(function(){d.apply(f,b),delete f[e]},c||100)}},d.toDashed=function(a){return a.replace(/(.)([A-Z])/g,function(a,b,c){return b+"-"+c}).toLowerCase()};var f=a.console;return d.htmlInit=function(c,e){b(function(){for(var b=d.toDashed(e),g=document.querySelectorAll(".js-"+b),h="data-"+b+"-options",i=0,j=g.length;j>i;i++){var k,l=g[i],m=l.getAttribute(h);try{k=m&&JSON.parse(m)}catch(n){f&&f.error("Error parsing "+h+" on "+l.nodeName.toLowerCase()+(l.id?"#"+l.id:"")+": "+n);continue}
32
+ var o=new c(l,k),p=a.jQuery;p&&p.data(l,e,o)}})},d}),function(a,b){"function"==typeof define&&define.amd?define("outlayer/item",["eventEmitter/EventEmitter","get-size/get-size","get-style-property/get-style-property","fizzy-ui-utils/utils"],function(c,d,e,f){return b(a,c,d,e,f)}):"object"==typeof exports?module.exports=b(a,require("wolfy87-eventemitter"),require("get-size"),require("desandro-get-style-property"),require("fizzy-ui-utils")):(a.Outlayer={},a.Outlayer.Item=b(a,a.EventEmitter,a.getSize,a.getStyleProperty,a.fizzyUIUtils))}(window,function(a,b,c,d,e){function f(a){for(var b in a)return!1;return b=null,!0}
33
+ function g(a,b){a&&(this.element=a,this.layout=b,this.position={x:0,y:0},this._create())}
34
+ var h=a.getComputedStyle,i=h?function(a){return h(a,null)}:function(a){return a.currentStyle},j=d("transition"),k=d("transform"),l=j&&k,m=!!d("perspective"),n={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend",transition:"transitionend"}[j],o=["transform","transition","transitionDuration","transitionProperty"],p=function(){for(var a={},b=0,c=o.length;c>b;b++){var e=o[b],f=d(e);f&&f!==e&&(a[e]=f)}
35
+ return a}();e.extend(g.prototype,b.prototype),g.prototype._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},g.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},g.prototype.getSize=function(){this.size=c(this.element)},g.prototype.css=function(a){var b=this.element.style;for(var c in a){var d=p[c]||c;b[d]=a[c]}},g.prototype.getPosition=function(){var a=i(this.element),b=this.layout.options,c=b.isOriginLeft,d=b.isOriginTop,e=parseInt(a[c?"left":"right"],10),f=parseInt(a[d?"top":"bottom"],10);e=isNaN(e)?0:e,f=isNaN(f)?0:f;var g=this.layout.size;e-=c?g.paddingLeft:g.paddingRight,f-=d?g.paddingTop:g.paddingBottom,this.position.x=e,this.position.y=f},g.prototype.layoutPosition=function(){var a=this.layout.size,b=this.layout.options,c={},d=b.isOriginLeft?"paddingLeft":"paddingRight",e=b.isOriginLeft?"left":"right",f=b.isOriginLeft?"right":"left",g=this.position.x+a[d];g=b.percentPosition&&!b.isHorizontal?g/a.width*100+"%":g+"px",c[e]=g,c[f]="";var h=b.isOriginTop?"paddingTop":"paddingBottom",i=b.isOriginTop?"top":"bottom",j=b.isOriginTop?"bottom":"top",k=this.position.y+a[h];k=b.percentPosition&&b.isHorizontal?k/a.height*100+"%":k+"px",c[i]=k,c[j]="",this.css(c),this.emitEvent("layout",[this])};var q=m?function(a,b){return"translate3d("+a+"px, "+b+"px, 0)"}:function(a,b){return"translate("+a+"px, "+b+"px)"};g.prototype._transitionTo=function(a,b){this.getPosition();var c=this.position.x,d=this.position.y,e=parseInt(a,10),f=parseInt(b,10),g=e===this.position.x&&f===this.position.y;if(this.setPosition(a,b),g&&!this.isTransitioning)return void this.layoutPosition();var h=a-c,i=b-d,j={},k=this.layout.options;h=k.isOriginLeft?h:-h,i=k.isOriginTop?i:-i,j.transform=q(h,i),this.transition({to:j,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},g.prototype.goTo=function(a,b){this.setPosition(a,b),this.layoutPosition()},g.prototype.moveTo=l?g.prototype._transitionTo:g.prototype.goTo,g.prototype.setPosition=function(a,b){this.position.x=parseInt(a,10),this.position.y=parseInt(b,10)},g.prototype._nonTransition=function(a){this.css(a.to),a.isCleaning&&this._removeStyles(a.to);for(var b in a.onTransitionEnd)a.onTransitionEnd[b].call(this)},g.prototype._transition=function(a){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(a);var b=this._transn;for(var c in a.onTransitionEnd)b.onEnd[c]=a.onTransitionEnd[c];for(c in a.to)b.ingProperties[c]=!0,a.isCleaning&&(b.clean[c]=!0);if(a.from){this.css(a.from);var d=this.element.offsetHeight;d=null}
36
+ this.enableTransition(a.to),this.css(a.to),this.isTransitioning=!0};var r=k&&e.toDashed(k)+",opacity";g.prototype.enableTransition=function(){this.isTransitioning||(this.css({transitionProperty:r,transitionDuration:this.layout.options.transitionDuration}),this.element.addEventListener(n,this,!1))},g.prototype.transition=g.prototype[j?"_transition":"_nonTransition"],g.prototype.onwebkitTransitionEnd=function(a){this.ontransitionend(a)},g.prototype.onotransitionend=function(a){this.ontransitionend(a)};var s={"-webkit-transform":"transform","-moz-transform":"transform","-o-transform":"transform"};g.prototype.ontransitionend=function(a){if(a.target===this.element){var b=this._transn,c=s[a.propertyName]||a.propertyName;if(delete b.ingProperties[c],f(b.ingProperties)&&this.disableTransition(),c in b.clean&&(this.element.style[a.propertyName]="",delete b.clean[c]),c in b.onEnd){var d=b.onEnd[c];d.call(this),delete b.onEnd[c]}
37
+ this.emitEvent("transitionEnd",[this])}},g.prototype.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(n,this,!1),this.isTransitioning=!1},g.prototype._removeStyles=function(a){var b={};for(var c in a)b[c]="";this.css(b)};var t={transitionProperty:"",transitionDuration:""};return g.prototype.removeTransitionStyles=function(){this.css(t)},g.prototype.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},g.prototype.remove=function(){if(!j||!parseFloat(this.layout.options.transitionDuration))return void this.removeElem();var a=this;this.once("transitionEnd",function(){a.removeElem()}),this.hide()},g.prototype.reveal=function(){delete this.isHidden,this.css({display:""});var a=this.layout.options,b={},c=this.getHideRevealTransitionEndProperty("visibleStyle");b[c]=this.onRevealTransitionEnd,this.transition({from:a.hiddenStyle,to:a.visibleStyle,isCleaning:!0,onTransitionEnd:b})},g.prototype.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},g.prototype.getHideRevealTransitionEndProperty=function(a){var b=this.layout.options[a];if(b.opacity)return"opacity";for(var c in b)return c},g.prototype.hide=function(){this.isHidden=!0,this.css({display:""});var a=this.layout.options,b={},c=this.getHideRevealTransitionEndProperty("hiddenStyle");b[c]=this.onHideTransitionEnd,this.transition({from:a.visibleStyle,to:a.hiddenStyle,isCleaning:!0,onTransitionEnd:b})},g.prototype.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},g.prototype.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},g}),function(a,b){"function"==typeof define&&define.amd?define("outlayer/outlayer",["eventie/eventie","eventEmitter/EventEmitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(c,d,e,f,g){return b(a,c,d,e,f,g)}):"object"==typeof exports?module.exports=b(a,require("eventie"),require("wolfy87-eventemitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):a.Outlayer=b(a,a.eventie,a.EventEmitter,a.getSize,a.fizzyUIUtils,a.Outlayer.Item)}(window,function(a,b,c,d,e,f){function g(a,b){var c=e.getQueryElement(a);if(!c)return void(h&&h.error("Bad element for "+this.constructor.namespace+": "+(c||a)));this.element=c,i&&(this.$element=i(this.element)),this.options=e.extend({},this.constructor.defaults),this.option(b);var d=++k;this.element.outlayerGUID=d,l[d]=this,this._create(),this.options.isInitLayout&&this.layout()}
38
+ var h=a.console,i=a.jQuery,j=function(){},k=0,l={};return g.namespace="outlayer",g.Item=f,g.defaults={containerStyle:{position:"relative"},isInitLayout:!0,isOriginLeft:!0,isOriginTop:!0,isResizeBound:!0,isResizingContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}},e.extend(g.prototype,c.prototype),g.prototype.option=function(a){e.extend(this.options,a)},g.prototype._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),e.extend(this.element.style,this.options.containerStyle),this.options.isResizeBound&&this.bindResize()},g.prototype.reloadItems=function(){this.items=this._itemize(this.element.children)},g.prototype._itemize=function(a){for(var b=this._filterFindItemElements(a),c=this.constructor.Item,d=[],e=0,f=b.length;f>e;e++){var g=b[e],h=new c(g,this);d.push(h)}
39
+ return d},g.prototype._filterFindItemElements=function(a){return e.filterFindElements(a,this.options.itemSelector)},g.prototype.getItemElements=function(){for(var a=[],b=0,c=this.items.length;c>b;b++)a.push(this.items[b].element);return a},g.prototype.layout=function(){this._resetLayout(),this._manageStamps();var a=void 0!==this.options.isLayoutInstant?this.options.isLayoutInstant:!this._isLayoutInited;this.layoutItems(this.items,a),this._isLayoutInited=!0},g.prototype._init=g.prototype.layout,g.prototype._resetLayout=function(){this.getSize()},g.prototype.getSize=function(){this.size=d(this.element)},g.prototype._getMeasurement=function(a,b){var c,f=this.options[a];f?("string"==typeof f?c=this.element.querySelector(f):e.isElement(f)&&(c=f),this[a]=c?d(c)[b]:f):this[a]=0},g.prototype.layoutItems=function(a,b){a=this._getItemsForLayout(a),this._layoutItems(a,b),this._postLayout()},g.prototype._getItemsForLayout=function(a){for(var b=[],c=0,d=a.length;d>c;c++){var e=a[c];e.isIgnored||b.push(e)}
40
+ return b},g.prototype._layoutItems=function(a,b){if(this._emitCompleteOnItems("layout",a),a&&a.length){for(var c=[],d=0,e=a.length;e>d;d++){var f=a[d],g=this._getItemLayoutPosition(f);g.item=f,g.isInstant=b||f.isLayoutInstant,c.push(g)}
41
+ this._processLayoutQueue(c)}},g.prototype._getItemLayoutPosition=function(){return{x:0,y:0}},g.prototype._processLayoutQueue=function(a){for(var b=0,c=a.length;c>b;b++){var d=a[b];this._positionItem(d.item,d.x,d.y,d.isInstant)}},g.prototype._positionItem=function(a,b,c,d){d?a.goTo(b,c):a.moveTo(b,c)},g.prototype._postLayout=function(){this.resizeContainer()},g.prototype.resizeContainer=function(){if(this.options.isResizingContainer){var a=this._getContainerSize();a&&(this._setContainerMeasure(a.width,!0),this._setContainerMeasure(a.height,!1))}},g.prototype._getContainerSize=j,g.prototype._setContainerMeasure=function(a,b){if(void 0!==a){var c=this.size;c.isBorderBox&&(a+=b?c.paddingLeft+c.paddingRight+c.borderLeftWidth+c.borderRightWidth:c.paddingBottom+c.paddingTop+c.borderTopWidth+c.borderBottomWidth),a=Math.max(a,0),this.element.style[b?"width":"height"]=a+"px"}},g.prototype._emitCompleteOnItems=function(a,b){function c(){e.emitEvent(a+"Complete",[b])}
42
+ function d(){g++,g===f&&c()}
43
+ var e=this,f=b.length;if(!b||!f)return void c();for(var g=0,h=0,i=b.length;i>h;h++){var j=b[h];j.once(a,d)}},g.prototype.ignore=function(a){var b=this.getItem(a);b&&(b.isIgnored=!0)},g.prototype.unignore=function(a){var b=this.getItem(a);b&&delete b.isIgnored},g.prototype.stamp=function(a){if(a=this._find(a)){this.stamps=this.stamps.concat(a);for(var b=0,c=a.length;c>b;b++){var d=a[b];this.ignore(d)}}},g.prototype.unstamp=function(a){if(a=this._find(a))for(var b=0,c=a.length;c>b;b++){var d=a[b];e.removeFrom(this.stamps,d),this.unignore(d)}},g.prototype._find=function(a){return a?("string"==typeof a&&(a=this.element.querySelectorAll(a)),a=e.makeArray(a)):void 0},g.prototype._manageStamps=function(){if(this.stamps&&this.stamps.length){this._getBoundingRect();for(var a=0,b=this.stamps.length;b>a;a++){var c=this.stamps[a];this._manageStamp(c)}}},g.prototype._getBoundingRect=function(){var a=this.element.getBoundingClientRect(),b=this.size;this._boundingRect={left:a.left+b.paddingLeft+b.borderLeftWidth,top:a.top+b.paddingTop+b.borderTopWidth,right:a.right-(b.paddingRight+b.borderRightWidth),bottom:a.bottom-(b.paddingBottom+b.borderBottomWidth)}},g.prototype._manageStamp=j,g.prototype._getElementOffset=function(a){var b=a.getBoundingClientRect(),c=this._boundingRect,e=d(a),f={left:b.left-c.left-e.marginLeft,top:b.top-c.top-e.marginTop,right:c.right-b.right-e.marginRight,bottom:c.bottom-b.bottom-e.marginBottom};return f},g.prototype.handleEvent=function(a){var b="on"+a.type;this[b]&&this[b](a)},g.prototype.bindResize=function(){this.isResizeBound||(b.bind(a,"resize",this),this.isResizeBound=!0)},g.prototype.unbindResize=function(){this.isResizeBound&&b.unbind(a,"resize",this),this.isResizeBound=!1},g.prototype.onresize=function(){function a(){b.resize(),delete b.resizeTimeout}
44
+ this.resizeTimeout&&clearTimeout(this.resizeTimeout);var b=this;this.resizeTimeout=setTimeout(a,100)},g.prototype.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},g.prototype.needsResizeLayout=function(){var a=d(this.element),b=this.size&&a;return b&&a.innerWidth!==this.size.innerWidth},g.prototype.addItems=function(a){var b=this._itemize(a);return b.length&&(this.items=this.items.concat(b)),b},g.prototype.appended=function(a){var b=this.addItems(a);b.length&&(this.layoutItems(b,!0),this.reveal(b))},g.prototype.prepended=function(a){var b=this._itemize(a);if(b.length){var c=this.items.slice(0);this.items=b.concat(c),this._resetLayout(),this._manageStamps(),this.layoutItems(b,!0),this.reveal(b),this.layoutItems(c)}},g.prototype.reveal=function(a){this._emitCompleteOnItems("reveal",a);for(var b=a&&a.length,c=0;b&&b>c;c++){var d=a[c];d.reveal()}},g.prototype.hide=function(a){this._emitCompleteOnItems("hide",a);for(var b=a&&a.length,c=0;b&&b>c;c++){var d=a[c];d.hide()}},g.prototype.revealItemElements=function(a){var b=this.getItems(a);this.reveal(b)},g.prototype.hideItemElements=function(a){var b=this.getItems(a);this.hide(b)},g.prototype.getItem=function(a){for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];if(d.element===a)return d}},g.prototype.getItems=function(a){a=e.makeArray(a);for(var b=[],c=0,d=a.length;d>c;c++){var f=a[c],g=this.getItem(f);g&&b.push(g)}
45
+ return b},g.prototype.remove=function(a){var b=this.getItems(a);if(this._emitCompleteOnItems("remove",b),b&&b.length)for(var c=0,d=b.length;d>c;c++){var f=b[c];f.remove(),e.removeFrom(this.items,f)}},g.prototype.destroy=function(){var a=this.element.style;a.height="",a.position="",a.width="";for(var b=0,c=this.items.length;c>b;b++){var d=this.items[b];d.destroy()}
46
+ this.unbindResize();var e=this.element.outlayerGUID;delete l[e],delete this.element.outlayerGUID,i&&i.removeData(this.element,this.constructor.namespace)},g.data=function(a){a=e.getQueryElement(a);var b=a&&a.outlayerGUID;return b&&l[b]},g.create=function(a,b){function c(){g.apply(this,arguments)}
47
+ return Object.create?c.prototype=Object.create(g.prototype):e.extend(c.prototype,g.prototype),c.prototype.constructor=c,c.defaults=e.extend({},g.defaults),e.extend(c.defaults,b),c.prototype.settings={},c.namespace=a,c.data=g.data,c.Item=function(){f.apply(this,arguments)},c.Item.prototype=new f,e.htmlInit(c,a),i&&i.bridget&&i.bridget(a,c),c},g.Item=f,g}),function(a,b){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size","fizzy-ui-utils/utils"],b):"object"==typeof exports?module.exports=b(require("outlayer"),require("get-size"),require("fizzy-ui-utils")):a.Masonry=b(a.Outlayer,a.getSize,a.fizzyUIUtils)}(window,function(a,b,c){var d=a.create("masonry");return d.prototype._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns();var a=this.cols;for(this.colYs=[];a--;)this.colYs.push(0);this.maxY=0},d.prototype.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var a=this.items[0],c=a&&a.element;this.columnWidth=c&&b(c).outerWidth||this.containerWidth}
48
+ var d=this.columnWidth+=this.gutter,e=this.containerWidth+this.gutter,f=e/d,g=d-e%d,h=g&&1>g?"round":"floor";f=Math[h](f),this.cols=Math.max(f,1)},d.prototype.getContainerWidth=function(){var a=this.options.isFitWidth?this.element.parentNode:this.element,c=b(a);this.containerWidth=c&&c.innerWidth},d.prototype._getItemLayoutPosition=function(a){a.getSize();var b=a.size.outerWidth%this.columnWidth,d=b&&1>b?"round":"ceil",e=Math[d](a.size.outerWidth/this.columnWidth);e=Math.min(e,this.cols);for(var f=this._getColGroup(e),g=Math.min.apply(Math,f),h=c.indexOf(f,g),i={x:this.columnWidth*h,y:g},j=g+a.size.outerHeight,k=this.cols+1-f.length,l=0;k>l;l++)this.colYs[h+l]=j;return i},d.prototype._getColGroup=function(a){if(2>a)return this.colYs;for(var b=[],c=this.cols+1-a,d=0;c>d;d++){var e=this.colYs.slice(d,d+a);b[d]=Math.max.apply(Math,e)}
49
+ return b},d.prototype._manageStamp=function(a){var c=b(a),d=this._getElementOffset(a),e=this.options.isOriginLeft?d.left:d.right,f=e+c.outerWidth,g=Math.floor(e/this.columnWidth);g=Math.max(0,g);var h=Math.floor(f/this.columnWidth);h-=f%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var i=(this.options.isOriginTop?d.top:d.bottom)+c.outerHeight,j=g;h>=j;j++)this.colYs[j]=Math.max(i,this.colYs[j])},d.prototype._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var a={height:this.maxY};return this.options.isFitWidth&&(a.width=this._getContainerFitWidth()),a},d.prototype._getContainerFitWidth=function(){for(var a=0,b=this.cols;--b&&0===this.colYs[b];)a++;return(this.cols-a)*this.columnWidth-this.gutter},d.prototype.needsResizeLayout=function(){var a=this.containerWidth;return this.getContainerWidth(),a!==this.containerWidth},d})
50
+ function cffAddMasonry($self){if(jQuery(window).width()>780||$self.hasClass('masonry-2-mobile')){$self.addClass('cff-masonry cff-masonry-js').removeClass('cff-disable-masonry');if($self.find('.cff-item').length){$self.masonry({itemSelector:'.cff-new, .cff-item, .cff-likebox'});$self.find('.cff-item').each(function(){jQuery(this).css('margin-bottom','15px')})}else if($self.find('.cff-album-item').length){$self.masonry({itemSelector:'.cff-album-item'})}}else{$self.addClass('cff-disable-masonry')}}}
51
+ function cff_init(){jQuery('.cff-likebox iframe').each(function(){var $likebox=jQuery(this),likeboxWidth=$likebox.attr('data-likebox-width'),cffFeedWidth=$likebox.parent().width();if(likeboxWidth=='')likeboxWidth=340;if(cffFeedWidth<likeboxWidth)likeboxWidth=cffFeedWidth;$likebox.attr('src','https://www.facebook.com/plugins/page.php?href=https%3A%2F%2Fwww.facebook.com%2F'+$likebox.attr('data-likebox-id')+'%2F&tabs&width='+likeboxWidth+'&small_header='+$likebox.attr('data-likebox-header')+'&adapt_container_width=true&hide_cover='+$likebox.attr('data-hide-cover')+'&hide_cta='+$likebox.attr('data-hide-cta')+'&show_facepile='+$likebox.attr('data-likebox-faces')+'&locale='+$likebox.attr('data-locale'))});jQuery('#cff .cff-item').each(function(){var $self=jQuery(this);if($self.find('.cff-viewpost-facebook').parent('p').length){$self.find('.cff-viewpost-facebook').unwrap('p')}
52
+ if($self.find('.cff-author').parent('p').length){$self.find('.cff-author').eq(1).unwrap('p');$self.find('.cff-author').eq(1).remove()}
53
+ if($self.find('#cff .cff-link').parent('p').length){$self.find('#cff .cff-link').unwrap('p')}
54
+ var expanded=!1,$post_text=$self.find('.cff-post-text .cff-text'),text_limit=$self.closest('#cff').attr('data-char');if(typeof text_limit==='undefined'||text_limit=='')text_limit=99999;if($post_text.find('a.cff-post-text-link').length)$post_text=$self.find('.cff-post-text .cff-text a');var full_text=$post_text.html();if(full_text==undefined)full_text='';var cff_trunc_regx=new RegExp(/(<[^>]*>)/g);var cff_trunc_counter=0;full_text_arr=full_text.split(cff_trunc_regx);for(var i=0,len=full_text_arr.length;i<len;i++){if(!(cff_trunc_regx.test(full_text_arr[i]))){if(cff_trunc_counter==text_limit){full_text_arr.splice(i,1);continue}
55
+ cff_trunc_counter=cff_trunc_counter+full_text_arr[i].length;if(cff_trunc_counter>text_limit){var diff=cff_trunc_counter-text_limit;full_text_arr[i]=full_text_arr[i].slice(0,-diff);cff_trunc_counter=text_limit;if(full_text.length>text_limit)$self.find('.cff-expand').show()}}}
56
+ var short_text=full_text_arr.join('');short_text=short_text.replace(/(<(?!\/)[^>]+>)+(<\/[^>]+>)/g,"");var lastChar=short_text.substr(short_text.length-1);if(lastChar=='<')short_text=short_text.substring(0,short_text.length-1);short_text=short_text.replace(/(<br>\s*)+$/,'');short_text=short_text.replace(/(<img class="cff-linebreak">\s*)+$/,'');$post_text.html(short_text);$self.find('.cff-expand a').unbind('click').bind('click',function(e){e.preventDefault();var $expand=jQuery(this),$more=$expand.find('.cff-more'),$less=$expand.find('.cff-less');if(expanded==!1){$post_text.html(full_text);expanded=!0;$more.hide();$less.show()}else{$post_text.html(short_text);expanded=!1;$more.show();$less.hide()}
57
+ cffLinkHashtags();$post_text.find('a').attr('target','_blank')});$post_text.find('a').add($self.find('.cff-post-desc a')).attr({'target':'_blank','rel':'nofollow'});$sharedLink=$self.find('.cff-shared-link');if($sharedLink.text()==''){$sharedLink.remove()}
58
+ function cffLinkHashtags(){var cffTextStr=$self.find('.cff-text').html(),cffDescStr=$self.find('.cff-post-desc').html(),regex=/(^|\s)#(\w*[\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+\w*)/gi,linkcolor=$self.find('.cff-text').attr('data-color');function replacer(hash){var replacementString=jQuery.trim(hash);if(/^#[0-9A-F]{6}$/i.test(replacementString)){return replacementString}else{return' <a href="https://www.facebook.com/hashtag/'+replacementString.substring(1)+'" target="_blank" rel="nofollow" style="color:#'+linkcolor+'">'+replacementString+'</a>'}}
59
+ if(typeof cfflinkhashtags=='undefined')cfflinkhashtags='true';if(cfflinkhashtags=='true'){var $cffText=$self.find('.cff-text');if($cffText.length>0){cffTextStr=cffTextStr.replace(/<br>/g,"<br> ");$cffText.html(cffTextStr.replace(regex,replacer))}}
60
+ if($self.find('.cff-post-desc').length>0)$self.find('.cff-post-desc').html(cffDescStr.replace(regex,replacer))}
61
+ cffLinkHashtags();$self.find('.cff-text a').add($self.find('.cff-post-desc a')).attr({'target':'_blank','rel':'nofollow noopener noreferrer'});$self.find('.cff-share-link').unbind().bind('click',function(e){e.preventDefault();var $cffShareTooltip=$self.find('.cff-share-tooltip')
62
+ if($cffShareTooltip.is(':visible')){$cffShareTooltip.hide().find('a').removeClass('cff-show')}else{$cffShareTooltip.show();var time=0;$cffShareTooltip.find('a').each(function(){var $cffShareIcon=jQuery(this);setTimeout(function(){$cffShareIcon.addClass('cff-show')},time);time+=20})}})});jQuery('.cff-wrapper').each(function(){var $cff=jQuery(this).find('#cff');if($cff.hasClass('cff-masonry-js')){cffAddMasonry($cff);setTimeout(function(){cffAddMasonry($cff)},500);jQuery(window).resize(function(){setTimeout(function(){cffAddMasonry($cff)},500)});if($cff.find('.cff-credit').length)$cff.css('padding-bottom',30)}})}
63
  cff_init()}
js/jquery.matchHeight-min.js CHANGED
@@ -1,12 +1,12 @@
1
- /*
2
- * jquery-match-height 0.7.2 by @liabru
3
- * http://brm.io/jquery-match-height/
4
- * License MIT
5
- */
6
- !function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=-1,o=-1,n=function(t){return parseFloat(t)||0},a=function(e){var o=1,a=t(e),i=null,r=[];return a.each(function(){var e=t(this),a=e.offset().top-n(e.css("margin-top")),s=r.length>0?r[r.length-1]:null;null===s?r.push(e):Math.floor(Math.abs(i-a))<=o?r[r.length-1]=s.add(e):r.push(e),i=a}),r},i=function(e){var o={
7
- byRow:!0,property:"height",target:null,remove:!1};return"object"==typeof e?t.extend(o,e):("boolean"==typeof e?o.byRow=e:"remove"===e&&(o.remove=!0),o)},r=t.fn.matchHeight=function(e){var o=i(e);if(o.remove){var n=this;return this.css(o.property,""),t.each(r._groups,function(t,e){e.elements=e.elements.not(n)}),this}return this.length<=1&&!o.target?this:(r._groups.push({elements:this,options:o}),r._apply(this,o),this)};r.version="0.7.2",r._groups=[],r._throttle=80,r._maintainScroll=!1,r._beforeUpdate=null,
8
- r._afterUpdate=null,r._rows=a,r._parse=n,r._parseOptions=i,r._apply=function(e,o){var s=i(o),h=t(e),l=[h],c=t(window).scrollTop(),p=t("html").outerHeight(!0),u=h.parents().filter(":hidden");return u.each(function(){var e=t(this);e.data("style-cache",e.attr("style"))}),u.css("display","block"),s.byRow&&!s.target&&(h.each(function(){var e=t(this),o=e.css("display");"inline-block"!==o&&"flex"!==o&&"inline-flex"!==o&&(o="block"),e.data("style-cache",e.attr("style")),e.css({display:o,"padding-top":"0",
9
- "padding-bottom":"0","margin-top":"0","margin-bottom":"0","border-top-width":"0","border-bottom-width":"0",height:"100px",overflow:"hidden"})}),l=a(h),h.each(function(){var e=t(this);e.attr("style",e.data("style-cache")||"")})),t.each(l,function(e,o){var a=t(o),i=0;if(s.target)i=s.target.outerHeight(!1);else{if(s.byRow&&a.length<=1)return void a.css(s.property,"");a.each(function(){var e=t(this),o=e.attr("style"),n=e.css("display");"inline-block"!==n&&"flex"!==n&&"inline-flex"!==n&&(n="block");var a={
10
- display:n};a[s.property]="",e.css(a),e.outerHeight(!1)>i&&(i=e.outerHeight(!1)),o?e.attr("style",o):e.css("display","")})}a.each(function(){var e=t(this),o=0;s.target&&e.is(s.target)||("border-box"!==e.css("box-sizing")&&(o+=n(e.css("border-top-width"))+n(e.css("border-bottom-width")),o+=n(e.css("padding-top"))+n(e.css("padding-bottom"))),e.css(s.property,i-o+"px"))})}),u.each(function(){var e=t(this);e.attr("style",e.data("style-cache")||null)}),r._maintainScroll&&t(window).scrollTop(c/p*t("html").outerHeight(!0)),
11
- this},r._applyDataApi=function(){var e={};t("[data-match-height], [data-mh]").each(function(){var o=t(this),n=o.attr("data-mh")||o.attr("data-match-height");n in e?e[n]=e[n].add(o):e[n]=o}),t.each(e,function(){this.matchHeight(!0)})};var s=function(e){r._beforeUpdate&&r._beforeUpdate(e,r._groups),t.each(r._groups,function(){r._apply(this.elements,this.options)}),r._afterUpdate&&r._afterUpdate(e,r._groups)};r._update=function(n,a){if(a&&"resize"===a.type){var i=t(window).width();if(i===e)return;e=i;
12
- }n?o===-1&&(o=setTimeout(function(){s(a),o=-1},r._throttle)):s(a)},t(r._applyDataApi);var h=t.fn.on?"on":"bind";t(window)[h]("load",function(t){r._update(!1,t)}),t(window)[h]("resize orientationchange",function(t){r._update(!0,t)})});
1
+ /*
2
+ * jquery-match-height 0.7.2 by @liabru
3
+ * http://brm.io/jquery-match-height/
4
+ * License MIT
5
+ */
6
+ !function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=-1,o=-1,n=function(t){return parseFloat(t)||0},a=function(e){var o=1,a=t(e),i=null,r=[];return a.each(function(){var e=t(this),a=e.offset().top-n(e.css("margin-top")),s=r.length>0?r[r.length-1]:null;null===s?r.push(e):Math.floor(Math.abs(i-a))<=o?r[r.length-1]=s.add(e):r.push(e),i=a}),r},i=function(e){var o={
7
+ byRow:!0,property:"height",target:null,remove:!1};return"object"==typeof e?t.extend(o,e):("boolean"==typeof e?o.byRow=e:"remove"===e&&(o.remove=!0),o)},r=t.fn.matchHeight=function(e){var o=i(e);if(o.remove){var n=this;return this.css(o.property,""),t.each(r._groups,function(t,e){e.elements=e.elements.not(n)}),this}return this.length<=1&&!o.target?this:(r._groups.push({elements:this,options:o}),r._apply(this,o),this)};r.version="0.7.2",r._groups=[],r._throttle=80,r._maintainScroll=!1,r._beforeUpdate=null,
8
+ r._afterUpdate=null,r._rows=a,r._parse=n,r._parseOptions=i,r._apply=function(e,o){var s=i(o),h=t(e),l=[h],c=t(window).scrollTop(),p=t("html").outerHeight(!0),u=h.parents().filter(":hidden");return u.each(function(){var e=t(this);e.data("style-cache",e.attr("style"))}),u.css("display","block"),s.byRow&&!s.target&&(h.each(function(){var e=t(this),o=e.css("display");"inline-block"!==o&&"flex"!==o&&"inline-flex"!==o&&(o="block"),e.data("style-cache",e.attr("style")),e.css({display:o,"padding-top":"0",
9
+ "padding-bottom":"0","margin-top":"0","margin-bottom":"0","border-top-width":"0","border-bottom-width":"0",height:"100px",overflow:"hidden"})}),l=a(h),h.each(function(){var e=t(this);e.attr("style",e.data("style-cache")||"")})),t.each(l,function(e,o){var a=t(o),i=0;if(s.target)i=s.target.outerHeight(!1);else{if(s.byRow&&a.length<=1)return void a.css(s.property,"");a.each(function(){var e=t(this),o=e.attr("style"),n=e.css("display");"inline-block"!==n&&"flex"!==n&&"inline-flex"!==n&&(n="block");var a={
10
+ display:n};a[s.property]="",e.css(a),e.outerHeight(!1)>i&&(i=e.outerHeight(!1)),o?e.attr("style",o):e.css("display","")})}a.each(function(){var e=t(this),o=0;s.target&&e.is(s.target)||("border-box"!==e.css("box-sizing")&&(o+=n(e.css("border-top-width"))+n(e.css("border-bottom-width")),o+=n(e.css("padding-top"))+n(e.css("padding-bottom"))),e.css(s.property,i-o+"px"))})}),u.each(function(){var e=t(this);e.attr("style",e.data("style-cache")||null)}),r._maintainScroll&&t(window).scrollTop(c/p*t("html").outerHeight(!0)),
11
+ this},r._applyDataApi=function(){var e={};t("[data-match-height], [data-mh]").each(function(){var o=t(this),n=o.attr("data-mh")||o.attr("data-match-height");n in e?e[n]=e[n].add(o):e[n]=o}),t.each(e,function(){this.matchHeight(!0)})};var s=function(e){r._beforeUpdate&&r._beforeUpdate(e,r._groups),t.each(r._groups,function(){r._apply(this.elements,this.options)}),r._afterUpdate&&r._afterUpdate(e,r._groups)};r._update=function(n,a){if(a&&"resize"===a.type){var i=t(window).width();if(i===e)return;e=i;
12
+ }n?o===-1&&(o=setTimeout(function(){s(a),o=-1},r._throttle)):s(a)},t(r._applyDataApi);var h=t.fn.on?"on":"bind";t(window)[h]("load",function(t){r._update(!1,t)}),t(window)[h]("resize orientationchange",function(t){r._update(!0,t)})});
languages/custom-facebook-feed.po CHANGED
@@ -1,2300 +1,2300 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: \n"
4
- "POT-Creation-Date: 2020-03-26 13:28-0500\n"
5
- "PO-Revision-Date: 2020-03-26 13:29-0500\n"
6
- "Last-Translator: \n"
7
- "Language-Team: \n"
8
- "Language: en_US\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 2.3\n"
13
- "X-Poedit-Basepath: ..\n"
14
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
- "X-Poedit-KeywordsList: __;_e;esc_html_e;esc_attr_e\n"
16
- "X-Poedit-SearchPath-0: .\n"
17
-
18
- #: custom-facebook-feed-admin.php:113 custom-facebook-feed-admin.php:1943
19
- msgid "Settings saved."
20
- msgstr ""
21
-
22
- #: custom-facebook-feed-admin.php:126 custom-facebook-feed-admin.php:1954
23
- msgid ""
24
- "You're using Custom Facebook Feed Lite. To unlock more features consider <a "
25
- "href=\"https://smashballoon.com/custom-facebook-feed/?"
26
- "utm_source=WordPress&utm_campaign=facebookliteplugin&utm_medium=notice-bar\" "
27
- "target=\"_blank\" rel=\"noopener noreferrer\">upgrading to Pro</a>."
28
- msgstr ""
29
-
30
- #: custom-facebook-feed-admin.php:127 custom-facebook-feed-admin.php:1955
31
- msgid "Dismiss this message."
32
- msgstr ""
33
-
34
- #: custom-facebook-feed-admin.php:133 custom-facebook-feed-admin.php:1962
35
- #: custom-facebook-feed-admin.php:4355
36
- msgid "Custom Facebook Feed"
37
- msgstr ""
38
-
39
- #: custom-facebook-feed-admin.php:140 custom-facebook-feed-admin.php:152
40
- #: custom-facebook-feed-admin.php:1974
41
- msgid "Configuration"
42
- msgstr ""
43
-
44
- #: custom-facebook-feed-admin.php:141 custom-facebook-feed-admin.php:1975
45
- msgid "Customize"
46
- msgstr ""
47
-
48
- #: custom-facebook-feed-admin.php:142 custom-facebook-feed-admin.php:763
49
- #: custom-facebook-feed-admin.php:1976 custom-facebook-feed-admin.php:2480
50
- msgid "Support"
51
- msgstr ""
52
-
53
- #: custom-facebook-feed-admin.php:178 custom-facebook-feed-admin.php:180
54
- msgid "Continue"
55
- msgstr ""
56
-
57
- #: custom-facebook-feed-admin.php:190
58
- msgid "Log in and get my Access Token"
59
- msgstr ""
60
-
61
- #: custom-facebook-feed-admin.php:363
62
- msgid "Show Available Groups"
63
- msgstr ""
64
-
65
- #: custom-facebook-feed-admin.php:363
66
- msgid "Show Available Pages"
67
- msgstr ""
68
-
69
- #: custom-facebook-feed-admin.php:375
70
- msgid ""
71
- "Facebook Page ID<br /><i style=\"font-weight: normal; font-size: 12px;\">ID "
72
- "of your Facebook Page or Group</i>"
73
- msgstr ""
74
-
75
- #: custom-facebook-feed-admin.php:380
76
- msgid "What's my Page ID?"
77
- msgstr ""
78
-
79
- #: custom-facebook-feed-admin.php:384
80
- msgid ""
81
- "<b>Facebook Page</b><br />\r\n"
82
- " You can find the ID of your Facebook "
83
- "<b>Page</b> from the URL. In each URL format, the ID is highlighted below:"
84
- "<br /><br />\r\n"
85
- " URL Format 1: <code>https://www.facebook."
86
- "com/<span class=\"cff-highlight\">your_page_name</span></code>\r\n"
87
- " <br />\r\n"
88
- " URL Format 2: <code>https://www.facebook."
89
- "com/your_page_name-<span class=\"cff-highlight\">1234567890</span></code>\r\n"
90
- " <br />\r\n"
91
- " URL Format 3: <code>https://www.facebook."
92
- "com/pages/your_page_name/<span class=\"cff-highlight\">1234567890</span></"
93
- "code>\r\n"
94
- " "
95
- msgstr ""
96
-
97
- #: custom-facebook-feed-admin.php:393
98
- msgid ""
99
- "<b>Facebook Group</b><br />You can find the ID of your Facebook <b>Group</b> "
100
- "from the URL, like so: <code>https://www.facebook.com/groups/<span class="
101
- "\"cff-highlight\">1234567890</span></code>"
102
- msgstr ""
103
-
104
- #: custom-facebook-feed-admin.php:417
105
- msgid "Facebook Access Token"
106
- msgstr ""
107
-
108
- #: custom-facebook-feed-admin.php:417
109
- msgid "Required"
110
- msgstr ""
111
-
112
- #: custom-facebook-feed-admin.php:419 custom-facebook-feed-admin.php:3580
113
- msgid "What is this?"
114
- msgstr ""
115
-
116
- #: custom-facebook-feed-admin.php:420
117
- msgid ""
118
- "In order to connect to Facebook and get a feed, you need to use an Access "
119
- "Token. To get one, simply use the blue button above to log into your "
120
- "Facebook account. You will then receive a token that will be used to connect "
121
- "to Facebook's API. If you already have an Access Token then you can enter it "
122
- "here."
123
- msgstr ""
124
-
125
- #: custom-facebook-feed-admin.php:423
126
- msgid ""
127
- "<p>This doesn't appear to be an Access Token. Please be sure that you didn't "
128
- "enter your App Secret instead of your Access Token.<br />Your App ID and App "
129
- "Secret are used to obtain your Access Token; simply paste them into the "
130
- "fields in the last step of the <a href='https://smashballoon.com/custom-"
131
- "facebook-feed/access-token/' target='_blank'>Access Token instructions</a> "
132
- "and click '<b>Get my Access Token</b>'.</p>"
133
- msgstr ""
134
-
135
- #: custom-facebook-feed-admin.php:435
136
- msgid "Is it a Facebook page or group?"
137
- msgstr ""
138
-
139
- #: custom-facebook-feed-admin.php:437
140
- msgid "- Select one -"
141
- msgstr ""
142
-
143
- #: custom-facebook-feed-admin.php:438 custom-facebook-feed-admin.php:446
144
- #: custom-facebook-feed-admin.php:453 custom-facebook-feed-admin.php:456
145
- #: custom-facebook-feed-admin.php:463 custom-facebook-feed-admin.php:499
146
- msgid "Page"
147
- msgstr ""
148
-
149
- #: custom-facebook-feed-admin.php:439 custom-facebook-feed-admin.php:446
150
- #: custom-facebook-feed-admin.php:453 custom-facebook-feed-admin.php:456
151
- #: custom-facebook-feed-admin.php:463 custom-facebook-feed-admin.php:500
152
- msgid "Group"
153
- msgstr ""
154
-
155
- #: custom-facebook-feed-admin.php:446
156
- msgid "Name"
157
- msgstr ""
158
-
159
- #: custom-facebook-feed-admin.php:446
160
- msgid "(optional)"
161
- msgstr ""
162
-
163
- #: custom-facebook-feed-admin.php:449
164
- msgid "This is just for labeling the account here on this settings page"
165
- msgstr ""
166
-
167
- #: custom-facebook-feed-admin.php:453
168
- msgid "ID"
169
- msgstr ""
170
-
171
- #: custom-facebook-feed-admin.php:456
172
- msgid "The ID of the Facebook"
173
- msgstr ""
174
-
175
- #: custom-facebook-feed-admin.php:456
176
- msgid "you want to add."
177
- msgstr ""
178
-
179
- #: custom-facebook-feed-admin.php:456
180
- msgid "How do I find my Page ID?"
181
- msgstr ""
182
-
183
- #: custom-facebook-feed-admin.php:460
184
- msgid "Access Token"
185
- msgstr ""
186
-
187
- #: custom-facebook-feed-admin.php:463
188
- msgid "The Access Token of the Facebook"
189
- msgstr ""
190
-
191
- #: custom-facebook-feed-admin.php:463
192
- msgid "you want to add"
193
- msgstr ""
194
-
195
- #: custom-facebook-feed-admin.php:492 custom-facebook-feed-admin.php:4158
196
- msgid "Settings"
197
- msgstr ""
198
-
199
- #: custom-facebook-feed-admin.php:495
200
- msgid "Is it a page or group?"
201
- msgstr ""
202
-
203
- #: custom-facebook-feed-admin.php:501
204
- msgid "Profile"
205
- msgstr ""
206
-
207
- #: custom-facebook-feed-admin.php:504
208
- msgid ""
209
- "<p>Due to Facebook's privacy policy you're not able to display posts from a "
210
- "personal profile, only from a public Facebook Page.</p><p>If you're using a "
211
- "profile to represent a business, organization, product, public figure or the "
212
- "like, then Facebook recommends <a href='http://www.facebook.com/"
213
- "help/175644189234902/' target='_blank'>converting your profile to a page</"
214
- "a>. There are many advantages to using pages over profiles, and once you've "
215
- "converted then the plugin will be able to successfully retrieve and display "
216
- "all of your posts.</p>"
217
- msgstr ""
218
-
219
- #: custom-facebook-feed-admin.php:510
220
- msgid "Show posts on my page by:"
221
- msgstr ""
222
-
223
- #: custom-facebook-feed-admin.php:514
224
- msgid "Only the page owner (me)"
225
- msgstr ""
226
-
227
- #: custom-facebook-feed-admin.php:515
228
- msgid "Page owner + other people"
229
- msgstr ""
230
-
231
- #: custom-facebook-feed-admin.php:516
232
- msgid "Only other people"
233
- msgstr ""
234
-
235
- #: custom-facebook-feed-admin.php:522
236
- msgid "Number of posts to display"
237
- msgstr ""
238
-
239
- #: custom-facebook-feed-admin.php:530
240
- msgid "Facebook API post limit"
241
- msgstr ""
242
-
243
- #: custom-facebook-feed-admin.php:534 custom-facebook-feed-admin.php:544
244
- #: custom-facebook-feed-admin.php:3917
245
- msgid "Auto"
246
- msgstr ""
247
-
248
- #: custom-facebook-feed-admin.php:535 custom-facebook-feed-admin.php:547
249
- msgid "Manual"
250
- msgstr ""
251
-
252
- #: custom-facebook-feed-admin.php:542
253
- msgid ""
254
- "The post 'limit' is the number of posts retrieved from the Facebook API. "
255
- "Most users won't need to manually adjust this setting as by default the "
256
- "plugin automatically retrieves a few more posts from the Facebook API than "
257
- "you need, as some posts may be filtered out."
258
- msgstr ""
259
-
260
- #: custom-facebook-feed-admin.php:544
261
- msgid "Recommended"
262
- msgstr ""
263
-
264
- #: custom-facebook-feed-admin.php:545
265
- msgid ""
266
- "Allow the plugin to automatically decide how many posts to retrieve from "
267
- "Facebook's API."
268
- msgstr ""
269
-
270
- #: custom-facebook-feed-admin.php:548
271
- msgid ""
272
- "Manually set how many posts to retrieve from Facebook's API.<br /><b>Note:</"
273
- "b> If you choose to retrieve a high number of posts then it will take longer "
274
- "for Facebook to return the posts when the plugin checks for new ones."
275
- msgstr ""
276
-
277
- #: custom-facebook-feed-admin.php:552
278
- msgid "Check for new posts every"
279
- msgstr ""
280
-
281
- #: custom-facebook-feed-admin.php:556
282
- msgid "Minutes"
283
- msgstr ""
284
-
285
- #: custom-facebook-feed-admin.php:557
286
- msgid "Hours"
287
- msgstr ""
288
-
289
- #: custom-facebook-feed-admin.php:558
290
- msgid "Days"
291
- msgstr ""
292
-
293
- #: custom-facebook-feed-admin.php:561
294
- msgid ""
295
- "Your Facebook posts and comments data is temporarily cached by the plugin in "
296
- "your WordPress database. You can choose how long this data should be cached "
297
- "for. If you set the time to 60 minutes then the plugin will clear the cached "
298
- "data after that length of time, and the next time the page is viewed it will "
299
- "check for new data."
300
- msgstr ""
301
-
302
- #: custom-facebook-feed-admin.php:566
303
- msgid "Localization"
304
- msgstr ""
305
-
306
- #: custom-facebook-feed-admin.php:570
307
- msgid "Afrikaans"
308
- msgstr ""
309
-
310
- #: custom-facebook-feed-admin.php:571
311
- msgid "Arabic"
312
- msgstr ""
313
-
314
- #: custom-facebook-feed-admin.php:572
315
- msgid "Azerbaijani"
316
- msgstr ""
317
-
318
- #: custom-facebook-feed-admin.php:573
319
- msgid "Belarusian"
320
- msgstr ""
321
-
322
- #: custom-facebook-feed-admin.php:574
323
- msgid "Bulgarian"
324
- msgstr ""
325
-
326
- #: custom-facebook-feed-admin.php:575
327
- msgid "Bengali"
328
- msgstr ""
329
-
330
- #: custom-facebook-feed-admin.php:576
331
- msgid "Bosnian"
332
- msgstr ""
333
-
334
- #: custom-facebook-feed-admin.php:577
335
- msgid "Catalan"
336
- msgstr ""
337
-
338
- #: custom-facebook-feed-admin.php:578
339
- msgid "Czech"
340
- msgstr ""
341
-
342
- #: custom-facebook-feed-admin.php:579
343
- msgid "Welsh"
344
- msgstr ""
345
-
346
- #: custom-facebook-feed-admin.php:580
347
- msgid "Danish"
348
- msgstr ""
349
-
350
- #: custom-facebook-feed-admin.php:581
351
- msgid "German"
352
- msgstr ""
353
-
354
- #: custom-facebook-feed-admin.php:582
355
- msgid "Greek"
356
- msgstr ""
357
-
358
- #: custom-facebook-feed-admin.php:583
359
- msgid "English (UK)"
360
- msgstr ""
361
-
362
- #: custom-facebook-feed-admin.php:584
363
- msgid "English (Pirate)"
364
- msgstr ""
365
-
366
- #: custom-facebook-feed-admin.php:585
367
- msgid "English (Upside Down)"
368
- msgstr ""
369
-
370
- #: custom-facebook-feed-admin.php:586
371
- msgid "English (US)"
372
- msgstr ""
373
-
374
- #: custom-facebook-feed-admin.php:587
375
- msgid "Esperanto"
376
- msgstr ""
377
-
378
- #: custom-facebook-feed-admin.php:588
379
- msgid "Spanish (Spain)"
380
- msgstr ""
381
-
382
- #: custom-facebook-feed-admin.php:589
383
- msgid "Spanish"
384
- msgstr ""
385
-
386
- #: custom-facebook-feed-admin.php:590
387
- msgid "Estonian"
388
- msgstr ""
389
-
390
- #: custom-facebook-feed-admin.php:591
391
- msgid "Basque"
392
- msgstr ""
393
-
394
- #: custom-facebook-feed-admin.php:592
395
- msgid "Persian"
396
- msgstr ""
397
-
398
- #: custom-facebook-feed-admin.php:593
399
- msgid "Leet Speak"
400
- msgstr ""
401
-
402
- #: custom-facebook-feed-admin.php:594
403
- msgid "Finnish"
404
- msgstr ""
405
-
406
- #: custom-facebook-feed-admin.php:595
407
- msgid "Faroese"
408
- msgstr ""
409
-
410
- #: custom-facebook-feed-admin.php:596
411
- msgid "French (Canada)"
412
- msgstr ""
413
-
414
- #: custom-facebook-feed-admin.php:597
415
- msgid "French (France)"
416
- msgstr ""
417
-
418
- #: custom-facebook-feed-admin.php:598
419
- msgid "Frisian"
420
- msgstr ""
421
-
422
- #: custom-facebook-feed-admin.php:599
423
- msgid "Irish"
424
- msgstr ""
425
-
426
- #: custom-facebook-feed-admin.php:600
427
- msgid "Galician"
428
- msgstr ""
429
-
430
- #: custom-facebook-feed-admin.php:601
431
- msgid "Hebrew"
432
- msgstr ""
433
-
434
- #: custom-facebook-feed-admin.php:602
435
- msgid "Hindi"
436
- msgstr ""
437
-
438
- #: custom-facebook-feed-admin.php:603
439
- msgid "Croatian"
440
- msgstr ""
441
-
442
- #: custom-facebook-feed-admin.php:604
443
- msgid "Hungarian"
444
- msgstr ""
445
-
446
- #: custom-facebook-feed-admin.php:605
447
- msgid "Armenian"
448
- msgstr ""
449
-
450
- #: custom-facebook-feed-admin.php:606
451
- msgid "Indonesian"
452
- msgstr ""
453
-
454
- #: custom-facebook-feed-admin.php:607
455
- msgid "Icelandic"
456
- msgstr ""
457
-
458
- #: custom-facebook-feed-admin.php:608
459
- msgid "Italian"
460
- msgstr ""
461
-
462
- #: custom-facebook-feed-admin.php:609
463
- msgid "Japanese"
464
- msgstr ""
465
-
466
- #: custom-facebook-feed-admin.php:610
467
- msgid "Georgian"
468
- msgstr ""
469
-
470
- #: custom-facebook-feed-admin.php:611
471
- msgid "Khmer"
472
- msgstr ""
473
-
474
- #: custom-facebook-feed-admin.php:612
475
- msgid "Korean"
476
- msgstr ""
477
-
478
- #: custom-facebook-feed-admin.php:613
479
- msgid "Kurdish"
480
- msgstr ""
481
-
482
- #: custom-facebook-feed-admin.php:614
483
- msgid "Latin"
484
- msgstr ""
485
-
486
- #: custom-facebook-feed-admin.php:615
487
- msgid "Lithuanian"
488
- msgstr ""
489
-
490
- #: custom-facebook-feed-admin.php:616
491
- msgid "Latvian"
492
- msgstr ""
493
-
494
- #: custom-facebook-feed-admin.php:617
495
- msgid "Macedonian"
496
- msgstr ""
497
-
498
- #: custom-facebook-feed-admin.php:618
499
- msgid "Malayalam"
500
- msgstr ""
501
-
502
- #: custom-facebook-feed-admin.php:619
503
- msgid "Malay"
504
- msgstr ""
505
-
506
- #: custom-facebook-feed-admin.php:620
507
- msgid "Norwegian (bokmal)"
508
- msgstr ""
509
-
510
- #: custom-facebook-feed-admin.php:621
511
- msgid "Nepali"
512
- msgstr ""
513
-
514
- #: custom-facebook-feed-admin.php:622
515
- msgid "Dutch"
516
- msgstr ""
517
-
518
- #: custom-facebook-feed-admin.php:623
519
- msgid "Norwegian (nynorsk)"
520
- msgstr ""
521
-
522
- #: custom-facebook-feed-admin.php:624
523
- msgid "Punjabi"
524
- msgstr ""
525
-
526
- #: custom-facebook-feed-admin.php:625
527
- msgid "Polish"
528
- msgstr ""
529
-
530
- #: custom-facebook-feed-admin.php:626
531
- msgid "Pashto"
532
- msgstr ""
533
-
534
- #: custom-facebook-feed-admin.php:627
535
- msgid "Portuguese (Brazil)"
536
- msgstr ""
537
-
538
- #: custom-facebook-feed-admin.php:628
539
- msgid "Portuguese (Portugal)"
540
- msgstr ""
541
-
542
- #: custom-facebook-feed-admin.php:629
543
- msgid "Romanian"
544
- msgstr ""
545
-
546
- #: custom-facebook-feed-admin.php:630
547
- msgid "Russian"
548
- msgstr ""
549
-
550
- #: custom-facebook-feed-admin.php:631
551
- msgid "Slovak"
552
- msgstr ""
553
-
554
- #: custom-facebook-feed-admin.php:632
555
- msgid "Slovenian"
556
- msgstr ""
557
-
558
- #: custom-facebook-feed-admin.php:633
559
- msgid "Albanian"
560
- msgstr ""
561
-
562
- #: custom-facebook-feed-admin.php:634
563
- msgid "Serbian"
564
- msgstr ""
565
-
566
- #: custom-facebook-feed-admin.php:635
567
- msgid "Swedish"
568
- msgstr ""
569
-
570
- #: custom-facebook-feed-admin.php:636
571
- msgid "Swahili"
572
- msgstr ""
573
-
574
- #: custom-facebook-feed-admin.php:637
575
- msgid "Tamil"
576
- msgstr ""
577
-
578
- #: custom-facebook-feed-admin.php:638
579
- msgid "Telugu"
580
- msgstr ""
581
-
582
- #: custom-facebook-feed-admin.php:639
583
- msgid "Thai"
584
- msgstr ""
585
-
586
- #: custom-facebook-feed-admin.php:640
587
- msgid "Filipino"
588
- msgstr ""
589
-
590
- #: custom-facebook-feed-admin.php:641
591
- msgid "Turkish"
592
- msgstr ""
593
-
594
- #: custom-facebook-feed-admin.php:642
595
- msgid "Ukrainian"
596
- msgstr ""
597
-
598
- #: custom-facebook-feed-admin.php:643
599
- msgid "Vietnamese"
600
- msgstr ""
601
-
602
- #: custom-facebook-feed-admin.php:644
603
- msgid "Simplified Chinese (China)"
604
- msgstr ""
605
-
606
- #: custom-facebook-feed-admin.php:645
607
- msgid "Traditional Chinese (Hong Kong)"
608
- msgstr ""
609
-
610
- #: custom-facebook-feed-admin.php:646
611
- msgid "Traditional Chinese (Taiwan)"
612
- msgstr ""
613
-
614
- #: custom-facebook-feed-admin.php:649
615
- msgid ""
616
- "This translates some of the text sent by Facebook, specifically, the "
617
- "descriptive post text (eg: Smash Balloon shared a link) and the text in the "
618
- "'Like Box' widget. To find out how to translate the other text in the plugin "
619
- "see <a href='https://smashballoon.com/cff-how-does-the-plugin-handle-text-"
620
- "and-language-translation/' target='_blank'>this FAQ</a>."
621
- msgstr ""
622
-
623
- #: custom-facebook-feed-admin.php:654 custom-facebook-feed-admin.php:3056
624
- msgid "Timezone"
625
- msgstr ""
626
-
627
- #: custom-facebook-feed-admin.php:659 custom-facebook-feed-admin.php:3061
628
- msgid "(GMT-11:00) Midway Island, Samoa"
629
- msgstr ""
630
-
631
- #: custom-facebook-feed-admin.php:660 custom-facebook-feed-admin.php:3062
632
- msgid "(GMT-10:00) Hawaii-Aleutian"
633
- msgstr ""
634
-
635
- #: custom-facebook-feed-admin.php:661 custom-facebook-feed-admin.php:3063
636
- msgid "(GMT-10:00) Hawaii"
637
- msgstr ""
638
-
639
- #: custom-facebook-feed-admin.php:662 custom-facebook-feed-admin.php:3064
640
- msgid "(GMT-09:30) Marquesas Islands"
641
- msgstr ""
642
-
643
- #: custom-facebook-feed-admin.php:663 custom-facebook-feed-admin.php:3065
644
- msgid "(GMT-09:00) Gambier Islands"
645
- msgstr ""
646
-
647
- #: custom-facebook-feed-admin.php:664 custom-facebook-feed-admin.php:3066
648
- msgid "(GMT-09:00) Alaska"
649
- msgstr ""
650
-
651
- #: custom-facebook-feed-admin.php:665 custom-facebook-feed-admin.php:3067
652
- msgid "(GMT-08:00) Tijuana, Baja California"
653
- msgstr ""
654
-
655
- #: custom-facebook-feed-admin.php:666 custom-facebook-feed-admin.php:3068
656
- msgid "(GMT-08:00) Pitcairn Islands"
657
- msgstr ""
658
-
659
- #: custom-facebook-feed-admin.php:667 custom-facebook-feed-admin.php:3069
660
- msgid "(GMT-08:00) Pacific Time (US & Canada)"
661
- msgstr ""
662
-
663
- #: custom-facebook-feed-admin.php:668 custom-facebook-feed-admin.php:3070
664
- msgid "(GMT-07:00) Mountain Time (US & Canada)"
665
- msgstr ""
666
-
667
- #: custom-facebook-feed-admin.php:669 custom-facebook-feed-admin.php:3071
668
- msgid "(GMT-07:00) Chihuahua, La Paz, Mazatlan"
669
- msgstr ""
670
-
671
- #: custom-facebook-feed-admin.php:670 custom-facebook-feed-admin.php:3072
672
- msgid "(GMT-07:00) Arizona"
673
- msgstr ""
674
-
675
- #: custom-facebook-feed-admin.php:671 custom-facebook-feed-admin.php:3073
676
- msgid "(GMT-06:00) Saskatchewan, Central America"
677
- msgstr ""
678
-
679
- #: custom-facebook-feed-admin.php:672 custom-facebook-feed-admin.php:3074
680
- msgid "(GMT-06:00) Guadalajara, Mexico City, Monterrey"
681
- msgstr ""
682
-
683
- #: custom-facebook-feed-admin.php:673 custom-facebook-feed-admin.php:3075
684
- msgid "(GMT-06:00) Easter Island"
685
- msgstr ""
686
-
687
- #: custom-facebook-feed-admin.php:674 custom-facebook-feed-admin.php:3076
688
- msgid "(GMT-06:00) Central Time (US & Canada)"
689
- msgstr ""
690
-
691
- #: custom-facebook-feed-admin.php:675 custom-facebook-feed-admin.php:3077
692
- msgid "(GMT-05:00) Eastern Time (US & Canada)"
693
- msgstr ""
694
-
695
- #: custom-facebook-feed-admin.php:676 custom-facebook-feed-admin.php:3078
696
- msgid "(GMT-05:00) Cuba"
697
- msgstr ""
698
-
699
- #: custom-facebook-feed-admin.php:677 custom-facebook-feed-admin.php:3079
700
- msgid "(GMT-05:00) Bogota, Lima, Quito, Rio Branco"
701
- msgstr ""
702
-
703
- #: custom-facebook-feed-admin.php:678 custom-facebook-feed-admin.php:3080
704
- msgid "(GMT-04:30) Caracas"
705
- msgstr ""
706
-
707
- #: custom-facebook-feed-admin.php:679 custom-facebook-feed-admin.php:3081
708
- msgid "(GMT-04:00) Santiago"
709
- msgstr ""
710
-
711
- #: custom-facebook-feed-admin.php:680 custom-facebook-feed-admin.php:3082
712
- msgid "(GMT-04:00) La Paz"
713
- msgstr ""
714
-
715
- #: custom-facebook-feed-admin.php:681 custom-facebook-feed-admin.php:3083
716
- msgid "(GMT-04:00) Faukland Islands"
717
- msgstr ""
718
-
719
- #: custom-facebook-feed-admin.php:682 custom-facebook-feed-admin.php:3084
720
- msgid "(GMT-04:00) Brazil"
721
- msgstr ""
722
-
723
- #: custom-facebook-feed-admin.php:683 custom-facebook-feed-admin.php:3085
724
- msgid "(GMT-04:00) Atlantic Time (Goose Bay)"
725
- msgstr ""
726
-
727
- #: custom-facebook-feed-admin.php:684 custom-facebook-feed-admin.php:3086
728
- msgid "(GMT-04:00) Atlantic Time (Canada)"
729
- msgstr ""
730
-
731
- #: custom-facebook-feed-admin.php:685 custom-facebook-feed-admin.php:3087
732
- msgid "(GMT-03:30) Newfoundland"
733
- msgstr ""
734
-
735
- #: custom-facebook-feed-admin.php:686 custom-facebook-feed-admin.php:3088
736
- msgid "(GMT-03:00) UTC-3"
737
- msgstr ""
738
-
739
- #: custom-facebook-feed-admin.php:687 custom-facebook-feed-admin.php:3089
740
- msgid "(GMT-03:00) Montevideo"
741
- msgstr ""
742
-
743
- #: custom-facebook-feed-admin.php:688 custom-facebook-feed-admin.php:3090
744
- msgid "(GMT-03:00) Miquelon, St. Pierre"
745
- msgstr ""
746
-
747
- #: custom-facebook-feed-admin.php:689 custom-facebook-feed-admin.php:3091
748
- msgid "(GMT-03:00) Greenland"
749
- msgstr ""
750
-
751
- #: custom-facebook-feed-admin.php:690 custom-facebook-feed-admin.php:3092
752
- msgid "(GMT-03:00) Buenos Aires"
753
- msgstr ""
754
-
755
- #: custom-facebook-feed-admin.php:691 custom-facebook-feed-admin.php:3093
756
- msgid "(GMT-03:00) Brasilia"
757
- msgstr ""
758
-
759
- #: custom-facebook-feed-admin.php:692 custom-facebook-feed-admin.php:3094
760
- msgid "(GMT-02:00) Mid-Atlantic"
761
- msgstr ""
762
-
763
- #: custom-facebook-feed-admin.php:693 custom-facebook-feed-admin.php:3095
764
- msgid "(GMT-01:00) Cape Verde Is."
765
- msgstr ""
766
-
767
- #: custom-facebook-feed-admin.php:694 custom-facebook-feed-admin.php:3096
768
- msgid "(GMT-01:00) Azores"
769
- msgstr ""
770
-
771
- #: custom-facebook-feed-admin.php:695 custom-facebook-feed-admin.php:3097
772
- msgid "(GMT) Greenwich Mean Time : Belfast"
773
- msgstr ""
774
-
775
- #: custom-facebook-feed-admin.php:696 custom-facebook-feed-admin.php:3098
776
- msgid "(GMT) Greenwich Mean Time : Dublin"
777
- msgstr ""
778
-
779
- #: custom-facebook-feed-admin.php:697 custom-facebook-feed-admin.php:3099
780
- msgid "(GMT) Greenwich Mean Time : Lisbon"
781
- msgstr ""
782
-
783
- #: custom-facebook-feed-admin.php:698 custom-facebook-feed-admin.php:3100
784
- msgid "(GMT) Greenwich Mean Time : London"
785
- msgstr ""
786
-
787
- #: custom-facebook-feed-admin.php:699 custom-facebook-feed-admin.php:3101
788
- msgid "(GMT) Monrovia, Reykjavik"
789
- msgstr ""
790
-
791
- #: custom-facebook-feed-admin.php:700 custom-facebook-feed-admin.php:3102
792
- msgid "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"
793
- msgstr ""
794
-
795
- #: custom-facebook-feed-admin.php:701 custom-facebook-feed-admin.php:3103
796
- msgid "(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague"
797
- msgstr ""
798
-
799
- #: custom-facebook-feed-admin.php:702 custom-facebook-feed-admin.php:3104
800
- msgid "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"
801
- msgstr ""
802
-
803
- #: custom-facebook-feed-admin.php:703 custom-facebook-feed-admin.php:3105
804
- msgid "(GMT+01:00) West Central Africa"
805
- msgstr ""
806
-
807
- #: custom-facebook-feed-admin.php:704 custom-facebook-feed-admin.php:3106
808
- msgid "(GMT+01:00) Windhoek"
809
- msgstr ""
810
-
811
- #: custom-facebook-feed-admin.php:705 custom-facebook-feed-admin.php:3107
812
- msgid "(GMT+02:00) Beirut"
813
- msgstr ""
814
-
815
- #: custom-facebook-feed-admin.php:706 custom-facebook-feed-admin.php:3108
816
- msgid "(GMT+02:00) Cairo"
817
- msgstr ""
818
-
819
- #: custom-facebook-feed-admin.php:707 custom-facebook-feed-admin.php:3109
820
- msgid "(GMT+02:00) Gaza"
821
- msgstr ""
822
-
823
- #: custom-facebook-feed-admin.php:708 custom-facebook-feed-admin.php:3110
824
- msgid "(GMT+02:00) Harare, Pretoria"
825
- msgstr ""
826
-
827
- #: custom-facebook-feed-admin.php:709 custom-facebook-feed-admin.php:3111
828
- msgid "(GMT+02:00) Jerusalem"
829
- msgstr ""
830
-
831
- #: custom-facebook-feed-admin.php:710 custom-facebook-feed-admin.php:3113
832
- msgid "(GMT+02:00) Minsk"
833
- msgstr ""
834
-
835
- #: custom-facebook-feed-admin.php:711 custom-facebook-feed-admin.php:3114
836
- msgid "(GMT+02:00) Syria"
837
- msgstr ""
838
-
839
- #: custom-facebook-feed-admin.php:712 custom-facebook-feed-admin.php:3115
840
- msgid "(GMT+03:00) Moscow, St. Petersburg, Volgograd"
841
- msgstr ""
842
-
843
- #: custom-facebook-feed-admin.php:713 custom-facebook-feed-admin.php:3116
844
- msgid "(GMT+03:00) Nairobi"
845
- msgstr ""
846
-
847
- #: custom-facebook-feed-admin.php:714 custom-facebook-feed-admin.php:3117
848
- msgid "(GMT+03:30) Tehran"
849
- msgstr ""
850
-
851
- #: custom-facebook-feed-admin.php:715 custom-facebook-feed-admin.php:3118
852
- msgid "(GMT+04:00) Abu Dhabi, Muscat"
853
- msgstr ""
854
-
855
- #: custom-facebook-feed-admin.php:716 custom-facebook-feed-admin.php:3119
856
- msgid "(GMT+04:00) Yerevan"
857
- msgstr ""
858
-
859
- #: custom-facebook-feed-admin.php:717 custom-facebook-feed-admin.php:3120
860
- msgid "(GMT+04:30) Kabul"
861
- msgstr ""
862
-
863
- #: custom-facebook-feed-admin.php:718 custom-facebook-feed-admin.php:3121
864
- msgid "(GMT+05:00) Ekaterinburg"
865
- msgstr ""
866
-
867
- #: custom-facebook-feed-admin.php:719 custom-facebook-feed-admin.php:3122
868
- msgid "(GMT+05:00) Tashkent"
869
- msgstr ""
870
-
871
- #: custom-facebook-feed-admin.php:720 custom-facebook-feed-admin.php:3123
872
- msgid "(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi"
873
- msgstr ""
874
-
875
- #: custom-facebook-feed-admin.php:721 custom-facebook-feed-admin.php:3124
876
- msgid "(GMT+05:45) Kathmandu"
877
- msgstr ""
878
-
879
- #: custom-facebook-feed-admin.php:722 custom-facebook-feed-admin.php:3125
880
- msgid "(GMT+06:00) Astana, Dhaka"
881
- msgstr ""
882
-
883
- #: custom-facebook-feed-admin.php:723 custom-facebook-feed-admin.php:3126
884
- msgid "(GMT+06:00) Novosibirsk"
885
- msgstr ""
886
-
887
- #: custom-facebook-feed-admin.php:724 custom-facebook-feed-admin.php:3127
888
- msgid "(GMT+06:30) Yangon (Rangoon)"
889
- msgstr ""
890
-
891
- #: custom-facebook-feed-admin.php:725 custom-facebook-feed-admin.php:3128
892
- msgid "(GMT+07:00) Bangkok, Hanoi, Jakarta"
893
- msgstr ""
894
-
895
- #: custom-facebook-feed-admin.php:726 custom-facebook-feed-admin.php:3129
896
- msgid "(GMT+07:00) Krasnoyarsk"
897
- msgstr ""
898
-
899
- #: custom-facebook-feed-admin.php:727 custom-facebook-feed-admin.php:3130
900
- msgid "(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi"
901
- msgstr ""
902
-
903
- #: custom-facebook-feed-admin.php:728 custom-facebook-feed-admin.php:3131
904
- msgid "(GMT+08:00) Irkutsk, Ulaan Bataar"
905
- msgstr ""
906
-
907
- #: custom-facebook-feed-admin.php:729 custom-facebook-feed-admin.php:3132
908
- msgid "(GMT+08:00) Perth"
909
- msgstr ""
910
-
911
- #: custom-facebook-feed-admin.php:730 custom-facebook-feed-admin.php:3133
912
- msgid "(GMT+08:45) Eucla"
913
- msgstr ""
914
-
915
- #: custom-facebook-feed-admin.php:731 custom-facebook-feed-admin.php:3134
916
- msgid "(GMT+09:00) Osaka, Sapporo, Tokyo"
917
- msgstr ""
918
-
919
- #: custom-facebook-feed-admin.php:732 custom-facebook-feed-admin.php:3135
920
- msgid "(GMT+09:00) Seoul"
921
- msgstr ""
922
-
923
- #: custom-facebook-feed-admin.php:733 custom-facebook-feed-admin.php:3136
924
- msgid "(GMT+09:00) Yakutsk"
925
- msgstr ""
926
-
927
- #: custom-facebook-feed-admin.php:734 custom-facebook-feed-admin.php:3137
928
- msgid "(GMT+09:30) Adelaide"
929
- msgstr ""
930
-
931
- #: custom-facebook-feed-admin.php:735 custom-facebook-feed-admin.php:3138
932
- msgid "(GMT+09:30) Darwin"
933
- msgstr ""
934
-
935
- #: custom-facebook-feed-admin.php:736 custom-facebook-feed-admin.php:3139
936
- msgid "(GMT+10:00) Brisbane"
937
- msgstr ""
938
-
939
- #: custom-facebook-feed-admin.php:737
940
- msgid "(GMT+10:00) Sydney"
941
- msgstr ""
942
-
943
- #: custom-facebook-feed-admin.php:738 custom-facebook-feed-admin.php:3141
944
- msgid "(GMT+10:00) Vladivostok"
945
- msgstr ""
946
-
947
- #: custom-facebook-feed-admin.php:739 custom-facebook-feed-admin.php:3142
948
- msgid "(GMT+10:30) Lord Howe Island"
949
- msgstr ""
950
-
951
- #: custom-facebook-feed-admin.php:740 custom-facebook-feed-admin.php:3143
952
- msgid "(GMT+11:00) Solomon Is., New Caledonia"
953
- msgstr ""
954
-
955
- #: custom-facebook-feed-admin.php:741 custom-facebook-feed-admin.php:3144
956
- msgid "(GMT+11:00) Magadan"
957
- msgstr ""
958
-
959
- #: custom-facebook-feed-admin.php:742 custom-facebook-feed-admin.php:3145
960
- msgid "(GMT+11:30) Norfolk Island"
961
- msgstr ""
962
-
963
- #: custom-facebook-feed-admin.php:743 custom-facebook-feed-admin.php:3146
964
- msgid "(GMT+12:00) Anadyr, Kamchatka"
965
- msgstr ""
966
-
967
- #: custom-facebook-feed-admin.php:744 custom-facebook-feed-admin.php:3147
968
- msgid "(GMT+12:00) Auckland, Wellington"
969
- msgstr ""
970
-
971
- #: custom-facebook-feed-admin.php:745 custom-facebook-feed-admin.php:3148
972
- msgid "(GMT+12:00) Fiji, Kamchatka, Marshall Is."
973
- msgstr ""
974
-
975
- #: custom-facebook-feed-admin.php:746 custom-facebook-feed-admin.php:3149
976
- msgid "(GMT+12:45) Chatham Islands"
977
- msgstr ""
978
-
979
- #: custom-facebook-feed-admin.php:747 custom-facebook-feed-admin.php:3150
980
- msgid "(GMT+13:00) Nuku'alofa"
981
- msgstr ""
982
-
983
- #: custom-facebook-feed-admin.php:748 custom-facebook-feed-admin.php:3151
984
- msgid "(GMT+14:00) Kiritimati"
985
- msgstr ""
986
-
987
- #: custom-facebook-feed-admin.php:760
988
- msgid ""
989
- "As the settings on this page directly affect the request made to Facebook to "
990
- "get data, then when these settings are changed the plugin cache is cleared "
991
- "in order for the plugin to check Facebook for data again using these new "
992
- "settings. The plugin will check Facebook for data the next time the page "
993
- "that the feed is on is loaded."
994
- msgstr ""
995
-
996
- #: custom-facebook-feed-admin.php:763 custom-facebook-feed-admin.php:2480
997
- msgid "Having trouble using the plugin? Check out the"
998
- msgstr ""
999
-
1000
- #: custom-facebook-feed-admin.php:763 custom-facebook-feed-admin.php:2480
1001
- msgid "tab"
1002
- msgstr ""
1003
-
1004
- #: custom-facebook-feed-admin.php:774
1005
- msgid ""
1006
- "Check out our other free plugins for <a href=\"https://wordpress.org/plugins/"
1007
- "instagram-feed/\" target=\"_blank\">Instagram</a>, <a href=\"https://"
1008
- "wordpress.org/plugins/custom-twitter-feeds/\" target=\"_blank\">Twitter</a>, "
1009
- "and <a href=\"https://wordpress.org/plugins/feeds-for-youtube/\" target="
1010
- "\"_blank\">YouTube</a>."
1011
- msgstr ""
1012
-
1013
- #: custom-facebook-feed-admin.php:777 custom-facebook-feed-admin.php:4096
1014
- msgid "Like the plugin? Help spread the word!"
1015
- msgstr ""
1016
-
1017
- #: custom-facebook-feed-admin.php:793
1018
- msgid "Setup Directions"
1019
- msgstr ""
1020
-
1021
- #: custom-facebook-feed-admin.php:794
1022
- msgid "A step-by-step guide on how to setup and use the plugin."
1023
- msgstr ""
1024
-
1025
- #: custom-facebook-feed-admin.php:798
1026
- msgid "FAQs and Docs"
1027
- msgstr ""
1028
-
1029
- #: custom-facebook-feed-admin.php:799
1030
- msgid ""
1031
- "View our expansive library of FAQs and documentation to help solve your "
1032
- "problem as quickly as possible."
1033
- msgstr ""
1034
-
1035
- #: custom-facebook-feed-admin.php:806
1036
- msgid ""
1037
- "<a href=\"https://smashballoon.com/category/custom-facebook-feed/faq/?"
1038
- "cat=18\" target=\"_blank\">General Questions</a>"
1039
- msgstr ""
1040
-
1041
- #: custom-facebook-feed-admin.php:807
1042
- msgid ""
1043
- "<a href=\"https://smashballoon.com/category/custom-facebook-feed/getting-"
1044
- "started/?cat=18\" target=\"_blank\">Getting Started</a>"
1045
- msgstr ""
1046
-
1047
- #: custom-facebook-feed-admin.php:808
1048
- msgid ""
1049
- "<a href=\"https://smashballoon.com/category/custom-facebook-feed/"
1050
- "troubleshooting/?cat=18\" target=\"_blank\">Common Issues</a>"
1051
- msgstr ""
1052
-
1053
- #: custom-facebook-feed-admin.php:814
1054
- msgid ""
1055
- "<a href=\"http://smashballoon.com/custom-facebook-feed/docs/free/\" target="
1056
- "\"_blank\">Installation and Configuration</a>"
1057
- msgstr ""
1058
-
1059
- #: custom-facebook-feed-admin.php:815
1060
- msgid ""
1061
- "<a href=\"https://smashballoon.com/custom-facebook-feed/docs/shortcodes/\" "
1062
- "target=\"_blank\">Shortcode Reference</a>"
1063
- msgstr ""
1064
-
1065
- #: custom-facebook-feed-admin.php:816
1066
- msgid ""
1067
- "<a href=https://smashballoon.com/category/custom-facebook-feed/"
1068
- "customizations/snippets/?cat=18\" target=\"_blank\">Custom CSS and "
1069
- "JavaScript Snippets</a>"
1070
- msgstr ""
1071
-
1072
- #: custom-facebook-feed-admin.php:822
1073
- msgid "Request Support"
1074
- msgstr ""
1075
-
1076
- #: custom-facebook-feed-admin.php:823
1077
- msgid ""
1078
- "Still need help? Submit a ticket and one of our support experts will get "
1079
- "back to you as soon as possible.<br /><b>Important:</b> Please include your "
1080
- "<b>System Info</b> below with all support requests."
1081
- msgstr ""
1082
-
1083
- #: custom-facebook-feed-admin.php:829
1084
- msgid ""
1085
- "System Info &nbsp; <i style=\"color: #666; font-size: 11px; font-weight: "
1086
- "normal;\">Click the text below to select all</i>"
1087
- msgstr ""
1088
-
1089
- #: custom-facebook-feed-admin.php:1980 custom-facebook-feed-admin.php:1990
1090
- #: custom-facebook-feed-admin.php:1999
1091
- msgid "General"
1092
- msgstr ""
1093
-
1094
- #: custom-facebook-feed-admin.php:1981
1095
- msgid "Post Layout"
1096
- msgstr ""
1097
-
1098
- #: custom-facebook-feed-admin.php:1982
1099
- msgid "Style Posts"
1100
- msgstr ""
1101
-
1102
- #: custom-facebook-feed-admin.php:1983
1103
- msgid "Misc"
1104
- msgstr ""
1105
-
1106
- #: custom-facebook-feed-admin.php:1984 custom-facebook-feed-admin.php:3960
1107
- msgid "Custom Text / Translate"
1108
- msgstr ""
1109
-
1110
- #: custom-facebook-feed-admin.php:1991 custom-facebook-feed-admin.php:2123
1111
- msgid "Header"
1112
- msgstr ""
1113
-
1114
- #: custom-facebook-feed-admin.php:1992
1115
- msgid "Like Box"
1116
- msgstr ""
1117
-
1118
- #: custom-facebook-feed-admin.php:2001
1119
- msgid "Feed Width"
1120
- msgstr ""
1121
-
1122
- #: custom-facebook-feed-admin.php:2007
1123
- msgid "Set to be 100% width on mobile?"
1124
- msgstr ""
1125
-
1126
- #: custom-facebook-feed-admin.php:2008
1127
- msgid "What does this mean?"
1128
- msgstr ""
1129
-
1130
- #: custom-facebook-feed-admin.php:2009
1131
- #, php-format
1132
- msgid ""
1133
- "If you set a width on the feed then this will be used on mobile as well as "
1134
- "desktop. Check this setting to set the feed width to be 100% on mobile so "
1135
- "that it is responsive."
1136
- msgstr ""
1137
-
1138
- #: custom-facebook-feed-admin.php:2014
1139
- msgid "Feed Height"
1140
- msgstr ""
1141
-
1142
- #: custom-facebook-feed-admin.php:2020
1143
- msgid ""
1144
- "Use this to set a fixed height on the feed. If the feed exceeds this height "
1145
- "then a scroll bar will be used. Leave it empty to set no maximum height."
1146
- msgstr ""
1147
-
1148
- #: custom-facebook-feed-admin.php:2023
1149
- msgid "Feed Padding"
1150
- msgstr ""
1151
-
1152
- #: custom-facebook-feed-admin.php:2029
1153
- msgid ""
1154
- "This is the amount of padding/spacing that goes around the feed. This is "
1155
- "particularly useful if you intend to set a background color on the feed."
1156
- msgstr ""
1157
-
1158
- #: custom-facebook-feed-admin.php:2033
1159
- msgid "Feed Background Color"
1160
- msgstr ""
1161
-
1162
- #: custom-facebook-feed-admin.php:2040
1163
- msgid "Add CSS class to feed"
1164
- msgstr ""
1165
-
1166
- #: custom-facebook-feed-admin.php:2045
1167
- msgid ""
1168
- "You can add your own CSS classes to the feed here. To add multiple classes "
1169
- "separate each with a space, Eg. classone classtwo classthree"
1170
- msgstr ""
1171
-
1172
- #: custom-facebook-feed-admin.php:2085
1173
- msgid "Post Types"
1174
- msgstr ""
1175
-
1176
- #: custom-facebook-feed-admin.php:2087
1177
- msgid "Only show these types of posts:"
1178
- msgstr ""
1179
-
1180
- #: custom-facebook-feed-admin.php:2088
1181
- msgid "Upgrade to Pro to enable post types, photos, videos and more"
1182
- msgstr ""
1183
-
1184
- #: custom-facebook-feed-admin.php:2092
1185
- msgid "Statuses"
1186
- msgstr ""
1187
-
1188
- #: custom-facebook-feed-admin.php:2096
1189
- msgid "Events"
1190
- msgstr ""
1191
-
1192
- #: custom-facebook-feed-admin.php:2100
1193
- msgid "Photos"
1194
- msgstr ""
1195
-
1196
- #: custom-facebook-feed-admin.php:2104
1197
- msgid "Videos"
1198
- msgstr ""
1199
-
1200
- #: custom-facebook-feed-admin.php:2108
1201
- msgid "Links"
1202
- msgstr ""
1203
-
1204
- #: custom-facebook-feed-admin.php:2112
1205
- msgid "Albums"
1206
- msgstr ""
1207
-
1208
- #: custom-facebook-feed-admin.php:2125
1209
- msgid "Show Feed Header"
1210
- msgstr ""
1211
-
1212
- #: custom-facebook-feed-admin.php:2129
1213
- msgid "What is the header?"
1214
- msgstr ""
1215
-
1216
- #: custom-facebook-feed-admin.php:2130
1217
- msgid ""
1218
- "The header allows you to display text and an icon at the top of your feed. "
1219
- "Customize the text, style, and layout of the header using the settings below."
1220
- msgstr ""
1221
-
1222
- #: custom-facebook-feed-admin.php:2135
1223
- msgid "Header Text"
1224
- msgstr ""
1225
-
1226
- #: custom-facebook-feed-admin.php:2143 custom-facebook-feed-admin.php:2301
1227
- msgid "Display outside the scrollable area"
1228
- msgstr ""
1229
-
1230
- #: custom-facebook-feed-admin.php:2146 custom-facebook-feed-admin.php:2285
1231
- #: custom-facebook-feed-admin.php:3844 custom-facebook-feed-admin.php:3853
1232
- #: custom-facebook-feed-admin.php:3863 custom-facebook-feed-admin.php:3880
1233
- #: custom-facebook-feed-admin.php:3904 custom-facebook-feed-admin.php:3935
1234
- msgid "Yes"
1235
- msgstr ""
1236
-
1237
- #: custom-facebook-feed-admin.php:2148
1238
- msgid ""
1239
- "This positions the Header outside of the feed container. It is useful if "
1240
- "your feed has a vertical scrollbar as it places it outside of the scrollable "
1241
- "area and fixes it at the top."
1242
- msgstr ""
1243
-
1244
- #: custom-facebook-feed-admin.php:2153 custom-facebook-feed-admin.php:2419
1245
- #: custom-facebook-feed-admin.php:2737 custom-facebook-feed-admin.php:3696
1246
- msgid "Background Color"
1247
- msgstr ""
1248
-
1249
- #: custom-facebook-feed-admin.php:2160
1250
- msgid "Padding"
1251
- msgstr ""
1252
-
1253
- #: custom-facebook-feed-admin.php:2168 custom-facebook-feed-admin.php:2767
1254
- #: custom-facebook-feed-admin.php:2834 custom-facebook-feed-admin.php:2916
1255
- #: custom-facebook-feed-admin.php:2983 custom-facebook-feed-admin.php:3367
1256
- #: custom-facebook-feed-admin.php:3423 custom-facebook-feed-admin.php:3523
1257
- #: custom-facebook-feed-admin.php:3585
1258
- msgid "Text Size"
1259
- msgstr ""
1260
-
1261
- #: custom-facebook-feed-admin.php:2193 custom-facebook-feed-admin.php:2859
1262
- #: custom-facebook-feed-admin.php:2941 custom-facebook-feed-admin.php:3008
1263
- #: custom-facebook-feed-admin.php:3392 custom-facebook-feed-admin.php:3448
1264
- #: custom-facebook-feed-admin.php:3548 custom-facebook-feed-admin.php:3610
1265
- msgid "Text Weight"
1266
- msgstr ""
1267
-
1268
- #: custom-facebook-feed-admin.php:2204 custom-facebook-feed-admin.php:2425
1269
- #: custom-facebook-feed-admin.php:2792 custom-facebook-feed-admin.php:2870
1270
- #: custom-facebook-feed-admin.php:2952 custom-facebook-feed-admin.php:3019
1271
- #: custom-facebook-feed-admin.php:3403 custom-facebook-feed-admin.php:3459
1272
- #: custom-facebook-feed-admin.php:3559 custom-facebook-feed-admin.php:3621
1273
- #: custom-facebook-feed-admin.php:3682
1274
- msgid "Text Color"
1275
- msgstr ""
1276
-
1277
- #: custom-facebook-feed-admin.php:2211
1278
- msgid "Icon Type"
1279
- msgstr ""
1280
-
1281
- #: custom-facebook-feed-admin.php:2240
1282
- msgid "Icon Color"
1283
- msgstr ""
1284
-
1285
- #: custom-facebook-feed-admin.php:2247
1286
- msgid "Icon Size"
1287
- msgstr ""
1288
-
1289
- #: custom-facebook-feed-admin.php:2278
1290
- msgid "Like Box / Page Plugin"
1291
- msgstr ""
1292
-
1293
- #: custom-facebook-feed-admin.php:2282
1294
- msgid "Show the Like Box"
1295
- msgstr ""
1296
-
1297
- #: custom-facebook-feed-admin.php:2286
1298
- msgid "What is the Like Box?"
1299
- msgstr ""
1300
-
1301
- #: custom-facebook-feed-admin.php:2287
1302
- msgid ""
1303
- "The Like Box is an official Facebook widget that we include at the bottom or "
1304
- "top of the feed. It contains information about your Facebook Page and allows "
1305
- "users to 'like' it directly on your site."
1306
- msgstr ""
1307
-
1308
- #: custom-facebook-feed-admin.php:2291 custom-facebook-feed-admin.php:2972
1309
- msgid "Position"
1310
- msgstr ""
1311
-
1312
- #: custom-facebook-feed-admin.php:2295
1313
- msgid "Bottom of feed"
1314
- msgstr ""
1315
-
1316
- #: custom-facebook-feed-admin.php:2296
1317
- msgid "Top of feed"
1318
- msgstr ""
1319
-
1320
- #: custom-facebook-feed-admin.php:2306
1321
- msgid ""
1322
- "This positions the Like Box widget outside of the feed container. It is "
1323
- "useful if your feed has a vertical scrollbar as it places it outside of the "
1324
- "scrollable area and fixes it at the top or bottom."
1325
- msgstr ""
1326
-
1327
- #: custom-facebook-feed-admin.php:2311
1328
- msgid "Show faces of fans"
1329
- msgstr ""
1330
-
1331
- #: custom-facebook-feed-admin.php:2316
1332
- msgid ""
1333
- "This will display thumbnail photos within the Like Box of some of the people "
1334
- "who like your page."
1335
- msgstr ""
1336
-
1337
- #: custom-facebook-feed-admin.php:2320
1338
- msgid "Include the Cover Photo"
1339
- msgstr ""
1340
-
1341
- #: custom-facebook-feed-admin.php:2327
1342
- msgid "Use a small header"
1343
- msgstr ""
1344
-
1345
- #: custom-facebook-feed-admin.php:2332
1346
- msgid ""
1347
- "This will display a shorter version of the Like Box with a slimmer cover "
1348
- "photo and less information."
1349
- msgstr ""
1350
-
1351
- #: custom-facebook-feed-admin.php:2336
1352
- msgid "Hide custom call to action button"
1353
- msgstr ""
1354
-
1355
- #: custom-facebook-feed-admin.php:2341
1356
- msgid ""
1357
- "If you have a custom 'Call To Action' button for your Facebook Page then "
1358
- "this will hide it and display the default Like Box button."
1359
- msgstr ""
1360
-
1361
- #: custom-facebook-feed-admin.php:2345
1362
- msgid "Custom Like Box Width"
1363
- msgstr ""
1364
-
1365
- #: custom-facebook-feed-admin.php:2349
1366
- msgid "Default: 340, Min: 180, Max: 500"
1367
- msgstr ""
1368
-
1369
- #: custom-facebook-feed-admin.php:2359
1370
- msgid "\"Load More\" button"
1371
- msgstr ""
1372
-
1373
- #: custom-facebook-feed-admin.php:2367
1374
- msgid "Show \"Load More\" Button"
1375
- msgstr ""
1376
-
1377
- #: custom-facebook-feed-admin.php:2371
1378
- msgid ""
1379
- "The Load More button is added to the bottom of your feed and allows you to "
1380
- "dynamically load more posts into your feed. Use the button below to reveal "
1381
- "customization settings for the button."
1382
- msgstr ""
1383
-
1384
- #: custom-facebook-feed-admin.php:2375
1385
- msgid "Button Background Color"
1386
- msgstr ""
1387
-
1388
- #: custom-facebook-feed-admin.php:2381
1389
- msgid "Button Hover Color"
1390
- msgstr ""
1391
-
1392
- #: custom-facebook-feed-admin.php:2387
1393
- msgid "Button Text Color"
1394
- msgstr ""
1395
-
1396
- #: custom-facebook-feed-admin.php:2393
1397
- msgid "Button Text"
1398
- msgstr ""
1399
-
1400
- #: custom-facebook-feed-admin.php:2403
1401
- msgid "Lightbox"
1402
- msgstr ""
1403
-
1404
- #: custom-facebook-feed-admin.php:2411 custom-facebook-feed-admin.php:3795
1405
- msgid "Disable Popup Lightbox"
1406
- msgstr ""
1407
-
1408
- #: custom-facebook-feed-admin.php:2415 custom-facebook-feed-admin.php:3799
1409
- msgid "Disable"
1410
- msgstr ""
1411
-
1412
- #: custom-facebook-feed-admin.php:2431 custom-facebook-feed-admin.php:2877
1413
- #: custom-facebook-feed-admin.php:3566 custom-facebook-feed-admin.php:3689
1414
- msgid "Link Color"
1415
- msgstr ""
1416
-
1417
- #: custom-facebook-feed-admin.php:2437 custom-facebook-feed-admin.php:3729
1418
- msgid "Show Comments in Lightbox"
1419
- msgstr ""
1420
-
1421
- #: custom-facebook-feed-admin.php:2441 custom-facebook-feed-admin.php:3732
1422
- msgid "For timeline posts only"
1423
- msgstr ""
1424
-
1425
- #: custom-facebook-feed-admin.php:2449
1426
- msgid "Filter Content by String"
1427
- msgstr ""
1428
-
1429
- #: custom-facebook-feed-admin.php:2457
1430
- msgid "Only show posts containing:"
1431
- msgstr ""
1432
-
1433
- #: custom-facebook-feed-admin.php:2462
1434
- msgid ""
1435
- "You can use this setting to only display posts containing these text "
1436
- "strings. Separate multiple strings using commas. If only a few posts, or "
1437
- "none at all, are displayed then you may need to increase the plugin's 'Post "
1438
- "Limit' settings. See <a href='https://smashballoon.com/filtering-your-"
1439
- "facebook-posts/' target='_blank'>this FAQ</a> to learn more about how "
1440
- "filtering works."
1441
- msgstr ""
1442
-
1443
- #: custom-facebook-feed-admin.php:2466
1444
- msgid "Don't show posts containing:"
1445
- msgstr ""
1446
-
1447
- #: custom-facebook-feed-admin.php:2470
1448
- msgid ""
1449
- "You can use this setting to remove any posts containing these text strings. "
1450
- "Separate multiple strings using commas."
1451
- msgstr ""
1452
-
1453
- #: custom-facebook-feed-admin.php:2501
1454
- msgid "Post Layouts"
1455
- msgstr ""
1456
-
1457
- #: custom-facebook-feed-admin.php:2502
1458
- msgid "Upgrade to Pro to enable layouts"
1459
- msgstr ""
1460
-
1461
- #: custom-facebook-feed-admin.php:2508
1462
- msgid "Choose a layout from the 3 below."
1463
- msgstr ""
1464
-
1465
- #: custom-facebook-feed-admin.php:2512
1466
- msgid "Thumbnail"
1467
- msgstr ""
1468
-
1469
- #: custom-facebook-feed-admin.php:2517
1470
- msgid "Half-width"
1471
- msgstr ""
1472
-
1473
- #: custom-facebook-feed-admin.php:2522
1474
- msgid "Full-width"
1475
- msgstr ""
1476
-
1477
- #: custom-facebook-feed-admin.php:2531 custom-facebook-feed-admin.php:2540
1478
- msgid "Photo/Video Position"
1479
- msgstr ""
1480
-
1481
- #: custom-facebook-feed-admin.php:2550
1482
- msgid "Always use the Full-width layout when feed is narrow?"
1483
- msgstr ""
1484
-
1485
- #: custom-facebook-feed-admin.php:2554
1486
- msgid ""
1487
- "When displaying posts in either a narrow column or on a mobile device the "
1488
- "plugin will automatically default to using the 'Full-width' layout as it's "
1489
- "better suited to narrow sizes."
1490
- msgstr ""
1491
-
1492
- #: custom-facebook-feed-admin.php:2558
1493
- msgid "Only show one image per post"
1494
- msgstr ""
1495
-
1496
- #: custom-facebook-feed-admin.php:2562
1497
- msgid ""
1498
- "If a Facebook post contains more than photo then enabling this setting means "
1499
- "that only the first photo in the post is displayed."
1500
- msgstr ""
1501
-
1502
- #: custom-facebook-feed-admin.php:2574
1503
- msgid "Show/Hide"
1504
- msgstr ""
1505
-
1506
- #: custom-facebook-feed-admin.php:2578
1507
- msgid ""
1508
- "Include the following in posts: <i style=\"font-size: 11px;\">(when "
1509
- "applicable)</i>"
1510
- msgstr ""
1511
-
1512
- #: custom-facebook-feed-admin.php:2587
1513
- msgid "Author Name and Avatar"
1514
- msgstr ""
1515
-
1516
- #: custom-facebook-feed-admin.php:2588
1517
- msgid ""
1518
- "The author name and avatar image that's shown at the top of each timeline "
1519
- "post"
1520
- msgstr ""
1521
-
1522
- #: custom-facebook-feed-admin.php:2595 custom-facebook-feed-admin.php:2808
1523
- #: custom-facebook-feed-admin.php:3973
1524
- msgid "Post Text"
1525
- msgstr ""
1526
-
1527
- #: custom-facebook-feed-admin.php:2596
1528
- msgid "The main text of the Facebook post"
1529
- msgstr ""
1530
-
1531
- #: custom-facebook-feed-admin.php:2602
1532
- msgid "Description Text"
1533
- msgstr ""
1534
-
1535
- #: custom-facebook-feed-admin.php:2603
1536
- msgid "The description text associated with shared photos, videos, or links"
1537
- msgstr ""
1538
-
1539
- #: custom-facebook-feed-admin.php:2609
1540
- msgid "Shared Link Box"
1541
- msgstr ""
1542
-
1543
- #: custom-facebook-feed-admin.php:2610
1544
- msgid ""
1545
- "The link info box that's created when a link is shared in a Facebook post"
1546
- msgstr ""
1547
-
1548
- #: custom-facebook-feed-admin.php:2616 custom-facebook-feed-admin.php:4033
1549
- msgid "Date"
1550
- msgstr ""
1551
-
1552
- #: custom-facebook-feed-admin.php:2617
1553
- msgid "The date of the post"
1554
- msgstr ""
1555
-
1556
- #: custom-facebook-feed-admin.php:2623
1557
- msgid "Photos and Videos"
1558
- msgstr ""
1559
-
1560
- #: custom-facebook-feed-admin.php:2624
1561
- msgid "Any photos or videos in your posts"
1562
- msgstr ""
1563
-
1564
- #: custom-facebook-feed-admin.php:2630
1565
- msgid "Media link"
1566
- msgstr ""
1567
-
1568
- #: custom-facebook-feed-admin.php:2631
1569
- msgid ""
1570
- "Display an icon and link to Facebook if the post contains either a photo or "
1571
- "video"
1572
- msgstr ""
1573
-
1574
- #: custom-facebook-feed-admin.php:2637 custom-facebook-feed-admin.php:3349
1575
- msgid "Event Title"
1576
- msgstr ""
1577
-
1578
- #: custom-facebook-feed-admin.php:2638
1579
- msgid "The title of an event"
1580
- msgstr ""
1581
-
1582
- #: custom-facebook-feed-admin.php:2644 custom-facebook-feed-admin.php:3519
1583
- msgid "Event Details"
1584
- msgstr ""
1585
-
1586
- #: custom-facebook-feed-admin.php:2645
1587
- msgid "The information associated with an event"
1588
- msgstr ""
1589
-
1590
- #: custom-facebook-feed-admin.php:2651
1591
- msgid "Like, Shares, and Comments"
1592
- msgstr ""
1593
-
1594
- #: custom-facebook-feed-admin.php:2652
1595
- msgid "The comments box displayed at the bottom of each timeline post"
1596
- msgstr ""
1597
-
1598
- #: custom-facebook-feed-admin.php:2658 custom-facebook-feed-admin.php:3580
1599
- #: custom-facebook-feed-admin.php:3986
1600
- msgid "Post Action Links"
1601
- msgstr ""
1602
-
1603
- #: custom-facebook-feed-admin.php:2659
1604
- msgid "The \"View on Facebook\" and \"Share\" links at the bottom of each post"
1605
- msgstr ""
1606
-
1607
- #: custom-facebook-feed-admin.php:2691
1608
- msgid "Post Item"
1609
- msgstr ""
1610
-
1611
- #: custom-facebook-feed-admin.php:2695
1612
- msgid "Post Style"
1613
- msgstr ""
1614
-
1615
- #: custom-facebook-feed-admin.php:2708
1616
- msgid "Regular"
1617
- msgstr ""
1618
-
1619
- #: custom-facebook-feed-admin.php:2714
1620
- msgid "Boxed"
1621
- msgstr ""
1622
-
1623
- #: custom-facebook-feed-admin.php:2722
1624
- msgid "Separating Line Color"
1625
- msgstr ""
1626
-
1627
- #: custom-facebook-feed-admin.php:2728
1628
- msgid "Separating Line Thickness"
1629
- msgstr ""
1630
-
1631
- #: custom-facebook-feed-admin.php:2731
1632
- msgid "Leave empty to hide"
1633
- msgstr ""
1634
-
1635
- #: custom-facebook-feed-admin.php:2743
1636
- msgid "Rounded Corner Size"
1637
- msgstr ""
1638
-
1639
- #: custom-facebook-feed-admin.php:2749
1640
- msgid "Box Shadow"
1641
- msgstr ""
1642
-
1643
- #: custom-facebook-feed-admin.php:2752
1644
- msgid "Adds a subtle shadow around the post"
1645
- msgstr ""
1646
-
1647
- #: custom-facebook-feed-admin.php:2763
1648
- msgid "Post Author"
1649
- msgstr ""
1650
-
1651
- #: custom-facebook-feed-admin.php:2812
1652
- msgid "Maximum Post Text Length"
1653
- msgstr ""
1654
-
1655
- #: custom-facebook-feed-admin.php:2815 custom-facebook-feed-admin.php:3335
1656
- msgid "Characters"
1657
- msgstr ""
1658
-
1659
- #: custom-facebook-feed-admin.php:2815 custom-facebook-feed-admin.php:3335
1660
- msgid "Eg. 200"
1661
- msgstr ""
1662
-
1663
- #: custom-facebook-feed-admin.php:2817
1664
- msgid ""
1665
- "If the post text exceeds this length then a 'See More' link will be added. "
1666
- "Leave empty to set no maximum length."
1667
- msgstr ""
1668
-
1669
- #: custom-facebook-feed-admin.php:2821 custom-facebook-feed-admin.php:3353
1670
- msgid "Format"
1671
- msgstr ""
1672
-
1673
- #: custom-facebook-feed-admin.php:2884
1674
- msgid "Link Text to Facebook Post"
1675
- msgstr ""
1676
-
1677
- #: custom-facebook-feed-admin.php:2890
1678
- msgid "Link Post Tags"
1679
- msgstr ""
1680
-
1681
- #: custom-facebook-feed-admin.php:2894
1682
- msgid "What are Post Tags?"
1683
- msgstr ""
1684
-
1685
- #: custom-facebook-feed-admin.php:2895
1686
- msgid ""
1687
- "When you tag another Facebook page or user in your post using the @ symbol "
1688
- "it creates a post tag, which is a link to either that Facebook page or user "
1689
- "profile."
1690
- msgstr ""
1691
-
1692
- #: custom-facebook-feed-admin.php:2900
1693
- msgid "Link Hashtags"
1694
- msgstr ""
1695
-
1696
- #: custom-facebook-feed-admin.php:2912
1697
- msgid "Shared Post Description"
1698
- msgstr ""
1699
-
1700
- #: custom-facebook-feed-admin.php:2968
1701
- msgid "Post Date"
1702
- msgstr ""
1703
-
1704
- #: custom-facebook-feed-admin.php:3027
1705
- msgid "Date Formatting"
1706
- msgstr ""
1707
-
1708
- #: custom-facebook-feed-admin.php:3032
1709
- msgid "2 days ago"
1710
- msgstr ""
1711
-
1712
- #: custom-facebook-feed-admin.php:3112
1713
- msgid "(GMT+02:00) Helsinki"
1714
- msgstr ""
1715
-
1716
- #: custom-facebook-feed-admin.php:3140
1717
- msgid "(GMT+10:00) Hobart"
1718
- msgstr ""
1719
-
1720
- #: custom-facebook-feed-admin.php:3157
1721
- msgid "Custom Format"
1722
- msgstr ""
1723
-
1724
- #: custom-facebook-feed-admin.php:3161 custom-facebook-feed-admin.php:3511
1725
- msgid "Examples"
1726
- msgstr ""
1727
-
1728
- #: custom-facebook-feed-admin.php:3165
1729
- msgid "Text Before Date"
1730
- msgstr ""
1731
-
1732
- #: custom-facebook-feed-admin.php:3169
1733
- msgid ""
1734
- "You can add custom text here to display immediately <b>before</b> the date "
1735
- "text"
1736
- msgstr ""
1737
-
1738
- #: custom-facebook-feed-admin.php:3173
1739
- msgid "Text After Date"
1740
- msgstr ""
1741
-
1742
- #: custom-facebook-feed-admin.php:3177
1743
- msgid ""
1744
- "You can add custom text here to display immediately <b>after</b> the date "
1745
- "text"
1746
- msgstr ""
1747
-
1748
- #: custom-facebook-feed-admin.php:3187
1749
- msgid "Shared Link Boxes"
1750
- msgstr ""
1751
-
1752
- #: custom-facebook-feed-admin.php:3193
1753
- msgid "Link Box Background Color"
1754
- msgstr ""
1755
-
1756
- #: custom-facebook-feed-admin.php:3201
1757
- msgid "Link Box Border Color"
1758
- msgstr ""
1759
-
1760
- #: custom-facebook-feed-admin.php:3209
1761
- msgid "Remove Background/Border"
1762
- msgstr ""
1763
-
1764
- #: custom-facebook-feed-admin.php:3216
1765
- msgid "Link Title Format"
1766
- msgstr ""
1767
-
1768
- #: custom-facebook-feed-admin.php:3229
1769
- msgid "Link Title Size"
1770
- msgstr ""
1771
-
1772
- #: custom-facebook-feed-admin.php:3254
1773
- msgid "Link Title Color"
1774
- msgstr ""
1775
-
1776
- #: custom-facebook-feed-admin.php:3263
1777
- msgid "Link URL Size"
1778
- msgstr ""
1779
-
1780
- #: custom-facebook-feed-admin.php:3288
1781
- msgid "Link URL Color"
1782
- msgstr ""
1783
-
1784
- #: custom-facebook-feed-admin.php:3298
1785
- msgid "Link Description Size"
1786
- msgstr ""
1787
-
1788
- #: custom-facebook-feed-admin.php:3324
1789
- msgid "Link Description Color"
1790
- msgstr ""
1791
-
1792
- #: custom-facebook-feed-admin.php:3332
1793
- msgid "Maximum Link Description Length"
1794
- msgstr ""
1795
-
1796
- #: custom-facebook-feed-admin.php:3337
1797
- msgid ""
1798
- "If the link description text exceeds this length then it will be truncated "
1799
- "with an ellipsis. Leave empty to set no maximum length."
1800
- msgstr ""
1801
-
1802
- #: custom-facebook-feed-admin.php:3410
1803
- msgid "Link Title to Event on Facebook"
1804
- msgstr ""
1805
-
1806
- #: custom-facebook-feed-admin.php:3419
1807
- msgid "Event Date"
1808
- msgstr ""
1809
-
1810
- #: custom-facebook-feed-admin.php:3466
1811
- msgid "Date Position"
1812
- msgstr ""
1813
-
1814
- #: custom-facebook-feed-admin.php:3470
1815
- msgid "Below event title"
1816
- msgstr ""
1817
-
1818
- #: custom-facebook-feed-admin.php:3471
1819
- msgid "Above event title"
1820
- msgstr ""
1821
-
1822
- #: custom-facebook-feed-admin.php:3476
1823
- msgid "Event Date Formatting"
1824
- msgstr ""
1825
-
1826
- #: custom-facebook-feed-admin.php:3507
1827
- msgid "Custom Event Date Format"
1828
- msgstr ""
1829
-
1830
- #: custom-facebook-feed-admin.php:3581
1831
- msgid ""
1832
- "Post action links refer to the \"View on Facebook\" and \"Share\" links at "
1833
- "the bottom of each post"
1834
- msgstr ""
1835
-
1836
- #: custom-facebook-feed-admin.php:3628
1837
- msgid "\"View on Facebook\" Text"
1838
- msgstr ""
1839
-
1840
- #: custom-facebook-feed-admin.php:3636
1841
- msgid "\"Share\" Text"
1842
- msgstr ""
1843
-
1844
- #: custom-facebook-feed-admin.php:3644
1845
- msgid "Show \"View on Facebook\" link"
1846
- msgstr ""
1847
-
1848
- #: custom-facebook-feed-admin.php:3652
1849
- msgid "Show \"Share\" link"
1850
- msgstr ""
1851
-
1852
- #: custom-facebook-feed-admin.php:3664
1853
- msgid "Likes, Shares and Comments Box"
1854
- msgstr ""
1855
-
1856
- #: custom-facebook-feed-admin.php:3672
1857
- msgid "Icon Style"
1858
- msgstr ""
1859
-
1860
- #: custom-facebook-feed-admin.php:3676
1861
- msgid "Light (for light backgrounds)"
1862
- msgstr ""
1863
-
1864
- #: custom-facebook-feed-admin.php:3677
1865
- msgid "Dark (for dark backgrounds)"
1866
- msgstr ""
1867
-
1868
- #: custom-facebook-feed-admin.php:3703
1869
- msgid "Expand Comments Box Initially"
1870
- msgstr ""
1871
-
1872
- #: custom-facebook-feed-admin.php:3708
1873
- msgid ""
1874
- "Checking this box will automatically expand the comments box beneath each "
1875
- "post. Unchecking this box will mean that users will need to click the number "
1876
- "of comments below each post in order to expand the comments box."
1877
- msgstr ""
1878
-
1879
- #: custom-facebook-feed-admin.php:3712
1880
- msgid "Number of Comments to Show Initially"
1881
- msgstr ""
1882
-
1883
- #: custom-facebook-feed-admin.php:3716
1884
- msgid "25 max"
1885
- msgstr ""
1886
-
1887
- #: custom-facebook-feed-admin.php:3718
1888
- msgid ""
1889
- "The number of comments to show initially when the comments box is expanded."
1890
- msgstr ""
1891
-
1892
- #: custom-facebook-feed-admin.php:3722
1893
- msgid "Hide Comment Avatars"
1894
- msgstr ""
1895
-
1896
- #: custom-facebook-feed-admin.php:3761
1897
- msgid "Custom CSS"
1898
- msgstr ""
1899
-
1900
- #: custom-facebook-feed-admin.php:3766
1901
- msgid "Enter your own custom CSS in the box below"
1902
- msgstr ""
1903
-
1904
- #: custom-facebook-feed-admin.php:3766 custom-facebook-feed-admin.php:3777
1905
- msgid "See some examples"
1906
- msgstr ""
1907
-
1908
- #: custom-facebook-feed-admin.php:3772
1909
- msgid "Custom JavaScript"
1910
- msgstr ""
1911
-
1912
- #: custom-facebook-feed-admin.php:3777
1913
- msgid "Enter your own custom JavaScript/jQuery in the box below"
1914
- msgstr ""
1915
-
1916
- #: custom-facebook-feed-admin.php:3787
1917
- msgid "Media"
1918
- msgstr ""
1919
-
1920
- #: custom-facebook-feed-admin.php:3803
1921
- msgid "Use full-size shared link images"
1922
- msgstr ""
1923
-
1924
- #: custom-facebook-feed-admin.php:3808
1925
- msgid ""
1926
- "By default the shared link boxes in your posts use the same layout selected "
1927
- "on the 'Post Layout' page, however, but you can disable this by unchecking "
1928
- "this setting to force all shared links to use the smaller image thumbnails "
1929
- "instead."
1930
- msgstr ""
1931
-
1932
- #: custom-facebook-feed-admin.php:3812
1933
- msgid "Lightbox video player"
1934
- msgstr ""
1935
-
1936
- #: custom-facebook-feed-admin.php:3816
1937
- msgid "Facebook Video Player"
1938
- msgstr ""
1939
-
1940
- #: custom-facebook-feed-admin.php:3817
1941
- msgid "Standard HTML5 Video"
1942
- msgstr ""
1943
-
1944
- #: custom-facebook-feed-admin.php:3822
1945
- msgid "Play video action"
1946
- msgstr ""
1947
-
1948
- #: custom-facebook-feed-admin.php:3826
1949
- msgid "Play videos directly in the feed"
1950
- msgstr ""
1951
-
1952
- #: custom-facebook-feed-admin.php:3828
1953
- msgid "Link to the video on Facebook"
1954
- msgstr ""
1955
-
1956
- #: custom-facebook-feed-admin.php:3836
1957
- msgid "Misc Settings"
1958
- msgstr ""
1959
-
1960
- #: custom-facebook-feed-admin.php:3840
1961
- msgid "Is your theme loading the feed via Ajax?"
1962
- msgstr ""
1963
-
1964
- #: custom-facebook-feed-admin.php:3846
1965
- msgid ""
1966
- "Some modern WordPress themes use Ajax to load content into the page after it "
1967
- "has loaded. If your theme uses Ajax to load the Custom Facebook Feed content "
1968
- "into the page then check this box. If you are not sure then please check "
1969
- "with the theme author."
1970
- msgstr ""
1971
-
1972
- #: custom-facebook-feed-admin.php:3850
1973
- msgid "Preserve settings when plugin is removed"
1974
- msgstr ""
1975
-
1976
- #: custom-facebook-feed-admin.php:3855
1977
- msgid ""
1978
- "When removing the plugin your settings are automatically deleted from your "
1979
- "database. Checking this box will prevent any settings from being deleted. "
1980
- "This means that you can uninstall and reinstall the plugin without losing "
1981
- "your settings."
1982
- msgstr ""
1983
-
1984
- #: custom-facebook-feed-admin.php:3859
1985
- msgid "Display credit link"
1986
- msgstr ""
1987
-
1988
- #: custom-facebook-feed-admin.php:3864
1989
- msgid "Display a link at the bottom of the feed to help promote the plugin"
1990
- msgstr ""
1991
-
1992
- #: custom-facebook-feed-admin.php:3869
1993
- msgid "Minify CSS and JavaScript files"
1994
- msgstr ""
1995
-
1996
- #: custom-facebook-feed-admin.php:3876
1997
- msgid "Is Facebook Page restricted?"
1998
- msgstr ""
1999
-
2000
- #: custom-facebook-feed-admin.php:3882
2001
- msgid ""
2002
- "If you want to display your Facebook feed on your website then ideally your "
2003
- "Facebook page should not have any age or location restrictions on it as that "
2004
- "restricts the plugin from being able to fully access the content. If it is "
2005
- "not possible for you to remove all restrictions then you can enable this "
2006
- "setting."
2007
- msgstr ""
2008
-
2009
- #: custom-facebook-feed-admin.php:3887
2010
- msgid "Icon font source"
2011
- msgstr ""
2012
-
2013
- #: custom-facebook-feed-admin.php:3890
2014
- msgid "CDN"
2015
- msgstr ""
2016
-
2017
- #: custom-facebook-feed-admin.php:3891
2018
- msgid "Local copy"
2019
- msgstr ""
2020
-
2021
- #: custom-facebook-feed-admin.php:3892
2022
- msgid "Don't load"
2023
- msgstr ""
2024
-
2025
- #: custom-facebook-feed-admin.php:3899
2026
- msgid "Force cache to clear on interval"
2027
- msgstr ""
2028
-
2029
- #: custom-facebook-feed-admin.php:3903
2030
- msgid " - "
2031
- msgstr ""
2032
-
2033
- #: custom-facebook-feed-admin.php:3905
2034
- msgid "No"
2035
- msgstr ""
2036
-
2037
- #: custom-facebook-feed-admin.php:3909
2038
- msgid ""
2039
- "If you're experiencing an issue with the plugin not auto-updating then you "
2040
- "can set this to 'Yes' to run a scheduled event behind the scenes which "
2041
- "forces the plugin cache to clear on a regular basis and retrieve new data "
2042
- "from Facebook."
2043
- msgstr ""
2044
-
2045
- #: custom-facebook-feed-admin.php:3914
2046
- msgid "Request method"
2047
- msgstr ""
2048
-
2049
- #: custom-facebook-feed-admin.php:3918
2050
- msgid "cURL"
2051
- msgstr ""
2052
-
2053
- #: custom-facebook-feed-admin.php:3919
2054
- msgid "file_get_contents"
2055
- msgstr ""
2056
-
2057
- #: custom-facebook-feed-admin.php:3920
2058
- msgid "WP_Http"
2059
- msgstr ""
2060
-
2061
- #: custom-facebook-feed-admin.php:3925
2062
- msgid "Fix text shortening issue"
2063
- msgstr ""
2064
-
2065
- #: custom-facebook-feed-admin.php:3932
2066
- msgid "Disable default styles"
2067
- msgstr ""
2068
-
2069
- #: custom-facebook-feed-admin.php:3937
2070
- msgid ""
2071
- "The plugin includes some basic text and link styles which can be disabled by "
2072
- "enabling this setting. Note that the styles used for the layout of the posts "
2073
- "will still be applied."
2074
- msgstr ""
2075
-
2076
- #: custom-facebook-feed-admin.php:3961
2077
- msgid ""
2078
- "Enter custom text for the words below, or translate it into the language you "
2079
- "would like to use."
2080
- msgstr ""
2081
-
2082
- #: custom-facebook-feed-admin.php:3967
2083
- msgid "Original Text"
2084
- msgstr ""
2085
-
2086
- #: custom-facebook-feed-admin.php:3968
2087
- msgid "Custom Text / Translation"
2088
- msgstr ""
2089
-
2090
- #: custom-facebook-feed-admin.php:3969
2091
- msgid "Context"
2092
- msgstr ""
2093
-
2094
- #: custom-facebook-feed-admin.php:3975
2095
- msgid "See More"
2096
- msgstr ""
2097
-
2098
- #: custom-facebook-feed-admin.php:3977 custom-facebook-feed-admin.php:3983
2099
- msgid "Used when truncating the post text"
2100
- msgstr ""
2101
-
2102
- #: custom-facebook-feed-admin.php:3981
2103
- msgid "See Less"
2104
- msgstr ""
2105
-
2106
- #: custom-facebook-feed-admin.php:3988
2107
- msgid "View on Facebook"
2108
- msgstr ""
2109
-
2110
- #: custom-facebook-feed-admin.php:3990
2111
- msgid "Used for the link to the post on Facebook"
2112
- msgstr ""
2113
-
2114
- #: custom-facebook-feed-admin.php:3993
2115
- msgid "Share"
2116
- msgstr ""
2117
-
2118
- #: custom-facebook-feed-admin.php:3995
2119
- msgid "Used for sharing the Facebook post via Social Media"
2120
- msgstr ""
2121
-
2122
- #: custom-facebook-feed-admin.php:3999
2123
- msgid "photos"
2124
- msgstr ""
2125
-
2126
- #: custom-facebook-feed-admin.php:4001
2127
- msgid "Added to the end of an album name. Eg. (6 photos)"
2128
- msgstr ""
2129
-
2130
- #: custom-facebook-feed-admin.php:4004
2131
- msgid "Media Links"
2132
- msgstr ""
2133
-
2134
- #: custom-facebook-feed-admin.php:4006
2135
- msgid "Photo"
2136
- msgstr ""
2137
-
2138
- #: custom-facebook-feed-admin.php:4008
2139
- msgid "Used to link to photos on Facebook"
2140
- msgstr ""
2141
-
2142
- #: custom-facebook-feed-admin.php:4011
2143
- msgid "Video"
2144
- msgstr ""
2145
-
2146
- #: custom-facebook-feed-admin.php:4013
2147
- msgid "Used to link to videos on Facebook"
2148
- msgstr ""
2149
-
2150
- #: custom-facebook-feed-admin.php:4016
2151
- msgid "Call-to-action Buttons"
2152
- msgstr ""
2153
-
2154
- #: custom-facebook-feed-admin.php:4018
2155
- msgid "Learn More"
2156
- msgstr ""
2157
-
2158
- #: custom-facebook-feed-admin.php:4020
2159
- msgid "Used for the 'Learn More' button"
2160
- msgstr ""
2161
-
2162
- #: custom-facebook-feed-admin.php:4023
2163
- msgid "Shop Now"
2164
- msgstr ""
2165
-
2166
- #: custom-facebook-feed-admin.php:4025
2167
- msgid "Used for the 'Shop Now' button"
2168
- msgstr ""
2169
-
2170
- #: custom-facebook-feed-admin.php:4028
2171
- msgid "Message Page"
2172
- msgstr ""
2173
-
2174
- #: custom-facebook-feed-admin.php:4030
2175
- msgid "Used for the 'Message Page' button"
2176
- msgstr ""
2177
-
2178
- #: custom-facebook-feed-admin.php:4035
2179
- msgid "\"Posted _ hours ago\" text"
2180
- msgstr ""
2181
-
2182
- #: custom-facebook-feed-admin.php:4038
2183
- msgid "second"
2184
- msgstr ""
2185
-
2186
- #: custom-facebook-feed-admin.php:4041
2187
- msgid "seconds"
2188
- msgstr ""
2189
-
2190
- #: custom-facebook-feed-admin.php:4044
2191
- msgid "minute"
2192
- msgstr ""
2193
-
2194
- #: custom-facebook-feed-admin.php:4047
2195
- msgid "minutes"
2196
- msgstr ""
2197
-
2198
- #: custom-facebook-feed-admin.php:4050
2199
- msgid "hour"
2200
- msgstr ""
2201
-
2202
- #: custom-facebook-feed-admin.php:4053
2203
- msgid "hours"
2204
- msgstr ""
2205
-
2206
- #: custom-facebook-feed-admin.php:4056
2207
- msgid "day"
2208
- msgstr ""
2209
-
2210
- #: custom-facebook-feed-admin.php:4059
2211
- msgid "days"
2212
- msgstr ""
2213
-
2214
- #: custom-facebook-feed-admin.php:4062
2215
- msgid "week"
2216
- msgstr ""
2217
-
2218
- #: custom-facebook-feed-admin.php:4065
2219
- msgid "weeks"
2220
- msgstr ""
2221
-
2222
- #: custom-facebook-feed-admin.php:4068
2223
- msgid "month"
2224
- msgstr ""
2225
-
2226
- #: custom-facebook-feed-admin.php:4071
2227
- msgid "months"
2228
- msgstr ""
2229
-
2230
- #: custom-facebook-feed-admin.php:4074
2231
- msgid "year"
2232
- msgstr ""
2233
-
2234
- #: custom-facebook-feed-admin.php:4077
2235
- msgid "years"
2236
- msgstr ""
2237
-
2238
- #: custom-facebook-feed-admin.php:4080
2239
- msgid "ago"
2240
- msgstr ""
2241
-
2242
- #: custom-facebook-feed-admin.php:4083
2243
- msgid "Used to translate the \"__ days ago\" date text"
2244
- msgstr ""
2245
-
2246
- #: custom-facebook-feed-admin.php:4339
2247
- msgid ""
2248
- "PS. We currently have a <a href=\"https://smashballoon.com/custom-facebook-"
2249
- "feed/?utm_source=plugin-free&utm_campaign=cff&discount="
2250
- msgstr ""
2251
-
2252
- #: custom-facebook-feed-admin.php:4357
2253
- msgid ""
2254
- "It's great to see that you've been using the <strong style='font-weight: "
2255
- "700;'>Smash Balloon Custom Facebook Feed</strong> plugin for a while now. "
2256
- "Hopefully you like it! If so, would you consider leaving a positive review? "
2257
- "It really helps support the plugin and helps others to discover it too!"
2258
- msgstr ""
2259
-
2260
- #: custom-facebook-feed-admin.php:4361
2261
- msgid "Sure, I'd love to!"
2262
- msgstr ""
2263
-
2264
- #: custom-facebook-feed-admin.php:4363
2265
- msgid "No thanks"
2266
- msgstr ""
2267
-
2268
- #: custom-facebook-feed-admin.php:4365
2269
- msgid "I've already given a review"
2270
- msgstr ""
2271
-
2272
- #: custom-facebook-feed-admin.php:4367
2273
- msgid "Ask Me Later"
2274
- msgstr ""
2275
-
2276
- #: custom-facebook-feed-admin.php:4384
2277
- #, php-format
2278
- msgid ""
2279
- "<b style=\"font-weight: 700;\">Exclusive offer!</b> We don't run promotions "
2280
- "very often, but for a limited time we're offering <b style=\"font-weight: "
2281
- "700;\">20% off</b> our Pro version to all users of our free Smash Balloon "
2282
- "Custom Facebook Feed plugin."
2283
- msgstr ""
2284
-
2285
- #: custom-facebook-feed-admin.php:4386 custom-facebook-feed-admin.php:4404
2286
- msgid "Get this offer"
2287
- msgstr ""
2288
-
2289
- #: custom-facebook-feed-admin.php:4387 custom-facebook-feed-admin.php:4405
2290
- msgid "I'm not interested"
2291
- msgstr ""
2292
-
2293
- #: custom-facebook-feed-admin.php:4402
2294
- #, php-format
2295
- msgid ""
2296
- "<b style=\"font-weight: 700;\">Black Friday/Cyber Monday Deal!</b> Thank you "
2297
- "for using the free Smash Balloon Custom Facebook Feed plugin. For a limited "
2298
- "time, we're offering <b style=\"font-weight: 700;\">20% off</b> the Pro "
2299
- "version for all of our users."
2300
- msgstr ""
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: \n"
4
+ "POT-Creation-Date: 2020-03-26 13:28-0500\n"
5
+ "PO-Revision-Date: 2020-03-26 13:29-0500\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: \n"
8
+ "Language: en_US\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.3\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "X-Poedit-KeywordsList: __;_e;esc_html_e;esc_attr_e\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+
18
+ #: custom-facebook-feed-admin.php:113 custom-facebook-feed-admin.php:1943
19
+ msgid "Settings saved."
20
+ msgstr ""
21
+
22
+ #: custom-facebook-feed-admin.php:126 custom-facebook-feed-admin.php:1954
23
+ msgid ""
24
+ "You're using Custom Facebook Feed Lite. To unlock more features consider <a "
25
+ "href=\"https://smashballoon.com/custom-facebook-feed/?"
26
+ "utm_source=WordPress&utm_campaign=facebookliteplugin&utm_medium=notice-bar\" "
27
+ "target=\"_blank\" rel=\"noopener noreferrer\">upgrading to Pro</a>."
28
+ msgstr ""
29
+
30
+ #: custom-facebook-feed-admin.php:127 custom-facebook-feed-admin.php:1955
31
+ msgid "Dismiss this message."
32
+ msgstr ""
33
+
34
+ #: custom-facebook-feed-admin.php:133 custom-facebook-feed-admin.php:1962
35
+ #: custom-facebook-feed-admin.php:4355
36
+ msgid "Custom Facebook Feed"
37
+ msgstr ""
38
+
39
+ #: custom-facebook-feed-admin.php:140 custom-facebook-feed-admin.php:152
40
+ #: custom-facebook-feed-admin.php:1974
41
+ msgid "Configuration"
42
+ msgstr ""
43
+
44
+ #: custom-facebook-feed-admin.php:141 custom-facebook-feed-admin.php:1975
45
+ msgid "Customize"
46
+ msgstr ""
47
+
48
+ #: custom-facebook-feed-admin.php:142 custom-facebook-feed-admin.php:763
49
+ #: custom-facebook-feed-admin.php:1976 custom-facebook-feed-admin.php:2480
50
+ msgid "Support"
51
+ msgstr ""
52
+
53
+ #: custom-facebook-feed-admin.php:178 custom-facebook-feed-admin.php:180
54
+ msgid "Continue"
55
+ msgstr ""
56
+
57
+ #: custom-facebook-feed-admin.php:190
58
+ msgid "Log in and get my Access Token"
59
+ msgstr ""
60
+
61
+ #: custom-facebook-feed-admin.php:363
62
+ msgid "Show Available Groups"
63
+ msgstr ""
64
+
65
+ #: custom-facebook-feed-admin.php:363
66
+ msgid "Show Available Pages"
67
+ msgstr ""
68
+
69
+ #: custom-facebook-feed-admin.php:375
70
+ msgid ""
71
+ "Facebook Page ID<br /><i style=\"font-weight: normal; font-size: 12px;\">ID "
72
+ "of your Facebook Page or Group</i>"
73
+ msgstr ""
74
+
75
+ #: custom-facebook-feed-admin.php:380
76
+ msgid "What's my Page ID?"
77
+ msgstr ""
78
+
79
+ #: custom-facebook-feed-admin.php:384
80
+ msgid ""
81
+ "<b>Facebook Page</b><br />\r\n"
82
+ " You can find the ID of your Facebook "
83
+ "<b>Page</b> from the URL. In each URL format, the ID is highlighted below:"
84
+ "<br /><br />\r\n"
85
+ " URL Format 1: <code>https://www.facebook."
86
+ "com/<span class=\"cff-highlight\">your_page_name</span></code>\r\n"
87
+ " <br />\r\n"
88
+ " URL Format 2: <code>https://www.facebook."
89
+ "com/your_page_name-<span class=\"cff-highlight\">1234567890</span></code>\r\n"
90
+ " <br />\r\n"
91
+ " URL Format 3: <code>https://www.facebook."
92
+ "com/pages/your_page_name/<span class=\"cff-highlight\">1234567890</span></"
93
+ "code>\r\n"
94
+ " "
95
+ msgstr ""
96
+
97
+ #: custom-facebook-feed-admin.php:393
98
+ msgid ""
99
+ "<b>Facebook Group</b><br />You can find the ID of your Facebook <b>Group</b> "
100
+ "from the URL, like so: <code>https://www.facebook.com/groups/<span class="
101
+ "\"cff-highlight\">1234567890</span></code>"
102
+ msgstr ""
103
+
104
+ #: custom-facebook-feed-admin.php:417
105
+ msgid "Facebook Access Token"
106
+ msgstr ""
107
+
108
+ #: custom-facebook-feed-admin.php:417
109
+ msgid "Required"
110
+ msgstr ""
111
+
112
+ #: custom-facebook-feed-admin.php:419 custom-facebook-feed-admin.php:3580
113
+ msgid "What is this?"
114
+ msgstr ""
115
+
116
+ #: custom-facebook-feed-admin.php:420
117
+ msgid ""
118
+ "In order to connect to Facebook and get a feed, you need to use an Access "
119
+ "Token. To get one, simply use the blue button above to log into your "
120
+ "Facebook account. You will then receive a token that will be used to connect "
121
+ "to Facebook's API. If you already have an Access Token then you can enter it "
122
+ "here."
123
+ msgstr ""
124
+
125
+ #: custom-facebook-feed-admin.php:423
126
+ msgid ""
127
+ "<p>This doesn't appear to be an Access Token. Please be sure that you didn't "
128
+ "enter your App Secret instead of your Access Token.<br />Your App ID and App "
129
+ "Secret are used to obtain your Access Token; simply paste them into the "
130
+ "fields in the last step of the <a href='https://smashballoon.com/custom-"
131
+ "facebook-feed/access-token/' target='_blank'>Access Token instructions</a> "
132
+ "and click '<b>Get my Access Token</b>'.</p>"
133
+ msgstr ""
134
+
135
+ #: custom-facebook-feed-admin.php:435
136
+ msgid "Is it a Facebook page or group?"
137
+ msgstr ""
138
+
139
+ #: custom-facebook-feed-admin.php:437
140
+ msgid "- Select one -"
141
+ msgstr ""
142
+
143
+ #: custom-facebook-feed-admin.php:438 custom-facebook-feed-admin.php:446
144
+ #: custom-facebook-feed-admin.php:453 custom-facebook-feed-admin.php:456
145
+ #: custom-facebook-feed-admin.php:463 custom-facebook-feed-admin.php:499
146
+ msgid "Page"
147
+ msgstr ""
148
+
149
+ #: custom-facebook-feed-admin.php:439 custom-facebook-feed-admin.php:446
150
+ #: custom-facebook-feed-admin.php:453 custom-facebook-feed-admin.php:456
151
+ #: custom-facebook-feed-admin.php:463 custom-facebook-feed-admin.php:500
152
+ msgid "Group"
153
+ msgstr ""
154
+
155
+ #: custom-facebook-feed-admin.php:446
156
+ msgid "Name"
157
+ msgstr ""
158
+
159
+ #: custom-facebook-feed-admin.php:446
160
+ msgid "(optional)"
161
+ msgstr ""
162
+
163
+ #: custom-facebook-feed-admin.php:449
164
+ msgid "This is just for labeling the account here on this settings page"
165
+ msgstr ""
166
+
167
+ #: custom-facebook-feed-admin.php:453
168
+ msgid "ID"
169
+ msgstr ""
170
+
171
+ #: custom-facebook-feed-admin.php:456
172
+ msgid "The ID of the Facebook"
173
+ msgstr ""
174
+
175
+ #: custom-facebook-feed-admin.php:456
176
+ msgid "you want to add."
177
+ msgstr ""
178
+
179
+ #: custom-facebook-feed-admin.php:456
180
+ msgid "How do I find my Page ID?"
181
+ msgstr ""
182
+
183
+ #: custom-facebook-feed-admin.php:460
184
+ msgid "Access Token"
185
+ msgstr ""
186
+
187
+ #: custom-facebook-feed-admin.php:463
188
+ msgid "The Access Token of the Facebook"
189
+ msgstr ""
190
+
191
+ #: custom-facebook-feed-admin.php:463
192
+ msgid "you want to add"
193
+ msgstr ""
194
+
195
+ #: custom-facebook-feed-admin.php:492 custom-facebook-feed-admin.php:4158
196
+ msgid "Settings"
197
+ msgstr ""
198
+
199
+ #: custom-facebook-feed-admin.php:495
200
+ msgid "Is it a page or group?"
201
+ msgstr ""
202
+
203
+ #: custom-facebook-feed-admin.php:501
204
+ msgid "Profile"
205
+ msgstr ""
206
+
207
+ #: custom-facebook-feed-admin.php:504
208
+ msgid ""
209
+ "<p>Due to Facebook's privacy policy you're not able to display posts from a "
210
+ "personal profile, only from a public Facebook Page.</p><p>If you're using a "
211
+ "profile to represent a business, organization, product, public figure or the "
212
+ "like, then Facebook recommends <a href='http://www.facebook.com/"
213
+ "help/175644189234902/' target='_blank'>converting your profile to a page</"
214
+ "a>. There are many advantages to using pages over profiles, and once you've "
215
+ "converted then the plugin will be able to successfully retrieve and display "
216
+ "all of your posts.</p>"
217
+ msgstr ""
218
+
219
+ #: custom-facebook-feed-admin.php:510
220
+ msgid "Show posts on my page by:"
221
+ msgstr ""
222
+
223
+ #: custom-facebook-feed-admin.php:514
224
+ msgid "Only the page owner (me)"
225
+ msgstr ""
226
+
227
+ #: custom-facebook-feed-admin.php:515
228
+ msgid "Page owner + other people"
229
+ msgstr ""
230
+
231
+ #: custom-facebook-feed-admin.php:516
232
+ msgid "Only other people"
233
+ msgstr ""
234
+
235
+ #: custom-facebook-feed-admin.php:522
236
+ msgid "Number of posts to display"
237
+ msgstr ""
238
+
239
+ #: custom-facebook-feed-admin.php:530
240
+ msgid "Facebook API post limit"
241
+ msgstr ""
242
+
243
+ #: custom-facebook-feed-admin.php:534 custom-facebook-feed-admin.php:544
244
+ #: custom-facebook-feed-admin.php:3917
245
+ msgid "Auto"
246
+ msgstr ""
247
+
248
+ #: custom-facebook-feed-admin.php:535 custom-facebook-feed-admin.php:547
249
+ msgid "Manual"
250
+ msgstr ""
251
+
252
+ #: custom-facebook-feed-admin.php:542
253
+ msgid ""
254
+ "The post 'limit' is the number of posts retrieved from the Facebook API. "
255
+ "Most users won't need to manually adjust this setting as by default the "
256
+ "plugin automatically retrieves a few more posts from the Facebook API than "
257
+ "you need, as some posts may be filtered out."
258
+ msgstr ""
259
+
260
+ #: custom-facebook-feed-admin.php:544
261
+ msgid "Recommended"
262
+ msgstr ""
263
+
264
+ #: custom-facebook-feed-admin.php:545
265
+ msgid ""
266
+ "Allow the plugin to automatically decide how many posts to retrieve from "
267
+ "Facebook's API."
268
+ msgstr ""
269
+
270
+ #: custom-facebook-feed-admin.php:548
271
+ msgid ""
272
+ "Manually set how many posts to retrieve from Facebook's API.<br /><b>Note:</"
273
+ "b> If you choose to retrieve a high number of posts then it will take longer "
274
+ "for Facebook to return the posts when the plugin checks for new ones."
275
+ msgstr ""
276
+
277
+ #: custom-facebook-feed-admin.php:552
278
+ msgid "Check for new posts every"
279
+ msgstr ""
280
+
281
+ #: custom-facebook-feed-admin.php:556
282
+ msgid "Minutes"
283
+ msgstr ""
284
+
285
+ #: custom-facebook-feed-admin.php:557
286
+ msgid "Hours"
287
+ msgstr ""
288
+
289
+ #: custom-facebook-feed-admin.php:558
290
+ msgid "Days"
291
+ msgstr ""
292
+
293
+ #: custom-facebook-feed-admin.php:561
294
+ msgid ""
295
+ "Your Facebook posts and comments data is temporarily cached by the plugin in "
296
+ "your WordPress database. You can choose how long this data should be cached "
297
+ "for. If you set the time to 60 minutes then the plugin will clear the cached "
298
+ "data after that length of time, and the next time the page is viewed it will "
299
+ "check for new data."
300
+ msgstr ""
301
+
302
+ #: custom-facebook-feed-admin.php:566
303
+ msgid "Localization"
304
+ msgstr ""
305
+
306
+ #: custom-facebook-feed-admin.php:570
307
+ msgid "Afrikaans"
308
+ msgstr ""
309
+
310
+ #: custom-facebook-feed-admin.php:571
311
+ msgid "Arabic"
312
+ msgstr ""
313
+
314
+ #: custom-facebook-feed-admin.php:572
315
+ msgid "Azerbaijani"
316
+ msgstr ""
317
+
318
+ #: custom-facebook-feed-admin.php:573
319
+ msgid "Belarusian"
320
+ msgstr ""
321
+
322
+ #: custom-facebook-feed-admin.php:574
323
+ msgid "Bulgarian"
324
+ msgstr ""
325
+
326
+ #: custom-facebook-feed-admin.php:575
327
+ msgid "Bengali"
328
+ msgstr ""
329
+
330
+ #: custom-facebook-feed-admin.php:576
331
+ msgid "Bosnian"
332
+ msgstr ""
333
+
334
+ #: custom-facebook-feed-admin.php:577
335
+ msgid "Catalan"
336
+ msgstr ""
337
+
338
+ #: custom-facebook-feed-admin.php:578
339
+ msgid "Czech"
340
+ msgstr ""
341
+
342
+ #: custom-facebook-feed-admin.php:579
343
+ msgid "Welsh"
344
+ msgstr ""
345
+
346
+ #: custom-facebook-feed-admin.php:580
347
+ msgid "Danish"
348
+ msgstr ""
349
+
350
+ #: custom-facebook-feed-admin.php:581
351
+ msgid "German"
352
+ msgstr ""
353
+
354
+ #: custom-facebook-feed-admin.php:582
355
+ msgid "Greek"
356
+ msgstr ""
357
+
358
+ #: custom-facebook-feed-admin.php:583
359
+ msgid "English (UK)"
360
+ msgstr ""
361
+
362
+ #: custom-facebook-feed-admin.php:584
363
+ msgid "English (Pirate)"
364
+ msgstr ""
365
+
366
+ #: custom-facebook-feed-admin.php:585
367
+ msgid "English (Upside Down)"
368
+ msgstr ""
369
+
370
+ #: custom-facebook-feed-admin.php:586
371
+ msgid "English (US)"
372
+ msgstr ""
373
+
374
+ #: custom-facebook-feed-admin.php:587
375
+ msgid "Esperanto"
376
+ msgstr ""
377
+
378
+ #: custom-facebook-feed-admin.php:588
379
+ msgid "Spanish (Spain)"
380
+ msgstr ""
381
+
382
+ #: custom-facebook-feed-admin.php:589
383
+ msgid "Spanish"
384
+ msgstr ""
385
+
386
+ #: custom-facebook-feed-admin.php:590
387
+ msgid "Estonian"
388
+ msgstr ""
389
+
390
+ #: custom-facebook-feed-admin.php:591
391
+ msgid "Basque"
392
+ msgstr ""
393
+
394
+ #: custom-facebook-feed-admin.php:592
395
+ msgid "Persian"
396
+ msgstr ""
397
+
398
+ #: custom-facebook-feed-admin.php:593
399
+ msgid "Leet Speak"
400
+ msgstr ""
401
+
402
+ #: custom-facebook-feed-admin.php:594
403
+ msgid "Finnish"
404
+ msgstr ""
405
+
406
+ #: custom-facebook-feed-admin.php:595
407
+ msgid "Faroese"
408
+ msgstr ""
409
+
410
+ #: custom-facebook-feed-admin.php:596
411
+ msgid "French (Canada)"
412
+ msgstr ""
413
+
414
+ #: custom-facebook-feed-admin.php:597
415
+ msgid "French (France)"
416
+ msgstr ""
417
+
418
+ #: custom-facebook-feed-admin.php:598
419
+ msgid "Frisian"
420
+ msgstr ""
421
+
422
+ #: custom-facebook-feed-admin.php:599
423
+ msgid "Irish"
424
+ msgstr ""
425
+
426
+ #: custom-facebook-feed-admin.php:600
427
+ msgid "Galician"
428
+ msgstr ""
429
+
430
+ #: custom-facebook-feed-admin.php:601
431
+ msgid "Hebrew"
432
+ msgstr ""
433
+
434
+ #: custom-facebook-feed-admin.php:602
435
+ msgid "Hindi"
436
+ msgstr ""
437
+
438
+ #: custom-facebook-feed-admin.php:603
439
+ msgid "Croatian"
440
+ msgstr ""
441
+
442
+ #: custom-facebook-feed-admin.php:604
443
+ msgid "Hungarian"
444
+ msgstr ""
445
+
446
+ #: custom-facebook-feed-admin.php:605
447
+ msgid "Armenian"
448
+ msgstr ""
449
+
450
+ #: custom-facebook-feed-admin.php:606
451
+ msgid "Indonesian"
452
+ msgstr ""
453
+
454
+ #: custom-facebook-feed-admin.php:607
455
+ msgid "Icelandic"
456
+ msgstr ""
457
+
458
+ #: custom-facebook-feed-admin.php:608
459
+ msgid "Italian"
460
+ msgstr ""
461
+
462
+ #: custom-facebook-feed-admin.php:609
463
+ msgid "Japanese"
464
+ msgstr ""
465
+
466
+ #: custom-facebook-feed-admin.php:610
467
+ msgid "Georgian"
468
+ msgstr ""
469
+
470
+ #: custom-facebook-feed-admin.php:611
471
+ msgid "Khmer"
472
+ msgstr ""
473
+
474
+ #: custom-facebook-feed-admin.php:612
475
+ msgid "Korean"
476
+ msgstr ""
477
+
478
+ #: custom-facebook-feed-admin.php:613
479
+ msgid "Kurdish"
480
+ msgstr ""
481
+
482
+ #: custom-facebook-feed-admin.php:614
483
+ msgid "Latin"
484
+ msgstr ""
485
+
486
+ #: custom-facebook-feed-admin.php:615
487
+ msgid "Lithuanian"
488
+ msgstr ""
489
+
490
+ #: custom-facebook-feed-admin.php:616
491
+ msgid "Latvian"
492
+ msgstr ""
493
+
494
+ #: custom-facebook-feed-admin.php:617
495
+ msgid "Macedonian"
496
+ msgstr ""
497
+
498
+ #: custom-facebook-feed-admin.php:618
499
+ msgid "Malayalam"
500
+ msgstr ""
501
+
502
+ #: custom-facebook-feed-admin.php:619
503
+ msgid "Malay"
504
+ msgstr ""
505
+
506
+ #: custom-facebook-feed-admin.php:620
507
+ msgid "Norwegian (bokmal)"
508
+ msgstr ""
509
+
510
+ #: custom-facebook-feed-admin.php:621
511
+ msgid "Nepali"
512
+ msgstr ""
513
+
514
+ #: custom-facebook-feed-admin.php:622
515
+ msgid "Dutch"
516
+ msgstr ""
517
+
518
+ #: custom-facebook-feed-admin.php:623
519
+ msgid "Norwegian (nynorsk)"
520
+ msgstr ""
521
+
522
+ #: custom-facebook-feed-admin.php:624
523
+ msgid "Punjabi"
524
+ msgstr ""
525
+
526
+ #: custom-facebook-feed-admin.php:625
527
+ msgid "Polish"
528
+ msgstr ""
529
+
530
+ #: custom-facebook-feed-admin.php:626
531
+ msgid "Pashto"
532
+ msgstr ""
533
+
534
+ #: custom-facebook-feed-admin.php:627
535
+ msgid "Portuguese (Brazil)"
536
+ msgstr ""
537
+
538
+ #: custom-facebook-feed-admin.php:628
539
+ msgid "Portuguese (Portugal)"
540
+ msgstr ""
541
+
542
+ #: custom-facebook-feed-admin.php:629
543
+ msgid "Romanian"
544
+ msgstr ""
545
+
546
+ #: custom-facebook-feed-admin.php:630
547
+ msgid "Russian"
548
+ msgstr ""
549
+
550
+ #: custom-facebook-feed-admin.php:631
551
+ msgid "Slovak"
552
+ msgstr ""
553
+
554
+ #: custom-facebook-feed-admin.php:632
555
+ msgid "Slovenian"
556
+ msgstr ""
557
+
558
+ #: custom-facebook-feed-admin.php:633
559
+ msgid "Albanian"
560
+ msgstr ""
561
+
562
+ #: custom-facebook-feed-admin.php:634
563
+ msgid "Serbian"
564
+ msgstr ""
565
+
566
+ #: custom-facebook-feed-admin.php:635
567
+ msgid "Swedish"
568
+ msgstr ""
569
+
570
+ #: custom-facebook-feed-admin.php:636
571
+ msgid "Swahili"
572
+ msgstr ""
573
+
574
+ #: custom-facebook-feed-admin.php:637
575
+ msgid "Tamil"
576
+ msgstr ""
577
+
578
+ #: custom-facebook-feed-admin.php:638
579
+ msgid "Telugu"
580
+ msgstr ""
581
+
582
+ #: custom-facebook-feed-admin.php:639
583
+ msgid "Thai"
584
+ msgstr ""
585
+
586
+ #: custom-facebook-feed-admin.php:640
587
+ msgid "Filipino"
588
+ msgstr ""
589
+
590
+ #: custom-facebook-feed-admin.php:641
591
+ msgid "Turkish"
592
+ msgstr ""
593
+
594
+ #: custom-facebook-feed-admin.php:642
595
+ msgid "Ukrainian"
596
+ msgstr ""
597
+
598
+ #: custom-facebook-feed-admin.php:643
599
+ msgid "Vietnamese"
600
+ msgstr ""
601
+
602
+ #: custom-facebook-feed-admin.php:644
603
+ msgid "Simplified Chinese (China)"
604
+ msgstr ""
605
+
606
+ #: custom-facebook-feed-admin.php:645
607
+ msgid "Traditional Chinese (Hong Kong)"
608
+ msgstr ""
609
+
610
+ #: custom-facebook-feed-admin.php:646
611
+ msgid "Traditional Chinese (Taiwan)"
612
+ msgstr ""
613
+
614
+ #: custom-facebook-feed-admin.php:649
615
+ msgid ""
616
+ "This translates some of the text sent by Facebook, specifically, the "
617
+ "descriptive post text (eg: Smash Balloon shared a link) and the text in the "
618
+ "'Like Box' widget. To find out how to translate the other text in the plugin "
619
+ "see <a href='https://smashballoon.com/cff-how-does-the-plugin-handle-text-"
620
+ "and-language-translation/' target='_blank'>this FAQ</a>."
621
+ msgstr ""
622
+
623
+ #: custom-facebook-feed-admin.php:654 custom-facebook-feed-admin.php:3056
624
+ msgid "Timezone"
625
+ msgstr ""
626
+
627
+ #: custom-facebook-feed-admin.php:659 custom-facebook-feed-admin.php:3061
628
+ msgid "(GMT-11:00) Midway Island, Samoa"
629
+ msgstr ""
630
+
631
+ #: custom-facebook-feed-admin.php:660 custom-facebook-feed-admin.php:3062
632
+ msgid "(GMT-10:00) Hawaii-Aleutian"
633
+ msgstr ""
634
+
635
+ #: custom-facebook-feed-admin.php:661 custom-facebook-feed-admin.php:3063
636
+ msgid "(GMT-10:00) Hawaii"
637
+ msgstr ""
638
+
639
+ #: custom-facebook-feed-admin.php:662 custom-facebook-feed-admin.php:3064
640
+ msgid "(GMT-09:30) Marquesas Islands"
641
+ msgstr ""
642
+
643
+ #: custom-facebook-feed-admin.php:663 custom-facebook-feed-admin.php:3065
644
+ msgid "(GMT-09:00) Gambier Islands"
645
+ msgstr ""
646
+
647
+ #: custom-facebook-feed-admin.php:664 custom-facebook-feed-admin.php:3066
648
+ msgid "(GMT-09:00) Alaska"
649
+ msgstr ""
650
+
651
+ #: custom-facebook-feed-admin.php:665 custom-facebook-feed-admin.php:3067
652
+ msgid "(GMT-08:00) Tijuana, Baja California"
653
+ msgstr ""
654
+
655
+ #: custom-facebook-feed-admin.php:666 custom-facebook-feed-admin.php:3068
656
+ msgid "(GMT-08:00) Pitcairn Islands"
657
+ msgstr ""
658
+
659
+ #: custom-facebook-feed-admin.php:667 custom-facebook-feed-admin.php:3069
660
+ msgid "(GMT-08:00) Pacific Time (US & Canada)"
661
+ msgstr ""
662
+
663
+ #: custom-facebook-feed-admin.php:668 custom-facebook-feed-admin.php:3070
664
+ msgid "(GMT-07:00) Mountain Time (US & Canada)"
665
+ msgstr ""
666
+
667
+ #: custom-facebook-feed-admin.php:669 custom-facebook-feed-admin.php:3071
668
+ msgid "(GMT-07:00) Chihuahua, La Paz, Mazatlan"
669
+ msgstr ""
670
+
671
+ #: custom-facebook-feed-admin.php:670 custom-facebook-feed-admin.php:3072
672
+ msgid "(GMT-07:00) Arizona"
673
+ msgstr ""
674
+
675
+ #: custom-facebook-feed-admin.php:671 custom-facebook-feed-admin.php:3073
676
+ msgid "(GMT-06:00) Saskatchewan, Central America"
677
+ msgstr ""
678
+
679
+ #: custom-facebook-feed-admin.php:672 custom-facebook-feed-admin.php:3074
680
+ msgid "(GMT-06:00) Guadalajara, Mexico City, Monterrey"
681
+ msgstr ""
682
+
683
+ #: custom-facebook-feed-admin.php:673 custom-facebook-feed-admin.php:3075
684
+ msgid "(GMT-06:00) Easter Island"
685
+ msgstr ""
686
+
687
+ #: custom-facebook-feed-admin.php:674 custom-facebook-feed-admin.php:3076
688
+ msgid "(GMT-06:00) Central Time (US & Canada)"
689
+ msgstr ""
690
+
691
+ #: custom-facebook-feed-admin.php:675 custom-facebook-feed-admin.php:3077
692
+ msgid "(GMT-05:00) Eastern Time (US & Canada)"
693
+ msgstr ""
694
+
695
+ #: custom-facebook-feed-admin.php:676 custom-facebook-feed-admin.php:3078
696
+ msgid "(GMT-05:00) Cuba"
697
+ msgstr ""
698
+
699
+ #: custom-facebook-feed-admin.php:677 custom-facebook-feed-admin.php:3079
700
+ msgid "(GMT-05:00) Bogota, Lima, Quito, Rio Branco"
701
+ msgstr ""
702
+
703
+ #: custom-facebook-feed-admin.php:678 custom-facebook-feed-admin.php:3080
704
+ msgid "(GMT-04:30) Caracas"
705
+ msgstr ""
706
+
707
+ #: custom-facebook-feed-admin.php:679 custom-facebook-feed-admin.php:3081
708
+ msgid "(GMT-04:00) Santiago"
709
+ msgstr ""
710
+
711
+ #: custom-facebook-feed-admin.php:680 custom-facebook-feed-admin.php:3082
712
+ msgid "(GMT-04:00) La Paz"
713
+ msgstr ""
714
+
715
+ #: custom-facebook-feed-admin.php:681 custom-facebook-feed-admin.php:3083
716
+ msgid "(GMT-04:00) Faukland Islands"
717
+ msgstr ""
718
+
719
+ #: custom-facebook-feed-admin.php:682 custom-facebook-feed-admin.php:3084
720
+ msgid "(GMT-04:00) Brazil"
721
+ msgstr ""
722
+
723
+ #: custom-facebook-feed-admin.php:683 custom-facebook-feed-admin.php:3085
724
+ msgid "(GMT-04:00) Atlantic Time (Goose Bay)"
725
+ msgstr ""
726
+
727
+ #: custom-facebook-feed-admin.php:684 custom-facebook-feed-admin.php:3086
728
+ msgid "(GMT-04:00) Atlantic Time (Canada)"
729
+ msgstr ""
730
+
731
+ #: custom-facebook-feed-admin.php:685 custom-facebook-feed-admin.php:3087
732
+ msgid "(GMT-03:30) Newfoundland"
733
+ msgstr ""
734
+
735
+ #: custom-facebook-feed-admin.php:686 custom-facebook-feed-admin.php:3088
736
+ msgid "(GMT-03:00) UTC-3"
737
+ msgstr ""
738
+
739
+ #: custom-facebook-feed-admin.php:687 custom-facebook-feed-admin.php:3089
740
+ msgid "(GMT-03:00) Montevideo"
741
+ msgstr ""
742
+
743
+ #: custom-facebook-feed-admin.php:688 custom-facebook-feed-admin.php:3090
744
+ msgid "(GMT-03:00) Miquelon, St. Pierre"
745
+ msgstr ""
746
+
747
+ #: custom-facebook-feed-admin.php:689 custom-facebook-feed-admin.php:3091
748
+ msgid "(GMT-03:00) Greenland"
749
+ msgstr ""
750
+
751
+ #: custom-facebook-feed-admin.php:690 custom-facebook-feed-admin.php:3092
752
+ msgid "(GMT-03:00) Buenos Aires"
753
+ msgstr ""
754
+
755
+ #: custom-facebook-feed-admin.php:691 custom-facebook-feed-admin.php:3093
756
+ msgid "(GMT-03:00) Brasilia"
757
+ msgstr ""
758
+
759
+ #: custom-facebook-feed-admin.php:692 custom-facebook-feed-admin.php:3094
760
+ msgid "(GMT-02:00) Mid-Atlantic"
761
+ msgstr ""
762
+
763
+ #: custom-facebook-feed-admin.php:693 custom-facebook-feed-admin.php:3095
764
+ msgid "(GMT-01:00) Cape Verde Is."
765
+ msgstr ""
766
+
767
+ #: custom-facebook-feed-admin.php:694 custom-facebook-feed-admin.php:3096
768
+ msgid "(GMT-01:00) Azores"
769
+ msgstr ""
770
+
771
+ #: custom-facebook-feed-admin.php:695 custom-facebook-feed-admin.php:3097
772
+ msgid "(GMT) Greenwich Mean Time : Belfast"
773
+ msgstr ""
774
+
775
+ #: custom-facebook-feed-admin.php:696 custom-facebook-feed-admin.php:3098
776
+ msgid "(GMT) Greenwich Mean Time : Dublin"
777
+ msgstr ""
778
+
779
+ #: custom-facebook-feed-admin.php:697 custom-facebook-feed-admin.php:3099
780
+ msgid "(GMT) Greenwich Mean Time : Lisbon"
781
+ msgstr ""
782
+
783
+ #: custom-facebook-feed-admin.php:698 custom-facebook-feed-admin.php:3100
784
+ msgid "(GMT) Greenwich Mean Time : London"
785
+ msgstr ""
786
+
787
+ #: custom-facebook-feed-admin.php:699 custom-facebook-feed-admin.php:3101
788
+ msgid "(GMT) Monrovia, Reykjavik"
789
+ msgstr ""
790
+
791
+ #: custom-facebook-feed-admin.php:700 custom-facebook-feed-admin.php:3102
792
+ msgid "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"
793
+ msgstr ""
794
+
795
+ #: custom-facebook-feed-admin.php:701 custom-facebook-feed-admin.php:3103
796
+ msgid "(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague"
797
+ msgstr ""
798
+
799
+ #: custom-facebook-feed-admin.php:702 custom-facebook-feed-admin.php:3104
800
+ msgid "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"
801
+ msgstr ""
802
+
803
+ #: custom-facebook-feed-admin.php:703 custom-facebook-feed-admin.php:3105
804
+ msgid "(GMT+01:00) West Central Africa"
805
+ msgstr ""
806
+
807
+ #: custom-facebook-feed-admin.php:704 custom-facebook-feed-admin.php:3106
808
+ msgid "(GMT+01:00) Windhoek"
809
+ msgstr ""
810
+
811
+ #: custom-facebook-feed-admin.php:705 custom-facebook-feed-admin.php:3107
812
+ msgid "(GMT+02:00) Beirut"
813
+ msgstr ""
814
+
815
+ #: custom-facebook-feed-admin.php:706 custom-facebook-feed-admin.php:3108
816
+ msgid "(GMT+02:00) Cairo"
817
+ msgstr ""
818
+
819
+ #: custom-facebook-feed-admin.php:707 custom-facebook-feed-admin.php:3109
820
+ msgid "(GMT+02:00) Gaza"
821
+ msgstr ""
822
+
823
+ #: custom-facebook-feed-admin.php:708 custom-facebook-feed-admin.php:3110
824
+ msgid "(GMT+02:00) Harare, Pretoria"
825
+ msgstr ""
826
+
827
+ #: custom-facebook-feed-admin.php:709 custom-facebook-feed-admin.php:3111
828
+ msgid "(GMT+02:00) Jerusalem"
829
+ msgstr ""
830
+
831
+ #: custom-facebook-feed-admin.php:710 custom-facebook-feed-admin.php:3113
832
+ msgid "(GMT+02:00) Minsk"
833
+ msgstr ""
834
+
835
+ #: custom-facebook-feed-admin.php:711 custom-facebook-feed-admin.php:3114
836
+ msgid "(GMT+02:00) Syria"
837
+ msgstr ""
838
+
839
+ #: custom-facebook-feed-admin.php:712 custom-facebook-feed-admin.php:3115
840
+ msgid "(GMT+03:00) Moscow, St. Petersburg, Volgograd"
841
+ msgstr ""
842
+
843
+ #: custom-facebook-feed-admin.php:713 custom-facebook-feed-admin.php:3116
844
+ msgid "(GMT+03:00) Nairobi"
845
+ msgstr ""
846
+
847
+ #: custom-facebook-feed-admin.php:714 custom-facebook-feed-admin.php:3117
848
+ msgid "(GMT+03:30) Tehran"
849
+ msgstr ""
850
+
851
+ #: custom-facebook-feed-admin.php:715 custom-facebook-feed-admin.php:3118
852
+ msgid "(GMT+04:00) Abu Dhabi, Muscat"
853
+ msgstr ""
854
+
855
+ #: custom-facebook-feed-admin.php:716 custom-facebook-feed-admin.php:3119
856
+ msgid "(GMT+04:00) Yerevan"
857
+ msgstr ""
858
+
859
+ #: custom-facebook-feed-admin.php:717 custom-facebook-feed-admin.php:3120
860
+ msgid "(GMT+04:30) Kabul"
861
+ msgstr ""
862
+
863
+ #: custom-facebook-feed-admin.php:718 custom-facebook-feed-admin.php:3121
864
+ msgid "(GMT+05:00) Ekaterinburg"
865
+ msgstr ""
866
+
867
+ #: custom-facebook-feed-admin.php:719 custom-facebook-feed-admin.php:3122
868
+ msgid "(GMT+05:00) Tashkent"
869
+ msgstr ""
870
+
871
+ #: custom-facebook-feed-admin.php:720 custom-facebook-feed-admin.php:3123
872
+ msgid "(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi"
873
+ msgstr ""
874
+
875
+ #: custom-facebook-feed-admin.php:721 custom-facebook-feed-admin.php:3124
876
+ msgid "(GMT+05:45) Kathmandu"
877
+ msgstr ""
878
+
879
+ #: custom-facebook-feed-admin.php:722 custom-facebook-feed-admin.php:3125
880
+ msgid "(GMT+06:00) Astana, Dhaka"
881
+ msgstr ""
882
+
883
+ #: custom-facebook-feed-admin.php:723 custom-facebook-feed-admin.php:3126
884
+ msgid "(GMT+06:00) Novosibirsk"
885
+ msgstr ""
886
+
887
+ #: custom-facebook-feed-admin.php:724 custom-facebook-feed-admin.php:3127
888
+ msgid "(GMT+06:30) Yangon (Rangoon)"
889
+ msgstr ""
890
+
891
+ #: custom-facebook-feed-admin.php:725 custom-facebook-feed-admin.php:3128
892
+ msgid "(GMT+07:00) Bangkok, Hanoi, Jakarta"
893
+ msgstr ""
894
+
895
+ #: custom-facebook-feed-admin.php:726 custom-facebook-feed-admin.php:3129
896
+ msgid "(GMT+07:00) Krasnoyarsk"
897
+ msgstr ""
898
+
899
+ #: custom-facebook-feed-admin.php:727 custom-facebook-feed-admin.php:3130
900
+ msgid "(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi"
901
+ msgstr ""
902
+
903
+ #: custom-facebook-feed-admin.php:728 custom-facebook-feed-admin.php:3131
904
+ msgid "(GMT+08:00) Irkutsk, Ulaan Bataar"
905
+ msgstr ""
906
+
907
+ #: custom-facebook-feed-admin.php:729 custom-facebook-feed-admin.php:3132
908
+ msgid "(GMT+08:00) Perth"
909
+ msgstr ""
910
+
911
+ #: custom-facebook-feed-admin.php:730 custom-facebook-feed-admin.php:3133
912
+ msgid "(GMT+08:45) Eucla"
913
+ msgstr ""
914
+
915
+ #: custom-facebook-feed-admin.php:731 custom-facebook-feed-admin.php:3134
916
+ msgid "(GMT+09:00) Osaka, Sapporo, Tokyo"
917
+ msgstr ""
918
+
919
+ #: custom-facebook-feed-admin.php:732 custom-facebook-feed-admin.php:3135
920
+ msgid "(GMT+09:00) Seoul"
921
+ msgstr ""
922
+
923
+ #: custom-facebook-feed-admin.php:733 custom-facebook-feed-admin.php:3136
924
+ msgid "(GMT+09:00) Yakutsk"
925
+ msgstr ""
926
+
927
+ #: custom-facebook-feed-admin.php:734 custom-facebook-feed-admin.php:3137
928
+ msgid "(GMT+09:30) Adelaide"
929
+ msgstr ""
930
+
931
+ #: custom-facebook-feed-admin.php:735 custom-facebook-feed-admin.php:3138
932
+ msgid "(GMT+09:30) Darwin"
933
+ msgstr ""
934
+
935
+ #: custom-facebook-feed-admin.php:736 custom-facebook-feed-admin.php:3139
936
+ msgid "(GMT+10:00) Brisbane"
937
+ msgstr ""
938
+
939
+ #: custom-facebook-feed-admin.php:737
940
+ msgid "(GMT+10:00) Sydney"
941
+ msgstr ""
942
+
943
+ #: custom-facebook-feed-admin.php:738 custom-facebook-feed-admin.php:3141
944
+ msgid "(GMT+10:00) Vladivostok"
945
+ msgstr ""
946
+
947
+ #: custom-facebook-feed-admin.php:739 custom-facebook-feed-admin.php:3142
948
+ msgid "(GMT+10:30) Lord Howe Island"
949
+ msgstr ""
950
+
951
+ #: custom-facebook-feed-admin.php:740 custom-facebook-feed-admin.php:3143
952
+ msgid "(GMT+11:00) Solomon Is., New Caledonia"
953
+ msgstr ""
954
+
955
+ #: custom-facebook-feed-admin.php:741 custom-facebook-feed-admin.php:3144
956
+ msgid "(GMT+11:00) Magadan"
957
+ msgstr ""
958
+
959
+ #: custom-facebook-feed-admin.php:742 custom-facebook-feed-admin.php:3145
960
+ msgid "(GMT+11:30) Norfolk Island"
961
+ msgstr ""
962
+
963
+ #: custom-facebook-feed-admin.php:743 custom-facebook-feed-admin.php:3146
964
+ msgid "(GMT+12:00) Anadyr, Kamchatka"
965
+ msgstr ""
966
+
967
+ #: custom-facebook-feed-admin.php:744 custom-facebook-feed-admin.php:3147
968
+ msgid "(GMT+12:00) Auckland, Wellington"
969
+ msgstr ""
970
+
971
+ #: custom-facebook-feed-admin.php:745 custom-facebook-feed-admin.php:3148
972
+ msgid "(GMT+12:00) Fiji, Kamchatka, Marshall Is."
973
+ msgstr ""
974
+
975
+ #: custom-facebook-feed-admin.php:746 custom-facebook-feed-admin.php:3149
976
+ msgid "(GMT+12:45) Chatham Islands"
977
+ msgstr ""
978
+
979
+ #: custom-facebook-feed-admin.php:747 custom-facebook-feed-admin.php:3150
980
+ msgid "(GMT+13:00) Nuku'alofa"
981
+ msgstr ""
982
+
983
+ #: custom-facebook-feed-admin.php:748 custom-facebook-feed-admin.php:3151
984
+ msgid "(GMT+14:00) Kiritimati"
985
+ msgstr ""
986
+
987
+ #: custom-facebook-feed-admin.php:760
988
+ msgid ""
989
+ "As the settings on this page directly affect the request made to Facebook to "
990
+ "get data, then when these settings are changed the plugin cache is cleared "
991
+ "in order for the plugin to check Facebook for data again using these new "
992
+ "settings. The plugin will check Facebook for data the next time the page "
993
+ "that the feed is on is loaded."
994
+ msgstr ""
995
+
996
+ #: custom-facebook-feed-admin.php:763 custom-facebook-feed-admin.php:2480
997
+ msgid "Having trouble using the plugin? Check out the"
998
+ msgstr ""
999
+
1000
+ #: custom-facebook-feed-admin.php:763 custom-facebook-feed-admin.php:2480
1001
+ msgid "tab"
1002
+ msgstr ""
1003
+
1004
+ #: custom-facebook-feed-admin.php:774
1005
+ msgid ""
1006
+ "Check out our other free plugins for <a href=\"https://wordpress.org/plugins/"
1007
+ "instagram-feed/\" target=\"_blank\">Instagram</a>, <a href=\"https://"
1008
+ "wordpress.org/plugins/custom-twitter-feeds/\" target=\"_blank\">Twitter</a>, "
1009
+ "and <a href=\"https://wordpress.org/plugins/feeds-for-youtube/\" target="
1010
+ "\"_blank\">YouTube</a>."
1011
+ msgstr ""
1012
+
1013
+ #: custom-facebook-feed-admin.php:777 custom-facebook-feed-admin.php:4096
1014
+ msgid "Like the plugin? Help spread the word!"
1015
+ msgstr ""
1016
+
1017
+ #: custom-facebook-feed-admin.php:793
1018
+ msgid "Setup Directions"
1019
+ msgstr ""
1020
+
1021
+ #: custom-facebook-feed-admin.php:794
1022
+ msgid "A step-by-step guide on how to setup and use the plugin."
1023
+ msgstr ""
1024
+
1025
+ #: custom-facebook-feed-admin.php:798
1026
+ msgid "FAQs and Docs"
1027
+ msgstr ""
1028
+
1029
+ #: custom-facebook-feed-admin.php:799
1030
+ msgid ""
1031
+ "View our expansive library of FAQs and documentation to help solve your "
1032
+ "problem as quickly as possible."
1033
+ msgstr ""
1034
+
1035
+ #: custom-facebook-feed-admin.php:806
1036
+ msgid ""
1037
+ "<a href=\"https://smashballoon.com/category/custom-facebook-feed/faq/?"
1038
+ "cat=18\" target=\"_blank\">General Questions</a>"
1039
+ msgstr ""
1040
+
1041
+ #: custom-facebook-feed-admin.php:807
1042
+ msgid ""
1043
+ "<a href=\"https://smashballoon.com/category/custom-facebook-feed/getting-"
1044
+ "started/?cat=18\" target=\"_blank\">Getting Started</a>"
1045
+ msgstr ""
1046
+
1047
+ #: custom-facebook-feed-admin.php:808
1048
+ msgid ""
1049
+ "<a href=\"https://smashballoon.com/category/custom-facebook-feed/"
1050
+ "troubleshooting/?cat=18\" target=\"_blank\">Common Issues</a>"
1051
+ msgstr ""
1052
+
1053
+ #: custom-facebook-feed-admin.php:814
1054
+ msgid ""
1055
+ "<a href=\"http://smashballoon.com/custom-facebook-feed/docs/free/\" target="
1056
+ "\"_blank\">Installation and Configuration</a>"
1057
+ msgstr ""
1058
+
1059
+ #: custom-facebook-feed-admin.php:815
1060
+ msgid ""
1061
+ "<a href=\"https://smashballoon.com/custom-facebook-feed/docs/shortcodes/\" "
1062
+ "target=\"_blank\">Shortcode Reference</a>"
1063
+ msgstr ""
1064
+
1065
+ #: custom-facebook-feed-admin.php:816
1066
+ msgid ""
1067
+ "<a href=https://smashballoon.com/category/custom-facebook-feed/"
1068
+ "customizations/snippets/?cat=18\" target=\"_blank\">Custom CSS and "
1069
+ "JavaScript Snippets</a>"
1070
+ msgstr ""
1071
+
1072
+ #: custom-facebook-feed-admin.php:822
1073
+ msgid "Request Support"
1074
+ msgstr ""
1075
+
1076
+ #: custom-facebook-feed-admin.php:823
1077
+ msgid ""
1078
+ "Still need help? Submit a ticket and one of our support experts will get "
1079
+ "back to you as soon as possible.<br /><b>Important:</b> Please include your "
1080
+ "<b>System Info</b> below with all support requests."
1081
+ msgstr ""
1082
+
1083
+ #: custom-facebook-feed-admin.php:829
1084
+ msgid ""
1085
+ "System Info &nbsp; <i style=\"color: #666; font-size: 11px; font-weight: "
1086
+ "normal;\">Click the text below to select all</i>"
1087
+ msgstr ""
1088
+
1089
+ #: custom-facebook-feed-admin.php:1980 custom-facebook-feed-admin.php:1990
1090
+ #: custom-facebook-feed-admin.php:1999
1091
+ msgid "General"
1092
+ msgstr ""
1093
+
1094
+ #: custom-facebook-feed-admin.php:1981
1095
+ msgid "Post Layout"
1096
+ msgstr ""
1097
+
1098
+ #: custom-facebook-feed-admin.php:1982
1099
+ msgid "Style Posts"
1100
+ msgstr ""
1101
+
1102
+ #: custom-facebook-feed-admin.php:1983
1103
+ msgid "Misc"
1104
+ msgstr ""
1105
+
1106
+ #: custom-facebook-feed-admin.php:1984 custom-facebook-feed-admin.php:3960
1107
+ msgid "Custom Text / Translate"
1108
+ msgstr ""
1109
+
1110
+ #: custom-facebook-feed-admin.php:1991 custom-facebook-feed-admin.php:2123
1111
+ msgid "Header"
1112
+ msgstr ""
1113
+
1114
+ #: custom-facebook-feed-admin.php:1992
1115
+ msgid "Like Box"
1116
+ msgstr ""
1117
+
1118
+ #: custom-facebook-feed-admin.php:2001
1119
+ msgid "Feed Width"
1120
+ msgstr ""
1121
+
1122
+ #: custom-facebook-feed-admin.php:2007
1123
+ msgid "Set to be 100% width on mobile?"
1124
+ msgstr ""
1125
+
1126
+ #: custom-facebook-feed-admin.php:2008
1127
+ msgid "What does this mean?"
1128
+ msgstr ""
1129
+
1130
+ #: custom-facebook-feed-admin.php:2009
1131
+ #, php-format
1132
+ msgid ""
1133
+ "If you set a width on the feed then this will be used on mobile as well as "
1134
+ "desktop. Check this setting to set the feed width to be 100% on mobile so "
1135
+ "that it is responsive."
1136
+ msgstr ""
1137
+
1138
+ #: custom-facebook-feed-admin.php:2014
1139
+ msgid "Feed Height"
1140
+ msgstr ""
1141
+
1142
+ #: custom-facebook-feed-admin.php:2020
1143
+ msgid ""
1144
+ "Use this to set a fixed height on the feed. If the feed exceeds this height "
1145
+ "then a scroll bar will be used. Leave it empty to set no maximum height."
1146
+ msgstr ""
1147
+
1148
+ #: custom-facebook-feed-admin.php:2023
1149
+ msgid "Feed Padding"
1150
+ msgstr ""
1151
+
1152
+ #: custom-facebook-feed-admin.php:2029
1153
+ msgid ""
1154
+ "This is the amount of padding/spacing that goes around the feed. This is "
1155
+ "particularly useful if you intend to set a background color on the feed."
1156
+ msgstr ""
1157
+
1158
+ #: custom-facebook-feed-admin.php:2033
1159
+ msgid "Feed Background Color"
1160
+ msgstr ""
1161
+
1162
+ #: custom-facebook-feed-admin.php:2040
1163
+ msgid "Add CSS class to feed"
1164
+ msgstr ""
1165
+
1166
+ #: custom-facebook-feed-admin.php:2045
1167
+ msgid ""
1168
+ "You can add your own CSS classes to the feed here. To add multiple classes "
1169
+ "separate each with a space, Eg. classone classtwo classthree"
1170
+ msgstr ""
1171
+
1172
+ #: custom-facebook-feed-admin.php:2085
1173
+ msgid "Post Types"
1174
+ msgstr ""
1175
+
1176
+ #: custom-facebook-feed-admin.php:2087
1177
+ msgid "Only show these types of posts:"
1178
+ msgstr ""
1179
+
1180
+ #: custom-facebook-feed-admin.php:2088
1181
+ msgid "Upgrade to Pro to enable post types, photos, videos and more"
1182
+ msgstr ""
1183
+
1184
+ #: custom-facebook-feed-admin.php:2092
1185
+ msgid "Statuses"
1186
+ msgstr ""
1187
+
1188
+ #: custom-facebook-feed-admin.php:2096
1189
+ msgid "Events"
1190
+ msgstr ""
1191
+
1192
+ #: custom-facebook-feed-admin.php:2100
1193
+ msgid "Photos"
1194
+ msgstr ""
1195
+
1196
+ #: custom-facebook-feed-admin.php:2104
1197
+ msgid "Videos"
1198
+ msgstr ""
1199
+
1200
+ #: custom-facebook-feed-admin.php:2108
1201
+ msgid "Links"
1202
+ msgstr ""
1203
+
1204
+ #: custom-facebook-feed-admin.php:2112
1205
+ msgid "Albums"
1206
+ msgstr ""
1207
+
1208
+ #: custom-facebook-feed-admin.php:2125
1209
+ msgid "Show Feed Header"
1210
+ msgstr ""
1211
+
1212
+ #: custom-facebook-feed-admin.php:2129
1213
+ msgid "What is the header?"
1214
+ msgstr ""
1215
+
1216
+ #: custom-facebook-feed-admin.php:2130
1217
+ msgid ""
1218
+ "The header allows you to display text and an icon at the top of your feed. "
1219
+ "Customize the text, style, and layout of the header using the settings below."
1220
+ msgstr ""
1221
+
1222
+ #: custom-facebook-feed-admin.php:2135
1223
+ msgid "Header Text"
1224
+ msgstr ""
1225
+
1226
+ #: custom-facebook-feed-admin.php:2143 custom-facebook-feed-admin.php:2301
1227
+ msgid "Display outside the scrollable area"
1228
+ msgstr ""
1229
+
1230
+ #: custom-facebook-feed-admin.php:2146 custom-facebook-feed-admin.php:2285
1231
+ #: custom-facebook-feed-admin.php:3844 custom-facebook-feed-admin.php:3853
1232
+ #: custom-facebook-feed-admin.php:3863 custom-facebook-feed-admin.php:3880
1233
+ #: custom-facebook-feed-admin.php:3904 custom-facebook-feed-admin.php:3935
1234
+ msgid "Yes"
1235
+ msgstr ""
1236
+
1237
+ #: custom-facebook-feed-admin.php:2148
1238
+ msgid ""
1239
+ "This positions the Header outside of the feed container. It is useful if "
1240
+ "your feed has a vertical scrollbar as it places it outside of the scrollable "
1241
+ "area and fixes it at the top."
1242
+ msgstr ""
1243
+
1244
+ #: custom-facebook-feed-admin.php:2153 custom-facebook-feed-admin.php:2419
1245
+ #: custom-facebook-feed-admin.php:2737 custom-facebook-feed-admin.php:3696
1246
+ msgid "Background Color"
1247
+ msgstr ""
1248
+
1249
+ #: custom-facebook-feed-admin.php:2160
1250
+ msgid "Padding"
1251
+ msgstr ""
1252
+
1253
+ #: custom-facebook-feed-admin.php:2168 custom-facebook-feed-admin.php:2767
1254
+ #: custom-facebook-feed-admin.php:2834 custom-facebook-feed-admin.php:2916
1255
+ #: custom-facebook-feed-admin.php:2983 custom-facebook-feed-admin.php:3367
1256
+ #: custom-facebook-feed-admin.php:3423 custom-facebook-feed-admin.php:3523
1257
+ #: custom-facebook-feed-admin.php:3585
1258
+ msgid "Text Size"
1259
+ msgstr ""
1260
+
1261
+ #: custom-facebook-feed-admin.php:2193 custom-facebook-feed-admin.php:2859
1262
+ #: custom-facebook-feed-admin.php:2941 custom-facebook-feed-admin.php:3008
1263
+ #: custom-facebook-feed-admin.php:3392 custom-facebook-feed-admin.php:3448
1264
+ #: custom-facebook-feed-admin.php:3548 custom-facebook-feed-admin.php:3610
1265
+ msgid "Text Weight"
1266
+ msgstr ""
1267
+
1268
+ #: custom-facebook-feed-admin.php:2204 custom-facebook-feed-admin.php:2425
1269
+ #: custom-facebook-feed-admin.php:2792 custom-facebook-feed-admin.php:2870
1270
+ #: custom-facebook-feed-admin.php:2952 custom-facebook-feed-admin.php:3019
1271
+ #: custom-facebook-feed-admin.php:3403 custom-facebook-feed-admin.php:3459
1272
+ #: custom-facebook-feed-admin.php:3559 custom-facebook-feed-admin.php:3621
1273
+ #: custom-facebook-feed-admin.php:3682
1274
+ msgid "Text Color"
1275
+ msgstr ""
1276
+
1277
+ #: custom-facebook-feed-admin.php:2211
1278
+ msgid "Icon Type"
1279
+ msgstr ""
1280
+
1281
+ #: custom-facebook-feed-admin.php:2240
1282
+ msgid "Icon Color"
1283
+ msgstr ""
1284
+
1285
+ #: custom-facebook-feed-admin.php:2247
1286
+ msgid "Icon Size"
1287
+ msgstr ""
1288
+
1289
+ #: custom-facebook-feed-admin.php:2278
1290
+ msgid "Like Box / Page Plugin"
1291
+ msgstr ""
1292
+
1293
+ #: custom-facebook-feed-admin.php:2282
1294
+ msgid "Show the Like Box"
1295
+ msgstr ""
1296
+
1297
+ #: custom-facebook-feed-admin.php:2286
1298
+ msgid "What is the Like Box?"
1299
+ msgstr ""
1300
+
1301
+ #: custom-facebook-feed-admin.php:2287
1302
+ msgid ""
1303
+ "The Like Box is an official Facebook widget that we include at the bottom or "
1304
+ "top of the feed. It contains information about your Facebook Page and allows "
1305
+ "users to 'like' it directly on your site."
1306
+ msgstr ""
1307
+
1308
+ #: custom-facebook-feed-admin.php:2291 custom-facebook-feed-admin.php:2972
1309
+ msgid "Position"
1310
+ msgstr ""
1311
+
1312
+ #: custom-facebook-feed-admin.php:2295
1313
+ msgid "Bottom of feed"
1314
+ msgstr ""
1315
+
1316
+ #: custom-facebook-feed-admin.php:2296
1317
+ msgid "Top of feed"
1318
+ msgstr ""
1319
+
1320
+ #: custom-facebook-feed-admin.php:2306
1321
+ msgid ""
1322
+ "This positions the Like Box widget outside of the feed container. It is "
1323
+ "useful if your feed has a vertical scrollbar as it places it outside of the "
1324
+ "scrollable area and fixes it at the top or bottom."
1325
+ msgstr ""
1326
+
1327
+ #: custom-facebook-feed-admin.php:2311
1328
+ msgid "Show faces of fans"
1329
+ msgstr ""
1330
+
1331
+ #: custom-facebook-feed-admin.php:2316
1332
+ msgid ""
1333
+ "This will display thumbnail photos within the Like Box of some of the people "
1334
+ "who like your page."
1335
+ msgstr ""
1336
+
1337
+ #: custom-facebook-feed-admin.php:2320
1338
+ msgid "Include the Cover Photo"
1339
+ msgstr ""
1340
+
1341
+ #: custom-facebook-feed-admin.php:2327
1342
+ msgid "Use a small header"
1343
+ msgstr ""
1344
+
1345
+ #: custom-facebook-feed-admin.php:2332
1346
+ msgid ""
1347
+ "This will display a shorter version of the Like Box with a slimmer cover "
1348
+ "photo and less information."
1349
+ msgstr ""
1350
+
1351
+ #: custom-facebook-feed-admin.php:2336
1352
+ msgid "Hide custom call to action button"
1353
+ msgstr ""
1354
+
1355
+ #: custom-facebook-feed-admin.php:2341
1356
+ msgid ""
1357
+ "If you have a custom 'Call To Action' button for your Facebook Page then "
1358
+ "this will hide it and display the default Like Box button."
1359
+ msgstr ""
1360
+
1361
+ #: custom-facebook-feed-admin.php:2345
1362
+ msgid "Custom Like Box Width"
1363
+ msgstr ""
1364
+
1365
+ #: custom-facebook-feed-admin.php:2349
1366
+ msgid "Default: 340, Min: 180, Max: 500"
1367
+ msgstr ""
1368
+
1369
+ #: custom-facebook-feed-admin.php:2359
1370
+ msgid "\"Load More\" button"
1371
+ msgstr ""
1372
+
1373
+ #: custom-facebook-feed-admin.php:2367
1374
+ msgid "Show \"Load More\" Button"
1375
+ msgstr ""
1376
+
1377
+ #: custom-facebook-feed-admin.php:2371
1378
+ msgid ""
1379
+ "The Load More button is added to the bottom of your feed and allows you to "
1380
+ "dynamically load more posts into your feed. Use the button below to reveal "
1381
+ "customization settings for the button."
1382
+ msgstr ""
1383
+
1384
+ #: custom-facebook-feed-admin.php:2375
1385
+ msgid "Button Background Color"
1386
+ msgstr ""
1387
+
1388
+ #: custom-facebook-feed-admin.php:2381
1389
+ msgid "Button Hover Color"
1390
+ msgstr ""
1391
+
1392
+ #: custom-facebook-feed-admin.php:2387
1393
+ msgid "Button Text Color"
1394
+ msgstr ""
1395
+
1396
+ #: custom-facebook-feed-admin.php:2393
1397
+ msgid "Button Text"
1398
+ msgstr ""
1399
+
1400
+ #: custom-facebook-feed-admin.php:2403
1401
+ msgid "Lightbox"
1402
+ msgstr ""
1403
+
1404
+ #: custom-facebook-feed-admin.php:2411 custom-facebook-feed-admin.php:3795
1405
+ msgid "Disable Popup Lightbox"
1406
+ msgstr ""
1407
+
1408
+ #: custom-facebook-feed-admin.php:2415 custom-facebook-feed-admin.php:3799
1409
+ msgid "Disable"
1410
+ msgstr ""
1411
+
1412
+ #: custom-facebook-feed-admin.php:2431 custom-facebook-feed-admin.php:2877
1413
+ #: custom-facebook-feed-admin.php:3566 custom-facebook-feed-admin.php:3689
1414
+ msgid "Link Color"
1415
+ msgstr ""
1416
+
1417
+ #: custom-facebook-feed-admin.php:2437 custom-facebook-feed-admin.php:3729
1418
+ msgid "Show Comments in Lightbox"
1419
+ msgstr ""
1420
+
1421
+ #: custom-facebook-feed-admin.php:2441 custom-facebook-feed-admin.php:3732
1422
+ msgid "For timeline posts only"
1423
+ msgstr ""
1424
+
1425
+ #: custom-facebook-feed-admin.php:2449
1426
+ msgid "Filter Content by String"
1427
+ msgstr ""
1428
+
1429
+ #: custom-facebook-feed-admin.php:2457
1430
+ msgid "Only show posts containing:"
1431
+ msgstr ""
1432
+
1433
+ #: custom-facebook-feed-admin.php:2462
1434
+ msgid ""
1435
+ "You can use this setting to only display posts containing these text "
1436
+ "strings. Separate multiple strings using commas. If only a few posts, or "
1437
+ "none at all, are displayed then you may need to increase the plugin's 'Post "
1438
+ "Limit' settings. See <a href='https://smashballoon.com/filtering-your-"
1439
+ "facebook-posts/' target='_blank'>this FAQ</a> to learn more about how "
1440
+ "filtering works."
1441
+ msgstr ""
1442
+
1443
+ #: custom-facebook-feed-admin.php:2466
1444
+ msgid "Don't show posts containing:"
1445
+ msgstr ""
1446
+
1447
+ #: custom-facebook-feed-admin.php:2470
1448
+ msgid ""
1449
+ "You can use this setting to remove any posts containing these text strings. "
1450
+ "Separate multiple strings using commas."
1451
+ msgstr ""
1452
+
1453
+ #: custom-facebook-feed-admin.php:2501
1454
+ msgid "Post Layouts"
1455
+ msgstr ""
1456
+
1457
+ #: custom-facebook-feed-admin.php:2502
1458
+ msgid "Upgrade to Pro to enable layouts"
1459
+ msgstr ""
1460
+
1461
+ #: custom-facebook-feed-admin.php:2508
1462
+ msgid "Choose a layout from the 3 below."
1463
+ msgstr ""
1464
+
1465
+ #: custom-facebook-feed-admin.php:2512
1466
+ msgid "Thumbnail"
1467
+ msgstr ""
1468
+
1469
+ #: custom-facebook-feed-admin.php:2517
1470
+ msgid "Half-width"
1471
+ msgstr ""
1472
+
1473
+ #: custom-facebook-feed-admin.php:2522
1474
+ msgid "Full-width"
1475
+ msgstr ""
1476
+
1477
+ #: custom-facebook-feed-admin.php:2531 custom-facebook-feed-admin.php:2540
1478
+ msgid "Photo/Video Position"
1479
+ msgstr ""
1480
+
1481
+ #: custom-facebook-feed-admin.php:2550
1482
+ msgid "Always use the Full-width layout when feed is narrow?"
1483
+ msgstr ""
1484
+
1485
+ #: custom-facebook-feed-admin.php:2554
1486
+ msgid ""
1487
+ "When displaying posts in either a narrow column or on a mobile device the "
1488
+ "plugin will automatically default to using the 'Full-width' layout as it's "
1489
+ "better suited to narrow sizes."
1490
+ msgstr ""
1491
+
1492
+ #: custom-facebook-feed-admin.php:2558
1493
+ msgid "Only show one image per post"
1494
+ msgstr ""
1495
+
1496
+ #: custom-facebook-feed-admin.php:2562
1497
+ msgid ""
1498
+ "If a Facebook post contains more than photo then enabling this setting means "
1499
+ "that only the first photo in the post is displayed."
1500
+ msgstr ""
1501
+
1502
+ #: custom-facebook-feed-admin.php:2574
1503
+ msgid "Show/Hide"
1504
+ msgstr ""
1505
+
1506
+ #: custom-facebook-feed-admin.php:2578
1507
+ msgid ""
1508
+ "Include the following in posts: <i style=\"font-size: 11px;\">(when "
1509
+ "applicable)</i>"
1510
+ msgstr ""
1511
+
1512
+ #: custom-facebook-feed-admin.php:2587
1513
+ msgid "Author Name and Avatar"
1514
+ msgstr ""
1515
+
1516
+ #: custom-facebook-feed-admin.php:2588
1517
+ msgid ""
1518
+ "The author name and avatar image that's shown at the top of each timeline "
1519
+ "post"
1520
+ msgstr ""
1521
+
1522
+ #: custom-facebook-feed-admin.php:2595 custom-facebook-feed-admin.php:2808
1523
+ #: custom-facebook-feed-admin.php:3973
1524
+ msgid "Post Text"
1525
+ msgstr ""
1526
+
1527
+ #: custom-facebook-feed-admin.php:2596
1528
+ msgid "The main text of the Facebook post"
1529
+ msgstr ""
1530
+
1531
+ #: custom-facebook-feed-admin.php:2602
1532
+ msgid "Description Text"
1533
+ msgstr ""
1534
+
1535
+ #: custom-facebook-feed-admin.php:2603
1536
+ msgid "The description text associated with shared photos, videos, or links"
1537
+ msgstr ""
1538
+
1539
+ #: custom-facebook-feed-admin.php:2609
1540
+ msgid "Shared Link Box"
1541
+ msgstr ""
1542
+
1543
+ #: custom-facebook-feed-admin.php:2610
1544
+ msgid ""
1545
+ "The link info box that's created when a link is shared in a Facebook post"
1546
+ msgstr ""
1547
+
1548
+ #: custom-facebook-feed-admin.php:2616 custom-facebook-feed-admin.php:4033
1549
+ msgid "Date"
1550
+ msgstr ""
1551
+
1552
+ #: custom-facebook-feed-admin.php:2617
1553
+ msgid "The date of the post"
1554
+ msgstr ""
1555
+
1556
+ #: custom-facebook-feed-admin.php:2623
1557
+ msgid "Photos and Videos"
1558
+ msgstr ""
1559
+
1560
+ #: custom-facebook-feed-admin.php:2624
1561
+ msgid "Any photos or videos in your posts"
1562
+ msgstr ""
1563
+
1564
+ #: custom-facebook-feed-admin.php:2630
1565
+ msgid "Media link"
1566
+ msgstr ""
1567
+
1568
+ #: custom-facebook-feed-admin.php:2631
1569
+ msgid ""
1570
+ "Display an icon and link to Facebook if the post contains either a photo or "
1571
+ "video"
1572
+ msgstr ""
1573
+
1574
+ #: custom-facebook-feed-admin.php:2637 custom-facebook-feed-admin.php:3349
1575
+ msgid "Event Title"
1576
+ msgstr ""
1577
+
1578
+ #: custom-facebook-feed-admin.php:2638
1579
+ msgid "The title of an event"
1580
+ msgstr ""
1581
+
1582
+ #: custom-facebook-feed-admin.php:2644 custom-facebook-feed-admin.php:3519
1583
+ msgid "Event Details"
1584
+ msgstr ""
1585
+
1586
+ #: custom-facebook-feed-admin.php:2645
1587
+ msgid "The information associated with an event"
1588
+ msgstr ""
1589
+
1590
+ #: custom-facebook-feed-admin.php:2651
1591
+ msgid "Like, Shares, and Comments"
1592
+ msgstr ""
1593
+
1594
+ #: custom-facebook-feed-admin.php:2652
1595
+ msgid "The comments box displayed at the bottom of each timeline post"
1596
+ msgstr ""
1597
+
1598
+ #: custom-facebook-feed-admin.php:2658 custom-facebook-feed-admin.php:3580
1599
+ #: custom-facebook-feed-admin.php:3986
1600
+ msgid "Post Action Links"
1601
+ msgstr ""
1602
+
1603
+ #: custom-facebook-feed-admin.php:2659
1604
+ msgid "The \"View on Facebook\" and \"Share\" links at the bottom of each post"
1605
+ msgstr ""
1606
+
1607
+ #: custom-facebook-feed-admin.php:2691
1608
+ msgid "Post Item"
1609
+ msgstr ""
1610
+
1611
+ #: custom-facebook-feed-admin.php:2695
1612
+ msgid "Post Style"
1613
+ msgstr ""
1614
+
1615
+ #: custom-facebook-feed-admin.php:2708
1616
+ msgid "Regular"
1617
+ msgstr ""
1618
+
1619
+ #: custom-facebook-feed-admin.php:2714
1620
+ msgid "Boxed"
1621
+ msgstr ""
1622
+
1623
+ #: custom-facebook-feed-admin.php:2722
1624
+ msgid "Separating Line Color"
1625
+ msgstr ""
1626
+
1627
+ #: custom-facebook-feed-admin.php:2728
1628
+ msgid "Separating Line Thickness"
1629
+ msgstr ""
1630
+
1631
+ #: custom-facebook-feed-admin.php:2731
1632
+ msgid "Leave empty to hide"
1633
+ msgstr ""
1634
+
1635
+ #: custom-facebook-feed-admin.php:2743
1636
+ msgid "Rounded Corner Size"
1637
+ msgstr ""
1638
+
1639
+ #: custom-facebook-feed-admin.php:2749
1640
+ msgid "Box Shadow"
1641
+ msgstr ""
1642
+
1643
+ #: custom-facebook-feed-admin.php:2752
1644
+ msgid "Adds a subtle shadow around the post"
1645
+ msgstr ""
1646
+
1647
+ #: custom-facebook-feed-admin.php:2763
1648
+ msgid "Post Author"
1649
+ msgstr ""
1650
+
1651
+ #: custom-facebook-feed-admin.php:2812
1652
+ msgid "Maximum Post Text Length"
1653
+ msgstr ""
1654
+
1655
+ #: custom-facebook-feed-admin.php:2815 custom-facebook-feed-admin.php:3335
1656
+ msgid "Characters"
1657
+ msgstr ""
1658
+
1659
+ #: custom-facebook-feed-admin.php:2815 custom-facebook-feed-admin.php:3335
1660
+ msgid "Eg. 200"
1661
+ msgstr ""
1662
+
1663
+ #: custom-facebook-feed-admin.php:2817
1664
+ msgid ""
1665
+ "If the post text exceeds this length then a 'See More' link will be added. "
1666
+ "Leave empty to set no maximum length."
1667
+ msgstr ""
1668
+
1669
+ #: custom-facebook-feed-admin.php:2821 custom-facebook-feed-admin.php:3353
1670
+ msgid "Format"
1671
+ msgstr ""
1672
+
1673
+ #: custom-facebook-feed-admin.php:2884
1674
+ msgid "Link Text to Facebook Post"
1675
+ msgstr ""
1676
+
1677
+ #: custom-facebook-feed-admin.php:2890
1678
+ msgid "Link Post Tags"
1679
+ msgstr ""
1680
+
1681
+ #: custom-facebook-feed-admin.php:2894
1682
+ msgid "What are Post Tags?"
1683
+ msgstr ""
1684
+
1685
+ #: custom-facebook-feed-admin.php:2895
1686
+ msgid ""
1687
+ "When you tag another Facebook page or user in your post using the @ symbol "
1688
+ "it creates a post tag, which is a link to either that Facebook page or user "
1689
+ "profile."
1690
+ msgstr ""
1691
+
1692
+ #: custom-facebook-feed-admin.php:2900
1693
+ msgid "Link Hashtags"
1694
+ msgstr ""
1695
+
1696
+ #: custom-facebook-feed-admin.php:2912
1697
+ msgid "Shared Post Description"
1698
+ msgstr ""
1699
+
1700
+ #: custom-facebook-feed-admin.php:2968
1701
+ msgid "Post Date"
1702
+ msgstr ""
1703
+
1704
+ #: custom-facebook-feed-admin.php:3027
1705
+ msgid "Date Formatting"
1706
+ msgstr ""
1707
+
1708
+ #: custom-facebook-feed-admin.php:3032
1709
+ msgid "2 days ago"
1710
+ msgstr ""
1711
+
1712
+ #: custom-facebook-feed-admin.php:3112
1713
+ msgid "(GMT+02:00) Helsinki"
1714
+ msgstr ""
1715
+
1716
+ #: custom-facebook-feed-admin.php:3140
1717
+ msgid "(GMT+10:00) Hobart"
1718
+ msgstr ""
1719
+
1720
+ #: custom-facebook-feed-admin.php:3157
1721
+ msgid "Custom Format"
1722
+ msgstr ""
1723
+
1724
+ #: custom-facebook-feed-admin.php:3161 custom-facebook-feed-admin.php:3511
1725
+ msgid "Examples"
1726
+ msgstr ""
1727
+
1728
+ #: custom-facebook-feed-admin.php:3165
1729
+ msgid "Text Before Date"
1730
+ msgstr ""
1731
+
1732
+ #: custom-facebook-feed-admin.php:3169
1733
+ msgid ""
1734
+ "You can add custom text here to display immediately <b>before</b> the date "
1735
+ "text"
1736
+ msgstr ""
1737
+
1738
+ #: custom-facebook-feed-admin.php:3173
1739
+ msgid "Text After Date"
1740
+ msgstr ""
1741
+
1742
+ #: custom-facebook-feed-admin.php:3177
1743
+ msgid ""
1744
+ "You can add custom text here to display immediately <b>after</b> the date "
1745
+ "text"
1746
+ msgstr ""
1747
+
1748
+ #: custom-facebook-feed-admin.php:3187
1749
+ msgid "Shared Link Boxes"
1750
+ msgstr ""
1751
+
1752
+ #: custom-facebook-feed-admin.php:3193
1753
+ msgid "Link Box Background Color"
1754
+ msgstr ""
1755
+
1756
+ #: custom-facebook-feed-admin.php:3201
1757
+ msgid "Link Box Border Color"
1758
+ msgstr ""
1759
+
1760
+ #: custom-facebook-feed-admin.php:3209
1761
+ msgid "Remove Background/Border"
1762
+ msgstr ""
1763
+
1764
+ #: custom-facebook-feed-admin.php:3216
1765
+ msgid "Link Title Format"
1766
+ msgstr ""
1767
+
1768
+ #: custom-facebook-feed-admin.php:3229
1769
+ msgid "Link Title Size"
1770
+ msgstr ""
1771
+
1772
+ #: custom-facebook-feed-admin.php:3254
1773
+ msgid "Link Title Color"
1774
+ msgstr ""
1775
+
1776
+ #: custom-facebook-feed-admin.php:3263
1777
+ msgid "Link URL Size"
1778
+ msgstr ""
1779
+
1780
+ #: custom-facebook-feed-admin.php:3288
1781
+ msgid "Link URL Color"
1782
+ msgstr ""
1783
+
1784
+ #: custom-facebook-feed-admin.php:3298
1785
+ msgid "Link Description Size"
1786
+ msgstr ""
1787
+
1788
+ #: custom-facebook-feed-admin.php:3324
1789
+ msgid "Link Description Color"
1790
+ msgstr ""
1791
+
1792
+ #: custom-facebook-feed-admin.php:3332
1793
+ msgid "Maximum Link Description Length"
1794
+ msgstr ""
1795
+
1796
+ #: custom-facebook-feed-admin.php:3337
1797
+ msgid ""
1798
+ "If the link description text exceeds this length then it will be truncated "
1799
+ "with an ellipsis. Leave empty to set no maximum length."
1800
+ msgstr ""
1801
+
1802
+ #: custom-facebook-feed-admin.php:3410
1803
+ msgid "Link Title to Event on Facebook"
1804
+ msgstr ""
1805
+
1806
+ #: custom-facebook-feed-admin.php:3419
1807
+ msgid "Event Date"
1808
+ msgstr ""
1809
+
1810
+ #: custom-facebook-feed-admin.php:3466
1811
+ msgid "Date Position"
1812
+ msgstr ""
1813
+
1814
+ #: custom-facebook-feed-admin.php:3470
1815
+ msgid "Below event title"
1816
+ msgstr ""
1817
+
1818
+ #: custom-facebook-feed-admin.php:3471
1819
+ msgid "Above event title"
1820
+ msgstr ""
1821
+
1822
+ #: custom-facebook-feed-admin.php:3476
1823
+ msgid "Event Date Formatting"
1824
+ msgstr ""
1825
+
1826
+ #: custom-facebook-feed-admin.php:3507
1827
+ msgid "Custom Event Date Format"
1828
+ msgstr ""
1829
+
1830
+ #: custom-facebook-feed-admin.php:3581
1831
+ msgid ""
1832
+ "Post action links refer to the \"View on Facebook\" and \"Share\" links at "
1833
+ "the bottom of each post"
1834
+ msgstr ""
1835
+
1836
+ #: custom-facebook-feed-admin.php:3628
1837
+ msgid "\"View on Facebook\" Text"
1838
+ msgstr ""
1839
+
1840
+ #: custom-facebook-feed-admin.php:3636
1841
+ msgid "\"Share\" Text"
1842
+ msgstr ""
1843
+
1844
+ #: custom-facebook-feed-admin.php:3644
1845
+ msgid "Show \"View on Facebook\" link"
1846
+ msgstr ""
1847
+
1848
+ #: custom-facebook-feed-admin.php:3652
1849
+ msgid "Show \"Share\" link"
1850
+ msgstr ""
1851
+
1852
+ #: custom-facebook-feed-admin.php:3664
1853
+ msgid "Likes, Shares and Comments Box"
1854
+ msgstr ""
1855
+
1856
+ #: custom-facebook-feed-admin.php:3672
1857
+ msgid "Icon Style"
1858
+ msgstr ""
1859
+
1860
+ #: custom-facebook-feed-admin.php:3676
1861
+ msgid "Light (for light backgrounds)"
1862
+ msgstr ""
1863
+
1864
+ #: custom-facebook-feed-admin.php:3677
1865
+ msgid "Dark (for dark backgrounds)"
1866
+ msgstr ""
1867
+
1868
+ #: custom-facebook-feed-admin.php:3703
1869
+ msgid "Expand Comments Box Initially"
1870
+ msgstr ""
1871
+
1872
+ #: custom-facebook-feed-admin.php:3708
1873
+ msgid ""
1874
+ "Checking this box will automatically expand the comments box beneath each "
1875
+ "post. Unchecking this box will mean that users will need to click the number "
1876
+ "of comments below each post in order to expand the comments box."
1877
+ msgstr ""
1878
+
1879
+ #: custom-facebook-feed-admin.php:3712
1880
+ msgid "Number of Comments to Show Initially"
1881
+ msgstr ""
1882
+
1883
+ #: custom-facebook-feed-admin.php:3716
1884
+ msgid "25 max"
1885
+ msgstr ""
1886
+
1887
+ #: custom-facebook-feed-admin.php:3718
1888
+ msgid ""
1889
+ "The number of comments to show initially when the comments box is expanded."
1890
+ msgstr ""
1891
+
1892
+ #: custom-facebook-feed-admin.php:3722
1893
+ msgid "Hide Comment Avatars"
1894
+ msgstr ""
1895
+
1896
+ #: custom-facebook-feed-admin.php:3761
1897
+ msgid "Custom CSS"
1898
+ msgstr ""
1899
+
1900
+ #: custom-facebook-feed-admin.php:3766
1901
+ msgid "Enter your own custom CSS in the box below"
1902
+ msgstr ""
1903
+
1904
+ #: custom-facebook-feed-admin.php:3766 custom-facebook-feed-admin.php:3777
1905
+ msgid "See some examples"
1906
+ msgstr ""
1907
+
1908
+ #: custom-facebook-feed-admin.php:3772
1909
+ msgid "Custom JavaScript"
1910
+ msgstr ""
1911
+
1912
+ #: custom-facebook-feed-admin.php:3777
1913
+ msgid "Enter your own custom JavaScript/jQuery in the box below"
1914
+ msgstr ""
1915
+
1916
+ #: custom-facebook-feed-admin.php:3787
1917
+ msgid "Media"
1918
+ msgstr ""
1919
+
1920
+ #: custom-facebook-feed-admin.php:3803
1921
+ msgid "Use full-size shared link images"
1922
+ msgstr ""
1923
+
1924
+ #: custom-facebook-feed-admin.php:3808
1925
+ msgid ""
1926
+ "By default the shared link boxes in your posts use the same layout selected "
1927
+ "on the 'Post Layout' page, however, but you can disable this by unchecking "
1928
+ "this setting to force all shared links to use the smaller image thumbnails "
1929
+ "instead."
1930
+ msgstr ""
1931
+
1932
+ #: custom-facebook-feed-admin.php:3812
1933
+ msgid "Lightbox video player"
1934
+ msgstr ""
1935
+
1936
+ #: custom-facebook-feed-admin.php:3816
1937
+ msgid "Facebook Video Player"
1938
+ msgstr ""
1939
+
1940
+ #: custom-facebook-feed-admin.php:3817
1941
+ msgid "Standard HTML5 Video"
1942
+ msgstr ""
1943
+
1944
+ #: custom-facebook-feed-admin.php:3822
1945
+ msgid "Play video action"
1946
+ msgstr ""
1947
+
1948
+ #: custom-facebook-feed-admin.php:3826
1949
+ msgid "Play videos directly in the feed"
1950
+ msgstr ""
1951
+
1952
+ #: custom-facebook-feed-admin.php:3828
1953
+ msgid "Link to the video on Facebook"
1954
+ msgstr ""
1955
+
1956
+ #: custom-facebook-feed-admin.php:3836
1957
+ msgid "Misc Settings"
1958
+ msgstr ""
1959
+
1960
+ #: custom-facebook-feed-admin.php:3840
1961
+ msgid "Is your theme loading the feed via Ajax?"
1962
+ msgstr ""
1963
+
1964
+ #: custom-facebook-feed-admin.php:3846
1965
+ msgid ""
1966
+ "Some modern WordPress themes use Ajax to load content into the page after it "
1967
+ "has loaded. If your theme uses Ajax to load the Custom Facebook Feed content "
1968
+ "into the page then check this box. If you are not sure then please check "
1969
+ "with the theme author."
1970
+ msgstr ""
1971
+
1972
+ #: custom-facebook-feed-admin.php:3850
1973
+ msgid "Preserve settings when plugin is removed"
1974
+ msgstr ""
1975
+
1976
+ #: custom-facebook-feed-admin.php:3855
1977
+ msgid ""
1978
+ "When removing the plugin your settings are automatically deleted from your "
1979
+ "database. Checking this box will prevent any settings from being deleted. "
1980
+ "This means that you can uninstall and reinstall the plugin without losing "
1981
+ "your settings."
1982
+ msgstr ""
1983
+
1984
+ #: custom-facebook-feed-admin.php:3859
1985
+ msgid "Display credit link"
1986
+ msgstr ""
1987
+
1988
+ #: custom-facebook-feed-admin.php:3864
1989
+ msgid "Display a link at the bottom of the feed to help promote the plugin"
1990
+ msgstr ""
1991
+
1992
+ #: custom-facebook-feed-admin.php:3869
1993
+ msgid "Minify CSS and JavaScript files"
1994
+ msgstr ""
1995
+
1996
+ #: custom-facebook-feed-admin.php:3876
1997
+ msgid "Is Facebook Page restricted?"
1998
+ msgstr ""
1999
+
2000
+ #: custom-facebook-feed-admin.php:3882
2001
+ msgid ""
2002
+ "If you want to display your Facebook feed on your website then ideally your "
2003
+ "Facebook page should not have any age or location restrictions on it as that "
2004
+ "restricts the plugin from being able to fully access the content. If it is "
2005
+ "not possible for you to remove all restrictions then you can enable this "
2006
+ "setting."
2007
+ msgstr ""
2008
+
2009
+ #: custom-facebook-feed-admin.php:3887
2010
+ msgid "Icon font source"
2011
+ msgstr ""
2012
+
2013
+ #: custom-facebook-feed-admin.php:3890
2014
+ msgid "CDN"
2015
+ msgstr ""
2016
+
2017
+ #: custom-facebook-feed-admin.php:3891
2018
+ msgid "Local copy"
2019
+ msgstr ""
2020
+
2021
+ #: custom-facebook-feed-admin.php:3892
2022
+ msgid "Don't load"
2023
+ msgstr ""
2024
+
2025
+ #: custom-facebook-feed-admin.php:3899
2026
+ msgid "Force cache to clear on interval"
2027
+ msgstr ""
2028
+
2029
+ #: custom-facebook-feed-admin.php:3903
2030
+ msgid " - "
2031
+ msgstr ""
2032
+
2033
+ #: custom-facebook-feed-admin.php:3905
2034
+ msgid "No"
2035
+ msgstr ""
2036
+
2037
+ #: custom-facebook-feed-admin.php:3909
2038
+ msgid ""
2039
+ "If you're experiencing an issue with the plugin not auto-updating then you "
2040
+ "can set this to 'Yes' to run a scheduled event behind the scenes which "
2041
+ "forces the plugin cache to clear on a regular basis and retrieve new data "
2042
+ "from Facebook."
2043
+ msgstr ""
2044
+
2045
+ #: custom-facebook-feed-admin.php:3914
2046
+ msgid "Request method"
2047
+ msgstr ""
2048
+
2049
+ #: custom-facebook-feed-admin.php:3918
2050
+ msgid "cURL"
2051
+ msgstr ""
2052
+
2053
+ #: custom-facebook-feed-admin.php:3919
2054
+ msgid "file_get_contents"
2055
+ msgstr ""
2056
+
2057
+ #: custom-facebook-feed-admin.php:3920
2058
+ msgid "WP_Http"
2059
+ msgstr ""
2060
+
2061
+ #: custom-facebook-feed-admin.php:3925
2062
+ msgid "Fix text shortening issue"
2063
+ msgstr ""
2064
+
2065
+ #: custom-facebook-feed-admin.php:3932
2066
+ msgid "Disable default styles"
2067
+ msgstr ""
2068
+
2069
+ #: custom-facebook-feed-admin.php:3937
2070
+ msgid ""
2071
+ "The plugin includes some basic text and link styles which can be disabled by "
2072
+ "enabling this setting. Note that the styles used for the layout of the posts "
2073
+ "will still be applied."
2074
+ msgstr ""
2075
+
2076
+ #: custom-facebook-feed-admin.php:3961
2077
+ msgid ""
2078
+ "Enter custom text for the words below, or translate it into the language you "
2079
+ "would like to use."
2080
+ msgstr ""
2081
+
2082
+ #: custom-facebook-feed-admin.php:3967
2083
+ msgid "Original Text"
2084
+ msgstr ""
2085
+
2086
+ #: custom-facebook-feed-admin.php:3968
2087
+ msgid "Custom Text / Translation"
2088
+ msgstr ""
2089
+
2090
+ #: custom-facebook-feed-admin.php:3969
2091
+ msgid "Context"
2092
+ msgstr ""
2093
+
2094
+ #: custom-facebook-feed-admin.php:3975
2095
+ msgid "See More"
2096
+ msgstr ""
2097
+
2098
+ #: custom-facebook-feed-admin.php:3977 custom-facebook-feed-admin.php:3983
2099
+ msgid "Used when truncating the post text"
2100
+ msgstr ""
2101
+
2102
+ #: custom-facebook-feed-admin.php:3981
2103
+ msgid "See Less"
2104
+ msgstr ""
2105
+
2106
+ #: custom-facebook-feed-admin.php:3988
2107
+ msgid "View on Facebook"
2108
+ msgstr ""
2109
+
2110
+ #: custom-facebook-feed-admin.php:3990
2111
+ msgid "Used for the link to the post on Facebook"
2112
+ msgstr ""
2113
+
2114
+ #: custom-facebook-feed-admin.php:3993
2115
+ msgid "Share"
2116
+ msgstr ""
2117
+
2118
+ #: custom-facebook-feed-admin.php:3995
2119
+ msgid "Used for sharing the Facebook post via Social Media"
2120
+ msgstr ""
2121
+
2122
+ #: custom-facebook-feed-admin.php:3999
2123
+ msgid "photos"
2124
+ msgstr ""
2125
+
2126
+ #: custom-facebook-feed-admin.php:4001
2127
+ msgid "Added to the end of an album name. Eg. (6 photos)"
2128
+ msgstr ""
2129
+
2130
+ #: custom-facebook-feed-admin.php:4004
2131
+ msgid "Media Links"
2132
+ msgstr ""
2133
+
2134
+ #: custom-facebook-feed-admin.php:4006
2135
+ msgid "Photo"
2136
+ msgstr ""
2137
+
2138
+ #: custom-facebook-feed-admin.php:4008
2139
+ msgid "Used to link to photos on Facebook"
2140
+ msgstr ""
2141
+
2142
+ #: custom-facebook-feed-admin.php:4011
2143
+ msgid "Video"
2144
+ msgstr ""
2145
+
2146
+ #: custom-facebook-feed-admin.php:4013
2147
+ msgid "Used to link to videos on Facebook"
2148
+ msgstr ""
2149
+
2150
+ #: custom-facebook-feed-admin.php:4016
2151
+ msgid "Call-to-action Buttons"
2152
+ msgstr ""
2153
+
2154
+ #: custom-facebook-feed-admin.php:4018
2155
+ msgid "Learn More"
2156
+ msgstr ""
2157
+
2158
+ #: custom-facebook-feed-admin.php:4020
2159
+ msgid "Used for the 'Learn More' button"
2160
+ msgstr ""
2161
+
2162
+ #: custom-facebook-feed-admin.php:4023
2163
+ msgid "Shop Now"
2164
+ msgstr ""
2165
+
2166
+ #: custom-facebook-feed-admin.php:4025
2167
+ msgid "Used for the 'Shop Now' button"
2168
+ msgstr ""
2169
+
2170
+ #: custom-facebook-feed-admin.php:4028
2171
+ msgid "Message Page"
2172
+ msgstr ""
2173
+
2174
+ #: custom-facebook-feed-admin.php:4030
2175
+ msgid "Used for the 'Message Page' button"
2176
+ msgstr ""
2177
+
2178
+ #: custom-facebook-feed-admin.php:4035
2179
+ msgid "\"Posted _ hours ago\" text"
2180
+ msgstr ""
2181
+
2182
+ #: custom-facebook-feed-admin.php:4038
2183
+ msgid "second"
2184
+ msgstr ""
2185
+
2186
+ #: custom-facebook-feed-admin.php:4041
2187
+ msgid "seconds"
2188
+ msgstr ""
2189
+
2190
+ #: custom-facebook-feed-admin.php:4044
2191
+ msgid "minute"
2192
+ msgstr ""
2193
+
2194
+ #: custom-facebook-feed-admin.php:4047
2195
+ msgid "minutes"
2196
+ msgstr ""
2197
+
2198
+ #: custom-facebook-feed-admin.php:4050
2199
+ msgid "hour"
2200
+ msgstr ""
2201
+
2202
+ #: custom-facebook-feed-admin.php:4053
2203
+ msgid "hours"
2204
+ msgstr ""
2205
+
2206
+ #: custom-facebook-feed-admin.php:4056
2207
+ msgid "day"
2208
+ msgstr ""
2209
+
2210
+ #: custom-facebook-feed-admin.php:4059
2211
+ msgid "days"
2212
+ msgstr ""
2213
+
2214
+ #: custom-facebook-feed-admin.php:4062
2215
+ msgid "week"
2216
+ msgstr ""
2217
+
2218
+ #: custom-facebook-feed-admin.php:4065
2219
+ msgid "weeks"
2220
+ msgstr ""
2221
+
2222
+ #: custom-facebook-feed-admin.php:4068
2223
+ msgid "month"
2224
+ msgstr ""
2225
+
2226
+ #: custom-facebook-feed-admin.php:4071
2227
+ msgid "months"
2228
+ msgstr ""
2229
+
2230
+ #: custom-facebook-feed-admin.php:4074
2231
+ msgid "year"
2232
+ msgstr ""
2233
+
2234
+ #: custom-facebook-feed-admin.php:4077
2235
+ msgid "years"
2236
+ msgstr ""
2237
+
2238
+ #: custom-facebook-feed-admin.php:4080
2239
+ msgid "ago"
2240
+ msgstr ""
2241
+
2242
+ #: custom-facebook-feed-admin.php:4083
2243
+ msgid "Used to translate the \"__ days ago\" date text"
2244
+ msgstr ""
2245
+
2246
+ #: custom-facebook-feed-admin.php:4339
2247
+ msgid ""
2248
+ "PS. We currently have a <a href=\"https://smashballoon.com/custom-facebook-"
2249
+ "feed/?utm_source=plugin-free&utm_campaign=cff&discount="
2250
+ msgstr ""
2251
+
2252
+ #: custom-facebook-feed-admin.php:4357
2253
+ msgid ""
2254
+ "It's great to see that you've been using the <strong style='font-weight: "
2255
+ "700;'>Smash Balloon Custom Facebook Feed</strong> plugin for a while now. "
2256
+ "Hopefully you like it! If so, would you consider leaving a positive review? "
2257
+ "It really helps support the plugin and helps others to discover it too!"
2258
+ msgstr ""
2259
+
2260
+ #: custom-facebook-feed-admin.php:4361
2261
+ msgid "Sure, I'd love to!"
2262
+ msgstr ""
2263
+
2264
+ #: custom-facebook-feed-admin.php:4363
2265
+ msgid "No thanks"
2266
+ msgstr ""
2267
+
2268
+ #: custom-facebook-feed-admin.php:4365
2269
+ msgid "I've already given a review"
2270
+ msgstr ""
2271
+
2272
+ #: custom-facebook-feed-admin.php:4367
2273
+ msgid "Ask Me Later"
2274
+ msgstr ""
2275
+
2276
+ #: custom-facebook-feed-admin.php:4384
2277
+ #, php-format
2278
+ msgid ""
2279
+ "<b style=\"font-weight: 700;\">Exclusive offer!</b> We don't run promotions "
2280
+ "very often, but for a limited time we're offering <b style=\"font-weight: "
2281
+ "700;\">20% off</b> our Pro version to all users of our free Smash Balloon "
2282
+ "Custom Facebook Feed plugin."
2283
+ msgstr ""
2284
+
2285
+ #: custom-facebook-feed-admin.php:4386 custom-facebook-feed-admin.php:4404
2286
+ msgid "Get this offer"
2287
+ msgstr ""
2288
+
2289
+ #: custom-facebook-feed-admin.php:4387 custom-facebook-feed-admin.php:4405
2290
+ msgid "I'm not interested"
2291
+ msgstr ""
2292
+
2293
+ #: custom-facebook-feed-admin.php:4402
2294
+ #, php-format
2295
+ msgid ""
2296
+ "<b style=\"font-weight: 700;\">Black Friday/Cyber Monday Deal!</b> Thank you "
2297
+ "for using the free Smash Balloon Custom Facebook Feed plugin. For a limited "
2298
+ "time, we're offering <b style=\"font-weight: 700;\">20% off</b> the Pro "
2299
+ "version for all of our users."
2300
+ msgstr ""