Version Description
- New: The locations of the Twitter feeds on your site will now be logged and listed on a single page for easier management. After this feature has been active for awhile, a "Feed Finder" link will appear next to the Feed Type setting on the plugin Settings page which allows you to see a list of all feeds on your site along with their locations.
- New: Added support for WordPress based translations using language files.
- New: Install our other free social media plugins right from the Twitter Feed settings menu. Use our Instgram, Facebook, and YouTube plugins to add even more social content to your website and help further engage your viewers and increase your followers.
- Tweak: Changed the default method of retrieving posts to use the WP_HTTP class.
- Fix: Updated jQuery methods for compatibility with WordPress 5.7.
Download this release
Release Info
Developer | smashballoon |
Plugin | Custom Twitter Feeds |
Version | 1.8 |
Comparing to | |
See all releases |
Code changes from version 1.7 to 1.8
- README.txt +10 -3
- css/ctf-admin-styles.css +570 -1
- custom-twitter-feed.php +118 -4
- img/about/plugin-fb.png +0 -0
- img/about/plugin-if.png +0 -0
- img/about/plugin-tw.jpg +0 -0
- img/about/plugin-yt.png +0 -0
- img/sw-screenshot.png +0 -0
- inc/CtfAdmin.php +65 -2
- inc/CtfFeed.php +26 -5
- inc/CtfOauthConnect.php +1 -16
- inc/admin-hooks.php +2 -1
- inc/admin/PluginSilentUpgrader.php +576 -0
- inc/admin/PluginSilentUpgraderSkin.php +57 -0
- inc/admin/addon-functions.php +180 -0
- inc/admin/class-install-skin.php +25 -0
- inc/class-ctf-feed-locator.php +418 -0
- js/ctf-admin-scripts.js +312 -19
- js/ctf-scripts.js +75 -14
- js/ctf-scripts.min.js +1 -1
- js/jquery.matchHeight-min.js +12 -0
- languages/custom-twitter-feeds.pot +1309 -0
- views/admin/locator-summary.php +116 -0
- views/admin/main.php +6 -0
- views/admin/more-social-feeds.php +256 -0
- views/admin/social-wall.php +63 -0
- views/admin/support.php +27 -0
README.txt
CHANGED
@@ -4,8 +4,8 @@ Contributors: smashballoon, craig-at-smash-balloon
|
|
4 |
Support Website: http://smashballoon/custom-twitter-feeds/
|
5 |
Tags: Twitter, Twitter feed, Twitter Tweets, Twitter widget, Custom Twitter Feed
|
6 |
Requires at least: 3.4
|
7 |
-
Tested up to: 5.
|
8 |
-
Stable tag: 1.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -233,13 +233,20 @@ If you're still having trouble displaying your Tweets after trying the common is
|
|
233 |
7. To display a Twitter feed just copy and paste the shortcode into a Twitter widget or page
|
234 |
|
235 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
236 |
= 1.7 =
|
237 |
* New: Integrations with popular GDPR cookie consent solutions added: Cookie Notice by dFactory, GDPR Cookie Consent by WebToffee, Cookiebot by Cybot A/S, Complianz by Really Simple Plugins, and Borlabs Cookie by Borlabs. Visit the Twitter Feed settings page, Customize tab, Advanced section for more information.
|
238 |
* Tweak: Icon font support was discontinued. Only SVGs will be used for icons in feeds.
|
239 |
* Tweak: Twitter Intents JS updated to the latest version.
|
240 |
|
241 |
= 1.6.1 =
|
242 |
-
* Tweak: Added support for
|
243 |
* Tweak: HTML attribute rel="noopener noreferrer" added to all outbound links for extra security.
|
244 |
* Fix: Fixed PHP warning "non-numeric value encountered" when setting the tweet multiplier option to something that wasn't a number.
|
245 |
|
4 |
Support Website: http://smashballoon/custom-twitter-feeds/
|
5 |
Tags: Twitter, Twitter feed, Twitter Tweets, Twitter widget, Custom Twitter Feed
|
6 |
Requires at least: 3.4
|
7 |
+
Tested up to: 5.7
|
8 |
+
Stable tag: 1.8
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
233 |
7. To display a Twitter feed just copy and paste the shortcode into a Twitter widget or page
|
234 |
|
235 |
== Changelog ==
|
236 |
+
= 1.8 =
|
237 |
+
* New: The locations of the Twitter feeds on your site will now be logged and listed on a single page for easier management. After this feature has been active for awhile, a "Feed Finder" link will appear next to the Feed Type setting on the plugin Settings page which allows you to see a list of all feeds on your site along with their locations.
|
238 |
+
* New: Added support for WordPress based translations using language files.
|
239 |
+
* New: Install our other free social media plugins right from the Twitter Feed settings menu. Use our Instgram, Facebook, and YouTube plugins to add even more social content to your website and help further engage your viewers and increase your followers.
|
240 |
+
* Tweak: Changed the default method of retrieving posts to use the WP_HTTP class.
|
241 |
+
* Fix: Updated jQuery methods for compatibility with WordPress 5.7.
|
242 |
+
|
243 |
= 1.7 =
|
244 |
* New: Integrations with popular GDPR cookie consent solutions added: Cookie Notice by dFactory, GDPR Cookie Consent by WebToffee, Cookiebot by Cybot A/S, Complianz by Really Simple Plugins, and Borlabs Cookie by Borlabs. Visit the Twitter Feed settings page, Customize tab, Advanced section for more information.
|
245 |
* Tweak: Icon font support was discontinued. Only SVGs will be used for icons in feeds.
|
246 |
* Tweak: Twitter Intents JS updated to the latest version.
|
247 |
|
248 |
= 1.6.1 =
|
249 |
+
* Tweak: Added support for improved dashboard notices on the plugin settings page.
|
250 |
* Tweak: HTML attribute rel="noopener noreferrer" added to all outbound links for extra security.
|
251 |
* Fix: Fixed PHP warning "non-numeric value encountered" when setting the tweet multiplier option to something that wasn't a number.
|
252 |
|
css/ctf-admin-styles.css
CHANGED
@@ -242,7 +242,7 @@
|
|
242 |
max-width: 870px;
|
243 |
margin-top: 10px;
|
244 |
padding: 10px 10px 7px 10px;
|
245 |
-
|
246 |
background: #E6F0E8;
|
247 |
border: 1px solid #6AB074;
|
248 |
color: #214F28;
|
@@ -748,4 +748,573 @@
|
|
748 |
text-align: center;
|
749 |
width: 20px;
|
750 |
-webkit-font-smoothing: antialiased
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
751 |
}
|
242 |
max-width: 870px;
|
243 |
margin-top: 10px;
|
244 |
padding: 10px 10px 7px 10px;
|
245 |
+
clear: both;
|
246 |
background: #E6F0E8;
|
247 |
border: 1px solid #6AB074;
|
248 |
color: #214F28;
|
748 |
text-align: center;
|
749 |
width: 20px;
|
750 |
-webkit-font-smoothing: antialiased
|
751 |
+
}
|
752 |
+
|
753 |
+
/* Locator Summary */
|
754 |
+
.ctf-feed-locator-summary-wrap {
|
755 |
+
max-width: 1100px;
|
756 |
+
margin-bottom: 40px;
|
757 |
+
}
|
758 |
+
.ctf-full-wrap {
|
759 |
+
display: none;
|
760 |
+
}
|
761 |
+
.ctf-locator-more {
|
762 |
+
display: inline-block;
|
763 |
+
margin: 0 0 0 1px;
|
764 |
+
padding: 0 5px;
|
765 |
+
border: 1px solid rgba(0,0,0,0.1);
|
766 |
+
border-radius: 3px;
|
767 |
+
line-height: 1.6;
|
768 |
+
}
|
769 |
+
|
770 |
+
.ctf_shortcode_visible .ctf_locations_link {
|
771 |
+
display: none;
|
772 |
+
}
|
773 |
+
.ctf_locations_link a {
|
774 |
+
font-weight: normal;
|
775 |
+
text-decoration: none;
|
776 |
+
}
|
777 |
+
.ctf_locations_link svg {
|
778 |
+
width: 11px;
|
779 |
+
position: relative;
|
780 |
+
top: 1px;
|
781 |
+
}
|
782 |
+
|
783 |
+
|
784 |
+
/* More social feeds page */
|
785 |
+
#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-primary .fa-spinner {
|
786 |
+
color: #333;
|
787 |
+
}
|
788 |
+
#ctf-admin .ctf_more_plugins h2{
|
789 |
+
margin-top: 15px;
|
790 |
+
}
|
791 |
+
#ctf-admin .ctf_more_plugins #ctf-admin-addons .addons-container{
|
792 |
+
overflow: hidden;
|
793 |
+
margin: 0;
|
794 |
+
}
|
795 |
+
#ctf-admin .ctf_more_plugins#ctf-admin-about #ctf-admin-addons{
|
796 |
+
padding: 20px 0;
|
797 |
+
}
|
798 |
+
#ctf-admin .ctf-more-plugins-intro span{
|
799 |
+
color: #e34f0e;
|
800 |
+
}
|
801 |
+
#ctf-admin .ctf_more_plugins h3{
|
802 |
+
padding: 15px 0 0 0;
|
803 |
+
}
|
804 |
+
.sb_cross_install_modal .ctf-loader{
|
805 |
+
position: absolute;
|
806 |
+
left: 50%;
|
807 |
+
top: 50%;
|
808 |
+
margin: -10px 0 0 -10px;
|
809 |
+
}
|
810 |
+
|
811 |
+
/* Social Wall landing page */
|
812 |
+
#ctf-admin.sw-landing-page{
|
813 |
+
padding: 20px 0;
|
814 |
+
}
|
815 |
+
#ctf-admin .ctf-sw-icons{
|
816 |
+
width: 100%;
|
817 |
+
text-align: center;
|
818 |
+
}
|
819 |
+
#ctf-admin .ctf-sw-icons span{
|
820 |
+
display: inline-block;
|
821 |
+
width: 32px;
|
822 |
+
margin: 0 7px;
|
823 |
+
position: relative;
|
824 |
+
top: -2px;
|
825 |
+
}
|
826 |
+
#ctf-admin .ctf-sw-icons .ctf-sb-plus{
|
827 |
+
width: 12px;
|
828 |
+
height: 12px;
|
829 |
+
position: relative;
|
830 |
+
top: -12px;
|
831 |
+
opacity: 0.9;
|
832 |
+
}
|
833 |
+
#ctf-admin.sw-landing-page h1,
|
834 |
+
#ctf-admin.sw-landing-page h2{
|
835 |
+
width: 100%;
|
836 |
+
text-align: center;
|
837 |
+
}
|
838 |
+
#ctf-admin.sw-landing-page h1{
|
839 |
+
font-size: 44px;
|
840 |
+
margin: 20px 0 0 0;
|
841 |
+
line-height: 1.3;
|
842 |
+
}
|
843 |
+
#ctf-admin.sw-landing-page h2{
|
844 |
+
font-size: 30px;
|
845 |
+
font-weight: 100;
|
846 |
+
line-height: 1.2;
|
847 |
+
margin: 5px 0 20px 0;
|
848 |
+
}
|
849 |
+
#ctf-admin .ctf-sw-info{
|
850 |
+
width: 95%;
|
851 |
+
max-width: 1400px;
|
852 |
+
margin: 0 auto;
|
853 |
+
padding: 50px 10px;
|
854 |
+
clear: both;
|
855 |
+
overflow: hidden;
|
856 |
+
box-sizing: border-box;
|
857 |
+
}
|
858 |
+
#ctf-admin .ctf-sw-features{
|
859 |
+
float: left;
|
860 |
+
width: 40%;
|
861 |
+
margin-right: 5%;
|
862 |
+
padding: 20px 0 0 0;
|
863 |
+
}
|
864 |
+
#ctf-admin .ctf-sw-screenshot{
|
865 |
+
position: relative;
|
866 |
+
width: 55%;
|
867 |
+
float: left;
|
868 |
+
box-sizing: border-box;
|
869 |
+
border: 5px solid #fff;
|
870 |
+
box-shadow: 0 0 20px 0 rgba(0,0,0,0.05);
|
871 |
+
}
|
872 |
+
#ctf-admin .ctf-sw-features p{
|
873 |
+
margin: 35px 0;
|
874 |
+
padding: 0;
|
875 |
+
font-size: 15px;
|
876 |
+
}
|
877 |
+
#ctf-admin .ctf-sw-features p:first-child{
|
878 |
+
margin-top: 0;
|
879 |
+
}
|
880 |
+
#ctf-admin .ctf-sw-features span{
|
881 |
+
display: block;
|
882 |
+
font-size: 20px;
|
883 |
+
font-weight: bold;
|
884 |
+
}
|
885 |
+
#ctf-admin.sw-landing-page .cta {
|
886 |
+
margin: 20px 0 0 5px;
|
887 |
+
padding: 8px 40px 10px 40px;
|
888 |
+
font-size: 20px;
|
889 |
+
}
|
890 |
+
#ctf-admin .ctf-sw-screenshot img{
|
891 |
+
width: 100%;
|
892 |
+
display: block;
|
893 |
+
}
|
894 |
+
#ctf-admin .ctf-sw-screenshot .cta{
|
895 |
+
position: absolute;
|
896 |
+
top: 50%;
|
897 |
+
left: 50%;
|
898 |
+
margin-top: -32px;
|
899 |
+
margin-left: -80px;
|
900 |
+
padding: 15px 30px 17px 30px;
|
901 |
+
color: #333;
|
902 |
+
text-decoration: none;
|
903 |
+
background: rgba(255,255,255,0.95);
|
904 |
+
border-radius: 3px;
|
905 |
+
/*border: 2px solid rgba(0,0,0,0.1);*/
|
906 |
+
box-shadow: 0 0 20px 0 rgba(0,0,0,0.1);
|
907 |
+
}
|
908 |
+
#ctf-admin .ctf-sw-screenshot:hover .cta,
|
909 |
+
#ctf-admin .ctf-sw-screenshot:focus .cta{
|
910 |
+
background: #e34717;
|
911 |
+
color: #fff;
|
912 |
+
box-shadow: 0;
|
913 |
+
}
|
914 |
+
#ctf-admin .ctf-sw-footer-cta{
|
915 |
+
width: 100%;
|
916 |
+
text-align: center;
|
917 |
+
}
|
918 |
+
#ctf-admin .ctf-sw-footer-cta a{
|
919 |
+
font-size: 22px;
|
920 |
+
display: inline-block;
|
921 |
+
text-decoration: none;
|
922 |
+
line-height: 25px;
|
923 |
+
font-weight: normal;
|
924 |
+
padding: 10px 0 30px 0;
|
925 |
+
}
|
926 |
+
#ctf-admin .ctf-sw-footer-cta span{
|
927 |
+
width: 30px;
|
928 |
+
height: 30px;
|
929 |
+
display: inline-block;
|
930 |
+
margin: 0 10px 0 0;
|
931 |
+
position: relative;
|
932 |
+
top: 4px;
|
933 |
+
}
|
934 |
+
#ctf-admin .ctf-sw-footer-cta span .emoji{
|
935 |
+
width: 30px !important;
|
936 |
+
height: 30px !important;
|
937 |
+
}
|
938 |
+
|
939 |
+
@media all and (max-width: 1500px){
|
940 |
+
#ctf-admin .ctf-sw-screenshot{
|
941 |
+
width: 55%;
|
942 |
+
float: left;
|
943 |
+
height: 500px;
|
944 |
+
background: url('../img/sw-screenshot.png') no-repeat center center;
|
945 |
+
background-size: cover;
|
946 |
+
}
|
947 |
+
#ctf-admin .ctf-sw-screenshot img{
|
948 |
+
display: none;
|
949 |
+
}
|
950 |
+
}
|
951 |
+
@media all and (max-width: 900px){
|
952 |
+
#ctf-admin .ctf-sw-info{
|
953 |
+
padding: 20px 0;
|
954 |
+
}
|
955 |
+
#ctf-admin .ctf-sw-features{
|
956 |
+
width: 100%;
|
957 |
+
padding: 10px 0;
|
958 |
+
margin: 0;
|
959 |
+
}
|
960 |
+
#ctf-admin .ctf-sw-screenshot{
|
961 |
+
width: 100%;
|
962 |
+
padding: 0;
|
963 |
+
height: auto;
|
964 |
+
background: none;
|
965 |
+
}
|
966 |
+
#ctf-admin .ctf-sw-screenshot img{
|
967 |
+
display: block;
|
968 |
+
}
|
969 |
+
#ctf-admin .ctf-sw-features .cta {
|
970 |
+
width: 100%;
|
971 |
+
box-sizing: border-box;
|
972 |
+
text-align: center;
|
973 |
+
margin: 20px 0;
|
974 |
+
}
|
975 |
+
}
|
976 |
+
|
977 |
+
/* Install another plugin modal */
|
978 |
+
.sb_cross_install_modal {
|
979 |
+
position: fixed;
|
980 |
+
z-index: 999;
|
981 |
+
width: 100%;
|
982 |
+
top: 0;
|
983 |
+
right: 0;
|
984 |
+
bottom: 0;
|
985 |
+
left: 0;
|
986 |
+
background: rgba(0, 0, 0, 0.3);
|
987 |
+
}
|
988 |
+
.sb_cross_install_inner {
|
989 |
+
position: absolute;
|
990 |
+
top: 140px;
|
991 |
+
left: 50%;
|
992 |
+
width: 480px;
|
993 |
+
margin: 0 0 0 -245px;
|
994 |
+
padding: 35px;
|
995 |
+
background: #fff;
|
996 |
+
text-align: left;
|
997 |
+
|
998 |
+
-webkit-box-shadow: 0 1px 20px rgba(0, 0, 0, 0.2);
|
999 |
+
box-shadow: 0 1px 20px rgba(0, 0, 0, 0.2);
|
1000 |
+
|
1001 |
+
-moz-border-radius: 3px;
|
1002 |
+
-webkit-border-radius: 3px;
|
1003 |
+
border-radius: 3px;
|
1004 |
+
}
|
1005 |
+
.sb_cross_install_inner#ctf-admin-about #ctf-admin-addons .addon-container,
|
1006 |
+
.sb_cross_install_inner#ctf-admin-about #ctf-admin-addons .addons-container{
|
1007 |
+
width: 100%;
|
1008 |
+
margin: 0;
|
1009 |
+
padding: 0;
|
1010 |
+
min-height: 198px;
|
1011 |
+
}
|
1012 |
+
#ctf-admin-addons .addon-item .action-button button{
|
1013 |
+
background: #007cba;
|
1014 |
+
border: 0;
|
1015 |
+
}
|
1016 |
+
#ctf-admin-addons .addon-item .action-button button:hover{
|
1017 |
+
background: #0071a1;
|
1018 |
+
}
|
1019 |
+
.sb_cross_install_inner#ctf-admin-about #ctf-admin-addons{
|
1020 |
+
padding: 0;
|
1021 |
+
}
|
1022 |
+
/* More social feeds page */
|
1023 |
+
.sb_cross_install_inner#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-primary .fa-spinner {
|
1024 |
+
color: #333;
|
1025 |
+
}
|
1026 |
+
#ctf-admin .ctf_more_plugins h2{
|
1027 |
+
margin-top: 15px;
|
1028 |
+
}
|
1029 |
+
#ctf-admin .ctf_more_plugins #ctf-admin-addons .addons-container{
|
1030 |
+
overflow: hidden;
|
1031 |
+
margin: 0;
|
1032 |
+
}
|
1033 |
+
#ctf-admin .ctf_more_plugins#ctf-admin-about #ctf-admin-addons{
|
1034 |
+
padding: 20px 0;
|
1035 |
+
}
|
1036 |
+
#ctf-admin .ctf-more-plugins-intro span{
|
1037 |
+
color: #e34f0e;
|
1038 |
+
}
|
1039 |
+
#ctf-admin .ctf_more_plugins h3{
|
1040 |
+
padding: 15px 0 0 0;
|
1041 |
+
}
|
1042 |
+
.sb_cross_install_modal .ctf-loader{
|
1043 |
+
position: absolute;
|
1044 |
+
left: 50%;
|
1045 |
+
top: 50%;
|
1046 |
+
margin: -10px 0 0 -10px;
|
1047 |
+
}
|
1048 |
+
/* AW Addons */
|
1049 |
+
#ctf-admin-addons h3 {
|
1050 |
+
padding: 10px 10px 0 10px;
|
1051 |
+
clear: left;
|
1052 |
+
}
|
1053 |
+
#ctf-admin-addons *,#ctf-admin-addons *::before,#ctf-admin-addons *::after {
|
1054 |
+
-webkit-box-sizing: border-box;
|
1055 |
+
-moz-box-sizing: border-box;
|
1056 |
+
box-sizing: border-box
|
1057 |
+
}
|
1058 |
+
|
1059 |
+
#ctf-admin-addons .addons-container {
|
1060 |
+
margin-left: -20px;
|
1061 |
+
margin-right: -20px
|
1062 |
+
}
|
1063 |
+
|
1064 |
+
#ctf-admin-addons .unlock-msg {
|
1065 |
+
padding: 0 20px;
|
1066 |
+
margin-top: -20px;
|
1067 |
+
clear: both
|
1068 |
+
}
|
1069 |
+
|
1070 |
+
#ctf-admin-addons #ctf-admin-addons-search {
|
1071 |
+
background-color: #fff;
|
1072 |
+
border: 1px solid #ddd;
|
1073 |
+
border-radius: 3px;
|
1074 |
+
box-shadow: none;
|
1075 |
+
color: #333;
|
1076 |
+
vertical-align: middle;
|
1077 |
+
padding: 7px 12px;
|
1078 |
+
margin: -3px 10px 0 0;
|
1079 |
+
width: 200px;
|
1080 |
+
min-height: 35px;
|
1081 |
+
float: right
|
1082 |
+
}
|
1083 |
+
|
1084 |
+
#ctf-admin-addons #ctf-admin-addons-search:focus {
|
1085 |
+
border-color: #bbb
|
1086 |
+
}
|
1087 |
+
|
1088 |
+
#ctf-admin-addons .addon-container {
|
1089 |
+
padding: 0 20px;
|
1090 |
+
float: left;
|
1091 |
+
width: 33.333333%;
|
1092 |
+
margin-bottom: 20px
|
1093 |
+
}
|
1094 |
+
|
1095 |
+
@media (max-width: 1249px) {
|
1096 |
+
#ctf-admin-addons .addon-container {
|
1097 |
+
width:50%
|
1098 |
+
}
|
1099 |
+
}
|
1100 |
+
|
1101 |
+
@media (max-width: 767px) {
|
1102 |
+
#ctf-admin-addons .addon-container {
|
1103 |
+
width:100%;
|
1104 |
+
margin-bottom: 20px
|
1105 |
+
}
|
1106 |
+
}
|
1107 |
+
|
1108 |
+
#ctf-admin-addons h4 {
|
1109 |
+
font-size: 17px;
|
1110 |
+
font-weight: 700
|
1111 |
+
}
|
1112 |
+
|
1113 |
+
#ctf-admin-addons .addon-item {
|
1114 |
+
background-color: #fff;
|
1115 |
+
border: 1px solid #ddd;
|
1116 |
+
border-radius: 3px;
|
1117 |
+
margin: 0
|
1118 |
+
}
|
1119 |
+
|
1120 |
+
@media (max-width: 767px) {
|
1121 |
+
#ctf-admin-addons .addon-item {
|
1122 |
+
margin:0 0
|
1123 |
+
}
|
1124 |
+
}
|
1125 |
+
|
1126 |
+
#ctf-admin-addons .addon-item img {
|
1127 |
+
border: 1px solid #eee;
|
1128 |
+
float: left;
|
1129 |
+
max-width: 75px
|
1130 |
+
}
|
1131 |
+
|
1132 |
+
#ctf-admin-addons .addon-item h5 {
|
1133 |
+
margin: 0 0 10px 100px;
|
1134 |
+
font-size: 16px
|
1135 |
+
}
|
1136 |
+
|
1137 |
+
#ctf-admin-addons .addon-item p {
|
1138 |
+
margin: 0 0 0 100px
|
1139 |
+
}
|
1140 |
+
|
1141 |
+
#ctf-admin-addons .addon-item .details {
|
1142 |
+
padding: 30px 20px
|
1143 |
+
}
|
1144 |
+
|
1145 |
+
#ctf-admin-addons .addon-item .actions {
|
1146 |
+
background-color: #f7f7f7;
|
1147 |
+
border-top: 1px solid #ddd;
|
1148 |
+
padding: 20px;
|
1149 |
+
position: relative
|
1150 |
+
}
|
1151 |
+
|
1152 |
+
#ctf-admin-addons .addon-item .actions .msg {
|
1153 |
+
background-color: #f7f7f7;
|
1154 |
+
position: absolute;
|
1155 |
+
text-align: center;
|
1156 |
+
font-weight: 600;
|
1157 |
+
top: 0;
|
1158 |
+
left: 0;
|
1159 |
+
height: 100%;
|
1160 |
+
width: 100%;
|
1161 |
+
z-index: 99;
|
1162 |
+
padding: 20px;
|
1163 |
+
display: -webkit-box;
|
1164 |
+
display: -moz-box;
|
1165 |
+
display: -ms-flexbox;
|
1166 |
+
display: -webkit-flex;
|
1167 |
+
display: flex;
|
1168 |
+
-webkit-align-items: center;
|
1169 |
+
-ms-align-items: center;
|
1170 |
+
align-items: center;
|
1171 |
+
justify-content: center
|
1172 |
+
}
|
1173 |
+
|
1174 |
+
#ctf-admin-addons .addon-item .actions .msg.success {
|
1175 |
+
color: #2a9b39
|
1176 |
+
}
|
1177 |
+
|
1178 |
+
#ctf-admin-addons .addon-item .actions .msg.error {
|
1179 |
+
color: red
|
1180 |
+
}
|
1181 |
+
|
1182 |
+
#ctf-admin-addons .addon-item .status {
|
1183 |
+
float: left;
|
1184 |
+
padding-top: 8px
|
1185 |
+
}
|
1186 |
+
|
1187 |
+
#ctf-admin-addons .addon-item .status .status-inactive {
|
1188 |
+
color: red
|
1189 |
+
}
|
1190 |
+
|
1191 |
+
#ctf-admin-addons .addon-item .status .status-download {
|
1192 |
+
color: #666
|
1193 |
+
}
|
1194 |
+
|
1195 |
+
#ctf-admin-addons .addon-item .status .status-active {
|
1196 |
+
color: #2a9b39
|
1197 |
+
}
|
1198 |
+
|
1199 |
+
#ctf-admin-addons .addon-item .upgrade-button {
|
1200 |
+
text-align: center
|
1201 |
+
}
|
1202 |
+
|
1203 |
+
#ctf-admin-addons .addon-item .upgrade-button a {
|
1204 |
+
font-weight: 600;
|
1205 |
+
width: 140px;
|
1206 |
+
text-align: center;
|
1207 |
+
padding: 8px 5px
|
1208 |
+
}
|
1209 |
+
|
1210 |
+
#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button {
|
1211 |
+
display: inline-block;
|
1212 |
+
text-decoration: none;
|
1213 |
+
font-size: 13px;
|
1214 |
+
line-height: 26px;
|
1215 |
+
height: 28px;
|
1216 |
+
margin: 0;
|
1217 |
+
padding: 0 10px 1px;
|
1218 |
+
cursor: pointer;
|
1219 |
+
-webkit-appearance: none;
|
1220 |
+
border-radius: 3px;
|
1221 |
+
border: 1px solid #cccccc;
|
1222 |
+
background: #f7f7f7;
|
1223 |
+
box-shadow: 0 1px 0 #cccccc;
|
1224 |
+
font-weight: normal
|
1225 |
+
}
|
1226 |
+
|
1227 |
+
#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button:hover,#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button:focus {
|
1228 |
+
background: #fafafa;
|
1229 |
+
border-color: #999;
|
1230 |
+
color: #23282d
|
1231 |
+
}
|
1232 |
+
|
1233 |
+
#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-primary {
|
1234 |
+
background: #0085ba;
|
1235 |
+
border-color: #0073aa #006799 #006799;
|
1236 |
+
box-shadow: 0 1px 0 #006799;
|
1237 |
+
color: #fff;
|
1238 |
+
text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799
|
1239 |
+
}
|
1240 |
+
|
1241 |
+
#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-primary:hover,#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-primary:focus {
|
1242 |
+
background: #008ec2;
|
1243 |
+
border-color: #006799;
|
1244 |
+
color: #fff
|
1245 |
+
}
|
1246 |
+
|
1247 |
+
#ctf-admin #ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-primary .fa-spinner {
|
1248 |
+
color: #fff
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-secondary {
|
1252 |
+
color: #555;
|
1253 |
+
border-color: #cccccc;
|
1254 |
+
background: #f7f7f7;
|
1255 |
+
box-shadow: 0 1px 0 #cccccc
|
1256 |
+
}
|
1257 |
+
|
1258 |
+
#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-secondary:hover,#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.button-secondary:focus {
|
1259 |
+
background: #fafafa;
|
1260 |
+
border-color: #999;
|
1261 |
+
color: #23282d
|
1262 |
+
}
|
1263 |
+
|
1264 |
+
#ctf-admin-about #ctf-admin-addons .addon-item .action-button .button.disabled {
|
1265 |
+
cursor: default
|
1266 |
+
}
|
1267 |
+
|
1268 |
+
|
1269 |
+
#ctf-admin-addons .addon-item .action-button {
|
1270 |
+
float: right
|
1271 |
+
}
|
1272 |
+
|
1273 |
+
#ctf-admin-addons .addon-item .action-button button {
|
1274 |
+
background: none;
|
1275 |
+
border: 1px solid #ddd;
|
1276 |
+
border-radius: 3px;
|
1277 |
+
box-shadow: none;
|
1278 |
+
cursor: pointer;
|
1279 |
+
font-weight: 600;
|
1280 |
+
width: 140px;
|
1281 |
+
text-align: center;
|
1282 |
+
padding: 8px 5px
|
1283 |
+
}
|
1284 |
+
|
1285 |
+
#ctf-admin-addons .addon-item .action-button button:hover,#ctf-admin-addons .addon-item .action-button button.loading {
|
1286 |
+
background-color: #e9e9e9
|
1287 |
+
}
|
1288 |
+
|
1289 |
+
#ctf-admin-addons .addon-item .action-button button .fa {
|
1290 |
+
margin-right: 8px
|
1291 |
+
}
|
1292 |
+
|
1293 |
+
#ctf-admin-addons .addon-item .action-button button .fa.fa-spinner {
|
1294 |
+
margin-right: 0
|
1295 |
+
}
|
1296 |
+
|
1297 |
+
#ctf-admin-addons .addon-item .action-button button.status-active .fa {
|
1298 |
+
color: #2a9b39
|
1299 |
+
}
|
1300 |
+
|
1301 |
+
#ctf-admin-addons .addon-item .action-button button.status-inactive .fa {
|
1302 |
+
color: red
|
1303 |
+
}
|
1304 |
+
|
1305 |
+
#ctf-admin-addons .addon-item .action-button button.status-download .fa {
|
1306 |
+
color: #999
|
1307 |
+
}
|
1308 |
+
|
1309 |
+
#ctf-admin-addons .addon-item .action-button button.disabled {
|
1310 |
+
cursor: default
|
1311 |
+
}
|
1312 |
+
|
1313 |
+
#ctf-admin-addons .addon-item .action-button button.loading .fa {
|
1314 |
+
color: #666
|
1315 |
+
}
|
1316 |
+
.ctf-clear:after{
|
1317 |
+
display: table;
|
1318 |
+
content: "";
|
1319 |
+
clear: both;
|
1320 |
}
|
custom-twitter-feed.php
CHANGED
@@ -3,13 +3,13 @@
|
|
3 |
Plugin Name: Custom Twitter Feeds
|
4 |
Plugin URI: http://smashballoon.com/custom-twitter-feeds
|
5 |
Description: Customizable Twitter feeds for your website
|
6 |
-
Version: 1.
|
7 |
Author: Smash Balloon
|
8 |
Author URI: http://smashballoon.com/
|
9 |
Text Domain: custom-twitter-feeds
|
10 |
*/
|
11 |
/*
|
12 |
-
Copyright
|
13 |
This program is free software; you can redistribute it and/or modify
|
14 |
it under the terms of the GNU General Public License as published by
|
15 |
the Free Software Foundation; either version 2 of the License, or
|
@@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
24 |
*/
|
25 |
|
26 |
define( 'CTF_URL', plugin_dir_path( __FILE__ ) );
|
27 |
-
define( 'CTF_VERSION', '1.
|
28 |
define( 'CTF_TITLE', 'Custom Twitter Feeds' );
|
29 |
define( 'CTF_JS_URL', plugins_url( '/js/ctf-scripts.min.js?ver=' . CTF_VERSION , __FILE__ ) );
|
30 |
define( 'OAUTH_PROCESSOR_URL', 'https://api.smashballoon.com/twitter-login.php?return_uri=' );
|
@@ -38,7 +38,10 @@ if ( ! defined( 'CTF_PLUGIN_URL' ) ) {
|
|
38 |
}
|
39 |
// Db version.
|
40 |
if ( ! defined( 'CTF_DBVERSION' ) ) {
|
41 |
-
define( 'CTF_DBVERSION', '1.0' );
|
|
|
|
|
|
|
42 |
}
|
43 |
|
44 |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
@@ -56,6 +59,7 @@ function ctf_plugin_init() {
|
|
56 |
$ctf_blocks->load();
|
57 |
}
|
58 |
|
|
|
59 |
include_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/class-ctf-tracking.php';
|
60 |
include_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/class-ctf-gdpr-integrations.php';
|
61 |
|
@@ -69,6 +73,8 @@ function ctf_plugin_init() {
|
|
69 |
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/class-ctf-new-user.php';
|
70 |
$ctf_new_user = new CTF_New_User();
|
71 |
$ctf_new_user->init();
|
|
|
|
|
72 |
}
|
73 |
}
|
74 |
}
|
@@ -133,6 +139,14 @@ function ctf_check_for_db_updates() {
|
|
133 |
update_option( 'ctf_db_version', CTF_DBVERSION );
|
134 |
}
|
135 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
}
|
137 |
add_action( 'wp_loaded', 'ctf_check_for_db_updates' );
|
138 |
|
@@ -205,6 +219,22 @@ function ctf_get_more_posts() {
|
|
205 |
$twitter_feed->maybeCacheTweets();
|
206 |
}
|
207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
echo $twitter_feed->getTweetSetHtml( $is_pagination );
|
209 |
|
210 |
die();
|
@@ -212,12 +242,61 @@ function ctf_get_more_posts() {
|
|
212 |
add_action( 'wp_ajax_nopriv_ctf_get_more_posts', 'ctf_get_more_posts' );
|
213 |
add_action( 'wp_ajax_ctf_get_more_posts', 'ctf_get_more_posts' );
|
214 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
215 |
function ctf_plugin_action_links( $links ) {
|
216 |
$links[] = '<a href="'. esc_url( get_admin_url( null, 'admin.php?page=custom-twitter-feeds' ) ) .'">' . __( 'Settings' ) . '</a>';
|
217 |
return $links;
|
218 |
}
|
219 |
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), 'ctf_plugin_action_links' );
|
220 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
/**
|
222 |
* the html output is controlled by the user selecting which portions of tweets to show
|
223 |
*
|
@@ -599,8 +678,43 @@ function ctf_admin_scripts_and_styles() {
|
|
599 |
'sb_nonce' => wp_create_nonce( 'ctf-smash-balloon' )
|
600 |
)
|
601 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
602 |
wp_enqueue_style( 'wp-color-picker' );
|
603 |
wp_enqueue_script( 'wp-color-picker' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
604 |
}
|
605 |
add_action( 'admin_enqueue_scripts', 'ctf_admin_scripts_and_styles' );
|
606 |
|
3 |
Plugin Name: Custom Twitter Feeds
|
4 |
Plugin URI: http://smashballoon.com/custom-twitter-feeds
|
5 |
Description: Customizable Twitter feeds for your website
|
6 |
+
Version: 1.8
|
7 |
Author: Smash Balloon
|
8 |
Author URI: http://smashballoon.com/
|
9 |
Text Domain: custom-twitter-feeds
|
10 |
*/
|
11 |
/*
|
12 |
+
Copyright 2021 Smash Balloon LLC (email : hey@smashballoon.com)
|
13 |
This program is free software; you can redistribute it and/or modify
|
14 |
it under the terms of the GNU General Public License as published by
|
15 |
the Free Software Foundation; either version 2 of the License, or
|
24 |
*/
|
25 |
|
26 |
define( 'CTF_URL', plugin_dir_path( __FILE__ ) );
|
27 |
+
define( 'CTF_VERSION', '1.8' );
|
28 |
define( 'CTF_TITLE', 'Custom Twitter Feeds' );
|
29 |
define( 'CTF_JS_URL', plugins_url( '/js/ctf-scripts.min.js?ver=' . CTF_VERSION , __FILE__ ) );
|
30 |
define( 'OAUTH_PROCESSOR_URL', 'https://api.smashballoon.com/twitter-login.php?return_uri=' );
|
38 |
}
|
39 |
// Db version.
|
40 |
if ( ! defined( 'CTF_DBVERSION' ) ) {
|
41 |
+
define( 'CTF_DBVERSION', '1.0.1' );
|
42 |
+
}
|
43 |
+
if ( ! defined( 'CTF_FEED_LOCATOR' ) ) {
|
44 |
+
define( 'CTF_FEED_LOCATOR', 'ctf_feed_locator' );
|
45 |
}
|
46 |
|
47 |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
59 |
$ctf_blocks->load();
|
60 |
}
|
61 |
|
62 |
+
include_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/class-ctf-feed-locator.php';
|
63 |
include_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/class-ctf-tracking.php';
|
64 |
include_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/class-ctf-gdpr-integrations.php';
|
65 |
|
73 |
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/class-ctf-new-user.php';
|
74 |
$ctf_new_user = new CTF_New_User();
|
75 |
$ctf_new_user->init();
|
76 |
+
|
77 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/addon-functions.php';
|
78 |
}
|
79 |
}
|
80 |
}
|
139 |
update_option( 'ctf_db_version', CTF_DBVERSION );
|
140 |
}
|
141 |
|
142 |
+
if ( version_compare( $db_ver, '1.0.1', '<' ) ) {
|
143 |
+
include_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/class-ctf-feed-locator.php';
|
144 |
+
|
145 |
+
CTF_Feed_Locator::create_table();
|
146 |
+
|
147 |
+
update_option( 'ctf_db_version', CTF_DBVERSION );
|
148 |
+
}
|
149 |
+
|
150 |
}
|
151 |
add_action( 'wp_loaded', 'ctf_check_for_db_updates' );
|
152 |
|
219 |
$twitter_feed->maybeCacheTweets();
|
220 |
}
|
221 |
|
222 |
+
$atts = $shortcode_data;
|
223 |
+
|
224 |
+
$feed_id = isset( $_POST['feed_id'] ) ? sanitize_text_field( $_POST['feed_id'] ) : 'unknown';
|
225 |
+
$location = isset( $_POST['location'] ) && in_array( $_POST['location'], array( 'header', 'footer', 'sidebar', 'content' ), true ) ? sanitize_text_field( $_POST['location'] ) : 'unknown';
|
226 |
+
$post_id = isset( $_POST['post_id'] ) && $_POST['post_id'] !== 'unknown' ? (int)$_POST['post_id'] : 'unknown';
|
227 |
+
$feed_details = array(
|
228 |
+
'feed_id' => $feed_id,
|
229 |
+
'atts' => $atts,
|
230 |
+
'location' => array(
|
231 |
+
'post_id' => $post_id,
|
232 |
+
'html' => $location
|
233 |
+
)
|
234 |
+
);
|
235 |
+
|
236 |
+
ctf_do_background_tasks( $feed_details );
|
237 |
+
|
238 |
echo $twitter_feed->getTweetSetHtml( $is_pagination );
|
239 |
|
240 |
die();
|
242 |
add_action( 'wp_ajax_nopriv_ctf_get_more_posts', 'ctf_get_more_posts' );
|
243 |
add_action( 'wp_ajax_ctf_get_more_posts', 'ctf_get_more_posts' );
|
244 |
|
245 |
+
function ctf_do_locator() {
|
246 |
+
if ( ! isset( $_POST['feed_id'] ) || strpos( $_POST['feed_id'], 'ctf' ) === false ) {
|
247 |
+
die( 'invalid feed ID');
|
248 |
+
}
|
249 |
+
|
250 |
+
$feed_id = sanitize_text_field( $_POST['feed_id'] );
|
251 |
+
|
252 |
+
$atts_raw = isset( $_POST['atts'] ) ? json_decode( stripslashes( $_POST['atts'] ), true ) : array();
|
253 |
+
if ( is_array( $atts_raw ) ) {
|
254 |
+
array_map( 'sanitize_text_field', $atts_raw );
|
255 |
+
} else {
|
256 |
+
$atts_raw = array();
|
257 |
+
}
|
258 |
+
$atts = $atts_raw; // now sanitized
|
259 |
+
|
260 |
+
$location = isset( $_POST['location'] ) && in_array( $_POST['location'], array( 'header', 'footer', 'sidebar', 'content' ), true ) ? sanitize_text_field( $_POST['location'] ) : 'unknown';
|
261 |
+
$post_id = isset( $_POST['post_id'] ) && $_POST['post_id'] !== 'unknown' ? (int)$_POST['post_id'] : 'unknown';
|
262 |
+
$feed_details = array(
|
263 |
+
'feed_id' => $feed_id,
|
264 |
+
'atts' => $atts,
|
265 |
+
'location' => array(
|
266 |
+
'post_id' => $post_id,
|
267 |
+
'html' => $location
|
268 |
+
)
|
269 |
+
);
|
270 |
+
|
271 |
+
ctf_do_background_tasks( $feed_details );
|
272 |
+
|
273 |
+
wp_die( 'locating success' );
|
274 |
+
}
|
275 |
+
add_action( 'wp_ajax_ctf_do_locator', 'ctf_do_locator' );
|
276 |
+
add_action( 'wp_ajax_nopriv_ctf_do_locator', 'ctf_do_locator' );
|
277 |
+
|
278 |
+
function ctf_do_background_tasks( $feed_details ) {
|
279 |
+
$locator = new CTF_Feed_Locator( $feed_details );
|
280 |
+
$locator->add_or_update_entry();
|
281 |
+
if ( $locator->should_clear_old_locations() ) {
|
282 |
+
$locator->delete_old_locations();
|
283 |
+
}
|
284 |
+
}
|
285 |
+
|
286 |
function ctf_plugin_action_links( $links ) {
|
287 |
$links[] = '<a href="'. esc_url( get_admin_url( null, 'admin.php?page=custom-twitter-feeds' ) ) .'">' . __( 'Settings' ) . '</a>';
|
288 |
return $links;
|
289 |
}
|
290 |
add_filter( 'plugin_action_links_' . plugin_basename(__FILE__), 'ctf_plugin_action_links' );
|
291 |
|
292 |
+
function ctf_json_encode( $thing ) {
|
293 |
+
if ( function_exists( 'wp_json_encode' ) ) {
|
294 |
+
return wp_json_encode( $thing );
|
295 |
+
} else {
|
296 |
+
return json_encode( $thing );
|
297 |
+
}
|
298 |
+
}
|
299 |
+
|
300 |
/**
|
301 |
* the html output is controlled by the user selecting which portions of tweets to show
|
302 |
*
|
678 |
'sb_nonce' => wp_create_nonce( 'ctf-smash-balloon' )
|
679 |
)
|
680 |
);
|
681 |
+
$strings = array(
|
682 |
+
'addon_activate' => esc_html__( 'Activate', 'custom-twitter-feeds' ),
|
683 |
+
'addon_activated' => esc_html__( 'Activated', 'custom-twitter-feeds' ),
|
684 |
+
'addon_active' => esc_html__( 'Active', 'custom-twitter-feeds' ),
|
685 |
+
'addon_deactivate' => esc_html__( 'Deactivate', 'custom-twitter-feeds' ),
|
686 |
+
'addon_inactive' => esc_html__( 'Inactive', 'custom-twitter-feeds' ),
|
687 |
+
'addon_install' => esc_html__( 'Install Addon', 'custom-twitter-feeds' ),
|
688 |
+
'addon_error' => esc_html__( 'Could not install addon. Please download from wpforms.com and install manually.', 'custom-twitter-feeds' ),
|
689 |
+
'plugin_error' => esc_html__( 'Could not install a plugin. Please download from WordPress.org and install manually.', 'custom-twitter-feeds' ),
|
690 |
+
'addon_search' => esc_html__( 'Searching Addons', 'custom-twitter-feeds' ),
|
691 |
+
'ajax_url' => admin_url( 'admin-ajax.php' ),
|
692 |
+
'cancel' => esc_html__( 'Cancel', 'custom-twitter-feeds' ),
|
693 |
+
'close' => esc_html__( 'Close', 'custom-twitter-feeds' ),
|
694 |
+
'nonce' => wp_create_nonce( 'ctf-admin' ),
|
695 |
+
'almost_done' => esc_html__( 'Almost Done', 'custom-twitter-feeds' ),
|
696 |
+
'oops' => esc_html__( 'Oops!', 'custom-twitter-feeds' ),
|
697 |
+
'ok' => esc_html__( 'OK', 'custom-twitter-feeds' ),
|
698 |
+
'plugin_install_activate_btn' => esc_html__( 'Install and Activate', 'custom-twitter-feeds' ),
|
699 |
+
'plugin_install_activate_confirm' => esc_html__( 'needs to be installed and activated to import its forms. Would you like us to install and activate it for you?', 'custom-twitter-feeds' ),
|
700 |
+
'plugin_activate_btn' => esc_html__( 'Activate', 'custom-twitter-feeds' ),
|
701 |
+
);
|
702 |
+
$strings = apply_filters( 'ctf_admin_strings', $strings );
|
703 |
+
|
704 |
+
wp_localize_script(
|
705 |
+
'ctf_admin_scripts',
|
706 |
+
'ctf_admin_strings',
|
707 |
+
$strings
|
708 |
+
);
|
709 |
wp_enqueue_style( 'wp-color-picker' );
|
710 |
wp_enqueue_script( 'wp-color-picker' );
|
711 |
+
wp_enqueue_script(
|
712 |
+
'jquery-matchheight',
|
713 |
+
CTF_PLUGIN_URL . 'js/jquery.matchHeight-min.js',
|
714 |
+
array( 'jquery' ),
|
715 |
+
'0.7.0',
|
716 |
+
false
|
717 |
+
);
|
718 |
}
|
719 |
add_action( 'admin_enqueue_scripts', 'ctf_admin_scripts_and_styles' );
|
720 |
|
img/about/plugin-fb.png
ADDED
Binary file
|
img/about/plugin-if.png
ADDED
Binary file
|
img/about/plugin-tw.jpg
ADDED
Binary file
|
img/about/plugin-yt.png
ADDED
Binary file
|
img/sw-screenshot.png
ADDED
Binary file
|
inc/CtfAdmin.php
CHANGED
@@ -47,7 +47,54 @@ class CtfAdmin
|
|
47 |
'custom-twitter-feeds-style',
|
48 |
array( $this, 'create_submenu_page_style' )
|
49 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
}
|
|
|
51 |
|
52 |
public static function get_active_tab( $tab = '' )
|
53 |
{
|
@@ -60,6 +107,10 @@ class CtfAdmin
|
|
60 |
return 'display';
|
61 |
case 'support':
|
62 |
return 'support';
|
|
|
|
|
|
|
|
|
63 |
default:
|
64 |
return 'configure';
|
65 |
}
|
@@ -84,6 +135,11 @@ class CtfAdmin
|
|
84 |
require_once CTF_URL . '/views/admin/main.php';
|
85 |
}
|
86 |
|
|
|
|
|
|
|
|
|
|
|
87 |
public function general_section_text()
|
88 |
{
|
89 |
// no explanation needed
|
@@ -217,13 +273,20 @@ class CtfAdmin
|
|
217 |
'ctf_options_feed_settings' // matches the section name
|
218 |
);
|
219 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
220 |
// User Timeline Radio
|
221 |
$this->create_settings_field( array(
|
222 |
'name' => 'usertimeline',
|
223 |
-
'title' => '<label for="ctf_feed_type">Feed Type</label><code class="ctf_shortcode">type
|
224 |
Eg: screenname=gopro
|
225 |
Eg: home=true
|
226 |
-
Eg: hashtag=#cats</code>', // label for the input field
|
227 |
'callback' => 'feed_settings_radio', // name of the function that outputs the html
|
228 |
'page' => 'ctf_options_feed_settings', // matches the section name
|
229 |
'section' => 'ctf_options_feed_settings', // matches the section name
|
47 |
'custom-twitter-feeds-style',
|
48 |
array( $this, 'create_submenu_page_style' )
|
49 |
);
|
50 |
+
|
51 |
+
//Show a Instagram plugin menu item if it isn't already installed
|
52 |
+
if( !is_plugin_active( 'instagram-feed/instagram-feed.php' ) && !is_plugin_active( 'instagram-feed-pro/instagram-feed.php' ) ){
|
53 |
+
add_submenu_page(
|
54 |
+
'custom-twitter-feeds',
|
55 |
+
__( 'Instagram Feed', 'ctf' ),
|
56 |
+
'<span class="ctf_get_sbi"><svg style="height: 14px; margin: 0 8px 0 0; position: relative; top: 2px;" aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class="svg-inline--fa fa-instagram fa-w-14 fa-2x"><path fill="currentColor" d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z" class=""></path></svg>' . __( 'Instagram Feed', 'ctf' ) . '</span>',
|
57 |
+
'manage_options',
|
58 |
+
'admin.php?page=custom-twitter-feeds&tab=more',
|
59 |
+
''
|
60 |
+
);
|
61 |
+
}
|
62 |
+
|
63 |
+
//Show a Instagram plugin menu item if it isn't already installed
|
64 |
+
if( !is_plugin_active( 'custom-facebook-feed/custom-facebook-feed.php' ) && !is_plugin_active( 'custom-facebook-feed-pro/custom-facebook-feed.php' ) ){
|
65 |
+
add_submenu_page(
|
66 |
+
'custom-twitter-feeds',
|
67 |
+
__( 'Facebook Feed', 'ctf' ),
|
68 |
+
'<span class="ctf_get_cff"><svg style="height: 14px; margin: 0 8px 0 0; position: relative; top: 2px;" aria-hidden="true" focusable="false" data-prefix="fab" data-icon="facebook" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="svg-inline--fa fa-facebook fa-w-16 fa-2x"><path fill="currentColor" d="M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.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.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z" class=""></path></svg>' . __( 'Facebook Feed', 'ctf' ) . '</span>',
|
69 |
+
'manage_options',
|
70 |
+
'admin.php?page=custom-twitter-feeds&tab=more',
|
71 |
+
''
|
72 |
+
);
|
73 |
+
}
|
74 |
+
|
75 |
+
//Show a YouTube plugin menu item if it isn't already installed
|
76 |
+
if( !is_plugin_active( 'feeds-for-youtube/youtube-feed.php' ) && !is_plugin_active( 'youtube-feed-pro/youtube-feed.php' ) ){
|
77 |
+
add_submenu_page(
|
78 |
+
'custom-twitter-feeds',
|
79 |
+
__( 'YouTube Feed', 'ctf' ),
|
80 |
+
'<span class="ctf_get_yt"><svg style="height: 14px; margin: 0 8px 0 0; position: relative; top: 2px;" aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="svg-inline--fa fa-youtube fa-w-18 fa-2x"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" class=""></path></svg>' . __( 'YouTube Feed', 'ctf' ) . '</span>',
|
81 |
+
'manage_options',
|
82 |
+
'admin.php?page=custom-twitter-feeds&tab=more',
|
83 |
+
''
|
84 |
+
);
|
85 |
+
}
|
86 |
+
|
87 |
+
add_submenu_page(
|
88 |
+
'custom-twitter-feeds',
|
89 |
+
__( 'Social Wall', 'ctf' ),
|
90 |
+
'<span><svg style="height: 14px; margin: 0 8px 0 0; position: relative; top: 2px;" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="th" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="svg-inline--fa fa-th fa-w-16 fa-2x"><path fill="currentColor" d="M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z" class=""></path></svg>' . __( 'Social Wall', 'ctf' ) . '</span>',
|
91 |
+
'manage_options',
|
92 |
+
'ctf-sw',
|
93 |
+
array( $this, 'social_wall_page' )
|
94 |
+
);
|
95 |
+
|
96 |
}
|
97 |
+
|
98 |
|
99 |
public static function get_active_tab( $tab = '' )
|
100 |
{
|
107 |
return 'display';
|
108 |
case 'support':
|
109 |
return 'support';
|
110 |
+
case 'allfeeds':
|
111 |
+
return 'allfeeds';
|
112 |
+
case 'more':
|
113 |
+
return 'more';
|
114 |
default:
|
115 |
return 'configure';
|
116 |
}
|
135 |
require_once CTF_URL . '/views/admin/main.php';
|
136 |
}
|
137 |
|
138 |
+
|
139 |
+
public function social_wall_page() {
|
140 |
+
require_once CTF_URL .'views/admin/social-wall.php';
|
141 |
+
}
|
142 |
+
|
143 |
public function general_section_text()
|
144 |
{
|
145 |
// no explanation needed
|
273 |
'ctf_options_feed_settings' // matches the section name
|
274 |
);
|
275 |
|
276 |
+
$locator_html = '';
|
277 |
+
if ( CTF_Feed_Locator::count_unique() > 1 ) {
|
278 |
+
$locator_html .= '<div class="ctf_locations_link">';
|
279 |
+
$locator_html .= '<a href="?page=custom-twitter-feeds&tab=allfeeds"><svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="search" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="svg-inline--fa fa-search fa-w-16 fa-2x"><path fill="currentColor" d="M508.5 468.9L387.1 347.5c-2.3-2.3-5.3-3.5-8.5-3.5h-13.2c31.5-36.5 50.6-84 50.6-136C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c52 0 99.5-19.1 136-50.6v13.2c0 3.2 1.3 6.2 3.5 8.5l121.4 121.4c4.7 4.7 12.3 4.7 17 0l22.6-22.6c4.7-4.7 4.7-12.3 0-17zM208 368c-88.4 0-160-71.6-160-160S119.6 48 208 48s160 71.6 160 160-71.6 160-160 160z" class=""></path></svg> ' . __( 'Feed Finder', 'custom-twitter-feeds' ) . '</a>';
|
280 |
+
$locator_html .= '</div>';
|
281 |
+
}
|
282 |
+
|
283 |
// User Timeline Radio
|
284 |
$this->create_settings_field( array(
|
285 |
'name' => 'usertimeline',
|
286 |
+
'title' => '<label for="ctf_feed_type">Select a Feed Type</label><code class="ctf_shortcode">type
|
287 |
Eg: screenname=gopro
|
288 |
Eg: home=true
|
289 |
+
Eg: hashtag=#cats</code>' . $locator_html, // label for the input field
|
290 |
'callback' => 'feed_settings_radio', // name of the function that outputs the html
|
291 |
'page' => 'ctf_options_feed_settings', // matches the section name
|
292 |
'section' => 'ctf_options_feed_settings', // matches the section name
|
inc/CtfFeed.php
CHANGED
@@ -1369,6 +1369,17 @@ class CtfFeed
|
|
1369 |
return $twitter_connect->performRequest();
|
1370 |
}
|
1371 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1372 |
/**
|
1373 |
* If the feed runs out of tweets to display for some reason,
|
1374 |
* this function creates a graceful failure message
|
@@ -1413,13 +1424,23 @@ class CtfFeed
|
|
1413 |
$ctf_feed_classes = apply_filters( 'ctf_feed_classes', $ctf_feed_classes ); //add_filter( 'ctf_feed_classes', function( $ctf_feed_classes ) { return $ctf_feed_classes . ' new-class'; }, 10, 1 );
|
1414 |
$ctf_feed_html = '';
|
1415 |
|
1416 |
-
|
|
|
1417 |
if ( CTF_GDPR_Integrations::doing_gdpr( $feed_options ) ) {
|
1418 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1419 |
}
|
|
|
|
|
1420 |
|
1421 |
$ctf_feed_html .= '<!-- Custom Twitter Feeds by Smash Balloon -->';
|
1422 |
-
$ctf_feed_html .= '<div id="ctf" class="' . $ctf_feed_classes . '" style="' . $feed_options['width'] . $feed_options['height'] . $feed_options['bgcolor'] . '" data-ctfshortcode="' . $this->getShortCodeJSON() . '"' .$ctf_data_disablelinks . $ctf_data_linktextcolor . $ctf_enable_intents . $
|
1423 |
$tweet_set = $this->tweet_set;
|
1424 |
|
1425 |
// dynamically include header
|
@@ -1496,7 +1517,7 @@ class CtfFeed
|
|
1496 |
$ctf_header_html .= '<span class="ctf-verified">' . ctf_get_fa_el( 'fa-check-circle' ) . '</span>';
|
1497 |
}
|
1498 |
|
1499 |
-
$ctf_header_html .= '<span class="ctf-header-follow">' . ctf_get_fa_el( 'fa-twitter' ) . 'Follow</span>';
|
1500 |
$ctf_header_html .= '</p>';
|
1501 |
|
1502 |
if ( $feed_options['showbio'] && !empty($tweet_set[0]['user']['description']) ) {
|
@@ -1654,7 +1675,7 @@ class CtfFeed
|
|
1654 |
if ( isset( $retweeter ) && ctf_show( 'retweeter', $feed_options ) ) {
|
1655 |
$tweet_html .= '<div class="ctf-context">';
|
1656 |
$tweet_html .= '<a href="https://twitter.com/intent/user?screen_name=' . $retweeter['screen_name'] . '" target="_blank" rel="noopener noreferrer" class="ctf-retweet-icon">' . ctf_get_fa_el( 'fa-retweet' ) . '<span class="ctf-screenreader">'.__( 'Retweet on Twitter', 'custom-twitter-feeds' ).'</span></a>';
|
1657 |
-
$tweet_html .= '<a href="https://twitter.com/' . $retweeter['screen_name'] . '" target="_blank" rel="noopener noreferrer" class="ctf-retweet-text" style="' . $feed_options['authortextsize'] . $feed_options['authortextweight'] . $feed_options['textcolor'] . '">' . $retweeter['name'] . ' ' . $feed_options['retweetedtext'] . '</a>';
|
1658 |
$tweet_html .= '</div>';
|
1659 |
}
|
1660 |
|
1369 |
return $twitter_connect->performRequest();
|
1370 |
}
|
1371 |
|
1372 |
+
public function feedID() {
|
1373 |
+
if ( $this->feed_options['persistentcache'] ) {
|
1374 |
+
$feed_id = substr( 'ctf_!_' . $this->feed_options['feed_term'], 0, 45 );
|
1375 |
+
$feed_id = str_replace( ' -filter:retweets', '', $feed_id );
|
1376 |
+
} else {
|
1377 |
+
$feed_id = $this->transient_name;
|
1378 |
+
}
|
1379 |
+
|
1380 |
+
return $feed_id;
|
1381 |
+
}
|
1382 |
+
|
1383 |
/**
|
1384 |
* If the feed runs out of tweets to display for some reason,
|
1385 |
* this function creates a graceful failure message
|
1424 |
$ctf_feed_classes = apply_filters( 'ctf_feed_classes', $ctf_feed_classes ); //add_filter( 'ctf_feed_classes', function( $ctf_feed_classes ) { return $ctf_feed_classes . ' new-class'; }, 10, 1 );
|
1425 |
$ctf_feed_html = '';
|
1426 |
|
1427 |
+
$flags_att = '';
|
1428 |
+
$flags = array();
|
1429 |
if ( CTF_GDPR_Integrations::doing_gdpr( $feed_options ) ) {
|
1430 |
+
$flags[] = 'gdpr';
|
1431 |
+
}
|
1432 |
+
if ( ! is_admin()
|
1433 |
+
&& CTF_Feed_Locator::should_do_ajax_locating( $this->feedID(), get_the_ID() ) ) {
|
1434 |
+
$flags[] = 'locator';
|
1435 |
+
}
|
1436 |
+
if ( ! empty( $flags ) ) {
|
1437 |
+
$flags_att = ' data-ctf-flags="' . implode( ',', $flags ) . '"';
|
1438 |
}
|
1439 |
+
$post_id_att = ' data-postid="' . esc_attr( get_the_ID() ) . '"';
|
1440 |
+
$feed_id_att = ' data-feed-id="' . $this->feedID() . '"';
|
1441 |
|
1442 |
$ctf_feed_html .= '<!-- Custom Twitter Feeds by Smash Balloon -->';
|
1443 |
+
$ctf_feed_html .= '<div id="ctf" class="' . $ctf_feed_classes . '" style="' . $feed_options['width'] . $feed_options['height'] . $feed_options['bgcolor'] . '" data-ctfshortcode="' . $this->getShortCodeJSON() . '"' .$ctf_data_disablelinks . $ctf_data_linktextcolor . $ctf_enable_intents . $flags_att . $post_id_att . $feed_id_att .' data-ctfneeded="'. $ctf_data_needed .'">';
|
1444 |
$tweet_set = $this->tweet_set;
|
1445 |
|
1446 |
// dynamically include header
|
1517 |
$ctf_header_html .= '<span class="ctf-verified">' . ctf_get_fa_el( 'fa-check-circle' ) . '</span>';
|
1518 |
}
|
1519 |
|
1520 |
+
$ctf_header_html .= '<span class="ctf-header-follow">' . ctf_get_fa_el( 'fa-twitter' ) . __( 'Follow', 'custom-twitter-feeds' ) . '</span>';
|
1521 |
$ctf_header_html .= '</p>';
|
1522 |
|
1523 |
if ( $feed_options['showbio'] && !empty($tweet_set[0]['user']['description']) ) {
|
1675 |
if ( isset( $retweeter ) && ctf_show( 'retweeter', $feed_options ) ) {
|
1676 |
$tweet_html .= '<div class="ctf-context">';
|
1677 |
$tweet_html .= '<a href="https://twitter.com/intent/user?screen_name=' . $retweeter['screen_name'] . '" target="_blank" rel="noopener noreferrer" class="ctf-retweet-icon">' . ctf_get_fa_el( 'fa-retweet' ) . '<span class="ctf-screenreader">'.__( 'Retweet on Twitter', 'custom-twitter-feeds' ).'</span></a>';
|
1678 |
+
$tweet_html .= '<a href="https://twitter.com/' . $retweeter['screen_name'] . '" target="_blank" rel="noopener noreferrer" class="ctf-retweet-text" style="' . $feed_options['authortextsize'] . $feed_options['authortextweight'] . $feed_options['textcolor'] . '">' . $retweeter['name'] . ' ' . __( $feed_options['retweetedtext'], 'custom-twitter-feeds' ) . '</a>';
|
1679 |
$tweet_html .= '</div>';
|
1680 |
}
|
1681 |
|
inc/CtfOauthConnect.php
CHANGED
@@ -286,23 +286,8 @@ class CtfOauthConnect
|
|
286 |
case 'file_get_contents':
|
287 |
$this->json = $this->fileGetContentsRequest( $url );
|
288 |
break;
|
289 |
-
case 'wp_http':
|
290 |
-
$this->json = $this->wpHttpRequest( $url );
|
291 |
-
break;
|
292 |
default:
|
293 |
-
|
294 |
-
$this->json = $this->curlRequest( $url );
|
295 |
-
|
296 |
-
if ( $this->api_error_no ){
|
297 |
-
$this->json = $this->fileGetContentsRequest( $url );
|
298 |
-
}
|
299 |
-
} elseif ( ( ini_get( 'allow_url_fopen' ) == 1 ||
|
300 |
-
ini_get( 'allow_url_fopen' ) === TRUE ) &&
|
301 |
-
in_array( 'https', stream_get_wrappers() ) ) {
|
302 |
-
$this->json = $this->fileGetContentsRequest( $url );
|
303 |
-
} else {
|
304 |
-
$this->json = $this->wpHttpRequest( $url );
|
305 |
-
}
|
306 |
}
|
307 |
|
308 |
return $this;
|
286 |
case 'file_get_contents':
|
287 |
$this->json = $this->fileGetContentsRequest( $url );
|
288 |
break;
|
|
|
|
|
|
|
289 |
default:
|
290 |
+
$this->json = $this->wpHttpRequest( $url );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
291 |
}
|
292 |
|
293 |
return $this;
|
inc/admin-hooks.php
CHANGED
@@ -358,7 +358,8 @@ add_action( 'wp_ajax_ctf_lite_dismiss', 'ctf_lite_dismiss' );
|
|
358 |
function ctf_admin_hide_unrelated_notices() {
|
359 |
|
360 |
// Bail if we're not on a ctf screen or page.
|
361 |
-
if ( ! isset( $_GET['page'] )
|
|
|
362 |
return;
|
363 |
}
|
364 |
|
358 |
function ctf_admin_hide_unrelated_notices() {
|
359 |
|
360 |
// Bail if we're not on a ctf screen or page.
|
361 |
+
if ( ! isset( $_GET['page'] )
|
362 |
+
|| ($_GET['page'] !== 'custom-twitter-feeds' && $_GET['page'] !== 'ctf-sw') ) {
|
363 |
return;
|
364 |
}
|
365 |
|
inc/admin/PluginSilentUpgrader.php
ADDED
@@ -0,0 +1,576 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace CTF\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, $hook_extra = array() ) {
|
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 |
+
}
|
inc/admin/PluginSilentUpgraderSkin.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace CTF\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 |
+
}
|
inc/admin/addon-functions.php
ADDED
@@ -0,0 +1,180 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 ctf_deactivate_addon() {
|
10 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/PluginSilentUpgrader.php';
|
11 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/PluginSilentUpgraderSkin.php';
|
12 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/class-install-skin.php';
|
13 |
+
// Run a security check.
|
14 |
+
check_ajax_referer( 'ctf-admin', 'nonce' );
|
15 |
+
|
16 |
+
// Check for permissions.
|
17 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
18 |
+
wp_send_json_error();
|
19 |
+
}
|
20 |
+
|
21 |
+
$type = 'addon';
|
22 |
+
if ( ! empty( $_POST['type'] ) ) {
|
23 |
+
$type = sanitize_key( $_POST['type'] );
|
24 |
+
}
|
25 |
+
|
26 |
+
if ( isset( $_POST['plugin'] ) ) {
|
27 |
+
deactivate_plugins( $_POST['plugin'] );
|
28 |
+
|
29 |
+
if ( 'plugin' === $type ) {
|
30 |
+
wp_send_json_success( esc_html__( 'Plugin deactivated.', 'custom-twitter-feeds' ) );
|
31 |
+
} else {
|
32 |
+
wp_send_json_success( esc_html__( 'Addon deactivated.', 'custom-twitter-feeds' ) );
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
wp_send_json_error( esc_html__( 'Could not deactivate the addon. Please deactivate from the Plugins page.', 'custom-twitter-feeds' ) );
|
37 |
+
}
|
38 |
+
add_action( 'wp_ajax_ctf_deactivate_addon', 'ctf_deactivate_addon' );
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Activate addon.
|
42 |
+
*
|
43 |
+
* @since 1.0.0
|
44 |
+
*/
|
45 |
+
function ctf_activate_addon() {
|
46 |
+
|
47 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/PluginSilentUpgrader.php';
|
48 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/PluginSilentUpgraderSkin.php';
|
49 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/class-install-skin.php';
|
50 |
+
// Run a security check.
|
51 |
+
check_ajax_referer( 'ctf-admin', 'nonce' );
|
52 |
+
// Check for permissions.
|
53 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
54 |
+
wp_send_json_error();
|
55 |
+
}
|
56 |
+
|
57 |
+
if ( isset( $_POST['plugin'] ) ) {
|
58 |
+
|
59 |
+
$type = 'addon';
|
60 |
+
if ( ! empty( $_POST['type'] ) ) {
|
61 |
+
$type = sanitize_key( $_POST['type'] );
|
62 |
+
}
|
63 |
+
|
64 |
+
$activate = activate_plugins( $_POST['plugin'] );
|
65 |
+
|
66 |
+
if ( ! is_wp_error( $activate ) ) {
|
67 |
+
if ( 'plugin' === $type ) {
|
68 |
+
wp_send_json_success( esc_html__( 'Plugin activated.', 'custom-twitter-feeds' ) );
|
69 |
+
} else {
|
70 |
+
wp_send_json_success( esc_html__( 'Addon activated.', 'custom-twitter-feeds' ) );
|
71 |
+
}
|
72 |
+
}
|
73 |
+
}
|
74 |
+
|
75 |
+
wp_send_json_error( esc_html__( 'Could not activate addon. Please activate from the Plugins page.', 'custom-twitter-feeds' ) );
|
76 |
+
}
|
77 |
+
add_action( 'wp_ajax_ctf_activate_addon', 'ctf_activate_addon' );
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Install addon.
|
81 |
+
*
|
82 |
+
* @since 1.0.0
|
83 |
+
*/
|
84 |
+
function ctf_install_addon() {
|
85 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/PluginSilentUpgrader.php';
|
86 |
+
require_once trailingslashit( CTF_PLUGIN_DIR ) . 'inc/admin/PluginSilentUpgraderSkin.php';
|
87 |
+
// Run a security check.
|
88 |
+
check_ajax_referer( 'ctf-admin', 'nonce' );
|
89 |
+
|
90 |
+
// Check for permissions.
|
91 |
+
if ( ! current_user_can( 'manage_options' ) ) {
|
92 |
+
wp_send_json_error();
|
93 |
+
}
|
94 |
+
|
95 |
+
$error = esc_html__( 'Could not install addon. Please download from wpforms.com and install manually.', 'custom-twitter-feeds' );
|
96 |
+
|
97 |
+
if ( empty( $_POST['plugin'] ) ) {
|
98 |
+
wp_send_json_error( $error );
|
99 |
+
}
|
100 |
+
|
101 |
+
// Set the current screen to avoid undefined notices.
|
102 |
+
set_current_screen( 'custom-twitter-feeds' );
|
103 |
+
|
104 |
+
// Prepare variables.
|
105 |
+
$url = esc_url_raw(
|
106 |
+
add_query_arg(
|
107 |
+
array(
|
108 |
+
'page' => 'custom-twitter-feeds',
|
109 |
+
),
|
110 |
+
admin_url( 'admin.php' )
|
111 |
+
)
|
112 |
+
);
|
113 |
+
|
114 |
+
$creds = request_filesystem_credentials( $url, '', false, false, null );
|
115 |
+
|
116 |
+
// Check for file system permissions.
|
117 |
+
if ( false === $creds ) {
|
118 |
+
wp_send_json_error( $error );
|
119 |
+
}
|
120 |
+
|
121 |
+
if ( ! WP_Filesystem( $creds ) ) {
|
122 |
+
wp_send_json_error( $error );
|
123 |
+
}
|
124 |
+
|
125 |
+
/*
|
126 |
+
* We do not need any extra credentials if we have gotten this far, so let's install the plugin.
|
127 |
+
*/
|
128 |
+
|
129 |
+
require_once CTF_PLUGIN_DIR . 'inc/admin/class-install-skin.php';
|
130 |
+
|
131 |
+
// Do not allow WordPress to search/download translations, as this will break JS output.
|
132 |
+
remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
|
133 |
+
|
134 |
+
// Create the plugin upgrader with our custom skin.
|
135 |
+
$installer = new CTF\Helpers\PluginSilentUpgrader( new CTF_Install_Skin() );
|
136 |
+
|
137 |
+
// Error check.
|
138 |
+
if ( ! method_exists( $installer, 'install' ) || empty( $_POST['plugin'] ) ) {
|
139 |
+
wp_send_json_error( $error );
|
140 |
+
}
|
141 |
+
|
142 |
+
$installer->install( $_POST['plugin'] ); // phpcs:ignore
|
143 |
+
|
144 |
+
// Flush the cache and return the newly installed plugin basename.
|
145 |
+
wp_cache_flush();
|
146 |
+
|
147 |
+
$plugin_basename = $installer->plugin_info();
|
148 |
+
|
149 |
+
if ( $plugin_basename ) {
|
150 |
+
|
151 |
+
$type = 'addon';
|
152 |
+
if ( ! empty( $_POST['type'] ) ) {
|
153 |
+
$type = sanitize_key( $_POST['type'] );
|
154 |
+
}
|
155 |
+
|
156 |
+
// Activate the plugin silently.
|
157 |
+
$activated = activate_plugin( $plugin_basename );
|
158 |
+
|
159 |
+
if ( ! is_wp_error( $activated ) ) {
|
160 |
+
wp_send_json_success(
|
161 |
+
array(
|
162 |
+
'msg' => 'plugin' === $type ? esc_html__( 'Plugin installed & activated.', 'custom-twitter-feeds' ) : esc_html__( 'Addon installed & activated.', 'custom-twitter-feeds' ),
|
163 |
+
'is_activated' => true,
|
164 |
+
'basename' => $plugin_basename,
|
165 |
+
)
|
166 |
+
);
|
167 |
+
} else {
|
168 |
+
wp_send_json_success(
|
169 |
+
array(
|
170 |
+
'msg' => 'plugin' === $type ? esc_html__( 'Plugin installed.', 'custom-twitter-feeds' ) : esc_html__( 'Addon installed.', 'custom-twitter-feeds' ),
|
171 |
+
'is_activated' => false,
|
172 |
+
'basename' => $plugin_basename,
|
173 |
+
)
|
174 |
+
);
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
wp_send_json_error( $error );
|
179 |
+
}
|
180 |
+
add_action( 'wp_ajax_ctf_install_addon', 'ctf_install_addon' );
|
inc/admin/class-install-skin.php
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
use CTF\Helpers\PluginSilentUpgraderSkin;
|
3 |
+
/**
|
4 |
+
* Skin for on-the-fly addon installations.
|
5 |
+
*
|
6 |
+
* @since 1.0.0
|
7 |
+
* @since 1.5.6.1 Extend PluginSilentUpgraderSkin and clean up the class.
|
8 |
+
*/
|
9 |
+
class CTF_Install_Skin extends PluginSilentUpgraderSkin {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Instead of outputting HTML for errors, json_encode the errors and send them
|
13 |
+
* back to the Ajax script for processing.
|
14 |
+
*
|
15 |
+
* @since 1.0.0
|
16 |
+
*
|
17 |
+
* @param array $errors Array of errors with the install process.
|
18 |
+
*/
|
19 |
+
public function error( $errors ) {
|
20 |
+
|
21 |
+
if ( ! empty( $errors ) ) {
|
22 |
+
wp_send_json_error( $errors );
|
23 |
+
}
|
24 |
+
}
|
25 |
+
}
|
inc/class-ctf-feed-locator.php
ADDED
@@ -0,0 +1,418 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Class CTF_Feed_Locator
|
4 |
+
*
|
5 |
+
* Locates feeds on the site and logs information about them in the database.
|
6 |
+
*
|
7 |
+
* @since 1.14
|
8 |
+
*/
|
9 |
+
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
die( '-1' );
|
12 |
+
}
|
13 |
+
|
14 |
+
class CTF_Feed_Locator
|
15 |
+
{
|
16 |
+
private $feed_details;
|
17 |
+
|
18 |
+
private $expiration_time;
|
19 |
+
|
20 |
+
private $matching_entries;
|
21 |
+
|
22 |
+
public function __construct( $feed_details ) {
|
23 |
+
/**
|
24 |
+
* Example of how $feed_details is structured
|
25 |
+
*
|
26 |
+
* $feed_details = array(
|
27 |
+
* 'feed_id' => $transient_name,
|
28 |
+
* 'atts' => $atts,
|
29 |
+
* 'location' => array(
|
30 |
+
* 'post_id' => get_the_ID(),
|
31 |
+
* 'html' => 'unknown'
|
32 |
+
* )
|
33 |
+
* );
|
34 |
+
*/
|
35 |
+
$this->feed_details = $feed_details;
|
36 |
+
|
37 |
+
$this->matching_entries = array();
|
38 |
+
|
39 |
+
$this->expiration_time = time() - 2 * WEEK_IN_SECONDS;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Returns records that match the post ID and feed ID
|
44 |
+
* of the feed being located
|
45 |
+
*
|
46 |
+
* @return array
|
47 |
+
*
|
48 |
+
* @since 1.14
|
49 |
+
*/
|
50 |
+
public function retrieve_matching_entries() {
|
51 |
+
global $wpdb;
|
52 |
+
$feed_locator_table_name = esc_sql( $wpdb->prefix . CTF_FEED_LOCATOR );
|
53 |
+
|
54 |
+
$results = $wpdb->get_results( $wpdb->prepare("
|
55 |
+
SELECT *
|
56 |
+
FROM $feed_locator_table_name
|
57 |
+
WHERE post_id = %d
|
58 |
+
AND feed_id = %s", $this->feed_details['location']['post_id'], $this->feed_details['feed_id'] ),ARRAY_A );
|
59 |
+
|
60 |
+
return $results;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Add feed being located to the database
|
65 |
+
*
|
66 |
+
* @since 1.14
|
67 |
+
*/
|
68 |
+
public function insert_entry() {
|
69 |
+
global $wpdb;
|
70 |
+
|
71 |
+
$feed_locator_table_name = esc_sql( $wpdb->prefix . CTF_FEED_LOCATOR );
|
72 |
+
|
73 |
+
$affected = $wpdb->query( $wpdb->prepare( "INSERT INTO $feed_locator_table_name
|
74 |
+
(feed_id,
|
75 |
+
post_id,
|
76 |
+
html_location,
|
77 |
+
shortcode_atts,
|
78 |
+
last_update)
|
79 |
+
VALUES (
|
80 |
+
%s,
|
81 |
+
%d,
|
82 |
+
%s,
|
83 |
+
%s,
|
84 |
+
%s);",
|
85 |
+
$this->feed_details['feed_id'],
|
86 |
+
$this->feed_details['location']['post_id'],
|
87 |
+
$this->feed_details['location']['html'],
|
88 |
+
ctf_json_encode( $this->feed_details['atts'] ),
|
89 |
+
date( 'Y-m-d H:i:s' ) ) );
|
90 |
+
}
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Update a record based on the existing "id" column. Location can change
|
94 |
+
* from "unknown" to one of footer, content, header, or sidebar.
|
95 |
+
*
|
96 |
+
* @param $id
|
97 |
+
* @param $location
|
98 |
+
*
|
99 |
+
* @since 1.14
|
100 |
+
*/
|
101 |
+
public function update_entry( $id, $location ) {
|
102 |
+
global $wpdb;
|
103 |
+
|
104 |
+
$feed_locator_table_name = esc_sql( $wpdb->prefix . CTF_FEED_LOCATOR );
|
105 |
+
|
106 |
+
$query = $wpdb->query( $wpdb->prepare( "
|
107 |
+
UPDATE $feed_locator_table_name
|
108 |
+
SET last_update = %s, html_location = %s
|
109 |
+
WHERE id = %d;", date( 'Y-m-d H:i:s' ), $location, $id ) );
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* Processes a feed being located based on whether or not the record
|
114 |
+
* exists as well as whether or not an unknown location needs to be
|
115 |
+
* updated.
|
116 |
+
*
|
117 |
+
* @since 1.14
|
118 |
+
*/
|
119 |
+
public function add_or_update_entry() {
|
120 |
+
if ( empty( $this->feed_details['feed_id'] ) ) {
|
121 |
+
return;
|
122 |
+
}
|
123 |
+
|
124 |
+
$this->matching_entries = $this->retrieve_matching_entries();
|
125 |
+
|
126 |
+
if ( empty( $this->matching_entries ) ) {
|
127 |
+
$this->insert_entry();
|
128 |
+
} else {
|
129 |
+
$matching_indices = array();
|
130 |
+
$matched_location = false;
|
131 |
+
$non_unknown_match = false;
|
132 |
+
$unknown_match = false;
|
133 |
+
|
134 |
+
foreach ( $this->matching_entries as $index => $matching_entry ) {
|
135 |
+
$details_atts = is_array( $this->feed_details['atts'] ) ? $this->feed_details['atts'] : array();
|
136 |
+
$matching_atts = json_decode( $matching_entry['shortcode_atts'], true );
|
137 |
+
if ( ! is_array( $matching_atts ) ) {
|
138 |
+
$matching_atts = array();
|
139 |
+
}
|
140 |
+
$atts_diff = array_diff( $matching_atts, $details_atts ); // determines if the shortcode settings match the shortcode settings of an existing feed
|
141 |
+
if ( empty( $atts_diff ) ) {
|
142 |
+
$matching_indices[] = $matching_entry['id'];
|
143 |
+
if ( $matching_entry['html_location'] === $this->feed_details['location']['html'] ) {
|
144 |
+
$matched_location = $index;
|
145 |
+
$this->update_entry( $matching_entry['id'], $matching_entry['html_location'] );
|
146 |
+
}
|
147 |
+
if ( $matching_entry['html_location'] !== 'unknown' ) {
|
148 |
+
$non_unknown_match = $index;
|
149 |
+
} else {
|
150 |
+
$unknown_match = $index;
|
151 |
+
}
|
152 |
+
}
|
153 |
+
}
|
154 |
+
|
155 |
+
if ( false === $matched_location ) {
|
156 |
+
// if there is no matched location, there is only one feed on the page, and the feed being checked has an unknown location, update the known location
|
157 |
+
if ( count( $matching_indices ) === 1
|
158 |
+
&& $this->feed_details['location']['html'] === 'unknown'
|
159 |
+
&& false !== $non_unknown_match ) {
|
160 |
+
$this->update_entry( $this->matching_entries[ $non_unknown_match ]['id'], $this->matching_entries[ $non_unknown_match ]['html_location'] );
|
161 |
+
} else {
|
162 |
+
if ( $this->feed_details['location']['html'] !== 'unknown'
|
163 |
+
&& false !== $unknown_match ) {
|
164 |
+
$this->update_entry( $this->matching_entries[ $unknown_match ]['id'], $this->feed_details['location']['html'] );
|
165 |
+
} else {
|
166 |
+
$this->insert_entry();
|
167 |
+
}
|
168 |
+
|
169 |
+
}
|
170 |
+
}
|
171 |
+
|
172 |
+
}
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* Old feeds are only detected once a day to keep load on the server low.
|
177 |
+
*
|
178 |
+
* @return bool
|
179 |
+
*
|
180 |
+
* @since 1.14
|
181 |
+
*/
|
182 |
+
public static function should_clear_old_locations() {
|
183 |
+
$ctf_statuses_option = get_option( 'ctf_statuses', array() );
|
184 |
+
$last_old_feed_check = isset( $ctf_statuses_option['feed_locator']['last_check'] ) ? $ctf_statuses_option['feed_locator']['last_check'] : 0;
|
185 |
+
|
186 |
+
return $last_old_feed_check < time() - DAY_IN_SECONDS;
|
187 |
+
}
|
188 |
+
|
189 |
+
/**
|
190 |
+
* Old feeds are removed if they haven't been updated in two weeks.
|
191 |
+
*
|
192 |
+
* @since 1.14
|
193 |
+
*/
|
194 |
+
public static function delete_old_locations() {
|
195 |
+
global $wpdb;
|
196 |
+
|
197 |
+
$feed_locator_table_name = esc_sql( $wpdb->prefix . CTF_FEED_LOCATOR );
|
198 |
+
$two_weeks_ago = date( 'Y-m-d H:i:s', time() - 2 * WEEK_IN_SECONDS );
|
199 |
+
|
200 |
+
$affected = $wpdb->query( $wpdb->prepare(
|
201 |
+
"DELETE FROM $feed_locator_table_name WHERE last_update < %s;", $two_weeks_ago ) );
|
202 |
+
|
203 |
+
$ctf_statuses_option = get_option( 'ctf_statuses', array() );
|
204 |
+
$ctf_statuses_option['feed_locator']['last_check'] = time();
|
205 |
+
if ( ! isset( $ctf_statuses_option['feed_locator']['initialized'] ) ) {
|
206 |
+
$ctf_statuses_option['feed_locator']['initialized'] = time();
|
207 |
+
}
|
208 |
+
|
209 |
+
update_option( 'ctf_statuses', $ctf_statuses_option, true );
|
210 |
+
}
|
211 |
+
|
212 |
+
/**
|
213 |
+
* Feeds are located with the page load randomly (5% or 1/30 loads)
|
214 |
+
* to decrease load on the server.
|
215 |
+
*
|
216 |
+
* If the locating just started (within 5 minutes) it is run more often
|
217 |
+
* to collect feed locations quickly.
|
218 |
+
*
|
219 |
+
* @return bool
|
220 |
+
*
|
221 |
+
* @since 1.14
|
222 |
+
*/
|
223 |
+
public static function should_do_locating() {
|
224 |
+
$ctf_statuses_option = get_option( 'ctf_statuses', array() );
|
225 |
+
if ( isset( $ctf_statuses_option['feed_locator']['initialized'] )
|
226 |
+
&& $ctf_statuses_option['feed_locator']['initialized'] < (time() - 300) ) {
|
227 |
+
$should_do_locating = rand( 1, 10 ) === 10;
|
228 |
+
} else {
|
229 |
+
$should_do_locating = rand( 1, 30 ) === 30;
|
230 |
+
}
|
231 |
+
$should_do_locating = apply_filters( 'ctf_should_do_locating', $should_do_locating );
|
232 |
+
|
233 |
+
return $should_do_locating;
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* Simliar to the should_do_locating method but will add an additional
|
238 |
+
* database query to see if there is a feed with an unknown location that
|
239 |
+
* matches the details of the feed in question.
|
240 |
+
*
|
241 |
+
* @param $feed_id
|
242 |
+
* @param $post_id
|
243 |
+
*
|
244 |
+
* @return bool
|
245 |
+
*
|
246 |
+
* @since 1.14
|
247 |
+
*/
|
248 |
+
public static function should_do_ajax_locating( $feed_id, $post_id ) {
|
249 |
+
$should_do_locating = rand( 1, 50 ) === 50;
|
250 |
+
|
251 |
+
$should_do_locating = apply_filters( 'ctf_should_do_ajax_locating', $should_do_locating );
|
252 |
+
|
253 |
+
return $should_do_locating;
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Feeds are located with the page load randomly (1/30 loads)
|
258 |
+
* to decrease load on the server.
|
259 |
+
*
|
260 |
+
* If the locating just started (within 5 minutes) it is run more often
|
261 |
+
* to collect feed locations quickly.
|
262 |
+
*
|
263 |
+
* @param $feed_id
|
264 |
+
* @param $post_id
|
265 |
+
*
|
266 |
+
* @return bool
|
267 |
+
*
|
268 |
+
* @since 1.14
|
269 |
+
*/
|
270 |
+
public static function entries_need_locating( $feed_id, $post_id ) {
|
271 |
+
global $wpdb;
|
272 |
+
$feed_locator_table_name = esc_sql( $wpdb->prefix . CTF_FEED_LOCATOR );
|
273 |
+
|
274 |
+
$one_day_ago = date( 'Y-m-d H:i:s', time() - DAY_IN_SECONDS );
|
275 |
+
|
276 |
+
$results = $wpdb->get_results( $wpdb->prepare("
|
277 |
+
SELECT id
|
278 |
+
FROM $feed_locator_table_name
|
279 |
+
WHERE html_location = 'unknown'
|
280 |
+
AND last_update < %s
|
281 |
+
AND feed_id = %s
|
282 |
+
AND post_id = %d
|
283 |
+
LIMIT 1;", $one_day_ago, $feed_id, $post_id ),ARRAY_A );
|
284 |
+
|
285 |
+
return isset( $results[0] );
|
286 |
+
}
|
287 |
+
|
288 |
+
/**
|
289 |
+
* A custom table stores locations
|
290 |
+
*
|
291 |
+
* @since 1.14
|
292 |
+
*/
|
293 |
+
public static function create_table() {
|
294 |
+
global $wpdb;
|
295 |
+
|
296 |
+
$feed_locator_table_name = esc_sql( $wpdb->prefix . CTF_FEED_LOCATOR );
|
297 |
+
|
298 |
+
if ( $wpdb->get_var( "show tables like '$feed_locator_table_name'" ) != $feed_locator_table_name ) {
|
299 |
+
$sql = "CREATE TABLE " . $feed_locator_table_name . " (
|
300 |
+
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
301 |
+
feed_id VARCHAR(50) DEFAULT '' NOT NULL,
|
302 |
+
post_id BIGINT(20) UNSIGNED NOT NULL,
|
303 |
+
html_location VARCHAR(50) DEFAULT 'unknown' NOT NULL,
|
304 |
+
shortcode_atts LONGTEXT NOT NULL,
|
305 |
+
last_update DATETIME
|
306 |
+
);";
|
307 |
+
$wpdb->query( $sql );
|
308 |
+
}
|
309 |
+
$error = $wpdb->last_error;
|
310 |
+
$query = $wpdb->last_query;
|
311 |
+
$had_error = false;
|
312 |
+
if ( $wpdb->get_var( "show tables like '$feed_locator_table_name'" ) != $feed_locator_table_name ) {
|
313 |
+
$had_error = true;
|
314 |
+
}
|
315 |
+
|
316 |
+
if ( ! $had_error ) {
|
317 |
+
$wpdb->query( "ALTER TABLE $feed_locator_table_name ADD INDEX feed_id (feed_id)" );
|
318 |
+
$wpdb->query( "ALTER TABLE $feed_locator_table_name ADD INDEX post_id (post_id)" );
|
319 |
+
}
|
320 |
+
}
|
321 |
+
|
322 |
+
/**
|
323 |
+
* Counts the number of unique feeds in the database.
|
324 |
+
*
|
325 |
+
* @return int
|
326 |
+
*
|
327 |
+
* @since 1.14
|
328 |
+
*/
|
329 |
+
public static function count_unique() {
|
330 |
+
global $wpdb;
|
331 |
+
|
332 |
+
$feed_locator_table_name = esc_sql( $wpdb->prefix . CTF_FEED_LOCATOR );
|
333 |
+
$results_content = $wpdb->get_results( "
|
334 |
+
SELECT COUNT(*) AS num_entries
|
335 |
+
FROM $feed_locator_table_name
|
336 |
+
WHERE html_location = 'content'
|
337 |
+
", ARRAY_A );
|
338 |
+
|
339 |
+
|
340 |
+
$results_other = $wpdb->get_results( "
|
341 |
+
SELECT COUNT(*) AS num_entries
|
342 |
+
FROM $feed_locator_table_name
|
343 |
+
WHERE html_location != 'content'
|
344 |
+
AND html_location != 'unknown'
|
345 |
+
GROUP BY feed_id
|
346 |
+
", ARRAY_A );
|
347 |
+
|
348 |
+
$total = 0;
|
349 |
+
if ( isset( $results_content[0]['num_entries'] ) ) {
|
350 |
+
$total += (int)$results_content[0]['num_entries'];
|
351 |
+
}
|
352 |
+
if ( isset( $results_other[0]['num_entries'] ) ) {
|
353 |
+
$total += (int)$results_other[0]['num_entries'];
|
354 |
+
}
|
355 |
+
|
356 |
+
return $total;
|
357 |
+
}
|
358 |
+
|
359 |
+
/**
|
360 |
+
* Creates a summary of the located feeds in an array
|
361 |
+
*
|
362 |
+
* @return array
|
363 |
+
*
|
364 |
+
* @since 1.14
|
365 |
+
*/
|
366 |
+
public static function summary() {
|
367 |
+
global $wpdb;
|
368 |
+
|
369 |
+
$feed_locator_table_name = esc_sql( $wpdb->prefix . CTF_FEED_LOCATOR );
|
370 |
+
|
371 |
+
$locations = array(
|
372 |
+
array(
|
373 |
+
'label' => __( 'Content', 'custom-twitter-feeds' ),
|
374 |
+
'html_locations' => array( 'content', 'unknown' )
|
375 |
+
),
|
376 |
+
array(
|
377 |
+
'label' => __( 'Header', 'custom-twitter-feeds' ),
|
378 |
+
'html_locations' => array( 'header' ),
|
379 |
+
'group_by' => 'feed_id'
|
380 |
+
),
|
381 |
+
array(
|
382 |
+
'label' => __( 'Sidebar', 'custom-twitter-feeds' ),
|
383 |
+
'html_locations' => array( 'sidebar' ),
|
384 |
+
'group_by' => 'feed_id'
|
385 |
+
),
|
386 |
+
array(
|
387 |
+
'label' => __( 'Footer', 'custom-twitter-feeds' ),
|
388 |
+
'html_locations' => array( 'footer' ),
|
389 |
+
'group_by' => 'feed_id'
|
390 |
+
)
|
391 |
+
);
|
392 |
+
|
393 |
+
$one_result_found = false;
|
394 |
+
|
395 |
+
foreach ( $locations as $key => $location ) {
|
396 |
+
$in = implode( "', '", $location['html_locations'] );
|
397 |
+
$group_by = isset( $location['group_by'] ) ? "GROUP BY " . $location['group_by'] : "";
|
398 |
+
$results = $wpdb->get_results("
|
399 |
+
SELECT *
|
400 |
+
FROM $feed_locator_table_name
|
401 |
+
WHERE html_location IN ('$in')
|
402 |
+
$group_by
|
403 |
+
ORDER BY last_update ASC",ARRAY_A );
|
404 |
+
|
405 |
+
if ( isset( $results[0] ) ) {
|
406 |
+
$one_result_found = true;
|
407 |
+
}
|
408 |
+
|
409 |
+
$locations[ $key ]['results'] = $results;
|
410 |
+
}
|
411 |
+
|
412 |
+
if ( ! $one_result_found ) {
|
413 |
+
return array();
|
414 |
+
}
|
415 |
+
|
416 |
+
return $locations;
|
417 |
+
}
|
418 |
+
}
|
js/ctf-admin-scripts.js
CHANGED
@@ -114,12 +114,12 @@ jQuery(document).ready(function($){
|
|
114 |
$ctfToggleSearchGuide.closest('h4').next('div').hide();
|
115 |
|
116 |
// show on click
|
117 |
-
$ctfToggleSearchGuide.click
|
118 |
$(this).closest('h4').next('div').slideToggle();
|
119 |
});
|
120 |
|
121 |
// tooltips
|
122 |
-
$('#ctf-admin .ctf-tooltip-link').click
|
123 |
$(this).closest('tr, h3, .ctf-tooltip-wrap').find('.ctf-tooltip').slideToggle();
|
124 |
});
|
125 |
|
@@ -160,24 +160,32 @@ jQuery(document).ready(function($){
|
|
160 |
// shortcode tooltips
|
161 |
var $ctfAdminLabel = $('#ctf-admin label');
|
162 |
|
163 |
-
$ctfAdminLabel.click
|
164 |
var $sbi_shortcode = $(this).siblings('.ctf_shortcode');
|
165 |
if($sbi_shortcode.is(':visible')){
|
|
|
166 |
$(this).siblings('.ctf_shortcode').css('display','none');
|
167 |
} else {
|
|
|
168 |
$(this).siblings('.ctf_shortcode').css('display','block');
|
169 |
}
|
170 |
});
|
171 |
-
|
172 |
-
|
173 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
174 |
}
|
175 |
-
}, function(){
|
176 |
-
$(this).find('.ctf_shortcode_symbol').remove();
|
177 |
});
|
178 |
|
179 |
//Scroll to hash for quick links
|
180 |
-
$('#ctf-admin a').click
|
181 |
if(location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
|
182 |
var target = $(this.hash);
|
183 |
target = target.length ? target : this.hash.slice(1);
|
@@ -199,7 +207,7 @@ jQuery(document).ready(function($){
|
|
199 |
//Show initially if a width is set
|
200 |
if(ctfWidth.length > 1 && !(ctfWidth == '100' && ctfWidthUnit == '%')) $ctfWidthOptions.show();
|
201 |
|
202 |
-
$('#ctf_width, #ctf_width_unit').change
|
203 |
ctfWidthUnit = $('#ctf-admin #ctf_width_unit').val(),
|
204 |
ctfWidth = $('#ctf-admin #ctf_width').val();
|
205 |
|
@@ -214,7 +222,7 @@ jQuery(document).ready(function($){
|
|
214 |
// clear cache
|
215 |
var $ctfClearCacheButton = $('#ctf-admin #ctf-clear-cache');
|
216 |
|
217 |
-
$ctfClearCacheButton.click
|
218 |
event.preventDefault();
|
219 |
|
220 |
$('#ctf-clear-cache-success').remove();
|
@@ -240,7 +248,7 @@ jQuery(document).ready(function($){
|
|
240 |
// clear persistent cache
|
241 |
var $ctfClearPersistentCacheButton = $('#ctf-admin #ctf-clear-persistent-cache');
|
242 |
|
243 |
-
$ctfClearPersistentCacheButton.click
|
244 |
event.preventDefault();
|
245 |
|
246 |
$('#ctf-clear-cache-success').remove();
|
@@ -263,7 +271,7 @@ jQuery(document).ready(function($){
|
|
263 |
}); // ajax call
|
264 |
}); // clear-persistent-cache click
|
265 |
|
266 |
-
$('.ctf-opt-in').click
|
267 |
event.preventDefault();
|
268 |
|
269 |
var $btn = jQuery(this);
|
@@ -272,7 +280,7 @@ jQuery(document).ready(function($){
|
|
272 |
ctfSubmitOptIn(true);
|
273 |
}); // clear_comment_cache click
|
274 |
|
275 |
-
$('.ctf-no-usage-opt-out').click
|
276 |
event.preventDefault();
|
277 |
|
278 |
var $btn = jQuery(this);
|
@@ -304,10 +312,10 @@ jQuery(document).ready(function($){
|
|
304 |
$pro.find('input, select, textarea').attr('disabled', 'true');
|
305 |
}
|
306 |
});
|
307 |
-
$('#ctf_include_twittercards, #ctf_include_media, #ctf_include_replied_to').
|
308 |
|
309 |
$('#ctf-admin .ctf-show-pro').closest('span').next('.ctf-pro-options').hide();
|
310 |
-
$('#ctf-admin .ctf-show-pro').click
|
311 |
if ($(this).closest('span').next('.ctf-pro-options').is(':visible')) {
|
312 |
$(this).closest('span').next('.ctf-pro-options').hide();
|
313 |
} else {
|
@@ -322,7 +330,7 @@ jQuery(document).ready(function($){
|
|
322 |
}, 1);
|
323 |
}
|
324 |
ctfUpdateLayoutTypeOptionsDisplay();
|
325 |
-
jQuery('.ctf_layout_type').change
|
326 |
|
327 |
// notices
|
328 |
|
@@ -333,7 +341,7 @@ jQuery(document).ready(function($){
|
|
333 |
jQuery('#ctf-notice-bar').show();
|
334 |
}
|
335 |
|
336 |
-
jQuery('#ctf-notice-bar .dismiss').click
|
337 |
e.preventDefault();
|
338 |
jQuery('#ctf-notice-bar').remove();
|
339 |
jQuery.ajax({
|
@@ -372,4 +380,289 @@ jQuery(document).ready(function($){
|
|
372 |
}
|
373 |
ctfCheckGdprSetting();
|
374 |
|
375 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
$ctfToggleSearchGuide.closest('h4').next('div').hide();
|
115 |
|
116 |
// show on click
|
117 |
+
$ctfToggleSearchGuide.on('click',function(){
|
118 |
$(this).closest('h4').next('div').slideToggle();
|
119 |
});
|
120 |
|
121 |
// tooltips
|
122 |
+
$('#ctf-admin .ctf-tooltip-link').on('click',function(){
|
123 |
$(this).closest('tr, h3, .ctf-tooltip-wrap').find('.ctf-tooltip').slideToggle();
|
124 |
});
|
125 |
|
160 |
// shortcode tooltips
|
161 |
var $ctfAdminLabel = $('#ctf-admin label');
|
162 |
|
163 |
+
$ctfAdminLabel.on('click',function(){
|
164 |
var $sbi_shortcode = $(this).siblings('.ctf_shortcode');
|
165 |
if($sbi_shortcode.is(':visible')){
|
166 |
+
$(this).removeClass('ctf_shortcode_visible');
|
167 |
$(this).siblings('.ctf_shortcode').css('display','none');
|
168 |
} else {
|
169 |
+
$(this).addClass('ctf_shortcode_visible');
|
170 |
$(this).siblings('.ctf_shortcode').css('display','block');
|
171 |
}
|
172 |
});
|
173 |
+
|
174 |
+
$ctfAdminLabel.on('mouseenter mouseleave', function(e) {
|
175 |
+
switch(e.type) {
|
176 |
+
case 'mouseenter':
|
177 |
+
if($(this).siblings('.ctf_shortcode').length > 0 ){
|
178 |
+
$(this).attr('title', 'Click for shortcode option').append('<code class="ctf_shortcode_symbol">[]</code>');
|
179 |
+
}
|
180 |
+
break;
|
181 |
+
case 'mouseleave':
|
182 |
+
$(this).find('.ctf_shortcode_symbol').remove();
|
183 |
+
break;
|
184 |
}
|
|
|
|
|
185 |
});
|
186 |
|
187 |
//Scroll to hash for quick links
|
188 |
+
$('#ctf-admin a').on('click',function() {
|
189 |
if(location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
|
190 |
var target = $(this.hash);
|
191 |
target = target.length ? target : this.hash.slice(1);
|
207 |
//Show initially if a width is set
|
208 |
if(ctfWidth.length > 1 && !(ctfWidth == '100' && ctfWidthUnit == '%')) $ctfWidthOptions.show();
|
209 |
|
210 |
+
$('#ctf_width, #ctf_width_unit').on('change',function(){
|
211 |
ctfWidthUnit = $('#ctf-admin #ctf_width_unit').val(),
|
212 |
ctfWidth = $('#ctf-admin #ctf_width').val();
|
213 |
|
222 |
// clear cache
|
223 |
var $ctfClearCacheButton = $('#ctf-admin #ctf-clear-cache');
|
224 |
|
225 |
+
$ctfClearCacheButton.on('click',function(event) {
|
226 |
event.preventDefault();
|
227 |
|
228 |
$('#ctf-clear-cache-success').remove();
|
248 |
// clear persistent cache
|
249 |
var $ctfClearPersistentCacheButton = $('#ctf-admin #ctf-clear-persistent-cache');
|
250 |
|
251 |
+
$ctfClearPersistentCacheButton.on('click',function(event) {
|
252 |
event.preventDefault();
|
253 |
|
254 |
$('#ctf-clear-cache-success').remove();
|
271 |
}); // ajax call
|
272 |
}); // clear-persistent-cache click
|
273 |
|
274 |
+
$('.ctf-opt-in').on('click',function(event) {
|
275 |
event.preventDefault();
|
276 |
|
277 |
var $btn = jQuery(this);
|
280 |
ctfSubmitOptIn(true);
|
281 |
}); // clear_comment_cache click
|
282 |
|
283 |
+
$('.ctf-no-usage-opt-out').on('click',function(event) {
|
284 |
event.preventDefault();
|
285 |
|
286 |
var $btn = jQuery(this);
|
312 |
$pro.find('input, select, textarea').attr('disabled', 'true');
|
313 |
}
|
314 |
});
|
315 |
+
$('#ctf_include_twittercards, #ctf_include_media, #ctf_include_replied_to').prop('disabled', true).prop('checked',false).next('label').css('color', '#999').after(ctfUpgradeNote);
|
316 |
|
317 |
$('#ctf-admin .ctf-show-pro').closest('span').next('.ctf-pro-options').hide();
|
318 |
+
$('#ctf-admin .ctf-show-pro').on('click',function() {
|
319 |
if ($(this).closest('span').next('.ctf-pro-options').is(':visible')) {
|
320 |
$(this).closest('span').next('.ctf-pro-options').hide();
|
321 |
} else {
|
330 |
}, 1);
|
331 |
}
|
332 |
ctfUpdateLayoutTypeOptionsDisplay();
|
333 |
+
jQuery('.ctf_layout_type').on('change',ctfUpdateLayoutTypeOptionsDisplay);
|
334 |
|
335 |
// notices
|
336 |
|
341 |
jQuery('#ctf-notice-bar').show();
|
342 |
}
|
343 |
|
344 |
+
jQuery('#ctf-notice-bar .dismiss').on('click',function(e) {
|
345 |
e.preventDefault();
|
346 |
jQuery('#ctf-notice-bar').remove();
|
347 |
jQuery.ajax({
|
380 |
}
|
381 |
ctfCheckGdprSetting();
|
382 |
|
383 |
+
// Locator
|
384 |
+
jQuery('.ctf-locator-more').click(function(e) {
|
385 |
+
e.preventDefault();
|
386 |
+
jQuery(this).closest('td').find('.ctf-full-wrap').show();
|
387 |
+
jQuery(this).closest('td').find('.ctf-condensed-wrap').hide();
|
388 |
+
jQuery(this).remove();
|
389 |
+
});
|
390 |
+
|
391 |
+
//Click event for other plugins in menu
|
392 |
+
$('.ctf_get_sbi, .ctf_get_cff, .ctf_get_ctf, .ctf_get_yt').parent().on('click', function(e){
|
393 |
+
e.preventDefault();
|
394 |
+
|
395 |
+
jQuery('.sb_cross_install_modal').remove();
|
396 |
+
|
397 |
+
$('#wpbody-content').prepend('<div class="sb_cross_install_modal"><div class="sb_cross_install_inner" id="ctf-admin-about"><div id="ctf-admin-addons"><div class="addons-container"><i class="fa fa-spinner fa-spin ctf-loader" aria-hidden="true"></i></div></div></div></div>');
|
398 |
+
|
399 |
+
var $self = $(this).find('span'),
|
400 |
+
sb_get_plugin = 'custom_twitter_feeds';
|
401 |
+
|
402 |
+
if( $self.hasClass('ctf_get_cff') ){
|
403 |
+
sb_get_plugin = 'custom_facebook_feed';
|
404 |
+
} else if( $self.hasClass('ctf_get_sbi') ){
|
405 |
+
sb_get_plugin = 'instagram_feed';
|
406 |
+
} else if( $self.hasClass('ctf_get_yt') ){
|
407 |
+
sb_get_plugin = 'feeds_for_youtube';
|
408 |
+
}
|
409 |
+
|
410 |
+
$get_plugins_url = ctf.ajax_url.replace('admin-ajax.php', '');
|
411 |
+
|
412 |
+
// Get the quick install box from the about page
|
413 |
+
$('.sb_cross_install_modal .addons-container').load($get_plugins_url+'admin.php?page=custom-twitter-feeds&tab=more #install_'+sb_get_plugin);
|
414 |
+
});
|
415 |
+
//Close the modal if clicking anywhere outside it
|
416 |
+
jQuery('body').on('click', '.sb_cross_install_modal', function(e){
|
417 |
+
if (e.target !== this) return;
|
418 |
+
jQuery('.sb_cross_install_modal').remove();
|
419 |
+
});
|
420 |
+
});
|
421 |
+
|
422 |
+
/* global smash_admin, jconfirm, wpCookies, Choices, List */
|
423 |
+
|
424 |
+
(function($) {
|
425 |
+
|
426 |
+
'use strict';
|
427 |
+
|
428 |
+
// Global settings access.
|
429 |
+
var s;
|
430 |
+
|
431 |
+
// Admin object.
|
432 |
+
var SmashAdmin = {
|
433 |
+
|
434 |
+
// Settings.
|
435 |
+
settings: {
|
436 |
+
iconActivate: '<i class="fa fa-toggle-on fa-flip-horizontal" aria-hidden="true"></i>',
|
437 |
+
iconDeactivate: '<i class="fa fa-toggle-on" aria-hidden="true"></i>',
|
438 |
+
iconInstall: '<i class="fa fa-cloud-download" aria-hidden="true"></i>',
|
439 |
+
iconSpinner: '<i class="fa fa-spinner fa-spin" aria-hidden="true"></i>',
|
440 |
+
mediaFrame: false
|
441 |
+
},
|
442 |
+
|
443 |
+
/**
|
444 |
+
* Start the engine.
|
445 |
+
*
|
446 |
+
* @since 1.3.9
|
447 |
+
*/
|
448 |
+
init: function() {
|
449 |
+
|
450 |
+
// Settings shortcut.
|
451 |
+
s = this.settings;
|
452 |
+
|
453 |
+
// Document ready.
|
454 |
+
$( document ).ready( SmashAdmin.ready );
|
455 |
+
|
456 |
+
// Addons List.
|
457 |
+
SmashAdmin.initAddons();
|
458 |
+
},
|
459 |
+
|
460 |
+
/**
|
461 |
+
* Document ready.
|
462 |
+
*
|
463 |
+
* @since 1.3.9
|
464 |
+
*/
|
465 |
+
ready: function() {
|
466 |
+
|
467 |
+
// Action available for each binding.
|
468 |
+
$( document ).trigger( 'smashReady' );
|
469 |
+
},
|
470 |
+
|
471 |
+
//--------------------------------------------------------------------//
|
472 |
+
// Addons List.
|
473 |
+
//--------------------------------------------------------------------//
|
474 |
+
|
475 |
+
/**
|
476 |
+
* Element bindings for Addons List page.
|
477 |
+
*
|
478 |
+
* @since 1.3.9
|
479 |
+
*/
|
480 |
+
initAddons: function() {
|
481 |
+
|
482 |
+
// Some actions have to be delayed to document.ready.
|
483 |
+
$( document ).on( 'smashReady', function() {
|
484 |
+
|
485 |
+
// Only run on the addons page.
|
486 |
+
if ( ! $( '#ctf-admin-addons' ).length ) {
|
487 |
+
return;
|
488 |
+
}
|
489 |
+
|
490 |
+
// Display all addon boxes as the same height.
|
491 |
+
if( $( '#ctf-admin-about .addon-item').length ){
|
492 |
+
$( '#ctf-admin-about .addon-item .details' ).matchHeight( { byrow: false, property: 'height' } );
|
493 |
+
}
|
494 |
+
|
495 |
+
// Addons searching.
|
496 |
+
if ( $('#ctf-admin-addons-list').length ) {
|
497 |
+
var addonSearch = new List( 'ctf-admin-addons-list', {
|
498 |
+
valueNames: [ 'addon-name' ]
|
499 |
+
} );
|
500 |
+
|
501 |
+
$( '#ctf-admin-addons-search' ).on( 'keyup', function () {
|
502 |
+
var searchTerm = $( this ).val(),
|
503 |
+
$heading = $( '#addons-heading' );
|
504 |
+
|
505 |
+
if ( searchTerm ) {
|
506 |
+
$heading.text( ctf_admin_strings.addon_search );
|
507 |
+
}
|
508 |
+
else {
|
509 |
+
$heading.text( $heading.data( 'text' ) );
|
510 |
+
}
|
511 |
+
|
512 |
+
addonSearch.search( searchTerm );
|
513 |
+
} );
|
514 |
+
}
|
515 |
+
});
|
516 |
+
|
517 |
+
// Toggle an addon state.
|
518 |
+
$( document ).on( 'click', '#ctf-admin-addons .addon-item button', function( event ) {
|
519 |
+
|
520 |
+
event.preventDefault();
|
521 |
+
|
522 |
+
if ( $( this ).hasClass( 'disabled' ) ) {
|
523 |
+
return false;
|
524 |
+
}
|
525 |
+
|
526 |
+
SmashAdmin.addonToggle( $( this ) );
|
527 |
+
});
|
528 |
+
},
|
529 |
+
|
530 |
+
/**
|
531 |
+
* Toggle addon state.
|
532 |
+
*
|
533 |
+
* @since 1.3.9
|
534 |
+
*/
|
535 |
+
addonToggle: function( $btn ) {
|
536 |
+
|
537 |
+
var $addon = $btn.closest( '.addon-item' ),
|
538 |
+
plugin = $btn.attr( 'data-plugin' ),
|
539 |
+
plugin_type = $btn.attr( 'data-type' ),
|
540 |
+
action,
|
541 |
+
cssClass,
|
542 |
+
statusText,
|
543 |
+
buttonText,
|
544 |
+
errorText,
|
545 |
+
successText;
|
546 |
+
|
547 |
+
if ( $btn.hasClass( 'status-go-to-url' ) ) {
|
548 |
+
// Open url in new tab.
|
549 |
+
window.open( $btn.attr('data-plugin'), '_blank' );
|
550 |
+
return;
|
551 |
+
}
|
552 |
+
|
553 |
+
$btn.prop( 'disabled', true ).addClass( 'loading' );
|
554 |
+
$btn.html( s.iconSpinner );
|
555 |
+
|
556 |
+
if ( $btn.hasClass( 'status-active' ) ) {
|
557 |
+
// Deactivate.
|
558 |
+
action = 'ctf_deactivate_addon';
|
559 |
+
cssClass = 'status-inactive';
|
560 |
+
if ( plugin_type === 'plugin' ) {
|
561 |
+
cssClass += ' button button-secondary';
|
562 |
+
}
|
563 |
+
statusText = ctf_admin_strings.addon_inactive;
|
564 |
+
buttonText = ctf_admin_strings.addon_activate;
|
565 |
+
if ( plugin_type === 'addon' ) {
|
566 |
+
buttonText = s.iconActivate + buttonText;
|
567 |
+
}
|
568 |
+
errorText = s.iconDeactivate + ctf_admin_strings.addon_deactivate;
|
569 |
+
|
570 |
+
} else if ( $btn.hasClass( 'status-inactive' ) ) {
|
571 |
+
// Activate.
|
572 |
+
action = 'ctf_activate_addon';
|
573 |
+
cssClass = 'status-active';
|
574 |
+
if ( plugin_type === 'plugin' ) {
|
575 |
+
cssClass += ' button button-secondary disabled';
|
576 |
+
}
|
577 |
+
statusText = ctf_admin_strings.addon_active;
|
578 |
+
buttonText = ctf_admin_strings.addon_deactivate;
|
579 |
+
if ( plugin_type === 'addon' ) {
|
580 |
+
buttonText = s.iconDeactivate + buttonText;
|
581 |
+
} else if ( plugin_type === 'plugin' ) {
|
582 |
+
buttonText = ctf_admin_strings.addon_activated;
|
583 |
+
}
|
584 |
+
errorText = s.iconActivate + ctf_admin_strings.addon_activate;
|
585 |
+
|
586 |
+
} else if ( $btn.hasClass( 'status-download' ) ) {
|
587 |
+
// Install & Activate.
|
588 |
+
action = 'ctf_install_addon';
|
589 |
+
cssClass = 'status-active';
|
590 |
+
if ( plugin_type === 'plugin' ) {
|
591 |
+
cssClass += ' button disabled';
|
592 |
+
}
|
593 |
+
statusText = ctf_admin_strings.addon_active;
|
594 |
+
buttonText = ctf_admin_strings.addon_activated;
|
595 |
+
if ( plugin_type === 'addon' ) {
|
596 |
+
buttonText = s.iconActivate + ctf_admin_strings.addon_deactivate;
|
597 |
+
}
|
598 |
+
errorText = s.iconInstall + ctf_admin_strings.addon_activate;
|
599 |
+
|
600 |
+
} else {
|
601 |
+
return;
|
602 |
+
}
|
603 |
+
|
604 |
+
var data = {
|
605 |
+
action: action,
|
606 |
+
nonce : ctf_admin_strings.nonce,
|
607 |
+
plugin: plugin,
|
608 |
+
type : plugin_type
|
609 |
+
};
|
610 |
+
$.post( ctf_admin_strings.ajax_url, data, function( res ) {
|
611 |
+
|
612 |
+
if ( res.success ) {
|
613 |
+
if ( 'ctf_install_addon' === action ) {
|
614 |
+
$btn.attr( 'data-plugin', res.data.basename );
|
615 |
+
successText = res.data.msg;
|
616 |
+
if ( ! res.data.is_activated ) {
|
617 |
+
cssClass = 'status-inactive';
|
618 |
+
if ( plugin_type === 'plugin' ) {
|
619 |
+
cssClass = 'button';
|
620 |
+
}
|
621 |
+
statusText = ctf_admin_strings.addon_inactive;
|
622 |
+
buttonText = s.iconActivate + ctf_admin_strings.addon_activate;
|
623 |
+
}
|
624 |
+
} else {
|
625 |
+
successText = res.data;
|
626 |
+
}
|
627 |
+
$addon.find( '.actions' ).append( '<div class="msg success">'+successText+'</div>' );
|
628 |
+
$addon.find( 'span.status-label' )
|
629 |
+
.removeClass( 'status-active status-inactive status-download' )
|
630 |
+
.addClass( cssClass )
|
631 |
+
.removeClass( 'button button-primary button-secondary disabled' )
|
632 |
+
.text( statusText );
|
633 |
+
$btn
|
634 |
+
.removeClass( 'status-active status-inactive status-download' )
|
635 |
+
.removeClass( 'button button-primary button-secondary disabled' )
|
636 |
+
.addClass( cssClass ).html( buttonText );
|
637 |
+
} else {
|
638 |
+
if ( 'download_failed' === res.data[0].code ) {
|
639 |
+
if ( plugin_type === 'addon' ) {
|
640 |
+
$addon.find( '.actions' ).append( '<div class="msg error">'+ctf_admin_strings.addon_error+'</div>' );
|
641 |
+
} else {
|
642 |
+
$addon.find( '.actions' ).append( '<div class="msg error">'+ctf_admin_strings.plugin_error+'</div>' );
|
643 |
+
}
|
644 |
+
} else {
|
645 |
+
$addon.find( '.actions' ).append( '<div class="msg error">'+res.data+'</div>' );
|
646 |
+
}
|
647 |
+
$btn.html( errorText );
|
648 |
+
}
|
649 |
+
|
650 |
+
$btn.prop( 'disabled', false ).removeClass( 'loading' );
|
651 |
+
|
652 |
+
// Automatically clear addon messages after 3 seconds.
|
653 |
+
setTimeout( function() {
|
654 |
+
$( '.addon-item .msg' ).remove();
|
655 |
+
}, 3000 );
|
656 |
+
|
657 |
+
}).fail( function( xhr ) {
|
658 |
+
console.log( xhr.responseText );
|
659 |
+
});
|
660 |
+
},
|
661 |
+
|
662 |
+
};
|
663 |
+
|
664 |
+
SmashAdmin.init();
|
665 |
+
|
666 |
+
window.SmashAdmin = SmashAdmin;
|
667 |
+
|
668 |
+
})( jQuery );
|
js/ctf-scripts.js
CHANGED
@@ -6,12 +6,28 @@ if(!ctf_js_exists){
|
|
6 |
window.ctf_init = function() {
|
7 |
window.ctfObject = {};
|
8 |
if ($('.ctf').length
|
9 |
-
&& typeof $('.ctf').first().attr('ctf-
|
10 |
-
|
11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
} else {
|
13 |
window.ctfObject.consentGiven = true;
|
14 |
window.ctfObject.gdpr = false;
|
|
|
15 |
}
|
16 |
|
17 |
if ($('.ctf').length <= $('.ctf_is_initialized').length) {
|
@@ -24,6 +40,25 @@ if(!ctf_js_exists){
|
|
24 |
function ctfScripts($ctf) {
|
25 |
$ctf.addClass('ctf_is_initialized');
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
if (ctfCheckConsent()) {
|
28 |
ctfRemovePrivacyFeatures($ctf);
|
29 |
} else {
|
@@ -123,7 +158,7 @@ if(!ctf_js_exists){
|
|
123 |
|
124 |
function ctfHashReplacer(hash) {
|
125 |
//Remove white space at beginning of hash
|
126 |
-
var replacementString =
|
127 |
//If the hash is a hex code then don't replace it with a link as it's likely in the style attr, eg: "color: #ff0000"
|
128 |
if (/^#[0-9A-F]{6}$/i.test(replacementString)) {
|
129 |
return replacementString;
|
@@ -141,7 +176,7 @@ if(!ctf_js_exists){
|
|
141 |
|
142 |
//Link @tags
|
143 |
function ctfReplaceTags(tag) {
|
144 |
-
var replacementString =
|
145 |
return ' <a href="https://twitter.com/' + replacementString.substring(1) + '" target="_blank" rel="nofollow">' + replacementString + '</a>';
|
146 |
}
|
147 |
|
@@ -174,7 +209,7 @@ if(!ctf_js_exists){
|
|
174 |
//Change colors of some items to match tweet text
|
175 |
$ctf.find('.ctf-author-name, .ctf-tweet-date, .ctf-author-screenname, .ctf-twitterlink, .ctf-author-box-link, .ctf-retweet-text, .ctf-quoted-tweet').css('color', $ctf.find('.ctf-tweet-text').css('color'));
|
176 |
|
177 |
-
$ctf.find('.ctf_more').
|
178 |
e.preventDefault();
|
179 |
$(this).hide().next('.ctf_remaining').show();
|
180 |
});
|
@@ -191,6 +226,9 @@ if(!ctf_js_exists){
|
|
191 |
$ctfMore.addClass('ctf-loading').append('<div class="ctf-loader"></div>');
|
192 |
$ctfMore.find('.ctf-loader').css('background-color', $ctfMore.css('color'));
|
193 |
|
|
|
|
|
|
|
194 |
jQuery.ajax({
|
195 |
url: ctf.ajax_url,
|
196 |
type: 'post',
|
@@ -199,7 +237,10 @@ if(!ctf_js_exists){
|
|
199 |
last_id_data: lastIDData,
|
200 |
shortcode_data: shortcodeData,
|
201 |
num_needed: numNeeded,
|
202 |
-
persistent_index: persistentIndex
|
|
|
|
|
|
|
203 |
},
|
204 |
success: function (data) {
|
205 |
if (lastIDData !== '') {
|
@@ -282,21 +323,21 @@ if(!ctf_js_exists){
|
|
282 |
ctf_init();
|
283 |
|
284 |
// Cookie Notice by dFactory
|
285 |
-
$('#cookie-notice a').click
|
286 |
setTimeout(function() {
|
287 |
ctfAterConsentToggled();
|
288 |
},1000);
|
289 |
});
|
290 |
|
291 |
// Cookie Notice by dFactory
|
292 |
-
$('#cookie-law-info-bar a').click
|
293 |
setTimeout(function() {
|
294 |
ctfAterConsentToggled();
|
295 |
},1000);
|
296 |
});
|
297 |
|
298 |
// GDPR Cookie Consent by WebToffee
|
299 |
-
$('.cli-user-preference-checkbox').click
|
300 |
ctfAterConsentToggled();
|
301 |
});
|
302 |
|
@@ -374,10 +415,15 @@ if(!ctf_js_exists){
|
|
374 |
});
|
375 |
$ctf.find('.ctf-no-consent').removeClass('ctf-no-consent');
|
376 |
//Header profile pic hover
|
377 |
-
$ctf.find('.ctf-header .ctf-header-link').
|
378 |
-
|
379 |
-
|
380 |
-
|
|
|
|
|
|
|
|
|
|
|
381 |
});
|
382 |
}
|
383 |
|
@@ -458,6 +504,21 @@ if(!ctf_js_exists){
|
|
458 |
|
459 |
return "";
|
460 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
461 |
})(jQuery);
|
462 |
|
463 |
|
6 |
window.ctf_init = function() {
|
7 |
window.ctfObject = {};
|
8 |
if ($('.ctf').length
|
9 |
+
&& typeof $('.ctf').first().attr('data-ctf-flags') !== 'undefined') {
|
10 |
+
var flags = $('.ctf').first().attr('data-ctf-flags').split(',');
|
11 |
+
|
12 |
+
if (flags.indexOf('gdpr') > -1) {
|
13 |
+
window.ctfObject.consentGiven = false;
|
14 |
+
window.ctfObject.gdpr = true;
|
15 |
+
} else {
|
16 |
+
window.ctfObject.consentGiven = true;
|
17 |
+
window.ctfObject.gdpr = false;
|
18 |
+
}
|
19 |
+
|
20 |
+
if (flags.indexOf('locator') > -1) {
|
21 |
+
var random = Math.floor(Math.random() * $('.ctf').length);
|
22 |
+
window.ctfObject.locator = $('.ctf').length === 1 || (random === 1);
|
23 |
+
} else {
|
24 |
+
window.ctfObject.locator = false;
|
25 |
+
}
|
26 |
+
|
27 |
} else {
|
28 |
window.ctfObject.consentGiven = true;
|
29 |
window.ctfObject.gdpr = false;
|
30 |
+
window.ctfObject.locator = false;
|
31 |
}
|
32 |
|
33 |
if ($('.ctf').length <= $('.ctf_is_initialized').length) {
|
40 |
function ctfScripts($ctf) {
|
41 |
$ctf.addClass('ctf_is_initialized');
|
42 |
|
43 |
+
if (window.ctfObject.locator) {
|
44 |
+
var feedID = typeof $ctf.attr('data-feed-id') ? $ctf.attr('data-feed-id') : 'ctf-single',
|
45 |
+
postID = typeof $ctf.attr('data-postid') ? $ctf.attr('data-postid') : '';
|
46 |
+
|
47 |
+
jQuery.ajax({
|
48 |
+
url: ctf.ajax_url,
|
49 |
+
type: 'post',
|
50 |
+
data: {
|
51 |
+
action: 'ctf_do_locator',
|
52 |
+
atts: $ctf.attr('data-ctfshortcode'),
|
53 |
+
feed_id: feedID,
|
54 |
+
location: ctfLocationGuess($ctf),
|
55 |
+
post_id: postID,
|
56 |
+
},
|
57 |
+
success: function (data) {
|
58 |
+
}
|
59 |
+
}); // ajax call
|
60 |
+
}
|
61 |
+
|
62 |
if (ctfCheckConsent()) {
|
63 |
ctfRemovePrivacyFeatures($ctf);
|
64 |
} else {
|
158 |
|
159 |
function ctfHashReplacer(hash) {
|
160 |
//Remove white space at beginning of hash
|
161 |
+
var replacementString = hash.trim();
|
162 |
//If the hash is a hex code then don't replace it with a link as it's likely in the style attr, eg: "color: #ff0000"
|
163 |
if (/^#[0-9A-F]{6}$/i.test(replacementString)) {
|
164 |
return replacementString;
|
176 |
|
177 |
//Link @tags
|
178 |
function ctfReplaceTags(tag) {
|
179 |
+
var replacementString = tag.trim();
|
180 |
return ' <a href="https://twitter.com/' + replacementString.substring(1) + '" target="_blank" rel="nofollow">' + replacementString + '</a>';
|
181 |
}
|
182 |
|
209 |
//Change colors of some items to match tweet text
|
210 |
$ctf.find('.ctf-author-name, .ctf-tweet-date, .ctf-author-screenname, .ctf-twitterlink, .ctf-author-box-link, .ctf-retweet-text, .ctf-quoted-tweet').css('color', $ctf.find('.ctf-tweet-text').css('color'));
|
211 |
|
212 |
+
$ctf.find('.ctf_more').off('click').on('click', function (e) {
|
213 |
e.preventDefault();
|
214 |
$(this).hide().next('.ctf_remaining').show();
|
215 |
});
|
226 |
$ctfMore.addClass('ctf-loading').append('<div class="ctf-loader"></div>');
|
227 |
$ctfMore.find('.ctf-loader').css('background-color', $ctfMore.css('color'));
|
228 |
|
229 |
+
var feedID = typeof $ctf.attr('data-feed-id') ? $ctf.attr('data-feed-id') : 'ctf-single',
|
230 |
+
postID = typeof $ctf.attr('data-postid') ? $ctf.attr('data-postid') : '';
|
231 |
+
|
232 |
jQuery.ajax({
|
233 |
url: ctf.ajax_url,
|
234 |
type: 'post',
|
237 |
last_id_data: lastIDData,
|
238 |
shortcode_data: shortcodeData,
|
239 |
num_needed: numNeeded,
|
240 |
+
persistent_index: persistentIndex,
|
241 |
+
feed_id: feedID,
|
242 |
+
location: ctfLocationGuess($ctf),
|
243 |
+
post_id: postID,
|
244 |
},
|
245 |
success: function (data) {
|
246 |
if (lastIDData !== '') {
|
323 |
ctf_init();
|
324 |
|
325 |
// Cookie Notice by dFactory
|
326 |
+
$('#cookie-notice a').on('click',function() {
|
327 |
setTimeout(function() {
|
328 |
ctfAterConsentToggled();
|
329 |
},1000);
|
330 |
});
|
331 |
|
332 |
// Cookie Notice by dFactory
|
333 |
+
$('#cookie-law-info-bar a').on('click',function() {
|
334 |
setTimeout(function() {
|
335 |
ctfAterConsentToggled();
|
336 |
},1000);
|
337 |
});
|
338 |
|
339 |
// GDPR Cookie Consent by WebToffee
|
340 |
+
$('.cli-user-preference-checkbox').on('click',function(){
|
341 |
ctfAterConsentToggled();
|
342 |
});
|
343 |
|
415 |
});
|
416 |
$ctf.find('.ctf-no-consent').removeClass('ctf-no-consent');
|
417 |
//Header profile pic hover
|
418 |
+
$ctf.find('.ctf-header .ctf-header-link').on('mouseenter mouseleave', function(e) {
|
419 |
+
switch(e.type) {
|
420 |
+
case 'mouseenter':
|
421 |
+
$ctf.find('.ctf-header .ctf-header-img-hover').fadeIn(200);
|
422 |
+
break;
|
423 |
+
case 'mouseleave':
|
424 |
+
$ctf.find('.ctf-header .ctf-header-img-hover').stop().fadeOut(600);
|
425 |
+
break;
|
426 |
+
}
|
427 |
});
|
428 |
}
|
429 |
|
504 |
|
505 |
return "";
|
506 |
}
|
507 |
+
function ctfLocationGuess($feed) {
|
508 |
+
var location = 'content';
|
509 |
+
|
510 |
+
if ($feed.closest('footer').length) {
|
511 |
+
location = 'footer';
|
512 |
+
} else if ($feed.closest('.header').length
|
513 |
+
|| $feed.closest('header').length) {
|
514 |
+
location = 'header';
|
515 |
+
} else if ($feed.closest('.sidebar').length
|
516 |
+
|| $feed.closest('aside').length) {
|
517 |
+
location = 'sidebar';
|
518 |
+
}
|
519 |
+
|
520 |
+
return location;
|
521 |
+
}
|
522 |
})(jQuery);
|
523 |
|
524 |
|
js/ctf-scripts.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
var ctf_js_exists=void 0!==ctf_js_exists;ctf_js_exists||function(u){function t(){if(window.ctfObject.consentGiven||!window.ctfObject.gdpr)return!0;if("undefined"!=typeof CLI_Cookie)null!==CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)&&(window.ctfObject.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-non-necessary"));else if(void 0!==window.cnArgs){var u=("; "+document.cookie).split("; cookie_notice_accepted=");if(2===u.length){var t=u.pop().split(";").shift();window.ctfObject.consentGiven="true"===t}}else void 0!==window.cookieconsent?window.ctfObject.consentGiven="allow"===function(u){for(var t=u+"=",e=window.document.cookie.split(";"),n=0;n<e.length;n++){var i=e[n].trim();if(0==i.indexOf(t))return i.substring(t.length,i.length)}return""}("complianz_consent_status"):void 0!==window.Cookiebot?window.ctfObject.consentGiven=Cookiebot.consented:void 0!==window.BorlabsCookie&&(window.ctfObject.consentGiven=window.BorlabsCookie.checkCookieConsent("twitter"));var e=jQuery.Event("ctfcheckconsent");return e.feed=this,jQuery(window).trigger(e),window.ctfObject.consentGiven}function e(t){t.find(".ctf-hide-avatar").length&&!t.find(".ctf-hide-avatar.ctf-no-consent").length||t.find(".ctf-item").addClass("ctf-hide-avatar ctf-no-consent"),u(".ctf-header-img span").length&&u(".ctf-header-img").addClass("ctf-no-consent")}function n(t){c(),t.find(".ctf-item.ctf-no-consent").removeClass("ctf-hide-avatar"),t.find(".ctf-author-avatar").each(function(){u(this).find("span").replaceWith('<img src="'+u(this).find("span").attr("data-avatar")+'" alt="'+u(this).find("span").attr("data-alt")+'" width="48" height="48">')}),t.find(".ctf-header-img").each(function(){u(this).find("span").replaceWith('<img src="'+u(this).find("span").attr("data-avatar")+'" alt="'+u(this).find("span").attr("data-alt")+'" width="48" height="48">')}),t.find(".ctf-no-consent").removeClass("ctf-no-consent"),t.find(".ctf-header .ctf-header-link").hover(function(){t.find(".ctf-header .ctf-header-img-hover").fadeIn(200)},function(){t.find(".ctf-header .ctf-header-img-hover").stop().fadeOut(600)})}function i(){t()&&u(".ctf").each(function(){n(u(this))})}function c(){void 0===window.ctfObject.intentsIncluded&&(window.ctfObject.intentsIncluded=!1),u(".ctf").each(function(){window.ctfObject.intentsIncluded||void 0===u(this).attr("data-ctfintents")||(window.ctfObject.intentsIncluded=!0,function(){if(!window.__twitterIntentHandler){var u=/twitter\.com\/intent\/(\w+)/,t="scrollbars=yes,resizable=yes,toolbar=no,location=yes",e=550,n=420,i=screen.height,c=screen.width;document.addEventListener?document.addEventListener("click",a,!1):document.attachEvent&&document.attachEvent("onclick",a),window.__twitterIntentHandler=!0}function a(a){for(var o,s,f=(a=a||window.event).target||a.srcElement;f&&"a"!==f.nodeName.toLowerCase();)f=f.parentNode;f&&"a"===f.nodeName.toLowerCase()&&f.href&&f.href.match(u)&&(o=Math.round(c/2-e/2),s=0,i>n&&(s=Math.round(i/2-n/2)),window.open(f.href,"intent",t+",width="+e+",height="+n+",left="+o+",top="+s),a.returnValue=!1,a.preventDefault&&a.preventDefault())}}())})}window.ctf_init=function(){function i(i){i.addClass("ctf_is_initialized"),t()?n(i):e(i),i.find(".ctf-item.ctf-new").each(function(){var t,e,n,c,a,o,s=u(this),f=s.find(".ctf-tweet-text-media-wrap"),d=s.find(".ctf-tweet-text").remove(".ctf-tweet-text-media-wrap"),r=" "+d.html();if("true"!=i.attr("data-ctfdisablelinks")&&void 0!==r&&!i.find(".ctf-tweet-text-link").length){var A=i.attr("data-ctflinktextcolor"),l="";A&&(l=A.replace(";","").split("#")[1]),window.ctfLinkify=(t="[a-z\\d.-]+://",e="mailto:",n=new RegExp("(?:\\b[a-z\\d.-]+://[^<>\\s]+|\\b(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:[;/][^#?<>\\s]*)?(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w)|(?:mailto:)?[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w))","ig"),c=new RegExp("^"+t,"i"),a={"'":"`",">":"<",")":"(","]":"[","}":"{","B;":"B+","b:":"b9"},o={callback:function(u,t){return t?'<a href="'+t+'" title="'+t+'" target="_blank">'+u+"</a>":u},punct_regexp:/(?:[!?.,:;'"]|(?:&|&)(?:lt|gt|quot|apos|raquo|laquo|rsaquo|lsaquo);)$/},function(u,t){t=t||{};var i,s,f,d,r,A,l,F,h,m,C,B,g="",w=[];for(s in o)void 0===t[s]&&(t[s]=o[s]);for(;i=n.exec(u);)if(f=i[0],l=(A=n.lastIndex)-f.length,!/[\/:]/.test(u.charAt(l-1))){do{F=f,B=f.substr(-1),(C=a[B])&&(h=f.match(new RegExp("\\"+C+"(?!$)","g")),m=f.match(new RegExp("\\"+B,"g")),(h?h.length:0)<(m?m.length:0)&&(f=f.substr(0,f.length-1),A--)),t.punct_regexp&&(f=f.replace(t.punct_regexp,function(u){return A-=u.length,""}))}while(f.length&&f!==F);d=f,c.test(d)||(d=(-1!==d.indexOf("@")?d.indexOf(e)?e:"":d.indexOf("irc.")?d.indexOf("ftp.")?"http://":"ftp://":"irc://")+d),r!=l&&(w.push([u.slice(r,l)]),r=A),w.push([f,d])}for(w.push([u.substr(r)]),s=0;s<w.length;s++)g+=t.callback.apply(window,w[s]);return g||u}),d.find("a").length||(d.find(".emoji").each(function(){u(this).replaceWith(u(this).attr("alt"))}),r=" "+d.html(),r=ctfLinkify(r));r.length>0&&(r=(r=r.replace(/<br>/g,"<br> ")).replace(/(^|\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,function(u){var t=jQuery.trim(u);return/^#[0-9A-F]{6}$/i.test(t)?t:' <a href="https://twitter.com/hashtag/'+t.substring(1)+'" target="_blank" rel="nofollow">'+t+"</a>"}));r=r.replace(/[\s][@]+[A-Za-z0-9-_]+/g,function(u){var t=jQuery.trim(u);return' <a href="https://twitter.com/'+t.substring(1)+'" target="_blank" rel="nofollow">'+t+"</a>"}),d.html(r.trim()),d.append(f),d.find("a").css("color","#"+l),f.css("color","#"+l)}s.find(".ctf-tweet-text a").each(function(){jQuery(this).text().indexOf("http")>-1&&jQuery(this).text().length>63&&jQuery(this).text(jQuery(this).text().substring(0,60)+"...")})}),i.find(".ctf-author-name, .ctf-tweet-date, .ctf-author-screenname, .ctf-twitterlink, .ctf-author-box-link, .ctf-retweet-text, .ctf-quoted-tweet").css("color",i.find(".ctf-tweet-text").css("color")),i.find(".ctf_more").unbind("click").bind("click",function(t){t.preventDefault(),u(this).hide().next(".ctf_remaining").show()}),"function"==typeof ctf_custom_js&&ctf_custom_js(u),i.find(".ctf-author-box-link p:empty").remove()}function a(u,t,e,n,c,a){n.addClass("ctf-loading").append('<div class="ctf-loader"></div>'),n.find(".ctf-loader").css("background-color",n.css("color")),jQuery.ajax({url:ctf.ajax_url,type:"post",data:{action:"ctf_get_more_posts",last_id_data:u,shortcode_data:t,num_needed:c,persistent_index:a},success:function(t){""!==u?(-1==t.indexOf("<meta charset")&&e.find(".ctf-item").removeClass("ctf-new").last().after(t),e.find(".ctf-out-of-tweets").length&&(n.hide(),e.find(".ctf-out-of-tweets p").eq(0).fadeIn().end().eq(1).delay(500).fadeIn())):e.find(".ctf-tweets").append(t),n.removeClass("ctf-loading").find(".ctf-loader").remove(),i(e)}})}window.ctfObject={},u(".ctf").length&&void 0!==u(".ctf").first().attr("ctf-gdpr")?(window.ctfObject.consentGiven=!1,window.ctfObject.gdpr=!0):(window.ctfObject.consentGiven=!0,window.ctfObject.gdpr=!1),u(".ctf").length<=u(".ctf_is_initialized").length||(window.ctfObject.consentGiven&&c(),u(".ctf").each(function(){var c=u(this),o=parseInt(c.attr("data-ctfneeded"));c.width()<=480&&c.addClass("ctf-narrow"),c.width()<=320&&c.addClass("ctf-super-narrow"),u(this).hasClass("ctf_is_initialized")||i(c),setTimeout(function(){if(o>0){var u=c.find(".ctf-more"),t=c.find(".ctf-item").last().attr("id"),e=c.find(".ctf-item").length;a(t,c.attr("data-ctfshortcode"),c,u,o,e)}},500),c.find(".ctf-more").on("click",function(){var t=u(this),e=c.find(".ctf-item").last().attr("id"),n=c.find(".ctf-item").length;a(e,c.attr("data-ctfshortcode"),c,t,0,n)}),c.find(".ctf-author-box-link p:empty").remove(),setTimeout(function(){t()?n(c):e(c)},500)}))},jQuery(document).ready(function(u){ctf_init(),u("#cookie-notice a").click(function(){setTimeout(function(){i()},1e3)}),u("#cookie-law-info-bar a").click(function(){setTimeout(function(){i()},1e3)}),u(".cli-user-preference-checkbox").click(function(){i()}),u(window).on("CookiebotOnAccept",function(u){i()}),u(document).on("cmplzAcceptAll",function(u){i()}),u(document).on("cmplzRevoke",function(u){i()}),u(document).on("borlabs-cookie-consent-saved",function(u){i()})})}(jQuery);
|
1 |
+
var ctf_js_exists=void 0!==ctf_js_exists;ctf_js_exists||function(u){function t(){if(window.ctfObject.consentGiven||!window.ctfObject.gdpr)return!0;if("undefined"!=typeof CLI_Cookie)null!==CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)&&(window.ctfObject.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-non-necessary"));else if(void 0!==window.cnArgs){var u=("; "+document.cookie).split("; cookie_notice_accepted=");if(2===u.length){var t=u.pop().split(";").shift();window.ctfObject.consentGiven="true"===t}}else void 0!==window.cookieconsent?window.ctfObject.consentGiven="allow"===function(u){for(var t=u+"=",e=window.document.cookie.split(";"),n=0;n<e.length;n++){var a=e[n].trim();if(0==a.indexOf(t))return a.substring(t.length,a.length)}return""}("complianz_consent_status"):void 0!==window.Cookiebot?window.ctfObject.consentGiven=Cookiebot.consented:void 0!==window.BorlabsCookie&&(window.ctfObject.consentGiven=window.BorlabsCookie.checkCookieConsent("twitter"));var e=jQuery.Event("ctfcheckconsent");return e.feed=this,jQuery(window).trigger(e),window.ctfObject.consentGiven}function e(t){t.find(".ctf-hide-avatar").length&&!t.find(".ctf-hide-avatar.ctf-no-consent").length||t.find(".ctf-item").addClass("ctf-hide-avatar ctf-no-consent"),u(".ctf-header-img span").length&&u(".ctf-header-img").addClass("ctf-no-consent")}function n(t){c(),t.find(".ctf-item.ctf-no-consent").removeClass("ctf-hide-avatar"),t.find(".ctf-author-avatar").each(function(){u(this).find("span").replaceWith('<img src="'+u(this).find("span").attr("data-avatar")+'" alt="'+u(this).find("span").attr("data-alt")+'" width="48" height="48">')}),t.find(".ctf-header-img").each(function(){u(this).find("span").replaceWith('<img src="'+u(this).find("span").attr("data-avatar")+'" alt="'+u(this).find("span").attr("data-alt")+'" width="48" height="48">')}),t.find(".ctf-no-consent").removeClass("ctf-no-consent"),t.find(".ctf-header .ctf-header-link").on("mouseenter mouseleave",function(u){switch(u.type){case"mouseenter":t.find(".ctf-header .ctf-header-img-hover").fadeIn(200);break;case"mouseleave":t.find(".ctf-header .ctf-header-img-hover").stop().fadeOut(600)}})}function a(){t()&&u(".ctf").each(function(){n(u(this))})}function c(){void 0===window.ctfObject.intentsIncluded&&(window.ctfObject.intentsIncluded=!1),u(".ctf").each(function(){window.ctfObject.intentsIncluded||void 0===u(this).attr("data-ctfintents")||(window.ctfObject.intentsIncluded=!0,function(){if(!window.__twitterIntentHandler){var u=/twitter\.com\/intent\/(\w+)/,t="scrollbars=yes,resizable=yes,toolbar=no,location=yes",e=550,n=420,a=screen.height,c=screen.width;document.addEventListener?document.addEventListener("click",i,!1):document.attachEvent&&document.attachEvent("onclick",i),window.__twitterIntentHandler=!0}function i(i){for(var o,s,d=(i=i||window.event).target||i.srcElement;d&&"a"!==d.nodeName.toLowerCase();)d=d.parentNode;d&&"a"===d.nodeName.toLowerCase()&&d.href&&d.href.match(u)&&(o=Math.round(c/2-e/2),s=0,a>n&&(s=Math.round(a/2-n/2)),window.open(d.href,"intent",t+",width="+e+",height="+n+",left="+o+",top="+s),i.returnValue=!1,i.preventDefault&&i.preventDefault())}}())})}function i(u){var t="content";return u.closest("footer").length?t="footer":u.closest(".header").length||u.closest("header").length?t="header":(u.closest(".sidebar").length||u.closest("aside").length)&&(t="sidebar"),t}window.ctf_init=function(){if(window.ctfObject={},u(".ctf").length&&void 0!==u(".ctf").first().attr("data-ctf-flags")){var a=u(".ctf").first().attr("data-ctf-flags").split(",");if(a.indexOf("gdpr")>-1?(window.ctfObject.consentGiven=!1,window.ctfObject.gdpr=!0):(window.ctfObject.consentGiven=!0,window.ctfObject.gdpr=!1),a.indexOf("locator")>-1){var o=Math.floor(Math.random()*u(".ctf").length);window.ctfObject.locator=1===u(".ctf").length||1===o}else window.ctfObject.locator=!1}else window.ctfObject.consentGiven=!0,window.ctfObject.gdpr=!1,window.ctfObject.locator=!1;function s(a){if(a.addClass("ctf_is_initialized"),window.ctfObject.locator){var c=(a.attr("data-feed-id"),a.attr("data-feed-id")),o=(a.attr("data-postid"),a.attr("data-postid"));jQuery.ajax({url:ctf.ajax_url,type:"post",data:{action:"ctf_do_locator",atts:a.attr("data-ctfshortcode"),feed_id:c,location:i(a),post_id:o},success:function(u){}})}t()?n(a):e(a),a.find(".ctf-item.ctf-new").each(function(){var t,e,n,c,i,o,s=u(this),d=s.find(".ctf-tweet-text-media-wrap"),r=s.find(".ctf-tweet-text").remove(".ctf-tweet-text-media-wrap"),f=" "+r.html();if("true"!=a.attr("data-ctfdisablelinks")&&void 0!==f&&!a.find(".ctf-tweet-text-link").length){var A=a.attr("data-ctflinktextcolor"),l="";A&&(l=A.replace(";","").split("#")[1]),window.ctfLinkify=(t="[a-z\\d.-]+://",e="mailto:",n=new RegExp("(?:\\b[a-z\\d.-]+://[^<>\\s]+|\\b(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:[;/][^#?<>\\s]*)?(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w)|(?:mailto:)?[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w))","ig"),c=new RegExp("^"+t,"i"),i={"'":"`",">":"<",")":"(","]":"[","}":"{","B;":"B+","b:":"b9"},o={callback:function(u,t){return t?'<a href="'+t+'" title="'+t+'" target="_blank">'+u+"</a>":u},punct_regexp:/(?:[!?.,:;'"]|(?:&|&)(?:lt|gt|quot|apos|raquo|laquo|rsaquo|lsaquo);)$/},function(u,t){t=t||{};var a,s,d,r,f,A,l,F,h,m,C,g,w="",B=[];for(s in o)void 0===t[s]&&(t[s]=o[s]);for(;a=n.exec(u);)if(d=a[0],l=(A=n.lastIndex)-d.length,!/[\/:]/.test(u.charAt(l-1))){do{F=d,g=d.substr(-1),(C=i[g])&&(h=d.match(new RegExp("\\"+C+"(?!$)","g")),m=d.match(new RegExp("\\"+g,"g")),(h?h.length:0)<(m?m.length:0)&&(d=d.substr(0,d.length-1),A--)),t.punct_regexp&&(d=d.replace(t.punct_regexp,function(u){return A-=u.length,""}))}while(d.length&&d!==F);r=d,c.test(r)||(r=(-1!==r.indexOf("@")?r.indexOf(e)?e:"":r.indexOf("irc.")?r.indexOf("ftp.")?"http://":"ftp://":"irc://")+r),f!=l&&(B.push([u.slice(f,l)]),f=A),B.push([d,r])}for(B.push([u.substr(f)]),s=0;s<B.length;s++)w+=t.callback.apply(window,B[s]);return w||u}),r.find("a").length||(r.find(".emoji").each(function(){u(this).replaceWith(u(this).attr("alt"))}),f=" "+r.html(),f=ctfLinkify(f));f.length>0&&(f=(f=f.replace(/<br>/g,"<br> ")).replace(/(^|\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,function(u){var t=u.trim();return/^#[0-9A-F]{6}$/i.test(t)?t:' <a href="https://twitter.com/hashtag/'+t.substring(1)+'" target="_blank" rel="nofollow">'+t+"</a>"}));f=f.replace(/[\s][@]+[A-Za-z0-9-_]+/g,function(u){var t=u.trim();return' <a href="https://twitter.com/'+t.substring(1)+'" target="_blank" rel="nofollow">'+t+"</a>"}),r.html(f.trim()),r.append(d),r.find("a").css("color","#"+l),d.css("color","#"+l)}s.find(".ctf-tweet-text a").each(function(){jQuery(this).text().indexOf("http")>-1&&jQuery(this).text().length>63&&jQuery(this).text(jQuery(this).text().substring(0,60)+"...")})}),a.find(".ctf-author-name, .ctf-tweet-date, .ctf-author-screenname, .ctf-twitterlink, .ctf-author-box-link, .ctf-retweet-text, .ctf-quoted-tweet").css("color",a.find(".ctf-tweet-text").css("color")),a.find(".ctf_more").off("click").on("click",function(t){t.preventDefault(),u(this).hide().next(".ctf_remaining").show()}),"function"==typeof ctf_custom_js&&ctf_custom_js(u),a.find(".ctf-author-box-link p:empty").remove()}function d(u,t,e,n,a,c){n.addClass("ctf-loading").append('<div class="ctf-loader"></div>'),n.find(".ctf-loader").css("background-color",n.css("color"));var o=(e.attr("data-feed-id"),e.attr("data-feed-id")),d=(e.attr("data-postid"),e.attr("data-postid"));jQuery.ajax({url:ctf.ajax_url,type:"post",data:{action:"ctf_get_more_posts",last_id_data:u,shortcode_data:t,num_needed:a,persistent_index:c,feed_id:o,location:i(e),post_id:d},success:function(t){""!==u?(-1==t.indexOf("<meta charset")&&e.find(".ctf-item").removeClass("ctf-new").last().after(t),e.find(".ctf-out-of-tweets").length&&(n.hide(),e.find(".ctf-out-of-tweets p").eq(0).fadeIn().end().eq(1).delay(500).fadeIn())):e.find(".ctf-tweets").append(t),n.removeClass("ctf-loading").find(".ctf-loader").remove(),s(e)}})}u(".ctf").length<=u(".ctf_is_initialized").length||(window.ctfObject.consentGiven&&c(),u(".ctf").each(function(){var a=u(this),c=parseInt(a.attr("data-ctfneeded"));a.width()<=480&&a.addClass("ctf-narrow"),a.width()<=320&&a.addClass("ctf-super-narrow"),u(this).hasClass("ctf_is_initialized")||s(a),setTimeout(function(){if(c>0){var u=a.find(".ctf-more"),t=a.find(".ctf-item").last().attr("id"),e=a.find(".ctf-item").length;d(t,a.attr("data-ctfshortcode"),a,u,c,e)}},500),a.find(".ctf-more").on("click",function(){var t=u(this),e=a.find(".ctf-item").last().attr("id"),n=a.find(".ctf-item").length;d(e,a.attr("data-ctfshortcode"),a,t,0,n)}),a.find(".ctf-author-box-link p:empty").remove(),setTimeout(function(){t()?n(a):e(a)},500)}))},jQuery(document).ready(function(u){ctf_init(),u("#cookie-notice a").on("click",function(){setTimeout(function(){a()},1e3)}),u("#cookie-law-info-bar a").on("click",function(){setTimeout(function(){a()},1e3)}),u(".cli-user-preference-checkbox").on("click",function(){a()}),u(window).on("CookiebotOnAccept",function(u){a()}),u(document).on("cmplzAcceptAll",function(u){a()}),u(document).on("cmplzRevoke",function(u){a()}),u(document).on("borlabs-cookie-consent-saved",function(u){a()})})}(jQuery);
|
js/jquery.matchHeight-min.js
ADDED
@@ -0,0 +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)})});
|
languages/custom-twitter-feeds.pot
ADDED
@@ -0,0 +1,1309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
#, fuzzy
|
2 |
+
msgid ""
|
3 |
+
msgstr ""
|
4 |
+
"Project-Id-Version: \n"
|
5 |
+
"POT-Creation-Date: 2021-03-04 13:40-0600\n"
|
6 |
+
"PO-Revision-Date: 2021-03-04 13:32-0600\n"
|
7 |
+
"Last-Translator: \n"
|
8 |
+
"Language-Team: \n"
|
9 |
+
"Language: en\n"
|
10 |
+
"MIME-Version: 1.0\n"
|
11 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
12 |
+
"Content-Transfer-Encoding: 8bit\n"
|
13 |
+
"X-Generator: Poedit 2.4.2\n"
|
14 |
+
"X-Poedit-Basepath: ..\n"
|
15 |
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
16 |
+
"X-Poedit-KeywordsList: __;_e;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n"
|
17 |
+
"X-Poedit-SearchPath-0: .\n"
|
18 |
+
|
19 |
+
#: custom-twitter-feed.php:285
|
20 |
+
msgid "Settings"
|
21 |
+
msgstr ""
|
22 |
+
|
23 |
+
#: inc/CtfAdmin.php:101
|
24 |
+
msgid "Or, manually enter my own Twitter app information"
|
25 |
+
msgstr ""
|
26 |
+
|
27 |
+
#: inc/CtfAdmin.php:104
|
28 |
+
msgid ""
|
29 |
+
"Check this box if you would like to manually enter the information from your "
|
30 |
+
"own <a href=\"https://smashballoon.com/custom-twitter-feeds/docs/create-"
|
31 |
+
"twitter-app/?utm_campaign=twitter-"
|
32 |
+
"free&utm_source=settings&utm_medium=createownapp\" target=\"_blank\">Twitter "
|
33 |
+
"app</a>"
|
34 |
+
msgstr ""
|
35 |
+
|
36 |
+
#: inc/CtfAdmin.php:120 inc/CtfAdmin.php:130 inc/CtfAdmin.php:135
|
37 |
+
msgid "Log in to Twitter and get my Access Token and Secret"
|
38 |
+
msgstr ""
|
39 |
+
|
40 |
+
#: inc/CtfAdmin.php:121 inc/CtfAdmin.php:131 inc/CtfAdmin.php:136
|
41 |
+
msgid "Button not working?"
|
42 |
+
msgstr ""
|
43 |
+
|
44 |
+
#: inc/CtfAdmin.php:129
|
45 |
+
msgid ""
|
46 |
+
"There was an error with retrieving your access tokens. Please <a href="
|
47 |
+
"\"https://smashballoon.com/custom-twitter-feeds/token/?utm_campaign=twitter-"
|
48 |
+
"free&utm_source=settings&utm_medium=errorconnecting\" target=\"_blank\">use "
|
49 |
+
"this tool</a> to get your access token and secret."
|
50 |
+
msgstr ""
|
51 |
+
|
52 |
+
#: inc/CtfAdmin.php:225
|
53 |
+
msgid "Feed Finder"
|
54 |
+
msgstr ""
|
55 |
+
|
56 |
+
#: inc/CtfAdmin.php:261
|
57 |
+
msgid "(only recent tweets initially)"
|
58 |
+
msgstr ""
|
59 |
+
|
60 |
+
#: inc/CtfAdmin.php:1288
|
61 |
+
msgid "Include replies"
|
62 |
+
msgstr ""
|
63 |
+
|
64 |
+
#: inc/CtfAdmin.php:1334
|
65 |
+
msgid "Set to be 100% width on mobile?"
|
66 |
+
msgstr ""
|
67 |
+
|
68 |
+
#: inc/CtfAdmin.php:1335 inc/CtfAdmin.php:1782
|
69 |
+
msgid "What does this mean?"
|
70 |
+
msgstr ""
|
71 |
+
|
72 |
+
#: inc/CtfAdmin.php:1336
|
73 |
+
#, php-format
|
74 |
+
msgid ""
|
75 |
+
"If you set a width on the feed then this will be used on mobile as well as "
|
76 |
+
"desktop. Check this setting to set the feed width to be 100% on mobile so "
|
77 |
+
"that it is responsive."
|
78 |
+
msgstr ""
|
79 |
+
|
80 |
+
#: inc/CtfAdmin.php:1372
|
81 |
+
msgid "Minutes"
|
82 |
+
msgstr ""
|
83 |
+
|
84 |
+
#: inc/CtfAdmin.php:1374
|
85 |
+
msgid "Hours"
|
86 |
+
msgstr ""
|
87 |
+
|
88 |
+
#: inc/CtfAdmin.php:1375
|
89 |
+
msgid "Days"
|
90 |
+
msgstr ""
|
91 |
+
|
92 |
+
#: inc/CtfAdmin.php:1377
|
93 |
+
msgid "Clear Twitter Cache"
|
94 |
+
msgstr ""
|
95 |
+
|
96 |
+
#: inc/CtfAdmin.php:1379
|
97 |
+
msgid "Clicking this button will clear all cached data for your Twitter feeds"
|
98 |
+
msgstr ""
|
99 |
+
|
100 |
+
#: inc/CtfAdmin.php:1381
|
101 |
+
msgid ""
|
102 |
+
"Due to changes in Twitter's API usage policy, the minimum caching time for "
|
103 |
+
"the plugin is 1 hour. To check for Tweets more often either create your own "
|
104 |
+
"Twitter Developer app or upgrade to the Pro version."
|
105 |
+
msgstr ""
|
106 |
+
|
107 |
+
#: inc/CtfAdmin.php:1393
|
108 |
+
msgid "2h / 25 Feb"
|
109 |
+
msgstr ""
|
110 |
+
|
111 |
+
#: inc/CtfAdmin.php:1412
|
112 |
+
msgid "Examples"
|
113 |
+
msgstr ""
|
114 |
+
|
115 |
+
#: inc/CtfAdmin.php:1425
|
116 |
+
msgid "translation for \"m\" (minutes)"
|
117 |
+
msgstr ""
|
118 |
+
|
119 |
+
#: inc/CtfAdmin.php:1427
|
120 |
+
msgid "translation for \"h\" (hours)"
|
121 |
+
msgstr ""
|
122 |
+
|
123 |
+
#: inc/CtfAdmin.php:1429
|
124 |
+
msgid "translation for \"now\""
|
125 |
+
msgstr ""
|
126 |
+
|
127 |
+
#: inc/CtfAdmin.php:1503
|
128 |
+
msgid "default from Twitter"
|
129 |
+
msgstr ""
|
130 |
+
|
131 |
+
#: inc/CtfAdmin.php:1504
|
132 |
+
msgid "(GMT11:00) Midway Island, Samoa"
|
133 |
+
msgstr ""
|
134 |
+
|
135 |
+
#: inc/CtfAdmin.php:1505
|
136 |
+
msgid "(GMT10:00) HawaiiAleutian"
|
137 |
+
msgstr ""
|
138 |
+
|
139 |
+
#: inc/CtfAdmin.php:1506
|
140 |
+
msgid "(GMT10:00) Hawaii"
|
141 |
+
msgstr ""
|
142 |
+
|
143 |
+
#: inc/CtfAdmin.php:1507
|
144 |
+
msgid "(GMT09:30) Marquesas Islands"
|
145 |
+
msgstr ""
|
146 |
+
|
147 |
+
#: inc/CtfAdmin.php:1508
|
148 |
+
msgid "(GMT09:00) Gambier Islands"
|
149 |
+
msgstr ""
|
150 |
+
|
151 |
+
#: inc/CtfAdmin.php:1509
|
152 |
+
msgid "(GMT09:00) Alaska"
|
153 |
+
msgstr ""
|
154 |
+
|
155 |
+
#: inc/CtfAdmin.php:1510
|
156 |
+
msgid "(GMT08:00) Tijuana, Baja California"
|
157 |
+
msgstr ""
|
158 |
+
|
159 |
+
#: inc/CtfAdmin.php:1511
|
160 |
+
msgid "(GMT08:00) Pitcairn Islands"
|
161 |
+
msgstr ""
|
162 |
+
|
163 |
+
#: inc/CtfAdmin.php:1512
|
164 |
+
msgid "(GMT08:00) Pacific Time (US & Canada)"
|
165 |
+
msgstr ""
|
166 |
+
|
167 |
+
#: inc/CtfAdmin.php:1513
|
168 |
+
msgid "(GMT07:00) Mountain Time (US & Canada)"
|
169 |
+
msgstr ""
|
170 |
+
|
171 |
+
#: inc/CtfAdmin.php:1514
|
172 |
+
msgid "(GMT07:00) Chihuahua, La Paz, Mazatlan"
|
173 |
+
msgstr ""
|
174 |
+
|
175 |
+
#: inc/CtfAdmin.php:1515
|
176 |
+
msgid "(GMT07:00) Arizona"
|
177 |
+
msgstr ""
|
178 |
+
|
179 |
+
#: inc/CtfAdmin.php:1516
|
180 |
+
msgid "(GMT06:00) Saskatchewan, Central America"
|
181 |
+
msgstr ""
|
182 |
+
|
183 |
+
#: inc/CtfAdmin.php:1517
|
184 |
+
msgid "(GMT06:00) Guadalajara, Mexico City, Monterrey"
|
185 |
+
msgstr ""
|
186 |
+
|
187 |
+
#: inc/CtfAdmin.php:1518
|
188 |
+
msgid "(GMT06:00) Easter Island"
|
189 |
+
msgstr ""
|
190 |
+
|
191 |
+
#: inc/CtfAdmin.php:1519
|
192 |
+
msgid "(GMT06:00) Central Time (US & Canada)"
|
193 |
+
msgstr ""
|
194 |
+
|
195 |
+
#: inc/CtfAdmin.php:1520
|
196 |
+
msgid "(GMT05:00) Eastern Time (US & Canada)"
|
197 |
+
msgstr ""
|
198 |
+
|
199 |
+
#: inc/CtfAdmin.php:1521
|
200 |
+
msgid "(GMT05:00) Cuba"
|
201 |
+
msgstr ""
|
202 |
+
|
203 |
+
#: inc/CtfAdmin.php:1522
|
204 |
+
msgid "(GMT05:00) Bogota, Lima, Quito, Rio Branco"
|
205 |
+
msgstr ""
|
206 |
+
|
207 |
+
#: inc/CtfAdmin.php:1523
|
208 |
+
msgid "(GMT04:30) Caracas"
|
209 |
+
msgstr ""
|
210 |
+
|
211 |
+
#: inc/CtfAdmin.php:1524
|
212 |
+
msgid "(GMT04:00) Santiago"
|
213 |
+
msgstr ""
|
214 |
+
|
215 |
+
#: inc/CtfAdmin.php:1525
|
216 |
+
msgid "(GMT04:00) La Paz"
|
217 |
+
msgstr ""
|
218 |
+
|
219 |
+
#: inc/CtfAdmin.php:1526
|
220 |
+
msgid "(GMT04:00) Faukland Islands"
|
221 |
+
msgstr ""
|
222 |
+
|
223 |
+
#: inc/CtfAdmin.php:1527
|
224 |
+
msgid "(GMT04:00) Brazil"
|
225 |
+
msgstr ""
|
226 |
+
|
227 |
+
#: inc/CtfAdmin.php:1528
|
228 |
+
msgid "(GMT04:00) Atlantic Time (Goose Bay)"
|
229 |
+
msgstr ""
|
230 |
+
|
231 |
+
#: inc/CtfAdmin.php:1529
|
232 |
+
msgid "(GMT04:00) Atlantic Time (Canada)"
|
233 |
+
msgstr ""
|
234 |
+
|
235 |
+
#: inc/CtfAdmin.php:1530
|
236 |
+
msgid "(GMT03:30) Newfoundland"
|
237 |
+
msgstr ""
|
238 |
+
|
239 |
+
#: inc/CtfAdmin.php:1531
|
240 |
+
msgid "(GMT03:00) UTC3"
|
241 |
+
msgstr ""
|
242 |
+
|
243 |
+
#: inc/CtfAdmin.php:1532
|
244 |
+
msgid "(GMT03:00) Montevideo"
|
245 |
+
msgstr ""
|
246 |
+
|
247 |
+
#: inc/CtfAdmin.php:1533
|
248 |
+
msgid "(GMT03:00) Miquelon, St. Pierre"
|
249 |
+
msgstr ""
|
250 |
+
|
251 |
+
#: inc/CtfAdmin.php:1534
|
252 |
+
msgid "(GMT03:00) Greenland"
|
253 |
+
msgstr ""
|
254 |
+
|
255 |
+
#: inc/CtfAdmin.php:1535
|
256 |
+
msgid "(GMT03:00) Buenos Aires"
|
257 |
+
msgstr ""
|
258 |
+
|
259 |
+
#: inc/CtfAdmin.php:1536
|
260 |
+
msgid "(GMT03:00) Brasilia"
|
261 |
+
msgstr ""
|
262 |
+
|
263 |
+
#: inc/CtfAdmin.php:1537
|
264 |
+
msgid "(GMT02:00) MidAtlantic"
|
265 |
+
msgstr ""
|
266 |
+
|
267 |
+
#: inc/CtfAdmin.php:1538
|
268 |
+
msgid "(GMT01:00) Cape Verde Is."
|
269 |
+
msgstr ""
|
270 |
+
|
271 |
+
#: inc/CtfAdmin.php:1539
|
272 |
+
msgid "(GMT01:00) Azores"
|
273 |
+
msgstr ""
|
274 |
+
|
275 |
+
#: inc/CtfAdmin.php:1540
|
276 |
+
msgid "(GMT) Greenwich Mean Time : Belfast"
|
277 |
+
msgstr ""
|
278 |
+
|
279 |
+
#: inc/CtfAdmin.php:1541
|
280 |
+
msgid "(GMT) Greenwich Mean Time : Dublin"
|
281 |
+
msgstr ""
|
282 |
+
|
283 |
+
#: inc/CtfAdmin.php:1542
|
284 |
+
msgid "(GMT) Greenwich Mean Time : Lisbon"
|
285 |
+
msgstr ""
|
286 |
+
|
287 |
+
#: inc/CtfAdmin.php:1543
|
288 |
+
msgid "(GMT) Greenwich Mean Time : London"
|
289 |
+
msgstr ""
|
290 |
+
|
291 |
+
#: inc/CtfAdmin.php:1544
|
292 |
+
msgid "(GMT) Monrovia, Reykjavik"
|
293 |
+
msgstr ""
|
294 |
+
|
295 |
+
#: inc/CtfAdmin.php:1545
|
296 |
+
msgid "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna"
|
297 |
+
msgstr ""
|
298 |
+
|
299 |
+
#: inc/CtfAdmin.php:1546
|
300 |
+
msgid "(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague"
|
301 |
+
msgstr ""
|
302 |
+
|
303 |
+
#: inc/CtfAdmin.php:1547
|
304 |
+
msgid "(GMT+01:00) Brussels, Copenhagen, Madrid, Paris"
|
305 |
+
msgstr ""
|
306 |
+
|
307 |
+
#: inc/CtfAdmin.php:1548
|
308 |
+
msgid "(GMT+01:00) West Central Africa"
|
309 |
+
msgstr ""
|
310 |
+
|
311 |
+
#: inc/CtfAdmin.php:1549
|
312 |
+
msgid "(GMT+01:00) Windhoek"
|
313 |
+
msgstr ""
|
314 |
+
|
315 |
+
#: inc/CtfAdmin.php:1550
|
316 |
+
msgid "(GMT+02:00) Beirut"
|
317 |
+
msgstr ""
|
318 |
+
|
319 |
+
#: inc/CtfAdmin.php:1551
|
320 |
+
msgid "(GMT+02:00) Cairo"
|
321 |
+
msgstr ""
|
322 |
+
|
323 |
+
#: inc/CtfAdmin.php:1552
|
324 |
+
msgid "(GMT+02:00) Gaza"
|
325 |
+
msgstr ""
|
326 |
+
|
327 |
+
#: inc/CtfAdmin.php:1553
|
328 |
+
msgid "(GMT+02:00) Harare, Pretoria"
|
329 |
+
msgstr ""
|
330 |
+
|
331 |
+
#: inc/CtfAdmin.php:1554
|
332 |
+
msgid "(GMT+02:00) Jerusalem"
|
333 |
+
msgstr ""
|
334 |
+
|
335 |
+
#: inc/CtfAdmin.php:1555
|
336 |
+
msgid "(GMT+02:00) Minsk"
|
337 |
+
msgstr ""
|
338 |
+
|
339 |
+
#: inc/CtfAdmin.php:1556
|
340 |
+
msgid "(GMT+02:00) Syria"
|
341 |
+
msgstr ""
|
342 |
+
|
343 |
+
#: inc/CtfAdmin.php:1557
|
344 |
+
msgid "(GMT+03:00) Moscow, St. Petersburg, Volgograd"
|
345 |
+
msgstr ""
|
346 |
+
|
347 |
+
#: inc/CtfAdmin.php:1558
|
348 |
+
msgid "(GMT+03:00) Nairobi"
|
349 |
+
msgstr ""
|
350 |
+
|
351 |
+
#: inc/CtfAdmin.php:1559
|
352 |
+
msgid "(GMT+03:30) Tehran"
|
353 |
+
msgstr ""
|
354 |
+
|
355 |
+
#: inc/CtfAdmin.php:1560
|
356 |
+
msgid "(GMT+04:00) Abu Dhabi, Muscat"
|
357 |
+
msgstr ""
|
358 |
+
|
359 |
+
#: inc/CtfAdmin.php:1561
|
360 |
+
msgid "(GMT+04:00) Yerevan"
|
361 |
+
msgstr ""
|
362 |
+
|
363 |
+
#: inc/CtfAdmin.php:1562
|
364 |
+
msgid "(GMT+04:30) Kabul"
|
365 |
+
msgstr ""
|
366 |
+
|
367 |
+
#: inc/CtfAdmin.php:1563
|
368 |
+
msgid "(GMT+05:00) Ekaterinburg"
|
369 |
+
msgstr ""
|
370 |
+
|
371 |
+
#: inc/CtfAdmin.php:1564
|
372 |
+
msgid "(GMT+05:00) Tashkent"
|
373 |
+
msgstr ""
|
374 |
+
|
375 |
+
#: inc/CtfAdmin.php:1565
|
376 |
+
msgid "(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi"
|
377 |
+
msgstr ""
|
378 |
+
|
379 |
+
#: inc/CtfAdmin.php:1566
|
380 |
+
msgid "(GMT+05:45) Kathmandu"
|
381 |
+
msgstr ""
|
382 |
+
|
383 |
+
#: inc/CtfAdmin.php:1567
|
384 |
+
msgid "(GMT+06:00) Astana, Dhaka"
|
385 |
+
msgstr ""
|
386 |
+
|
387 |
+
#: inc/CtfAdmin.php:1568
|
388 |
+
msgid "(GMT+06:00) Novosibirsk"
|
389 |
+
msgstr ""
|
390 |
+
|
391 |
+
#: inc/CtfAdmin.php:1569
|
392 |
+
msgid "(GMT+06:30) Yangon (Rangoon)"
|
393 |
+
msgstr ""
|
394 |
+
|
395 |
+
#: inc/CtfAdmin.php:1570
|
396 |
+
msgid "(GMT+07:00) Bangkok, Hanoi, Jakarta"
|
397 |
+
msgstr ""
|
398 |
+
|
399 |
+
#: inc/CtfAdmin.php:1571
|
400 |
+
msgid "(GMT+07:00) Krasnoyarsk"
|
401 |
+
msgstr ""
|
402 |
+
|
403 |
+
#: inc/CtfAdmin.php:1572
|
404 |
+
msgid "(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi"
|
405 |
+
msgstr ""
|
406 |
+
|
407 |
+
#: inc/CtfAdmin.php:1573
|
408 |
+
msgid "(GMT+08:00) Irkutsk, Ulaan Bataar"
|
409 |
+
msgstr ""
|
410 |
+
|
411 |
+
#: inc/CtfAdmin.php:1574
|
412 |
+
msgid "(GMT+08:00) Perth"
|
413 |
+
msgstr ""
|
414 |
+
|
415 |
+
#: inc/CtfAdmin.php:1575
|
416 |
+
msgid "(GMT+08:45) Eucla"
|
417 |
+
msgstr ""
|
418 |
+
|
419 |
+
#: inc/CtfAdmin.php:1576
|
420 |
+
msgid "(GMT+09:00) Osaka, Sapporo, Tokyo"
|
421 |
+
msgstr ""
|
422 |
+
|
423 |
+
#: inc/CtfAdmin.php:1577
|
424 |
+
msgid "(GMT+09:00) Seoul"
|
425 |
+
msgstr ""
|
426 |
+
|
427 |
+
#: inc/CtfAdmin.php:1578
|
428 |
+
msgid "(GMT+09:00) Yakutsk"
|
429 |
+
msgstr ""
|
430 |
+
|
431 |
+
#: inc/CtfAdmin.php:1579
|
432 |
+
msgid "(GMT+09:30) Adelaide"
|
433 |
+
msgstr ""
|
434 |
+
|
435 |
+
#: inc/CtfAdmin.php:1580
|
436 |
+
msgid "(GMT+09:30) Darwin"
|
437 |
+
msgstr ""
|
438 |
+
|
439 |
+
#: inc/CtfAdmin.php:1581
|
440 |
+
msgid "(GMT+10:00) Brisbane"
|
441 |
+
msgstr ""
|
442 |
+
|
443 |
+
#: inc/CtfAdmin.php:1582
|
444 |
+
msgid "(GMT+10:00) Sydney"
|
445 |
+
msgstr ""
|
446 |
+
|
447 |
+
#: inc/CtfAdmin.php:1583
|
448 |
+
msgid "(GMT+10:00) Vladivostok"
|
449 |
+
msgstr ""
|
450 |
+
|
451 |
+
#: inc/CtfAdmin.php:1584
|
452 |
+
msgid "(GMT+10:30) Lord Howe Island"
|
453 |
+
msgstr ""
|
454 |
+
|
455 |
+
#: inc/CtfAdmin.php:1585
|
456 |
+
msgid "(GMT+11:00) Solomon Is., New Caledonia"
|
457 |
+
msgstr ""
|
458 |
+
|
459 |
+
#: inc/CtfAdmin.php:1586
|
460 |
+
msgid "(GMT+11:00) Magadan"
|
461 |
+
msgstr ""
|
462 |
+
|
463 |
+
#: inc/CtfAdmin.php:1587
|
464 |
+
msgid "(GMT+11:30) Norfolk Island"
|
465 |
+
msgstr ""
|
466 |
+
|
467 |
+
#: inc/CtfAdmin.php:1588
|
468 |
+
msgid "(GMT+12:00) Anadyr, Kamchatka"
|
469 |
+
msgstr ""
|
470 |
+
|
471 |
+
#: inc/CtfAdmin.php:1589
|
472 |
+
msgid "(GMT+12:00) Auckland, Wellington"
|
473 |
+
msgstr ""
|
474 |
+
|
475 |
+
#: inc/CtfAdmin.php:1590
|
476 |
+
msgid "(GMT+12:00) Fiji, Kamchatka, Marshall Is."
|
477 |
+
msgstr ""
|
478 |
+
|
479 |
+
#: inc/CtfAdmin.php:1591
|
480 |
+
msgid "(GMT+12:45) Chatham Islands"
|
481 |
+
msgstr ""
|
482 |
+
|
483 |
+
#: inc/CtfAdmin.php:1592
|
484 |
+
msgid "(GMT+13:00) Nuku'alofa"
|
485 |
+
msgstr ""
|
486 |
+
|
487 |
+
#: inc/CtfAdmin.php:1593
|
488 |
+
msgid "(GMT+14:00) Kiritimati"
|
489 |
+
msgstr ""
|
490 |
+
|
491 |
+
#: inc/CtfAdmin.php:1605
|
492 |
+
msgid "List"
|
493 |
+
msgstr ""
|
494 |
+
|
495 |
+
#: inc/CtfAdmin.php:1606
|
496 |
+
msgid "Carousel"
|
497 |
+
msgstr ""
|
498 |
+
|
499 |
+
#: inc/CtfAdmin.php:1607
|
500 |
+
msgid "Masonry"
|
501 |
+
msgstr ""
|
502 |
+
|
503 |
+
#: inc/CtfAdmin.php:1625
|
504 |
+
msgid "A full-width list of tweets."
|
505 |
+
msgstr ""
|
506 |
+
|
507 |
+
#: inc/CtfAdmin.php:1630
|
508 |
+
msgid "Tweets in columns with no empty space between them."
|
509 |
+
msgstr ""
|
510 |
+
|
511 |
+
#: inc/CtfAdmin.php:1633 inc/CtfAdmin.php:1665
|
512 |
+
msgid "Desktop Columns"
|
513 |
+
msgstr ""
|
514 |
+
|
515 |
+
#: inc/CtfAdmin.php:1646 inc/CtfAdmin.php:1678
|
516 |
+
msgid "Moblie Columns"
|
517 |
+
msgstr ""
|
518 |
+
|
519 |
+
#: inc/CtfAdmin.php:1662
|
520 |
+
msgid "Posts are displayed in a slideshow carousel."
|
521 |
+
msgstr ""
|
522 |
+
|
523 |
+
#: inc/CtfAdmin.php:1691
|
524 |
+
msgid "Loop Type"
|
525 |
+
msgstr ""
|
526 |
+
|
527 |
+
#: inc/CtfAdmin.php:1696
|
528 |
+
msgid "None"
|
529 |
+
msgstr ""
|
530 |
+
|
531 |
+
#: inc/CtfAdmin.php:1697
|
532 |
+
msgid "Rewind"
|
533 |
+
msgstr ""
|
534 |
+
|
535 |
+
#: inc/CtfAdmin.php:1698
|
536 |
+
msgid "Infinity"
|
537 |
+
msgstr ""
|
538 |
+
|
539 |
+
#: inc/CtfAdmin.php:1702
|
540 |
+
msgid "Navigation Arrows"
|
541 |
+
msgstr ""
|
542 |
+
|
543 |
+
#: inc/CtfAdmin.php:1706
|
544 |
+
msgid "Show on Hover"
|
545 |
+
msgstr ""
|
546 |
+
|
547 |
+
#: inc/CtfAdmin.php:1707
|
548 |
+
msgid "Show below feed"
|
549 |
+
msgstr ""
|
550 |
+
|
551 |
+
#: inc/CtfAdmin.php:1708
|
552 |
+
msgid "Hide arrows"
|
553 |
+
msgstr ""
|
554 |
+
|
555 |
+
#: inc/CtfAdmin.php:1712
|
556 |
+
msgid "Carousel Height"
|
557 |
+
msgstr ""
|
558 |
+
|
559 |
+
#: inc/CtfAdmin.php:1716
|
560 |
+
msgid "Always set to tallest post"
|
561 |
+
msgstr ""
|
562 |
+
|
563 |
+
#: inc/CtfAdmin.php:1717
|
564 |
+
msgid "Set to shortest post, button to expand"
|
565 |
+
msgstr ""
|
566 |
+
|
567 |
+
#: inc/CtfAdmin.php:1718
|
568 |
+
msgid "Automatically set to post height (forces single column)"
|
569 |
+
msgstr ""
|
570 |
+
|
571 |
+
#: inc/CtfAdmin.php:1723
|
572 |
+
msgid "Enable Autoplay"
|
573 |
+
msgstr ""
|
574 |
+
|
575 |
+
#: inc/CtfAdmin.php:1727
|
576 |
+
msgid "Interval Time"
|
577 |
+
msgstr ""
|
578 |
+
|
579 |
+
#: inc/CtfAdmin.php:1730
|
580 |
+
msgid "miliseconds"
|
581 |
+
msgstr ""
|
582 |
+
|
583 |
+
#: inc/CtfAdmin.php:1745
|
584 |
+
msgid "<p class=\"ctf_note\">"
|
585 |
+
msgstr ""
|
586 |
+
|
587 |
+
#: inc/CtfAdmin.php:1754 inc/CtfAdmin.php:1793
|
588 |
+
msgid "Automatic"
|
589 |
+
msgstr ""
|
590 |
+
|
591 |
+
#: inc/CtfAdmin.php:1758 inc/CtfAdmin.php:1785 views/admin/customize.php:52
|
592 |
+
msgid "Yes"
|
593 |
+
msgstr ""
|
594 |
+
|
595 |
+
#: inc/CtfAdmin.php:1762 inc/CtfAdmin.php:1790
|
596 |
+
msgid "No"
|
597 |
+
msgstr ""
|
598 |
+
|
599 |
+
#: inc/CtfAdmin.php:1769
|
600 |
+
msgid "Avatars will be replaced with a Twitter logo in the feed header."
|
601 |
+
msgstr ""
|
602 |
+
|
603 |
+
#: inc/CtfAdmin.php:1770
|
604 |
+
msgid "Avatars will not display in Tweets."
|
605 |
+
msgstr ""
|
606 |
+
|
607 |
+
#: inc/CtfAdmin.php:1771
|
608 |
+
msgid ""
|
609 |
+
"Twitter intents (for replying, retweeting, and liking) will be plain links."
|
610 |
+
msgstr ""
|
611 |
+
|
612 |
+
#: inc/CtfAdmin.php:1785
|
613 |
+
msgid ""
|
614 |
+
"Enabling this setting prevents all images and videos from being loaded "
|
615 |
+
"directly from Twitter's servers (CDN) to prevent any requests to external "
|
616 |
+
"websites in your browser. To accommodate this, some features of the plugin "
|
617 |
+
"will be disabled or limited."
|
618 |
+
msgstr ""
|
619 |
+
|
620 |
+
#: inc/CtfAdmin.php:1785 inc/CtfAdmin.php:1824
|
621 |
+
msgid "What will be limited?"
|
622 |
+
msgstr ""
|
623 |
+
|
624 |
+
#: inc/CtfAdmin.php:1790
|
625 |
+
msgid ""
|
626 |
+
"The plugin will still make some requests to load and display images and "
|
627 |
+
"videos directly from Twitter."
|
628 |
+
msgstr ""
|
629 |
+
|
630 |
+
#: inc/CtfAdmin.php:1793
|
631 |
+
#, php-format
|
632 |
+
msgid ""
|
633 |
+
"The plugin will only load images and videos directly from Twitter if consent "
|
634 |
+
"has been given by one of these integrated %s"
|
635 |
+
msgstr ""
|
636 |
+
|
637 |
+
#: inc/CtfAdmin.php:1793
|
638 |
+
msgid "GDPR cookie plugins"
|
639 |
+
msgstr ""
|
640 |
+
|
641 |
+
#: inc/CtfAdmin.php:1795
|
642 |
+
#, php-format
|
643 |
+
msgid ""
|
644 |
+
"%s to learn more about GDPR compliance in the Custom Twitter Feed plugin."
|
645 |
+
msgstr ""
|
646 |
+
|
647 |
+
#: inc/CtfAdmin.php:1795
|
648 |
+
msgid "Click here"
|
649 |
+
msgstr ""
|
650 |
+
|
651 |
+
#: inc/CtfAdmin.php:1805
|
652 |
+
msgid "Error:"
|
653 |
+
msgstr ""
|
654 |
+
|
655 |
+
#: inc/CtfAdmin.php:1805
|
656 |
+
msgid ""
|
657 |
+
"Due to a configuration issue on your web server, the GDPR setting is unable "
|
658 |
+
"to be enabled. Please see below for more information."
|
659 |
+
msgstr ""
|
660 |
+
|
661 |
+
#: inc/CtfAdmin.php:1821
|
662 |
+
#, php-format
|
663 |
+
msgid "%s detected"
|
664 |
+
msgstr ""
|
665 |
+
|
666 |
+
#: inc/CtfAdmin.php:1823
|
667 |
+
msgid ""
|
668 |
+
"Some Custom Twitter Feed features will be limited for visitors to ensure "
|
669 |
+
"GDPR compliance until they give consent."
|
670 |
+
msgstr ""
|
671 |
+
|
672 |
+
#: inc/CtfAdmin.php:1833
|
673 |
+
msgid ""
|
674 |
+
"No GDPR consent plugin detected. Install a compatible <a href=\"https://"
|
675 |
+
"smashballoon.com/doc/gdpr-plugin-list/?twitter\">GDPR consent plugin</a>, or "
|
676 |
+
"manually enable the setting above to display a GDPR compliant version of the "
|
677 |
+
"feed to all visitors."
|
678 |
+
msgstr ""
|
679 |
+
|
680 |
+
#: inc/CtfAdmin.php:1841
|
681 |
+
msgid ""
|
682 |
+
"No requests will be made to third-party websites. To accommodate this, some "
|
683 |
+
"features of the plugin will be limited:"
|
684 |
+
msgstr ""
|
685 |
+
|
686 |
+
#: inc/CtfAdmin.php:1848
|
687 |
+
msgid ""
|
688 |
+
"The plugin will function as normal and load images and videos directly from "
|
689 |
+
"Twitter."
|
690 |
+
msgstr ""
|
691 |
+
|
692 |
+
#: inc/CtfAdmin.php:1857
|
693 |
+
msgid "Clear Persistent Caches"
|
694 |
+
msgstr ""
|
695 |
+
|
696 |
+
#: inc/CtfAdmin.php:1859
|
697 |
+
msgid ""
|
698 |
+
"Clicking this button will clear all cached data for search and hashtag feeds "
|
699 |
+
"that have persistent caches"
|
700 |
+
msgstr ""
|
701 |
+
|
702 |
+
#: inc/CtfFeed.php:161
|
703 |
+
msgid "Retweeted"
|
704 |
+
msgstr ""
|
705 |
+
|
706 |
+
#: inc/CtfFeed.php:167
|
707 |
+
msgid "Load More..."
|
708 |
+
msgstr ""
|
709 |
+
|
710 |
+
#: inc/CtfFeed.php:1395
|
711 |
+
msgid "That's all! No more Tweets to load"
|
712 |
+
msgstr ""
|
713 |
+
|
714 |
+
#: inc/CtfFeed.php:1520
|
715 |
+
msgid "Follow"
|
716 |
+
msgstr ""
|
717 |
+
|
718 |
+
#: inc/CtfFeed.php:1677
|
719 |
+
msgid "Retweet on Twitter"
|
720 |
+
msgstr ""
|
721 |
+
|
722 |
+
#: inc/admin-hooks.php:63
|
723 |
+
msgid ""
|
724 |
+
"<p>Please use a single screenname or Twitter handle of numbers and letters. "
|
725 |
+
"If you would like to use more than one screen name for your feed, please "
|
726 |
+
"upgrade to our <a href='https://smashballoon.com/custom-twitter-feeds/?"
|
727 |
+
"utm_campaign=twitter-free&utm_source=settings&utm_medium=multiuser' "
|
728 |
+
"target='_blank'>Pro version</a>.</p>"
|
729 |
+
msgstr ""
|
730 |
+
|
731 |
+
#: inc/admin-hooks.php:72
|
732 |
+
msgid ""
|
733 |
+
"<p>Please use a single hashtag of numbers and letters. If you would like to "
|
734 |
+
"use more than one hashtag or use search terms for your feed, please upgrade "
|
735 |
+
"to our <a href='https://smashballoon.com/custom-twitter-feeds/?"
|
736 |
+
"utm_campaign=twitter-free&utm_source=settings&utm_medium=multisearch' "
|
737 |
+
"target='_blank'>Pro version</a>.</p>"
|
738 |
+
msgstr ""
|
739 |
+
|
740 |
+
#: inc/admin-hooks.php:291
|
741 |
+
msgid "Clear Twitter Cards"
|
742 |
+
msgstr ""
|
743 |
+
|
744 |
+
#: inc/admin-hooks.php:293
|
745 |
+
msgid ""
|
746 |
+
"Clicking this button will clear all cached data for your links that have "
|
747 |
+
"Twitter Cards"
|
748 |
+
msgstr ""
|
749 |
+
|
750 |
+
#: inc/admin-hooks.php:306 inc/admin-hooks.php:316
|
751 |
+
msgid "any"
|
752 |
+
msgstr ""
|
753 |
+
|
754 |
+
#: inc/admin-hooks.php:307 inc/admin-hooks.php:317
|
755 |
+
msgid "all"
|
756 |
+
msgstr ""
|
757 |
+
|
758 |
+
#: inc/admin-hooks.php:311
|
759 |
+
msgid "and"
|
760 |
+
msgstr ""
|
761 |
+
|
762 |
+
#: inc/admin-hooks.php:312
|
763 |
+
msgid "or"
|
764 |
+
msgstr ""
|
765 |
+
|
766 |
+
#: inc/admin-hooks.php:333 views/admin/configure.php:7
|
767 |
+
#: views/admin/configure.php:10 views/admin/customize.php:26
|
768 |
+
#: views/admin/customize.php:59 views/admin/style.php:24
|
769 |
+
#: views/admin/style.php:34 views/admin/style.php:48
|
770 |
+
msgid "Save Changes"
|
771 |
+
msgstr ""
|
772 |
+
|
773 |
+
#: inc/admin/class-ctf-notifications.php:513
|
774 |
+
msgid "Dismiss this message"
|
775 |
+
msgstr ""
|
776 |
+
|
777 |
+
#: inc/admin/class-ctf-notifications.php:516
|
778 |
+
msgid "Previous message"
|
779 |
+
msgstr ""
|
780 |
+
|
781 |
+
#: inc/admin/class-ctf-notifications.php:517
|
782 |
+
msgid "Next message"
|
783 |
+
msgstr ""
|
784 |
+
|
785 |
+
#: inc/blocks/class-ctf-blocks.php:94
|
786 |
+
msgid "Add Settings"
|
787 |
+
msgstr ""
|
788 |
+
|
789 |
+
#: inc/blocks/class-ctf-blocks.php:95
|
790 |
+
msgid "Shortcode Settings"
|
791 |
+
msgstr ""
|
792 |
+
|
793 |
+
#: inc/blocks/class-ctf-blocks.php:96 views/admin/display.php:24
|
794 |
+
msgid "Example"
|
795 |
+
msgstr ""
|
796 |
+
|
797 |
+
#: inc/blocks/class-ctf-blocks.php:97
|
798 |
+
msgid "Apply Changes"
|
799 |
+
msgstr ""
|
800 |
+
|
801 |
+
#: inc/class-ctf-feed-locator.php:382
|
802 |
+
msgid "Content"
|
803 |
+
msgstr ""
|
804 |
+
|
805 |
+
#: inc/class-ctf-feed-locator.php:386
|
806 |
+
msgid "Header"
|
807 |
+
msgstr ""
|
808 |
+
|
809 |
+
#: inc/class-ctf-feed-locator.php:391
|
810 |
+
msgid "Sidebar"
|
811 |
+
msgstr ""
|
812 |
+
|
813 |
+
#: inc/class-ctf-feed-locator.php:396
|
814 |
+
msgid "Footer"
|
815 |
+
msgstr ""
|
816 |
+
|
817 |
+
#: inc/class-ctf-tracking.php:416
|
818 |
+
msgid "Once Weekly"
|
819 |
+
msgstr ""
|
820 |
+
|
821 |
+
#: inc/notices.php:60
|
822 |
+
msgid ""
|
823 |
+
"Heads up! It looks like you have over 500 Twitter feeds stored in your "
|
824 |
+
"WordPress database. This is typically caused by a large number of hashtag "
|
825 |
+
"feeds on your site, as the plugin permanently stores older Tweets to work "
|
826 |
+
"around Twitter's 7 day hashtag feed limit. This many caches may lead to "
|
827 |
+
"performance issues."
|
828 |
+
msgstr ""
|
829 |
+
|
830 |
+
#: inc/notices.php:63
|
831 |
+
#, php-format
|
832 |
+
msgid "For a solution, please follow the directions %shere%s."
|
833 |
+
msgstr ""
|
834 |
+
|
835 |
+
#: inc/notices.php:99
|
836 |
+
msgid "Help us improve the Custom Twitter Feed plugin"
|
837 |
+
msgstr ""
|
838 |
+
|
839 |
+
#: inc/notices.php:100
|
840 |
+
msgid ""
|
841 |
+
"Understanding how you are using the plugin allows us to further improve it. "
|
842 |
+
"Opt-in below to agree to send a weekly report of plugin usage data."
|
843 |
+
msgstr ""
|
844 |
+
|
845 |
+
#: inc/notices.php:101
|
846 |
+
msgid "More information"
|
847 |
+
msgstr ""
|
848 |
+
|
849 |
+
#: inc/notices.php:104
|
850 |
+
msgid "Yes, I'd like to help"
|
851 |
+
msgstr ""
|
852 |
+
|
853 |
+
#: inc/notices.php:105
|
854 |
+
msgid "No, thanks"
|
855 |
+
msgstr ""
|
856 |
+
|
857 |
+
#: inc/widget.php:13
|
858 |
+
msgid "Custom Twitter Feeds"
|
859 |
+
msgstr ""
|
860 |
+
|
861 |
+
#: inc/widget.php:14
|
862 |
+
msgid "Display your Twitter feed"
|
863 |
+
msgstr ""
|
864 |
+
|
865 |
+
#: inc/widget.php:40
|
866 |
+
msgid "Title:"
|
867 |
+
msgstr ""
|
868 |
+
|
869 |
+
#: views/admin/configure.php:12
|
870 |
+
msgid ""
|
871 |
+
"Next Step: <a href=\"?page=custom-twitter-feeds&tab=customize\">Customize "
|
872 |
+
"your Feed</a>"
|
873 |
+
msgstr ""
|
874 |
+
|
875 |
+
#: views/admin/customize.php:48
|
876 |
+
msgid "Enable Usage Tracking"
|
877 |
+
msgstr ""
|
878 |
+
|
879 |
+
#: views/admin/customize.php:53
|
880 |
+
msgid "What is usage tracking?"
|
881 |
+
msgstr ""
|
882 |
+
|
883 |
+
#: views/admin/customize.php:54
|
884 |
+
msgid ""
|
885 |
+
"Custom Twitter Feeds will record information and statistics about your site "
|
886 |
+
"in order for the team at Smash Balloon to learn more about how our plugins "
|
887 |
+
"are used. The plugin will never collect any sensitive information like "
|
888 |
+
"access tokens, email addresses, or user information."
|
889 |
+
msgstr ""
|
890 |
+
|
891 |
+
#: views/admin/customize.php:54
|
892 |
+
#, php-format
|
893 |
+
msgid "%sMore Information%s"
|
894 |
+
msgstr ""
|
895 |
+
|
896 |
+
#: views/admin/customize.php:61
|
897 |
+
msgid ""
|
898 |
+
"<b>Next Step:</b> <a href=\"?page=custom-twitter-feeds&tab=style\">Style "
|
899 |
+
"your Feed</a>"
|
900 |
+
msgstr ""
|
901 |
+
|
902 |
+
#: views/admin/display.php:3
|
903 |
+
msgid "Display your Feed"
|
904 |
+
msgstr ""
|
905 |
+
|
906 |
+
#: views/admin/display.php:4
|
907 |
+
msgid ""
|
908 |
+
"Copy and paste the following shortcode directly into the page, post or "
|
909 |
+
"widget where you'd like the feed to show up:"
|
910 |
+
msgstr ""
|
911 |
+
|
912 |
+
#: views/admin/display.php:5 views/admin/main.php:57
|
913 |
+
msgid "To copy, click the field then press Ctrl + C (PC) or Cmd + C (Mac)."
|
914 |
+
msgstr ""
|
915 |
+
|
916 |
+
#: views/admin/display.php:7
|
917 |
+
msgid "Multiple Feeds"
|
918 |
+
msgstr ""
|
919 |
+
|
920 |
+
#: views/admin/display.php:8
|
921 |
+
msgid ""
|
922 |
+
"If you'd like to display multiple feeds then you can set different settings "
|
923 |
+
"directly in the shortcode like so:"
|
924 |
+
msgstr ""
|
925 |
+
|
926 |
+
#: views/admin/display.php:10
|
927 |
+
msgid ""
|
928 |
+
"You can display as many different feeds as you like, on either the same page "
|
929 |
+
"or on different pages, by just using the shortcode options below. For "
|
930 |
+
"example:"
|
931 |
+
msgstr ""
|
932 |
+
|
933 |
+
#: views/admin/display.php:15
|
934 |
+
msgid "See the table below for a full list of available shortcode options:"
|
935 |
+
msgstr ""
|
936 |
+
|
937 |
+
#: views/admin/display.php:17
|
938 |
+
msgid "Pro version only"
|
939 |
+
msgstr ""
|
940 |
+
|
941 |
+
#: views/admin/display.php:22
|
942 |
+
msgid "Shortcode option"
|
943 |
+
msgstr ""
|
944 |
+
|
945 |
+
#: views/admin/display.php:23
|
946 |
+
msgid "Description"
|
947 |
+
msgstr ""
|
948 |
+
|
949 |
+
#: views/admin/display.php:27
|
950 |
+
msgid "Configure Options"
|
951 |
+
msgstr ""
|
952 |
+
|
953 |
+
#: views/admin/display.php:30
|
954 |
+
msgid ""
|
955 |
+
"A user account name/Twitter handle. This will generate a user timeline feed"
|
956 |
+
msgstr ""
|
957 |
+
|
958 |
+
#: views/admin/display.php:35
|
959 |
+
msgid "Any hashtag. This will generate a hashtag feed"
|
960 |
+
msgstr ""
|
961 |
+
|
962 |
+
#: views/admin/display.php:40
|
963 |
+
msgid ""
|
964 |
+
"A home timeline will automatically use the account attached to your access "
|
965 |
+
"token credentials"
|
966 |
+
msgstr ""
|
967 |
+
|
968 |
+
#: views/admin/display.php:45
|
969 |
+
msgid ""
|
970 |
+
"Display tweets from multiple user accounts/Twitter handles<br />Display "
|
971 |
+
"tweets from multiple hashtags/search terms<br />Display tweets that \"@\" "
|
972 |
+
"mention your account"
|
973 |
+
msgstr ""
|
974 |
+
|
975 |
+
#: views/admin/display.php:50
|
976 |
+
msgid "A user account name/Twitter handle, separated by commas"
|
977 |
+
msgstr ""
|
978 |
+
|
979 |
+
#: views/admin/display.php:55
|
980 |
+
msgid "Any search term or terms. Separate multiple terms by \"+\"."
|
981 |
+
msgstr ""
|
982 |
+
|
983 |
+
#: views/admin/display.php:60
|
984 |
+
msgid ""
|
985 |
+
"A mentions timeline will automatically use the account attached to your "
|
986 |
+
"access token credentials"
|
987 |
+
msgstr ""
|
988 |
+
|
989 |
+
#: views/admin/display.php:65
|
990 |
+
msgid "Number of Tweets to display"
|
991 |
+
msgstr ""
|
992 |
+
|
993 |
+
#: views/admin/display.php:69
|
994 |
+
msgid "Customize Options"
|
995 |
+
msgstr ""
|
996 |
+
|
997 |
+
#: views/admin/display.php:72
|
998 |
+
msgid "How posts are arranged visually in the feed."
|
999 |
+
msgstr ""
|
1000 |
+
|
1001 |
+
#: views/admin/display.php:77
|
1002 |
+
msgid "A custom CSS class added to the feed"
|
1003 |
+
msgstr ""
|
1004 |
+
|
1005 |
+
#: views/admin/display.php:82
|
1006 |
+
msgid "Custom text for the header"
|
1007 |
+
msgstr ""
|
1008 |
+
|
1009 |
+
#: views/admin/display.php:85
|
1010 |
+
msgid "Show/Hide Options"
|
1011 |
+
msgstr ""
|
1012 |
+
|
1013 |
+
#: views/admin/display.php:88
|
1014 |
+
msgid "Include a header for this feed"
|
1015 |
+
msgstr ""
|
1016 |
+
|
1017 |
+
#: views/admin/display.php:93
|
1018 |
+
msgid "Parts of the Tweet to include in the feed"
|
1019 |
+
msgstr ""
|
1020 |
+
|
1021 |
+
#: views/admin/display.php:98
|
1022 |
+
msgid "Parts of the Tweet to exclude in the feed"
|
1023 |
+
msgstr ""
|
1024 |
+
|
1025 |
+
#: views/admin/display.php:103
|
1026 |
+
msgid ""
|
1027 |
+
"Include a credit link to Custom Twitter Feeds homepage at the bottom of the "
|
1028 |
+
"feed"
|
1029 |
+
msgstr ""
|
1030 |
+
|
1031 |
+
#: views/admin/display.php:108
|
1032 |
+
msgid "Show the button that loads more tweets"
|
1033 |
+
msgstr ""
|
1034 |
+
|
1035 |
+
#: views/admin/display.php:111
|
1036 |
+
msgid "Date Options"
|
1037 |
+
msgstr ""
|
1038 |
+
|
1039 |
+
#: views/admin/display.php:114
|
1040 |
+
msgid "Number of one of the default date formats"
|
1041 |
+
msgstr ""
|
1042 |
+
|
1043 |
+
#: views/admin/display.php:119
|
1044 |
+
msgid "Manually entered custom date format"
|
1045 |
+
msgstr ""
|
1046 |
+
|
1047 |
+
#: views/admin/display.php:124
|
1048 |
+
msgid "Translation for \"m\" time unit (English minute)"
|
1049 |
+
msgstr ""
|
1050 |
+
|
1051 |
+
#: views/admin/display.php:129
|
1052 |
+
msgid "Translation for \"h\" time unit (English hour)"
|
1053 |
+
msgstr ""
|
1054 |
+
|
1055 |
+
#: views/admin/display.php:134
|
1056 |
+
msgid "Translation for English \"now\""
|
1057 |
+
msgstr ""
|
1058 |
+
|
1059 |
+
#: views/admin/display.php:137
|
1060 |
+
msgid "Link Options"
|
1061 |
+
msgstr ""
|
1062 |
+
|
1063 |
+
#: views/admin/display.php:140
|
1064 |
+
msgid "Disable the links in the text of the tweet"
|
1065 |
+
msgstr ""
|
1066 |
+
|
1067 |
+
#: views/admin/display.php:145
|
1068 |
+
msgid "Link the tweet text to Twitter"
|
1069 |
+
msgstr ""
|
1070 |
+
|
1071 |
+
#: views/admin/display.php:150
|
1072 |
+
msgid "Custom text for the Twitter link"
|
1073 |
+
msgstr ""
|
1074 |
+
|
1075 |
+
#: views/admin/display.php:155
|
1076 |
+
msgid "A multiplying factor 1-3 to help with tweet filtering"
|
1077 |
+
msgstr ""
|
1078 |
+
|
1079 |
+
#: views/admin/display.php:159
|
1080 |
+
msgid "Style Options"
|
1081 |
+
msgstr ""
|
1082 |
+
|
1083 |
+
#: views/admin/display.php:162
|
1084 |
+
msgid "The width of your feed. Any number with a unit like \"px\" or \"%\"."
|
1085 |
+
msgstr ""
|
1086 |
+
|
1087 |
+
#: views/admin/display.php:167
|
1088 |
+
msgid "The height of your feed. Any number with a unit like \"px\" or \"em\"."
|
1089 |
+
msgstr ""
|
1090 |
+
|
1091 |
+
#: views/admin/display.php:172
|
1092 |
+
msgid "Background color for the feed. Any hex color code"
|
1093 |
+
msgstr ""
|
1094 |
+
|
1095 |
+
#: views/admin/display.php:177
|
1096 |
+
msgid "Background color for each tweet. Any hex color code"
|
1097 |
+
msgstr ""
|
1098 |
+
|
1099 |
+
#: views/admin/display.php:180
|
1100 |
+
msgid "Typography Options"
|
1101 |
+
msgstr ""
|
1102 |
+
|
1103 |
+
#: views/admin/display.php:183
|
1104 |
+
msgid "Size of author info font in pixels"
|
1105 |
+
msgstr ""
|
1106 |
+
|
1107 |
+
#: views/admin/display.php:188
|
1108 |
+
msgid "Weight of author info font inherit, bold, or normal"
|
1109 |
+
msgstr ""
|
1110 |
+
|
1111 |
+
#: views/admin/display.php:193
|
1112 |
+
msgid "Size of Twitter logo in pixels"
|
1113 |
+
msgstr ""
|
1114 |
+
|
1115 |
+
#: views/admin/display.php:198
|
1116 |
+
msgid "Color of Twitter logo. Any color hex code."
|
1117 |
+
msgstr ""
|
1118 |
+
|
1119 |
+
#: views/admin/display.php:203
|
1120 |
+
msgid "Size of date info font in pixels"
|
1121 |
+
msgstr ""
|
1122 |
+
|
1123 |
+
#: views/admin/display.php:208
|
1124 |
+
msgid "Weight of date info font inherit, bold, or normal"
|
1125 |
+
msgstr ""
|
1126 |
+
|
1127 |
+
#: views/admin/display.php:213
|
1128 |
+
msgid "Size of quoted author info font in pixels"
|
1129 |
+
msgstr ""
|
1130 |
+
|
1131 |
+
#: views/admin/display.php:218
|
1132 |
+
msgid "Weight of quoted author info font inherit, bold, or normal"
|
1133 |
+
msgstr ""
|
1134 |
+
|
1135 |
+
#: views/admin/display.php:223
|
1136 |
+
msgid "Color of the text. Any color hex code"
|
1137 |
+
msgstr ""
|
1138 |
+
|
1139 |
+
#: views/admin/display.php:228
|
1140 |
+
msgid "Color of the links inside the tweet text. Any color hex code"
|
1141 |
+
msgstr ""
|
1142 |
+
|
1143 |
+
#: views/admin/display.php:233
|
1144 |
+
msgid "Size of the icons in pixels"
|
1145 |
+
msgstr ""
|
1146 |
+
|
1147 |
+
#: views/admin/display.php:238
|
1148 |
+
msgid "Color of the icons. Any color hex code"
|
1149 |
+
msgstr ""
|
1150 |
+
|
1151 |
+
#: views/admin/display.php:241
|
1152 |
+
msgid "\"Load More\" Button Options"
|
1153 |
+
msgstr ""
|
1154 |
+
|
1155 |
+
#: views/admin/display.php:244
|
1156 |
+
msgid "Color of the background of the button. Any color hex code"
|
1157 |
+
msgstr ""
|
1158 |
+
|
1159 |
+
#: views/admin/display.php:249
|
1160 |
+
msgid "Color of the text of the button. Any color hex code"
|
1161 |
+
msgstr ""
|
1162 |
+
|
1163 |
+
#: views/admin/display.php:254
|
1164 |
+
msgid "Custom text inside the button"
|
1165 |
+
msgstr ""
|
1166 |
+
|
1167 |
+
#: views/admin/display.php:261
|
1168 |
+
msgid ""
|
1169 |
+
"Need help? <a href=\"?page=custom-twitter-feeds&tab=support\">Get Support</"
|
1170 |
+
"a>."
|
1171 |
+
msgstr ""
|
1172 |
+
|
1173 |
+
#: views/admin/locator-summary.php:17
|
1174 |
+
msgid "Feed Finder Summary"
|
1175 |
+
msgstr ""
|
1176 |
+
|
1177 |
+
#: views/admin/locator-summary.php:18
|
1178 |
+
msgid ""
|
1179 |
+
"The table below shows a record of all feeds found on your site. A feed may "
|
1180 |
+
"not show up here immediately after being created."
|
1181 |
+
msgstr ""
|
1182 |
+
|
1183 |
+
#: views/admin/locator-summary.php:29
|
1184 |
+
msgid "Type"
|
1185 |
+
msgstr ""
|
1186 |
+
|
1187 |
+
#: views/admin/locator-summary.php:30
|
1188 |
+
msgid "Sources"
|
1189 |
+
msgstr ""
|
1190 |
+
|
1191 |
+
#: views/admin/locator-summary.php:31
|
1192 |
+
msgid "Shortcode"
|
1193 |
+
msgstr ""
|
1194 |
+
|
1195 |
+
#: views/admin/locator-summary.php:32
|
1196 |
+
msgid "Location"
|
1197 |
+
msgstr ""
|
1198 |
+
|
1199 |
+
#: views/admin/locator-summary.php:65
|
1200 |
+
msgid "Show"
|
1201 |
+
msgstr ""
|
1202 |
+
|
1203 |
+
#: views/admin/locator-summary.php:80
|
1204 |
+
msgid ""
|
1205 |
+
"Locations of your feeds are currently being detected. You'll see more "
|
1206 |
+
"information posted here soon!"
|
1207 |
+
msgstr ""
|
1208 |
+
|
1209 |
+
#: views/admin/main.php:10
|
1210 |
+
msgid ""
|
1211 |
+
"You're using Custom Twitter Feeds Lite. To unlock more features consider <a "
|
1212 |
+
"href=\"https://smashballoon.com/custom-twitter-feeds/?utm_campaign=twitter-"
|
1213 |
+
"free&utm_source=noticebar&utm_medium=litenotice\" target=\"_blank\" rel="
|
1214 |
+
"\"noopener noreferrer\">upgrading to Pro</a>."
|
1215 |
+
msgstr ""
|
1216 |
+
|
1217 |
+
#: views/admin/main.php:11
|
1218 |
+
msgid "Dismiss this message."
|
1219 |
+
msgstr ""
|
1220 |
+
|
1221 |
+
#: views/admin/main.php:27
|
1222 |
+
msgid "1. Configure"
|
1223 |
+
msgstr ""
|
1224 |
+
|
1225 |
+
#: views/admin/main.php:28
|
1226 |
+
msgid "2. Customize"
|
1227 |
+
msgstr ""
|
1228 |
+
|
1229 |
+
#: views/admin/main.php:29
|
1230 |
+
msgid "3. Style"
|
1231 |
+
msgstr ""
|
1232 |
+
|
1233 |
+
#: views/admin/main.php:30
|
1234 |
+
msgid "4. Display Your Feed"
|
1235 |
+
msgstr ""
|
1236 |
+
|
1237 |
+
#: views/admin/main.php:31
|
1238 |
+
msgid "Support"
|
1239 |
+
msgstr ""
|
1240 |
+
|
1241 |
+
#: views/admin/main.php:52
|
1242 |
+
msgid ""
|
1243 |
+
"Need help setting up the plugin? Check out our <a href=\"https://"
|
1244 |
+
"smashballoon.com/custom-twitter-feeds/free/?utm_campaign=twitter-"
|
1245 |
+
"free&utm_source=settings&utm_medium=helpsetup\" target=\"_blank\">setup "
|
1246 |
+
"directions</a>"
|
1247 |
+
msgstr ""
|
1248 |
+
|
1249 |
+
#: views/admin/main.php:55
|
1250 |
+
msgid "Display your feed"
|
1251 |
+
msgstr ""
|
1252 |
+
|
1253 |
+
#: views/admin/main.php:56
|
1254 |
+
msgid ""
|
1255 |
+
"Copy and paste this shortcode directly into the page, post or widget where "
|
1256 |
+
"you'd like to display the feed:"
|
1257 |
+
msgstr ""
|
1258 |
+
|
1259 |
+
#: views/admin/main.php:58
|
1260 |
+
msgid ""
|
1261 |
+
"Find out how to display <a href='?page=custom-twitter-"
|
1262 |
+
"feeds&tab=display'>multiple feeds</a>."
|
1263 |
+
msgstr ""
|
1264 |
+
|
1265 |
+
#: views/admin/style.php:50
|
1266 |
+
msgid ""
|
1267 |
+
"Next Step: <a href=\"?page=custom-twitter-feeds&tab=display\">Display your "
|
1268 |
+
"Feed</a>"
|
1269 |
+
msgstr ""
|
1270 |
+
|
1271 |
+
#: views/admin/support.php:1
|
1272 |
+
msgid "Need help?"
|
1273 |
+
msgstr ""
|
1274 |
+
|
1275 |
+
#: views/admin/support.php:3
|
1276 |
+
msgid "Check out our "
|
1277 |
+
msgstr ""
|
1278 |
+
|
1279 |
+
#: views/admin/support.php:3
|
1280 |
+
msgid "setup directions"
|
1281 |
+
msgstr ""
|
1282 |
+
|
1283 |
+
#: views/admin/support.php:3
|
1284 |
+
msgid "for a step-by-step guide on how to setup and use the plugin"
|
1285 |
+
msgstr ""
|
1286 |
+
|
1287 |
+
#: views/admin/support.php:5
|
1288 |
+
msgid "Have a problem? Submit a "
|
1289 |
+
msgstr ""
|
1290 |
+
|
1291 |
+
#: views/admin/support.php:5
|
1292 |
+
msgid "support ticket"
|
1293 |
+
msgstr ""
|
1294 |
+
|
1295 |
+
#: views/admin/support.php:5
|
1296 |
+
msgid "on our website"
|
1297 |
+
msgstr ""
|
1298 |
+
|
1299 |
+
#: views/admin/support.php:5
|
1300 |
+
msgid "Please include your <b>System Info</b> below with all support requests."
|
1301 |
+
msgstr ""
|
1302 |
+
|
1303 |
+
#: views/admin/support.php:8
|
1304 |
+
msgid "System Info"
|
1305 |
+
msgstr ""
|
1306 |
+
|
1307 |
+
#: views/admin/support.php:8
|
1308 |
+
msgid "Click the text below to select all"
|
1309 |
+
msgstr ""
|
views/admin/locator-summary.php
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Custom Feeds for Twitter Feed Locator Summary Template
|
4 |
+
* Creates the HTML for the feed locator summary
|
5 |
+
*
|
6 |
+
* @version 1.14 Custom Feeds for Twitter Pro by Smash Balloon
|
7 |
+
*
|
8 |
+
*/
|
9 |
+
// Don't load directly
|
10 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
11 |
+
die( '-1' );
|
12 |
+
}
|
13 |
+
$locator_summary = CTF_Feed_Locator::summary();
|
14 |
+
$database_settings = ctf_get_database_settings();
|
15 |
+
?>
|
16 |
+
<div class="ctf-feed-locator-summary-wrap">
|
17 |
+
<h3><?php esc_html_e( 'Feed Finder Summary', 'custom-twitter-feeds' ); ?></h3>
|
18 |
+
<p><?php esc_html_e( 'The table below shows a record of all feeds found on your site. A feed may not show up here immediately after being created.', 'custom-twitter-feeds' ); ?></p>
|
19 |
+
<?php
|
20 |
+
if ( ! empty( $locator_summary ) ) : ?>
|
21 |
+
|
22 |
+
<?php foreach ( $locator_summary as $locator_section ) :
|
23 |
+
if ( ! empty( $locator_section['results'] ) ) : ?>
|
24 |
+
<div class="ctf-single-location">
|
25 |
+
<h4><?php echo esc_html( $locator_section['label'] ); ?></h4>
|
26 |
+
<table class="widefat striped">
|
27 |
+
<thead>
|
28 |
+
<tr>
|
29 |
+
<th><?php esc_html_e( 'Type', 'custom-twitter-feeds' ); ?></th>
|
30 |
+
<th><?php esc_html_e( 'Sources', 'custom-twitter-feeds' ); ?></th>
|
31 |
+
<th><?php esc_html_e( 'Shortcode', 'custom-twitter-feeds' ); ?></th>
|
32 |
+
<th><?php esc_html_e( 'Location', 'custom-twitter-feeds' ); ?></th>
|
33 |
+
</tr>
|
34 |
+
</thead>
|
35 |
+
<tbody>
|
36 |
+
|
37 |
+
<?php
|
38 |
+
$atts_for_page = array();
|
39 |
+
foreach ( $locator_section['results'] as $result ) :
|
40 |
+
$should_add = true;
|
41 |
+
if ( ! empty( $atts_for_page[ $result['post_id'] ] ) ) {
|
42 |
+
foreach ( $atts_for_page[ $result['post_id'] ] as $existing_atts ) {
|
43 |
+
if ( $existing_atts === $result['shortcode_atts'] ) {
|
44 |
+
$should_add = false;
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
if ( $should_add ) {
|
49 |
+
$atts_for_page[ $result['post_id'] ][] = $result['shortcode_atts'];
|
50 |
+
$shortcode_atts = json_decode( $result['shortcode_atts'], true );
|
51 |
+
$shortcode_atts = is_array( $shortcode_atts ) ? $shortcode_atts : array();
|
52 |
+
include_once( CTF_URL . '/inc/CtfFeed.php' );
|
53 |
+
|
54 |
+
$twitter_feed = CtfFeed::init( $shortcode_atts );
|
55 |
+
$settings = $twitter_feed->feed_options;
|
56 |
+
|
57 |
+
$display_terms = str_replace( ' -filter:retweets', '', $settings['feed_term'] );
|
58 |
+
$comma_separated = $display_terms;
|
59 |
+
$display = $comma_separated;
|
60 |
+
if ( strlen( $comma_separated ) > 31 ) {
|
61 |
+
$display = '<span class="ctf-condensed-wrap">' . substr( $comma_separated, 0, 30 ) . '<a class="ctf-locator-more" href="JavaScript:void(0);">...</a></span>';
|
62 |
+
$comma_separated = '<span class="ctf-full-wrap">' . esc_html( $comma_separated ) . '</span>';
|
63 |
+
} else {
|
64 |
+
$comma_separated = '';
|
65 |
+
}
|
66 |
+
$type = isset( $settings['type'] ) ? $settings['type'] : 'usertimeline';
|
67 |
+
switch ( $type ) {
|
68 |
+
case 'usertimeline':
|
69 |
+
$type = __( 'User Timeline', 'custom-twitter-feeds' );
|
70 |
+
break;
|
71 |
+
case 'hometimeline':
|
72 |
+
$type = __( 'Home Timeline', 'custom-twitter-feeds' );
|
73 |
+
break;
|
74 |
+
case 'mentionstimeline':
|
75 |
+
$type = __( 'Mentions Timeline', 'custom-twitter-feeds' );
|
76 |
+
break;
|
77 |
+
case 'search':
|
78 |
+
$type = __( 'Search/Hashtag', 'custom-twitter-feeds' );
|
79 |
+
break;
|
80 |
+
case 'hashtag':
|
81 |
+
$type = __( 'Search/Hashtag', 'custom-twitter-feeds' );
|
82 |
+
break;
|
83 |
+
case 'lists':
|
84 |
+
$type = __( 'Lists', 'custom-twitter-feeds' );
|
85 |
+
break;
|
86 |
+
} $full_shortcode_string = '[custom-twitter-feeds';
|
87 |
+
foreach ( $shortcode_atts as $key => $value ) {
|
88 |
+
$full_shortcode_string .= ' ' . esc_html( $key ) . '="' . esc_html( $value ) . '"';
|
89 |
+
}
|
90 |
+
$full_shortcode_string .= ']';
|
91 |
+
?>
|
92 |
+
<tr>
|
93 |
+
<td><?php echo esc_html( $type ); ?></td>
|
94 |
+
<td><?php echo $display . $comma_separated; ?></td>
|
95 |
+
<td>
|
96 |
+
<span class="ctf-condensed-wrap"><a class="ctf-locator-more" href="JavaScript:void(0);"><?php esc_html_e( 'Show', 'custom-twitter-feeds' ); ?></a></span>
|
97 |
+
<span class="ctf-full-wrap"><?php echo $full_shortcode_string; ?></span>
|
98 |
+
</td>
|
99 |
+
<td><a href="<?php echo esc_url( get_the_permalink( $result['post_id'] ) ); ?>" target="_blank" rel="noopener"><?php echo esc_html( get_the_title( $result['post_id'] ) ); ?></a></td>
|
100 |
+
</tr>
|
101 |
+
<?php
|
102 |
+
}
|
103 |
+
|
104 |
+
endforeach; ?>
|
105 |
+
|
106 |
+
|
107 |
+
</tbody>
|
108 |
+
</table>
|
109 |
+
</div>
|
110 |
+
|
111 |
+
<?php endif;
|
112 |
+
endforeach;
|
113 |
+
else: ?>
|
114 |
+
<p><?php esc_html_e( 'Locations of your feeds are currently being detected. You\'ll see more information posted here soon!', 'custom-twitter-feeds' ); ?></p>
|
115 |
+
<?php endif; ?>
|
116 |
+
</div>
|
views/admin/main.php
CHANGED
@@ -29,6 +29,8 @@
|
|
29 |
<a href="admin.php?page=custom-twitter-feeds&tab=style" class="nav-tab <?php if ( $active_tab == 'style' ){ echo 'nav-tab-active'; } ?>"><?php _e( '3. Style', 'ctf' ); ?></a>
|
30 |
<a href="admin.php?page=custom-twitter-feeds&tab=display" class="nav-tab <?php if ( $active_tab == 'display' ){ echo 'nav-tab-active'; } ?>"><?php _e( '4. Display Your Feed', 'ctf' ); ?></a>
|
31 |
<a href="admin.php?page=custom-twitter-feeds&tab=support" class="nav-tab <?php if ( $active_tab == 'support' ){ echo 'nav-tab-active'; } ?>"><?php _e( 'Support', 'ctf' ); ?></a>
|
|
|
|
|
32 |
</h2>
|
33 |
<?php
|
34 |
|
@@ -41,8 +43,12 @@
|
|
41 |
require_once CTF_URL . 'views/admin/configure.php';
|
42 |
} elseif ( $active_tab === 'display' ) {
|
43 |
require_once CTF_URL .'views/admin/display.php';
|
|
|
|
|
44 |
} elseif ( $active_tab === 'support' ) {
|
45 |
require_once CTF_URL .'views/admin/support.php';
|
|
|
|
|
46 |
}
|
47 |
}
|
48 |
?>
|
29 |
<a href="admin.php?page=custom-twitter-feeds&tab=style" class="nav-tab <?php if ( $active_tab == 'style' ){ echo 'nav-tab-active'; } ?>"><?php _e( '3. Style', 'ctf' ); ?></a>
|
30 |
<a href="admin.php?page=custom-twitter-feeds&tab=display" class="nav-tab <?php if ( $active_tab == 'display' ){ echo 'nav-tab-active'; } ?>"><?php _e( '4. Display Your Feed', 'ctf' ); ?></a>
|
31 |
<a href="admin.php?page=custom-twitter-feeds&tab=support" class="nav-tab <?php if ( $active_tab == 'support' ){ echo 'nav-tab-active'; } ?>"><?php _e( 'Support', 'ctf' ); ?></a>
|
32 |
+
<a href="admin.php?page=custom-twitter-feeds&tab=more" class="nav-tab <?php echo $active_tab == 'more' ? 'nav-tab-active' : ''; ?>"><?php _e('More Social Feeds', 'ctf'); ?>
|
33 |
+
</a>
|
34 |
</h2>
|
35 |
<?php
|
36 |
|
43 |
require_once CTF_URL . 'views/admin/configure.php';
|
44 |
} elseif ( $active_tab === 'display' ) {
|
45 |
require_once CTF_URL .'views/admin/display.php';
|
46 |
+
} elseif ( $active_tab === 'allfeeds' ) {
|
47 |
+
require_once CTF_URL .'views/admin/locator-summary.php';
|
48 |
} elseif ( $active_tab === 'support' ) {
|
49 |
require_once CTF_URL .'views/admin/support.php';
|
50 |
+
} elseif ( $active_tab === 'more' ) {
|
51 |
+
require_once CTF_URL .'views/admin/more-social-feeds.php';
|
52 |
}
|
53 |
}
|
54 |
?>
|
views/admin/more-social-feeds.php
ADDED
@@ -0,0 +1,256 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<div class="ctf_more_plugins" id="ctf-admin-about">
|
2 |
+
|
3 |
+
<div class="ctf-more-plugins-intro">
|
4 |
+
<h3><?php _e( "Here's some more <span>free</span> plugins you might like!", 'ctf' ); ?></h3>
|
5 |
+
<p><?php _e( "As you're already using one of our free plugins we thought we'd suggest some others you might like to. Check out our other free plugins below:", 'ctf' ); ?></p>
|
6 |
+
</div>
|
7 |
+
|
8 |
+
<?php function get_am_plugins() {
|
9 |
+
|
10 |
+
$images_url = CTF_PLUGIN_URL . 'img/about/';
|
11 |
+
|
12 |
+
return array(
|
13 |
+
'instagram-feed/instagram-feed.php' => array(
|
14 |
+
'icon' => $images_url . 'plugin-if.png',
|
15 |
+
'name' => esc_html__( 'Instagram Feed', 'ctf' ),
|
16 |
+
'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.', 'ctf' ),
|
17 |
+
'url' => 'https://downloads.wordpress.org/plugin/instagram-feed.zip',
|
18 |
+
'pro' => array(
|
19 |
+
'plug' => 'instagram-feed-pro/instagram-feed.php',
|
20 |
+
'icon' => $images_url . 'plugin-if.png',
|
21 |
+
'name' => esc_html__( 'Instagram Feed Pro', 'ctf' ),
|
22 |
+
'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.', 'ctf' ),
|
23 |
+
'url' => 'https://smashballoon.com/instagram-feed/?utm_campaign=facebook-free&utm_source=cross&utm_medium=ctfinstaller',
|
24 |
+
'act' => 'go-to-url',
|
25 |
+
),
|
26 |
+
),
|
27 |
+
'custom-facebook-feed/custom-facebook-feed.php' => array(
|
28 |
+
'icon' => $images_url . 'plugin-fb.png',
|
29 |
+
'name' => esc_html__( 'Custom Facebook Feed', 'ctf' ),
|
30 |
+
'desc' => esc_html__( 'Custom Facebook Feed makes displaying your Facebook posts easy. Keep your site visitors informed and increase engagement with your Facebook page by displaying a feed on your website.', 'ctf' ),
|
31 |
+
'url' => 'https://downloads.wordpress.org/plugin/custom-facebook-feed.zip',
|
32 |
+
'pro' => array(
|
33 |
+
'plug' => 'custom-facebook-feed-pro/custom-facebook-feed.php',
|
34 |
+
'icon' => $images_url . 'plugin-fb.png',
|
35 |
+
'name' => esc_html__( 'Custom Facebook Feed Pro', 'ctf' ),
|
36 |
+
'desc' => esc_html__( 'Custom Facebook Feed makes displaying your Facebook posts easy. Keep your site visitors informed and increase engagement with your Facebook page by displaying a feed on your website.', 'ctf' ),
|
37 |
+
'url' => 'https://smashballoon.com/custom-facebook-feed/?utm_campaign=instagram-free&utm_source=cross&utm_medium=ctfinstaller',
|
38 |
+
'act' => 'go-to-url',
|
39 |
+
)
|
40 |
+
),
|
41 |
+
|
42 |
+
'custom-twitter-feeds/custom-twitter-feed.php' => array(
|
43 |
+
'icon' => $images_url . 'plugin-tw.jpg',
|
44 |
+
'name' => esc_html__( 'Custom Twitter Feeds', 'ctf' ),
|
45 |
+
'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.', 'ctf' ),
|
46 |
+
'url' => 'https://downloads.wordpress.org/plugin/custom-twitter-feeds.zip',
|
47 |
+
'pro' => array(
|
48 |
+
'plug' => 'custom-twitter-feeds-pro/custom-twitter-feed.php',
|
49 |
+
'icon' => $images_url . 'plugin-tw.jpg',
|
50 |
+
'name' => esc_html__( 'Custom Twitter Feeds Pro', 'ctf' ),
|
51 |
+
'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.', 'ctf' ),
|
52 |
+
'url' => 'https://smashballoon.com/custom-twitter-feeds/?utm_campaign=instagram-free&utm_source=cross&utm_medium=ctfinstaller',
|
53 |
+
'act' => 'go-to-url',
|
54 |
+
)
|
55 |
+
),
|
56 |
+
|
57 |
+
'feeds-for-youtube/youtube-feed.php' => array(
|
58 |
+
'icon' => $images_url . 'plugin-yt.png',
|
59 |
+
'name' => esc_html__( 'Feeds for YouTube', 'ctf' ),
|
60 |
+
'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.', 'ctf' ),
|
61 |
+
'url' => 'https://downloads.wordpress.org/plugin/feeds-for-youtube.zip',
|
62 |
+
'pro' => array(
|
63 |
+
'plug' => 'youtube-feed-pro/youtube-feed.php',
|
64 |
+
'icon' => $images_url . 'plugin-yt.png',
|
65 |
+
'name' => esc_html__( 'Feeds for YouTube Pro', 'ctf' ),
|
66 |
+
'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.', 'ctf' ),
|
67 |
+
'url' => 'https://smashballoon.com/youtube-feed/?utm_campaign=instagram-free&utm_source=cross&utm_medium=sbyinstaller',
|
68 |
+
'act' => 'go-to-url',
|
69 |
+
)
|
70 |
+
),
|
71 |
+
);
|
72 |
+
|
73 |
+
}
|
74 |
+
|
75 |
+
function output_about_addons() {
|
76 |
+
|
77 |
+
if ( version_compare( PHP_VERSION, '5.3.0' ) <= 0
|
78 |
+
|| version_compare( get_bloginfo('version'), '4.6' , '<' ) ){
|
79 |
+
return;
|
80 |
+
}
|
81 |
+
|
82 |
+
$all_plugins = get_plugins();
|
83 |
+
$am_plugins = get_am_plugins();
|
84 |
+
$has_all_plugins = true;
|
85 |
+
|
86 |
+
?>
|
87 |
+
<div id="ctf-admin-addons">
|
88 |
+
<div class="addons-container">
|
89 |
+
<?php
|
90 |
+
foreach ( $am_plugins as $plugin => $details ) :
|
91 |
+
|
92 |
+
$free_only = true;
|
93 |
+
$plugin_data = get_the_plugin_data( $plugin, $details, $all_plugins, $free_only );
|
94 |
+
$plugin_slug = strtolower( str_replace( ' ', '_', $plugin_data['details']['name'] ) );
|
95 |
+
|
96 |
+
//Only show the plugin if both free/pro versions aren't already active
|
97 |
+
isset( $plugin_data['details']['plug'] ) ? $pro_plugin_source = $plugin_data['details']['plug'] : $pro_plugin_source = '';
|
98 |
+
|
99 |
+
if( !is_plugin_active( $plugin ) && !is_plugin_active( $pro_plugin_source ) ){
|
100 |
+
$has_all_plugins = false;
|
101 |
+
?>
|
102 |
+
<div class="addon-container" id="install_<?php echo $plugin_slug; ?>">
|
103 |
+
<div class="addon-item">
|
104 |
+
<div class="details ctf-clear">
|
105 |
+
<img src="<?php echo esc_url( $plugin_data['details']['icon'] ); ?>">
|
106 |
+
<h5 class="addon-name">
|
107 |
+
<?php echo esc_html( $plugin_data['details']['name'] ); ?>
|
108 |
+
</h5>
|
109 |
+
<p class="addon-desc">
|
110 |
+
<?php echo wp_kses_post( $plugin_data['details']['desc'] ); ?>
|
111 |
+
</p>
|
112 |
+
</div>
|
113 |
+
<div class="actions ctf-clear">
|
114 |
+
<div class="status">
|
115 |
+
<strong>
|
116 |
+
<?php _e( 'Price:', 'ctf' );
|
117 |
+
echo ' <span style="color: green;">';
|
118 |
+
_e( 'Free', 'ctf' );
|
119 |
+
echo '</span>'; ?>
|
120 |
+
</strong>
|
121 |
+
</div>
|
122 |
+
<div class="action-button">
|
123 |
+
<button class="<?php echo esc_attr( $plugin_data['action_class'] ); ?>" data-plugin="<?php echo esc_attr( $plugin_data['plugin_src'] ); ?>" data-type="plugin">
|
124 |
+
<?php echo wp_kses_post( $plugin_data['action_text'] ); ?>
|
125 |
+
</button>
|
126 |
+
</div>
|
127 |
+
</div>
|
128 |
+
</div>
|
129 |
+
</div>
|
130 |
+
|
131 |
+
<?php } ?>
|
132 |
+
|
133 |
+
<?php endforeach;
|
134 |
+
|
135 |
+
if( $has_all_plugins == true ){ ?>
|
136 |
+
|
137 |
+
<style type="text/css">.ctf-more-plugins-intro{display:none;}</style>
|
138 |
+
<h2><?php _e( 'You already have all of our free plugins. Awesome!', 'ctf' ); ?></h2>
|
139 |
+
|
140 |
+
<p><?php _e( 'Thank you so much for using our plugins. We appreciate you trusting us to power your social media feeds.', 'ctf' ); ?></p>
|
141 |
+
<p><?php _e( 'If you want to support us in our mission to make bringing social media content to your website both easy and reliable, then consider upgrading to one of our Pro plugins.', 'ctf' ); ?></p>
|
142 |
+
|
143 |
+
<div class="ctf-cols-4">
|
144 |
+
<?php //Show a list of Pro plugins which aren't currently active ?>
|
145 |
+
<?php foreach ( $am_plugins as $plugin => $details ) :
|
146 |
+
|
147 |
+
$plugin_data = get_the_plugin_data( $plugin, $details, $all_plugins );
|
148 |
+
$plugin_slug = strtolower( str_replace( ' ', '_', $plugin_data['details']['name'] ) );
|
149 |
+
|
150 |
+
isset( $plugin_data['details']['plug'] ) ? $pro_plugin_source = $plugin_data['details']['plug'] : $pro_plugin_source = '';
|
151 |
+
if( !is_plugin_active( $pro_plugin_source ) ){
|
152 |
+
?>
|
153 |
+
|
154 |
+
<div class="addon-container" id="install_<?php echo $plugin_slug; ?>">
|
155 |
+
<div class="addon-item">
|
156 |
+
<div class="details ctf-clear">
|
157 |
+
<img src="<?php echo esc_url( $plugin_data['details']['icon'] ); ?>">
|
158 |
+
<h5 class="addon-name">
|
159 |
+
<?php echo esc_html( $plugin_data['details']['name'] ); ?>
|
160 |
+
</h5>
|
161 |
+
<p class="addon-desc">
|
162 |
+
<?php echo wp_kses_post( $plugin_data['details']['desc'] ); ?>
|
163 |
+
</p>
|
164 |
+
</div>
|
165 |
+
<div class="actions ctf-clear">
|
166 |
+
<div class="action-button">
|
167 |
+
<a href="<?php echo esc_attr( $details['pro']['url'] ); ?>" target="_blank" class="status-go-to-url button button-primary">
|
168 |
+
<?php _e( 'Upgrade to Pro', 'ctf' ); ?>
|
169 |
+
</a>
|
170 |
+
</div>
|
171 |
+
</div>
|
172 |
+
</div>
|
173 |
+
</div>
|
174 |
+
|
175 |
+
<?php } ?>
|
176 |
+
|
177 |
+
<?php endforeach; ?>
|
178 |
+
</div>
|
179 |
+
|
180 |
+
<?php } ?>
|
181 |
+
|
182 |
+
</div>
|
183 |
+
</div>
|
184 |
+
<?php
|
185 |
+
}
|
186 |
+
|
187 |
+
|
188 |
+
function get_the_plugin_data( $plugin, $details, $all_plugins, $free_only = false ) {
|
189 |
+
|
190 |
+
$have_pro = ( ! empty( $details['pro'] ) && ! empty( $details['pro']['plug'] ) );
|
191 |
+
$show_pro = false;
|
192 |
+
|
193 |
+
$plugin_data = array();
|
194 |
+
|
195 |
+
if( $free_only ) $have_pro = false;
|
196 |
+
|
197 |
+
if ( $have_pro ) {
|
198 |
+
if ( array_key_exists( $plugin, $all_plugins ) ) {
|
199 |
+
if ( is_plugin_active( $plugin ) ) {
|
200 |
+
$show_pro = true;
|
201 |
+
}
|
202 |
+
}
|
203 |
+
if ( array_key_exists( $details['pro']['plug'], $all_plugins ) ) {
|
204 |
+
$show_pro = true;
|
205 |
+
}
|
206 |
+
if ( $show_pro ) {
|
207 |
+
$plugin = $details['pro']['plug'];
|
208 |
+
$details = $details['pro'];
|
209 |
+
}
|
210 |
+
}
|
211 |
+
|
212 |
+
if( $free_only ) $show_pro = false;
|
213 |
+
|
214 |
+
if ( array_key_exists( $plugin, $all_plugins ) ) {
|
215 |
+
if ( is_plugin_active( $plugin ) ) {
|
216 |
+
// Status text/status.
|
217 |
+
$plugin_data['status_class'] = 'status-active';
|
218 |
+
$plugin_data['status_text'] = esc_html__( 'Active', 'ctf' );
|
219 |
+
// Button text/status.
|
220 |
+
$plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-secondary disabled';
|
221 |
+
$plugin_data['action_text'] = esc_html__( 'Activated', 'ctf' );
|
222 |
+
$plugin_data['plugin_src'] = esc_attr( $plugin );
|
223 |
+
} else {
|
224 |
+
// Status text/status.
|
225 |
+
$plugin_data['status_class'] = 'status-inactive';
|
226 |
+
$plugin_data['status_text'] = esc_html__( 'Inactive', 'ctf' );
|
227 |
+
// Button text/status.
|
228 |
+
$plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-secondary';
|
229 |
+
$plugin_data['action_text'] = esc_html__( 'Activate', 'ctf' );
|
230 |
+
$plugin_data['plugin_src'] = esc_attr( $plugin );
|
231 |
+
}
|
232 |
+
} else {
|
233 |
+
// Doesn't exist, install.
|
234 |
+
// Status text/status.
|
235 |
+
$plugin_data['status_class'] = 'status-download';
|
236 |
+
if ( isset( $details['act'] ) && 'go-to-url' === $details['act'] ) {
|
237 |
+
$plugin_data['status_class'] = 'status-go-to-url';
|
238 |
+
}
|
239 |
+
$plugin_data['status_text'] = esc_html__( 'Not Installed', 'ctf' );
|
240 |
+
// Button text/status.
|
241 |
+
$plugin_data['action_class'] = $plugin_data['status_class'] . ' button button-primary';
|
242 |
+
$plugin_data['action_text'] = esc_html__( 'Install Plugin', 'ctf' );
|
243 |
+
$plugin_data['plugin_src'] = esc_url( $details['url'] );
|
244 |
+
}
|
245 |
+
|
246 |
+
$plugin_data['details'] = $details;
|
247 |
+
|
248 |
+
return $plugin_data;
|
249 |
+
}
|
250 |
+
|
251 |
+
|
252 |
+
output_about_addons();
|
253 |
+
|
254 |
+
?>
|
255 |
+
<style>.ctf_quickstart, .ctf-pro-notice, .ctf_plugins_promo, .ctf_share_plugin{ display: none !Important; }</style>
|
256 |
+
</div>
|
views/admin/social-wall.php
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php ( is_plugin_active( 'social-wall/social-wall.php' ) ) ? $ctf_sw_active = true : $ctf_sw_active = false; ?>
|
2 |
+
|
3 |
+
<div id="ctf-admin" class="wrap sw-landing-page">
|
4 |
+
|
5 |
+
<?php $plus_svg = '<span class="ctf-sb-plus"><svg aria-hidden="true" focusable="false" data-prefix="fal" data-icon="plus" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" class="svg-inline--fa fa-plus fa-w-12 fa-2x"><path fill="currentColor" d="M376 232H216V72c0-4.42-3.58-8-8-8h-32c-4.42 0-8 3.58-8 8v160H8c-4.42 0-8 3.58-8 8v32c0 4.42 3.58 8 8 8h160v160c0 4.42 3.58 8 8 8h32c4.42 0 8-3.58 8-8V280h160c4.42 0 8-3.58 8-8v-32c0-4.42-3.58-8-8-8z" class=""></path></svg></span>'; ?>
|
6 |
+
|
7 |
+
<div class="ctf-sw-icons">
|
8 |
+
|
9 |
+
<span style="display: inline-block; padding: 0 0 12px 0; width: 360px; max-width: 100%;">
|
10 |
+
<svg viewBox="0 0 9161 1878" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2">
|
11 |
+
<path d="M671.51192 492.98498c-131.56765-59.12206-268.60859-147.41608-396.53319-188.5154 45.4516 108.39585 83.81326 223.88002 123.5099 338.03081-79.17849 59.49897-171.6647 105.68858-260.02357 156.01204C213.65642 872.8361 320.1446 915.85885 404.9893 980.52836c-67.96118 83.8619-201.48512 171.0179-234.02089 247.0198 140.6921-17.62678 304.63665-46.21028 435.53762-52.00414 28.76425 144.58318 43.59867 303.0974 84.5075 435.5368 60.92028-175.2656 116.0013-356.3729 188.5158-520.0447 111.90636 46.28566 248.28994 102.72599 357.52876 130.01178-76.6463-107.53462-146.59336-221.76932-214.51645-338.02878 100.51155-72.83872 202.17166-144.52441 299.02516-221.02077-136.89504-12.61227-278.73407-20.28825-422.53587-25.99863-22.85286-148.332-16.84825-325.5158-52.00496-461.53949-53.19323 111.48812-115.96685 213.3914-175.51405 318.52475m65.00509 1228.60643c-18.07949 77.37581 41.48757 109.11319 32.50294 156.01204-58.81404-20.26799-103.0575-30.6796-182.01552-19.50201 2.47017-60.37032 56.76657-68.90954 45.50428-143.0107-841.40803-95.6632-843.09804-1616.06909-6.50107-1709.64388C1672.04777-111.55711 1704.8713 1694.70523 736.517 1721.5914" fill="#e34f0e"/>
|
12 |
+
<path d="M847.02597 174.46023c35.15671 136.0237 29.1521 313.20749 52.00455 461.53544 143.80221 5.71443 285.63962 13.38636 422.53628 26.00268-96.8531 76.49636-198.51483 148.18205-299.02556 221.01874 67.92349 116.2623 137.87014 230.49416 214.51847 338.03-109.24085-27.2866-245.62443-83.72572-357.5308-130.0126-72.51448 163.67262-127.5955 344.77992-188.51538 520.04553-40.90924-132.4394-55.74325-290.95364-84.5079-435.53681-130.90057 5.79548-294.84472 34.37736-435.53722 52.00415 32.53577-76.0007 166.0589-163.15589 234.02008-247.02021-84.8451-64.67032-191.33207-107.69066-266.52343-182.01472 88.35886-50.32346 180.84346-96.51307 260.02276-156.01609-39.69705-114.14674-78.05668-229.63091-123.50868-338.02675C402.9013 345.5689 539.94427 433.86292 671.51192 492.98498c59.5468-105.13335 122.32082-207.03663 175.51405-318.52475" fill="#fff"/>
|
13 |
+
<path d="M1782.27033 1236.51938c41.18267 21.61921 126.79927 44.31938 214.58338 44.31938 213.49962 0 311.03752-107.01507 311.03752-232.40646 0-101.61027-58.52274-171.87269-189.65702-220.5159-92.11913-33.50977-131.13429-48.6432-131.13429-85.39586 0-32.4288 32.51263-54.04801 92.11913-54.04801 72.61154 0 126.79927 20.53824 158.22814 34.59073l41.18267-155.65828c-47.6852-21.6192-110.54295-37.83361-197.2433-37.83361-184.23826 0-293.69746 99.44834-293.69746 228.08262 0 108.09602 82.36534 176.19652 205.91335 219.43493 82.36533 28.10497 114.87797 48.64321 114.87797 84.3149 0 36.75265-32.51264 59.45282-99.70541 59.45282-73.6953 0-145.2231-22.70017-189.65703-45.40034l-36.84765 161.06308zM3019.37602 1270.02915h189.65702l-36.84765-728.56722h-256.8498l-55.27148 194.57285c-21.67508 76.74818-45.51768 179.4394-66.10902 268.07815h-3.25126c-15.17256-88.63875-36.84765-185.92517-57.43898-266.99719l-47.6852-195.6538h-263.35233l-45.51768 728.56721h179.90323l11.9213-260.51142c3.25127-83.23394 6.50253-191.32997 10.83755-294.0212h2.1675c17.34008 99.44835 39.01517 207.54438 58.52274 286.45448l60.69025 252.9447h152.80938l72.61154-254.02566c23.8426-79.99106 54.18773-189.16805 76.94657-285.37352h3.25126c0 113.50083 1.08376 210.78726 4.33502 294.0212l8.67004 260.51142zM3699.9738 1101.39935l46.60144 168.6298h211.33211l-217.83464-728.56722H3478.8879l-211.33211 728.56722h202.66208l41.18267-168.6298h188.57327zm-162.56317-143.76772l31.42888-130.79619c9.7538-41.07649 20.59134-101.61026 31.42888-143.76771h2.1675c11.9213 42.15745 26.01012 102.69122 36.84766 143.76771l33.59639 130.7962h-135.4693zM4016.4301 1236.51938c41.18266 21.61921 126.79926 44.31938 214.58337 44.31938 213.49962 0 311.03752-107.01507 311.03752-232.40646 0-101.61027-58.52274-171.87269-189.65702-220.5159-92.11913-33.50977-131.1343-48.6432-131.1343-85.39586 0-32.4288 32.51264-54.04801 92.11914-54.04801 72.61154 0 126.79926 20.53824 158.22814 34.59073l41.18267-155.65828c-47.6852-21.6192-110.54295-37.83361-197.2433-37.83361-184.23826 0-293.69746 99.44834-293.69746 228.08262 0 108.09602 82.36534 176.19652 205.91335 219.43493 82.36533 28.10497 114.87797 48.64321 114.87797 84.3149 0 36.75265-32.51264 59.45282-99.70541 59.45282-73.6953 0-145.2231-22.70017-189.65703-45.40034l-36.84765 161.06308zM4623.27688 541.46193v728.56722h196.15955V981.41276h237.34222v288.6164h196.15955V541.46192h-196.15955v269.1591h-237.34222v-269.1591h-196.15955z" fill="#282828" fill-rule="nonzero"/>
|
14 |
+
<g>
|
15 |
+
<path d="M6900.00785 293.7053c5.29-14.371 11.90999-24.77099 19.84998-31.19998 7.94-6.429 16.07-9.644 24.38998-9.644 8.32 0 15.7 2.08 22.12999 6.241 6.43 4.16 10.39999 9.265 11.90999 15.31599 2.27 43.86896 4.16 92.65493 5.67 146.35689 1.51 53.70296 2.65 109.86291 3.4 168.48187.76 58.61796 1.52 118.74891 2.26999 180.39386.76 61.64396 1.33 122.71991 1.71 183.22987.37 60.50695.56 119.1269.56 175.85686 0 56.72996.38 109.28992 1.14 157.69988-3.78 12.1-10.59 20.98999-20.41999 26.65998-9.83999 5.68-19.85998 8.14-30.06997 7.38-10.21-.76-19.28999-4.73-27.22998-11.91-7.94-7.18999-11.91-17.58998-11.91-31.19997l-3.4-983.66226zm173.57987 0c5.3-14.371 11.90999-24.77099 19.85998-31.19998 7.94-6.429 16.06999-9.644 24.38998-9.644 8.32 0 15.69 2.08 22.11999 6.241 6.43 4.16 10.39999 9.265 11.91999 15.31599 2.27 43.86896 4.15 92.65493 5.67 146.35689 1.51 53.70296 2.64 109.86291 3.4 168.48187.76 58.61796 1.51999 118.74891 2.26999 180.39386.76 61.64396 1.33 122.71991 1.7 183.22987.38 60.50695.57 119.1269.57 175.85686 0 56.72996.38 109.28992 1.13 157.69988-3.78 12.1-10.59 20.98999-20.41999 26.65998-9.82999 5.68-19.84998 8.14-30.05998 7.38-10.20999-.76-19.28998-4.73-27.22997-11.91-7.94-7.18999-11.92-17.58998-11.92-31.19997l-3.4-983.66226zm-419.49969 980.25225c-6.81-4.54-13.60999-12.66999-20.41998-24.38998-6.81-11.71999-13.61-24.57998-20.41999-38.57997-6.81-13.98999-13.61999-28.16998-20.41998-42.53997-6.81-14.36999-13.99999-26.84998-21.55998-37.43997-7.56-10.58999-15.51-18.33998-23.82999-23.25998-8.31999-4.92-17.38998-4.73-27.22998.57-15.11998 24.95998-30.43997 49.15996-45.93996 72.60994-15.50999 23.44999-32.52998 43.48997-51.05996 60.12996-18.52999 16.63999-39.70997 28.35998-63.52995 35.16997-23.82999 6.81-51.62997 6.05-83.38994-2.27-31.01998-8.31999-56.16996-24.57998-75.44994-48.77996-19.28999-24.20998-33.65998-52.94996-43.10997-86.22993-9.46-33.27998-14.19-69.77995-14.19-109.48992 0-39.70397 4.35-79.22394 13.05-118.55591 8.7-39.33097 21.36998-77.14894 38.00997-113.45492 16.63999-36.30597 36.67997-67.50595 60.12995-93.60093 23.44999-26.09398 50.10997-45.75996 79.98994-58.99595 29.86998-13.237 62.20996-16.82999 96.99993-10.779 32.51998 6.051 59.36996 19.855 80.54994 41.41198 21.17998 21.55598 38.76997 47.65096 52.75996 78.28394 13.98999 30.63297 24.95998 64.47995 32.89998 101.54192 7.93999 37.06197 15.12998 74.12394 21.55998 111.18692 6.43 37.06197 12.85999 72.42194 19.28999 106.08192 6.41999 33.65997 14.92998 62.58995 25.51998 86.78993 10.58999 24.20998 24.01998 41.97997 40.27997 53.32996 16.25998 11.34 37.62997 12.84999 64.09995 4.53 30.25997-31.00998 54.45996-51.61996 72.60994-61.82996 18.15999-10.20999 31.38998-13.60999 39.70997-10.20999 8.32 3.4 11.91 11.91 10.78 25.52998-1.13 13.61-6.05 28.73998-14.75 45.37997-8.69999 16.63999-20.60998 32.89997-35.73997 48.77996-15.11999 15.88999-32.32997 27.98998-51.61996 36.30997-19.28998 8.32-40.46997 11.16-63.52995 8.51-23.06998-2.65-47.08997-14.56-72.04995-35.73998zm2413.83818 6.81c-2.26-39.32997-5.67-82.25994-10.20999-128.7699-4.53-46.51997-10.58-92.84993-18.14999-138.9899-7.55999-46.13396-16.63998-89.81493-27.22998-131.0369-10.58999-41.22197-23.06998-76.01494-37.43997-104.37892-14.36999-28.36298-30.81997-48.21797-49.34996-59.56396-18.52999-11.34499-39.51997-9.83199-62.96995 4.539-23.44998 14.37099-49.34997 43.30197-77.71994 86.79293-28.35998 43.49097-59.93996 106.08092-94.72993 187.76786-3.03 6.05-7 15.88-11.91 29.49998-4.91999 13.60999-10.20999 28.92998-15.88998 45.94997-5.67 17.01998-11.91 34.97997-18.71999 53.88996-6.8 18.90998-13.03999 37.05997-18.71998 54.45995-5.67 17.4-10.78 32.89998-15.31 46.50997-4.53999 13.61999-7.56999 23.82998-9.07998 30.63998-6.05 15.11998-13.62 23.62998-22.68999 25.52998-9.08 1.89-18.14998.18-27.22998-5.11-9.07999-5.3-17.39998-12.47999-24.95998-21.55998-7.56-9.07-12.09999-17.01999-13.61999-23.81999 6.81-26.47998 12.86-55.96995 18.15999-88.49993 5.29-32.51997 9.45-69.57995 12.47999-111.17991 3.02-41.60397 4.16-88.68794 3.4-141.2559-.76-52.56696-4.54-112.13091-11.35-178.69186 8.32-17.39599 16.65-27.03998 24.96999-28.93098 8.31999-1.891 16.63998.756 24.94998 7.942 8.32 7.18499 16.07999 17.77498 23.25998 31.76697 7.19 13.99299 13.61999 28.17498 19.28999 42.54597 5.67 14.37099 10.20999 27.79698 13.61998 40.27697 3.4 12.47999 5.1 20.61098 5.1 24.39298 16.63999-14.371 31.95998-32.71298 45.94997-55.02596 13.98999-22.31298 28.35997-44.62597 43.10996-66.93895 14.75-22.31298 30.82998-42.16697 48.21997-59.56396 17.39998-17.39598 38.19997-27.98597 62.39995-31.76697 49.91996-9.077 92.27993-3.215 127.0699 17.58499 34.79998 20.79998 63.34996 50.67696 85.65994 89.62993 22.30998 38.95297 39.32997 84.14593 51.05996 135.5789 11.72 51.43296 20.03999 103.05492 24.95998 154.86588 4.91 51.80996 6.99 101.34992 6.24 148.62989-.76 47.26996-2.65 86.02993-5.68 116.2899-8.32 17.39-19.46998 26.08999-33.46997 26.08999-13.99 0-25.13998-8.7-33.46998-26.08998zm-1029.72922-9.08c-43.86997-18.14998-78.46994-41.97996-103.80992-71.46994-25.33998-29.49998-43.10997-61.83995-53.32996-97.00993-10.21-35.16997-13.61-72.03994-10.21-110.61791 3.41-38.57497 12.48-76.20395 27.22999-112.88792 14.74998-36.68397 34.41997-71.28794 58.99995-103.81092 24.57998-32.52398 52.56996-60.32095 83.95994-83.38994 31.38997-23.06898 65.79995-40.08797 103.23992-51.05496 37.43997-10.967 76.20994-13.42599 116.28991-7.375 33.27998 5.295 61.83995 20.99 85.65994 47.08397 23.82998 26.09498 42.73996 58.42996 56.72995 97.00493 13.99 38.57397 22.87999 80.93094 26.65998 127.0699 3.78 46.13797 1.7 91.70893-6.24 136.7079-7.93999 45.00996-21.55997 86.79993-40.83996 125.3699-19.28999 38.57998-44.62997 69.77995-76.01994 93.59993-31.38998 23.82999-69.39995 37.81998-114.01992 41.97997-44.62996 4.16-96.05992-6.24-154.29988-31.19997zm-642.42952 0c-43.86996-18.14998-78.46994-41.97996-103.80992-71.46994-25.33998-29.49998-43.10997-61.83995-53.31996-97.00993-10.20999-35.16997-13.61999-72.03994-10.20999-110.61791 3.4-38.57497 12.48-76.20395 27.21998-112.88792 14.74999-36.68397 34.41997-71.28794 58.99996-103.81092 24.57998-32.52398 52.56996-60.32095 83.95993-83.38994 31.38998-23.06898 65.79995-40.08797 103.23992-51.05496 37.43998-10.967 76.20995-13.42599 116.29992-7.375 33.27997 5.295 61.82995 20.99 85.64993 47.08397 23.82998 26.09498 42.73997 58.42996 56.72996 97.00493 13.98999 38.57397 22.87998 80.93094 26.65998 127.0699 3.79 46.13797 1.71 91.70893-6.24 136.7079-7.94 45.00996-21.54998 86.79993-40.83997 125.3699-19.28998 38.57998-44.62996 69.77995-76.01994 93.59993-31.38997 23.82999-69.38995 37.81998-114.01991 41.97997-44.61997 4.16-96.05993-6.24-154.29989-31.19997zm-1823.64862-14.69998c-5.29-34.31998-9.64-71.39995-13.04999-111.24992-3.4-39.85997-6.24-80.95994-8.5-123.2999-2.27-42.34497-3.79-85.24294-4.54-128.6939-.75999-43.45198-1.13999-86.07294-1.13999-127.86391 0-41.78997.38-81.91994 1.14-120.38991.75-38.46997 1.89-74.30995 3.4-107.52092 2.27-9.41 8.13-15.63699 17.58998-18.68199 9.45-3.044 19.65999-3.736 30.62998-2.075 10.97 1.66 20.98998 5.12 30.06998 10.378 9.07 5.259 13.98999 11.48599 14.73999 18.68198-1.51 31.54998-2.64 62.40896-3.4 92.57593-.76 30.16698-.57 59.91796.57 89.25494 1.13 29.33597 3.4 58.81095 6.81 88.42493 3.4 29.61298 8.12999 59.64095 14.17998 90.08493 35.54998-34.31797 72.03995-55.90596 109.47992-64.76195 37.43997-8.856 72.79995-8.441 106.07992 1.245 33.27998 9.687 63.72995 26.56898 91.32993 50.64796 27.60998 24.07798 49.54996 51.61496 65.80995 82.61194 16.25999 31.00198 25.89998 63.65195 28.92998 97.97192 3.02 34.31998-3.22 66.41995-18.71999 96.30993-15.50998 29.88998-41.40996 55.62996-77.71994 77.21994-36.29997 21.58999-85.46993 35.42998-147.48989 41.50997-27.22998 2.77-50.86996 4.99-70.90994 6.65-20.03999 1.66-38.94997 1.8-56.72996.41-17.76999-1.38-35.91997-5.12-54.45996-11.21-18.52998-6.08999-39.89997-15.49998-64.09995-28.22997zm85.08994-154.42989c-9.83 32.09998-11.34 58.25996-4.53 78.45994 6.8 20.20999 18.89998 35.00998 36.29997 44.41997 17.39999 9.41 38.57997 14.11999 63.53995 14.11999 24.95998 0 50.66997-3.74 77.13995-11.21 26.47998-7.46999 52.37996-18.12998 77.71994-31.96997 25.33998-13.83999 47.08996-30.15997 65.23995-48.97996 13.60999-13.83999 20.79998-30.58998 21.55998-50.23996.75-19.64999-2.84-39.70997-10.78-60.18996-7.94998-20.47998-19.85998-40.13097-35.73996-58.95095-15.88-18.81999-33.65998-34.31798-53.31996-46.49597-19.66999-12.17699-40.65997-19.64998-62.96996-22.41698-22.31998-2.768-44.24996 1.799-65.80995 13.69899-21.54998 11.90099-41.78996 32.10397-60.69995 60.61095-18.90999 28.50398-34.78997 68.22395-47.64996 119.14391zm2380.9882 74.95995c49.15996 31.76997 93.21993 45.00996 132.1799 39.70997 38.94997-5.29 71.65995-21.92999 98.12993-49.91997 26.47998-27.97997 46.32996-63.71995 59.56995-107.20991 13.24-43.48997 18.90999-87.92994 17.01999-133.3119-1.9-45.38197-11.73-87.54994-29.49998-126.5029-17.77999-38.95298-44.81997-68.26196-81.11994-87.92694-20.41998-10.59-44.24997-10.022-71.47994 1.701-27.22998 11.72399-53.88996 30.63297-79.97994 56.72795-26.09998 26.09498-49.73997 57.29496-70.90995 93.60093-21.17999 36.30498-35.54997 73.55695-43.11997 111.75292-7.56 38.19897-6.62 75.06894 2.84 110.61892 9.45 35.54997 31.57998 65.79995 66.36995 90.75993zm-642.42952 0c49.16997 31.76997 93.21993 45.00996 132.1799 39.70997 38.94997-5.29 71.65995-21.92999 98.13993-49.91997 26.46998-27.97997 46.31997-63.71995 59.55996-107.20991 13.23999-43.48997 18.90998-87.92994 17.01998-133.3119-1.89-45.38197-11.71999-87.54994-29.49998-126.5029-17.76998-38.95298-44.80996-68.26196-81.11993-87.92694-20.41999-10.59-44.24997-10.022-71.47995 1.701-27.22998 11.72399-53.88996 30.63297-79.97994 56.72795-26.09998 26.09498-49.72996 57.29496-70.90995 93.60093-21.17998 36.30498-35.54997 73.55695-43.10996 111.75292-7.57 38.19897-6.62 75.06894 2.83 110.61892 9.45999 35.54997 31.57997 65.79995 66.36994 90.75993zm-1159.18912-39.69997c19.65998 30.24997 40.26997 47.64996 61.82995 52.18996 21.55999 4.53 42.53997.56 62.96995-11.92 20.41999-12.47998 39.70997-31.00997 57.85996-55.58995 18.14999-24.57998 33.65998-50.86996 46.51997-78.84994 12.84999-27.98998 22.30998-55.40696 28.35997-82.25794 6.05-26.85098 7.56-48.97496 4.54-66.37095-3.78-18.15299-6.81-34.41497-9.08-48.78596-2.27-14.371-4.72999-27.22898-7.36999-38.57497-2.65-11.345-5.68-21.74599-9.07999-31.19998-3.4-9.455-8.13-19.09799-14.17999-28.93098-30.25998-21.17898-58.42996-29.49898-84.52994-24.95998-26.08998 4.538-49.53996 17.39599-70.33994 38.57397-20.79999 21.17898-38.18997 48.40796-52.18996 81.68794-13.99 33.27997-24.19998 68.07295-30.62998 104.37892-6.43 36.30597-8.51 71.47995-6.24 105.50992 2.27 34.03998 9.45 62.39995 21.55999 85.09994z" fill="#282828" fill-rule="nonzero"/>
|
16 |
+
<path d="M6892.93785 1141.07765l-2.93-847.33736c-.01-1.191.2-2.374.61-3.492 6.06-16.43098 13.87-28.16497 22.94999-35.51497 9.95999-8.065 20.24998-11.87199 30.67997-11.87199 10.37 0 19.54999 2.66 27.55998 7.845 8.86 5.732 14.1 12.94799 16.18 21.28698.16.625.25 1.264.29 1.908 2.26999 43.93997 4.15999 92.80393 5.67999 146.59289 1.51 53.75096 2.65 109.96191 3.4 168.63387.76 58.61996 1.52 118.75391 2.27 180.39986.76 61.66396 1.33 122.76091 1.71 183.28987.37 60.52995.56 119.1699.56 175.91986 0 56.66996.38 109.18992 1.13999 157.54988.01 1.06-.14 2.12-.46 3.13-4.6 14.73-12.99999 25.43998-24.96998 32.34998-11.7 6.75-23.64998 9.58-35.79997 8.68-12.44-.92-23.51999-5.71-33.19998-14.47-9.87-8.93-15.19999-21.69998-15.19999-38.57997l-.25-72.25994c-2.06 5.06-4.48 10.24999-7.27 15.58998-9.08998 17.41-21.52998 34.43998-37.35996 51.04997-16.08 16.88998-34.38998 29.74997-54.89996 38.58997-20.83999 8.98999-43.70997 12.12999-68.62995 9.25999-24.60998-2.82-50.33996-15.20999-76.94994-37.68997-7.62-5.23-15.41999-14.25-23.02998-27.34998-6.92-11.92-13.84-24.98998-20.75999-39.21997-6.83-14.02-13.64999-28.23998-20.46998-42.63997-6.53-13.77999-13.4-25.75998-20.65999-35.90997-6.62-9.27-13.48999-16.15999-20.76998-20.45999-4.67-2.76-9.71-2.7-15.12-.35-14.69998 24.18998-29.57997 47.66997-44.62996 70.42995-16.00999 24.20998-33.58997 44.87997-52.71996 62.05995-19.67998 17.66999-42.16997 30.11998-67.46995 37.34997-25.32998 7.23-54.88996 6.63-88.72993-2.23-33.15997-8.89999-60.03995-26.31997-80.66994-52.20995-20.07998-25.18998-35.06997-55.08996-44.90996-89.72994-9.7-34.10997-14.57-71.50994-14.57-112.21991 0-40.42697 4.43-80.66694 13.29-120.71491 8.84999-40.02697 21.73998-78.51394 38.67997-115.46191 17.08998-37.28898 37.69997-69.31695 61.77995-96.11793 24.43998-27.19398 52.23996-47.66197 83.36994-61.45595 31.65997-14.024 65.90995-17.899 102.88992-11.467 34.67997 6.452 63.26995 21.24799 85.85994 44.23397 21.94998 22.34798 40.20996 49.38096 54.70995 81.13794 14.28 31.25498 25.48998 65.78695 33.58998 103.60192 7.97 37.19097 15.17999 74.38195 21.62998 111.57192 6.42 37.00197 12.84 72.31194 19.25999 105.91192 6.27 32.82997 14.53999 61.05995 24.85998 84.65993 9.73 22.24999 21.89998 38.70997 36.83997 49.12997 13.55 9.45999 31.25998 10.32999 53.02996 3.92 30.31998-30.90998 54.72996-51.40997 73.05995-61.72996 12.16999-6.84 22.40998-10.8 30.62997-12.17 7.06-1.17999 12.97-.53999 17.76999 1.42 3.08 1.26 5.82 2.97 8.15 5.15zm171.26987-850.82935c-.41 1.118-.62 2.301-.62 3.492l3.4 983.65725c0 16.87999 5.34 29.64998 15.21 38.57997 9.67998 8.76 20.75997 13.55 33.19997 14.47 12.14999.9 24.09998-1.93 35.79997-8.68 11.95999-6.91 20.36998-17.61999 24.96998-32.34998.32-1.01.47-2.07.45-3.13-.75-48.35996-1.13-100.87992-1.13-157.54988 0-56.74995-.19-115.3899-.57-175.91986-.38-60.52896-.94-121.62591-1.7-183.28987-.76-61.64595-1.51-121.7799-2.27-180.39986-.76-58.67196-1.89-114.88291-3.41-168.63387-1.51-53.78896-3.4-102.65292-5.67999-146.5929-.03-.644-.13-1.283-.28-1.90799-2.09-8.339-7.32-15.55499-16.17999-21.28698-8.02-5.185-17.18998-7.845-27.55998-7.845-10.43999 0-20.71998 3.807-30.68997 11.872-9.08 7.34999-16.88999 19.08398-22.93999 35.51497zm1588.0788 521.3466c11.02-11.49199 21.36999-24.98198 31.06998-40.44997 14.03-22.37998 28.44998-44.75996 43.23997-67.13995 15.13999-22.89798 31.63998-43.26796 49.48996-61.12095 18.93999-18.93699 41.57997-30.45998 67.67995-34.53497 52.65996-9.574 97.29993-3.098 133.9899 18.84098 36.21997 21.64899 65.98995 52.69896 89.20993 93.24193 22.76999 39.74697 40.15997 85.84694 52.12996 138.3279 11.82 51.85696 20.20999 103.90492 25.15998 156.14788 4.96 52.18996 7.05 102.09992 6.29 149.72989-.77 47.60996-2.68 86.64993-5.73 117.1199-.11 1.16-.43 2.28-.92 3.32-10.40999 21.74999-24.99998 31.77998-42.49996 31.77998-17.48999 0-32.07998-10.03-42.48997-31.77997-.56-1.17-.88-2.44-.96-3.73-2.26-39.21997-5.65-82.00994-10.18-128.3799-4.51999-46.29997-10.53998-92.40994-18.06998-138.3399-7.51-45.82997-16.51999-89.21993-27.03998-130.1689-10.38999-40.41497-22.58998-74.53795-36.67997-102.34693-13.35999-26.36698-28.42998-45.00796-45.64997-55.55495-15.47998-9.474-32.93997-7.465-52.51996 4.536-22.56998 13.82998-47.26996 41.87496-74.56994 83.72993-28.12998 43.12897-59.40996 105.21592-93.90993 186.22486-.08.19-.17.37-.26.55-2.91 5.83-6.71 15.30999-11.45 28.42998-4.88999 13.53999-10.15998 28.77998-15.79998 45.70996-5.7 17.09-11.95999 35.12998-18.79998 54.11996-6.77 18.80999-12.98 36.85997-18.61999 54.16996-5.68 17.41999-10.79 32.93998-15.33999 46.57997-4.39 13.16999-7.33 23.04998-8.8 29.63997-.12.52-.28 1.04-.48 1.54-7.70999 19.27999-18.35998 29.19998-29.92997 31.59998-11.43 2.39-22.87998.41-34.30997-6.25-10.03-5.85-19.24999-13.76999-27.59998-23.78998-8.86-10.63999-13.93-20.08998-15.7-28.05998-.33999-1.54-.30999-3.14.08-4.66 6.74-26.20997 12.73-55.41995 17.97-87.60993 5.25-32.26997 9.36999-69.03995 12.36999-110.30991 3.01-41.34297 4.13-88.13794 3.38-140.3819-.75-52.31096-4.52-111.58291-11.29-177.81786-.19-1.829.13-3.674.92-5.332 10.19-21.30698 21.57999-32.05198 31.76998-34.36797 11.17999-2.541 22.52998.468 33.70997 10.12499 9.13 7.881 17.73999 19.41898 25.61998 34.76697 7.34 14.288 13.9 28.76898 19.68999 43.44197 5.82 14.74199 10.46999 28.51598 13.95999 41.31797.7 2.54 1.32 4.919 1.87 7.135zm-1260.43904 469.29265c-45.43997-18.81999-81.21994-43.59997-107.46992-74.15995-26.30998-30.62997-44.73997-64.20995-55.34996-100.72992-10.55-36.33997-14.07999-74.42994-10.56-114.28691 3.48-39.54797 12.79-78.12894 27.90999-115.73892 15.06999-37.49597 35.16997-72.86794 60.28995-106.11092 25.18998-33.31797 53.85996-61.78595 86.01994-85.41793 32.32997-23.76398 67.77995-41.29597 106.34992-52.59396 38.82997-11.373 79.02994-13.941 120.6799-7.653 35.51998 5.652 66.02996 22.35899 91.46994 50.21697 24.64998 26.99898 44.25996 60.42495 58.73995 100.33692 14.28 39.36297 23.36998 82.58094 27.22998 129.6629 3.85 46.99997 1.73 93.42293-6.36 139.2649-8.10999 45.98996-22.03998 88.68993-41.74996 128.1099-20.00999 40.01997-46.33997 72.36995-78.90994 97.08993-32.80998 24.89998-72.49995 39.61997-119.13991 43.96996-46.01997 4.29-99.08993-6.22-159.14988-31.95997zm642.41951 0c-45.43996-18.81999-81.21994-43.59997-107.46992-74.15995-26.30998-30.62997-44.73996-64.20995-55.33995-100.72992-10.55-36.33997-14.08-74.42994-10.57-114.28691 3.49-39.54797 12.79-78.12894 27.90998-115.73892 15.08-37.49597 35.17998-72.86794 60.29996-106.11092 25.17998-33.31797 53.85996-61.78595 86.00993-85.41793 32.33998-23.76398 67.78995-41.29597 106.35992-52.59396 38.82997-11.373 79.01994-13.941 120.66991-7.653 35.52997 5.652 66.03995 22.35899 91.47993 50.21697 24.64998 26.99898 44.25997 60.42495 58.73996 100.33692 14.27999 39.36297 23.36998 82.58094 27.22998 129.6629 3.85 46.99997 1.73 93.42293-6.36 139.2649-8.12 45.98996-22.03998 88.68993-41.74997 128.1099-20.00998 40.01997-46.33996 72.36995-78.90994 97.08993-32.80997 24.89998-72.49994 39.61997-119.1399 43.96996-46.01997 4.29-99.09993-6.22-159.15989-31.95997zM6968.3578 276.0543c-1.1-3.399-3.7-6.152-7.41999-8.557-4.84-3.135-10.41999-4.636-16.68999-4.636-6.2 0-12.17999 2.622-18.09998 7.417-6.5 5.259-11.73 13.762-16.13999 25.24198l3.4 981.84726c0 10.31 2.6 18.33999 8.62 23.77998 6.20999 5.62 13.27998 8.76 21.25998 9.36 8.26999.61 16.35998-1.47 24.32998-6.07 7.31-4.21 12.36999-10.78 15.39999-19.52998-.75-47.98997-1.12-100.04993-1.12-156.16989 0-56.70995-.19-115.30991-.56-175.79486-.38-60.48896-.95-121.54591-1.7-183.16987-.76-61.64195-1.52-121.7709-2.27-180.38686-.76-58.56596-1.89-114.67491-3.4-168.32887-1.5-53.15996-3.37-101.49493-5.61-145.0029zm173.57988 0c-1.1-3.399-3.69-6.152-7.41-8.557-4.84-3.135-10.42-4.636-16.68999-4.636-6.21 0-12.17999 2.622-18.09998 7.417-6.5 5.259-11.74 13.762-16.14 25.24198l3.39 981.84726c0 10.31 2.61 18.33999 8.63 23.77998 6.2 5.62 13.27999 8.76 21.25998 9.36 8.27.61 16.36-1.47 24.31999-6.07 7.31-4.21 12.36999-10.78 15.39998-19.52998-.74-47.98997-1.11-100.04993-1.11-156.16989 0-56.70995-.19-115.30991-.57-175.79486-.37-60.48896-.94-121.54591-1.7-183.16987-.75-61.64195-1.51-121.7709-2.27-180.38686-.75-58.56596-1.88999-114.67491-3.39999-168.32887-1.49-53.15996-3.36-101.49493-5.61-145.0029zm-1474.8589 611.05154c32.78998-28.61098 66.40996-46.87097 100.71993-54.98596 39.23997-9.282 76.29994-8.777 111.17992 1.375 34.64997 10.08599 66.35995 27.64098 95.10993 52.71196 28.56997 24.91798 51.24996 53.42596 68.07995 85.50393 16.88998 32.18698 26.89997 66.10695 30.03997 101.73693 3.2 36.27997-3.42 70.20994-19.80998 101.79992-16.27999 31.37997-43.34997 58.53995-81.47994 81.19994-37.32997 22.19998-87.83993 36.60997-151.58989 42.86996-27.29998 2.78-50.99996 5-71.08994 6.66-20.60999 1.71-40.05997 1.84-58.32996.42-18.53999-1.44-37.47997-5.33-56.80996-11.68-18.96998-6.22999-40.84997-15.83998-65.62995-28.87997-2.81-1.47-4.75-4.19-5.23-7.32-5.32999-34.52997-9.70999-71.83994-13.12998-111.92991-3.41-39.95997-6.26-81.15994-8.53-123.6199-2.28-42.45897-3.79-85.47694-4.55-129.0499-.76-43.51098-1.14-86.18994-1.14-128.03791 0-41.85797.38-82.05394 1.14-120.58691.76-38.56197 1.89-74.48795 3.41-107.77892.03-.637.12-1.27.27-1.889 3.13-12.99999 11.18-21.65098 24.23999-25.85598 10.86999-3.498 22.58998-4.353 35.19997-2.445 12.24999 1.856 23.43998 5.739 33.57997 11.614 12.52 7.25499 18.62999 16.35998 19.67999 26.28797.05.506.07 1.016.04 1.524-1.51 31.47298-2.64 62.25596-3.39 92.34793-.75 29.95198-.57 59.49096.56 88.61794 1.12 29.08597 3.37 58.30895 6.75 87.66993 2.72 23.63898 6.28 47.54596 10.70999 71.71995zm992.55926 378.53171c-5.84-3.89-11.48-11.03-17.31999-21.08998-6.7-11.53-13.38999-24.16999-20.07998-37.92998-6.79-13.95998-13.58-28.10997-20.37999-42.44996-7.08-14.97-14.57999-27.94998-22.44998-38.97997-8.51-11.9-17.51999-20.51999-26.87998-26.04998-11.32-6.69-23.67998-6.83-37.05997.37-1.57.85-2.88 2.1-3.81 3.62-15.05999 24.84997-30.29998 48.93996-45.73996 72.27994-15 22.68998-31.45998 42.10997-49.38997 58.20995-17.37998 15.61-37.24997 26.60998-59.59995 32.99998-22.31999 6.37-48.34997 5.46-78.10994-2.33-28.79998-7.73-52.21996-22.82998-70.15995-45.34996-18.49999-23.20999-32.24998-50.79997-41.31997-82.71994-9.21-32.44998-13.79999-68.03995-13.79999-106.75992 0-38.98097 4.27-77.78094 12.81-116.39591 8.54998-38.63497 20.98998-75.78495 37.33996-111.44792 16.19-35.32397 35.65998-65.69495 58.47996-91.08393 22.45998-24.99598 47.97996-43.85797 76.59994-56.53696 28.08998-12.44899 58.50996-15.75999 91.23993-10.069 30.24998 5.628 55.35996 18.44 75.12995 38.56698 20.39998 20.76598 37.30997 45.92097 50.78996 75.43094 13.70999 30.00998 24.43998 63.17396 32.21997 99.48293 7.92 36.93297 15.08 73.86594 21.48999 110.79991 6.43 37.12298 12.86999 72.53295 19.30998 106.24292 6.59 34.48998 15.34 64.12996 26.18998 88.92994 11.45 26.16998 26.13998 45.24996 43.71997 57.51995 18.48999 12.9 42.71997 15.33 72.81994 5.87 1.58-.49 3.01-1.37 4.16-2.55 29.34998-30.08998 52.73996-50.19996 70.35995-60.09995 8.15-4.59 15.17999-7.72 21.11998-9.24 4.06-1.05 7.35-1.48 9.9-.44 4.83 1.98 5.26 7.53 4.6 15.45-1.04 12.47998-5.67 26.31997-13.65 41.57996-8.3 15.86999-19.68998 31.36998-34.11997 46.51997-14.17 14.87998-30.26998 26.22998-48.33997 34.01997-17.73998 7.65-37.21997 10.19-58.42995 7.76-21.40999-2.46-43.55997-13.78-66.71995-33.42998l-.92-.7zm2465.44814 12.35c2.91-29.76999 4.72-67.65996 5.46-113.66992.75-46.92997-1.32-96.09993-6.2-147.5199-4.87-51.38895-13.12999-102.58491-24.74998-153.59388-11.49-50.38496-28.12998-94.67092-49.98996-132.8309-21.39999-37.36197-48.73997-66.06595-82.10994-86.01693-32.88998-19.65999-72.95995-24.90898-120.38991-16.28799-22.05998 3.447-41.01997 13.102-56.87996 28.95798-16.93999 16.93999-32.57997 36.27997-46.93996 58.00796-14.71 22.24498-29.03998 44.49096-42.98997 66.73695-14.56999 23.23798-30.54998 42.31396-47.87996 57.28095-2.96 2.557-7.14 3.153-10.7 1.525-3.56-1.628-5.84-5.181-5.84-9.093 0-3.38099-1.70999-10.60698-4.74999-21.76198-3.32-12.15799-7.74-25.23598-13.26999-39.23597-5.55-14.06799-11.84999-27.95098-18.87998-41.64996-6.49-12.637-13.39-22.27799-20.89999-28.76698-5.47-4.718-10.73999-7-16.20999-5.759-2.45.558-4.67 2.587-7.11999 5.432-3.3 3.817-6.54 9.02999-9.82 15.58699 6.66 65.73995 10.36 124.6399 11.11 176.70886.76 52.89196-.39 100.26493-3.43 142.1199-3.05 41.92996-7.25 79.28994-12.57999 112.06991-5.18 31.79998-11.08 60.72995-17.68999 86.79993 1.68 5.13 5.45 10.9 10.96 17.51 6.77 8.11999 14.18999 14.57998 22.31998 19.31998 6.72 3.93 13.41999 5.36 20.14998 3.96 6.46-1.35 10.86-8.16 15.16-18.77 1.62-7.01999 4.65999-17.27998 9.15999-30.76997 4.53-13.58999 9.62999-29.07998 15.29998-46.44996 5.7-17.48999 11.97-35.73998 18.80999-54.74996 6.78-18.82999 12.99999-36.71997 18.63999-53.65996 5.71-17.10999 11.02999-32.49998 15.96998-46.18997 5.02-13.88999 9.11-23.97298 12.22-30.26797 35.04997-82.24394 66.88994-145.2539 95.45992-189.06286 29.42998-45.12797 56.52996-74.94494 80.85994-89.85593 27.31998-16.744 51.82996-17.75999 73.41995-4.541 19.83998 12.144 37.66997 33.21197 53.04996 63.57295 14.64998 28.91898 27.40998 64.38095 38.20997 106.40992 10.65999 41.49597 19.79998 85.46594 27.40998 131.9149 7.6 46.34997 13.67999 92.88993 18.23998 139.6299 4.47 45.84996 7.84 88.22993 10.12 127.1199 6.08999 12 13.56998 18.70999 23.59998 18.70999 10.08999 0 17.58998-6.77 23.68998-18.86999zm-1725.4887-15.54c-42.25997-17.47998-75.64994-40.33997-100.04992-68.74995-24.36999-28.36997-41.48997-59.44995-51.30996-93.27993-9.87-33.99997-13.14-69.64994-9.85-106.94891 3.31-37.60098 12.17-74.27895 26.53998-110.03592 14.43-35.87297 33.65998-69.70795 57.69996-101.51292 23.97998-31.72998 51.27996-58.85496 81.89994-81.36094 30.43997-22.37399 63.81995-38.87897 100.12992-49.51597 36.05997-10.56199 73.38995-12.91099 111.98992-7.084 30.95997 4.925 57.54995 19.607 79.76994 43.93898 22.99998 25.18998 41.19997 56.43395 54.70996 93.67193 13.70999 37.78597 22.38998 79.28094 26.09998 124.4769 3.71 45.27597 1.67 89.99593-6.12 134.1609-7.77 44.01997-21.07998 84.89994-39.94997 122.6299-18.55999 37.11998-42.89997 67.17996-73.10994 90.10994-29.96998 22.74998-66.29995 36.00997-108.90992 39.98997-43.22997 4.03-93.00993-6.26-149.42989-30.43998l-.11-.05zm642.41952 0c-42.24997-17.47998-75.63995-40.33997-100.04993-68.74995-24.35998-28.36997-41.47997-59.44995-51.29996-93.27993-9.87-33.99997-13.14999-69.64994-9.86-106.94891 3.32-37.60098 12.17-74.27895 26.54999-110.03592 14.41999-35.87297 33.65997-69.70795 57.69995-101.51292 23.97999-31.72998 51.27997-58.85496 81.89994-81.36094 30.43998-22.37399 63.81995-38.87897 100.12993-49.51597 36.05997-10.56199 73.38994-12.91099 111.98991-7.084 30.94998 4.925 57.54996 19.607 79.76994 43.93898 22.99999 25.18998 41.19997 56.43395 54.70996 93.67193 13.7 37.78597 22.38998 79.28094 26.08998 124.4769 3.71 45.27597 1.68 89.99593-6.12 134.1609-7.76999 44.01997-21.06998 84.89994-39.93996 122.6299-18.55999 37.11998-42.90997 67.17996-73.10995 90.10994-29.96998 22.74998-66.29995 36.00997-108.90992 39.98997-43.22996 4.03-93.00993-6.26-149.42988-30.43998l-.12-.05zM5632.4288 546.7151c-.72-4.174-4.34-7.351-9.72999-10.47199-8.01-4.642-16.86999-7.678-26.54998-9.144-9.33-1.413-18.01998-.883-26.06998 1.707-5.56 1.792-9.16 5.322-10.71 10.675-1.47999 32.83197-2.59999 68.23495-3.33999 106.20592-.76 38.40597-1.14 78.47094-1.14 120.1929 0 41.73398.38 84.29694 1.14 127.68891.75 43.32997 2.26 86.10694 4.52 128.3289 2.26 42.23997 5.09 83.22994 8.49 122.97991 3.21999 37.68997 7.27999 72.88995 12.20998 105.58992 21.78999 11.26 41.14997 19.67999 58.09996 25.24998 17.72999 5.83 35.09997 9.42 52.10996 10.74 17.26999 1.35 35.64997 1.2 55.11996-.41 19.99998-1.66 43.56997-3.87 70.75994-6.63 60.26996-5.91 108.08992-19.17999 143.3599-40.15997 34.48997-20.49998 59.21995-44.82997 73.94994-73.21994 14.61999-28.18998 20.48999-58.46996 17.63999-90.82994-2.91-32.99997-12.19-64.39995-27.82998-94.20593-15.68999-29.91597-36.86997-56.48395-63.51995-79.72193-26.46998-23.08499-55.63996-39.29498-87.54994-48.58197-31.67997-9.221-65.34995-9.546-100.98992-1.115-35.87997 8.488-70.76995 29.33298-104.83992 62.22396-2.63 2.541-6.44 3.442-9.93 2.349-3.49-1.093-6.10999-4.005-6.81999-7.594-6.11-30.71598-10.88-61.01395-14.30999-90.89293-3.43-29.86598-5.72-59.59296-6.86-89.17993-1.15-29.54598-1.34-59.50996-.58-89.89194.75-29.94797 1.88-60.57595 3.37-91.88193zm15.14 553.17259c13.18998-52.14997 29.57997-92.78993 48.95996-122.00191 19.95998-30.08698 41.44996-51.27696 64.19995-63.83695 23.53998-12.994 47.49996-17.891 71.86994-14.869 23.73999 2.944 46.07997 10.883 66.99995 23.83899 20.53999 12.71799 39.10997 28.89298 55.69996 48.54796 16.63999 19.71899 29.09998 40.32097 37.41997 61.78096 8.47 21.83998 12.25 43.24996 11.45 64.19995-.86 22.23998-9.01 41.18997-24.34999 56.78995-18.82998 19.51999-41.36997 36.46998-67.63995 50.81997-26.01998 14.20999-52.61996 25.13998-79.79994 32.80997-27.39998 7.74-54.02996 11.59-79.85994 11.59-26.84998 0-49.58996-5.2-68.29994-15.32-19.60999-10.60999-33.33998-27.23998-41.01997-50.02996-7.32-21.70998-6.15-49.83996 4.37-84.31993zm19.33998 5.12c12.51999-49.58997 27.86998-88.30994 46.28996-116.06692 17.85999-26.92498 36.82998-46.14197 57.19996-57.38296 19.56999-10.80799 39.46997-15.04399 59.73996-12.52999 20.87998 2.59 40.51996 9.597 58.92995 20.99499 18.78999 11.63699 35.76997 26.45898 50.94996 44.44396 15.12 17.92099 26.48998 36.61097 34.04998 56.11096 7.42 19.12999 10.81999 37.84997 10.10999 56.19996-.65 17.04998-6.87 31.58997-18.68999 43.59996-17.54998 18.2-38.49997 33.89998-62.89995 47.22997-24.65998 13.46999-49.86996 23.83998-75.63994 31.10998-25.53998 7.20999-50.34996 10.83999-74.42995 10.83999-23.07998 0-42.69996-4.21-58.77995-12.91-15.18-8.20999-25.64998-21.19998-31.58998-38.81996-6.28-18.63999-4.44-42.72997 4.63-72.33995l.13-.48zm1723.4387 80.90993c51.62996 33.36998 98.03992 46.77997 138.9499 41.21997 41.29996-5.61 75.97994-23.27998 104.04991-52.95996 27.45998-29.02998 48.13997-66.05995 61.86996-111.16992 13.55999-44.57996 19.37998-90.12293 17.43998-136.6379-1.95-46.72396-12.08999-90.13293-30.38997-130.2379-18.71999-41.02096-47.21997-71.85994-85.45994-92.56893-23.01998-11.93999-49.70996-11.81599-80.18994 1.31-28.27998 12.173-56.00995 31.74398-83.09993 58.84096-26.66998 26.66498-50.83997 58.53395-72.47995 95.63293-21.75998 37.30897-36.50997 75.59694-44.27997 114.84991-7.87999 39.75097-6.86 78.13094 2.98 115.13091 10.02 37.67997 33.31998 69.85995 70.19995 96.31993l.41.27zm642.41951 0c51.62996 33.36998 98.04993 46.77997 138.9499 41.21997 41.30997-5.61 75.98994-23.27998 104.05992-52.95996 27.45998-29.02998 48.12996-66.05995 61.86995-111.16992 13.56-44.57996 19.37999-90.12293 17.43999-136.6379-1.95-46.72396-12.09-90.13293-30.38998-130.2379-18.71998-41.02096-47.22996-71.85994-85.45993-92.56893-23.01998-11.93999-49.70996-11.81599-80.18994 1.31-28.27998 12.173-56.00996 31.74398-83.10994 58.84096-26.65998 26.66498-50.82996 58.53395-72.46994 95.63293-21.76999 37.30897-36.51998 75.59694-44.28997 114.84991-7.87 39.75097-6.86 78.13094 2.98 115.13091 10.02999 37.67997 33.32997 69.85995 70.20994 96.31993l.4.27zm11.07-16.65999c46.60996 30.07998 88.23993 43.08997 125.1899 38.06997 36.59997-4.98 67.34995-20.58998 92.21993-46.88996 25.47998-26.93998 44.51997-61.38995 57.25996-103.24992 12.90999-42.40997 18.43998-85.73594 16.58999-129.9859-1.83-44.03997-11.35-84.96594-28.59998-122.76691-16.82999-36.88497-42.40997-64.66495-76.62995-83.20194-17.97998-9.323-38.93997-8.313-62.91995 2.009-26.17998 11.274-51.76996 29.52098-76.85994 54.61396-25.52998 25.52498-48.62996 56.05596-69.34995 91.56793-20.58998 35.30297-34.57997 71.51695-41.93997 108.65792-7.24999 36.63597-6.38 72.00594 2.69 106.10592 8.87 33.34997 29.74998 61.62995 62.34996 85.06993zm-642.42952 0c46.60996 30.07998 88.24993 43.08997 125.1899 38.06997 36.59998-4.98 67.34995-20.58998 92.21994-46.88996 25.48998-26.93998 44.51996-61.38995 57.25995-103.24992 12.91-42.40997 18.43999-85.73594 16.59999-129.9859-1.84-44.03997-11.36-84.96594-28.60998-122.76691-16.82999-36.88497-42.39997-64.66495-76.61994-83.20194-17.97999-9.323-38.94997-8.313-62.91995 2.009-26.18998 11.274-51.77996 29.52098-76.86995 54.61396-25.52998 25.52498-48.62996 56.05596-69.33994 91.56793-20.59999 35.30297-34.58998 71.51695-41.94997 108.65792-7.25 36.63597-6.37 72.00594 2.7 106.10592 8.86999 33.34997 29.73997 61.62995 62.33995 85.06993zm-1173.21912-25.98998c21.51999 33.09998 44.56997 51.54996 68.15995 56.51996 24.03999 5.06 47.46997.75 70.23995-13.16999 21.39998-13.06999 41.66997-32.41998 60.68995-58.17996 18.56-25.12998 34.41998-52.00996 47.55997-80.61994 13.16999-28.64997 22.83998-56.73495 29.03998-84.22993 6.4-28.42898 7.83-51.86396 4.63-70.28295l-.06-.326c-3.75-17.97399-6.74-34.07597-8.99-48.30596-2.31-14.636-4.82-27.73198-7.52-39.28697-2.74-11.752-5.86999-22.52199-9.39999-32.31498-3.62-10.059-8.64-20.32498-15.06999-30.78498-.72-1.164-1.67-2.168-2.79-2.952-32.86997-23.00798-63.61995-31.54997-91.96992-26.61997-28.08998 4.885-53.36996 18.62598-75.75995 41.41997-21.60998 21.99998-39.73997 50.24796-54.27996 84.81893-14.26999 33.96098-24.69998 69.46395-31.25997 106.51092-6.57 37.13497-8.69 73.11395-6.37 107.92392 2.38 35.65997 10.03 65.34995 22.70999 89.12993l.44.75zm223.31984-388.7207c-26.98998-18.50399-52.01996-26.18998-75.36995-22.12799-24.10998 4.192-45.70996 16.16699-64.91995 35.72898-19.99998 20.35698-36.65997 46.56796-50.10996 78.55694-13.70999 32.59997-23.70998 66.68295-29.99998 102.24692-6.29 35.47697-8.33 69.84595-6.11 103.10592 2.15 32.21998 8.8 59.13996 20.2 80.67994 17.73998 27.17998 35.82996 43.38997 55.26995 47.47996 19.06999 4.02 37.61997.38 55.68996-10.65999 19.44998-11.87999 37.74997-29.59997 55.02996-52.99996 17.74998-24.02998 32.90997-49.72996 45.47996-77.08994 12.55-27.30998 21.78999-54.06896 27.68998-80.27594 5.69-25.21598 7.29-45.98996 4.46-62.34495-3.79-18.24499-6.83-34.59698-9.12-49.05396-2.22-14.106-4.63-26.72698-7.22999-37.86298-2.55-10.93899-5.47-20.96898-8.75-30.08497-2.98-8.28-7.05999-16.709-12.20998-25.29798z" fill="#fff"/>
|
17 |
+
</g>
|
18 |
+
</svg>
|
19 |
+
</span>
|
20 |
+
<br />
|
21 |
+
|
22 |
+
<span style="width: 34px; top: -5px;"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="facebook" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="svg-inline--fa fa-facebook fa-w-16 fa-2x"><path fill="#475e8f" d="M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.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.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z" class=""></path></svg></span>
|
23 |
+
|
24 |
+
<?php echo $plus_svg; ?>
|
25 |
+
|
26 |
+
<span><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="instagram" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class="svg-inline--fa fa-instagram fa-w-14 fa-2x"><path fill="#e15073" d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z" class=""></path></svg></span>
|
27 |
+
|
28 |
+
<?php echo $plus_svg; ?>
|
29 |
+
|
30 |
+
<span style="top: -4px;"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="svg-inline--fa fa-twitter fa-w-16 fa-2x"><path fill="#1a92dc" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z" class=""></path></svg></span>
|
31 |
+
|
32 |
+
<?php echo $plus_svg; ?>
|
33 |
+
|
34 |
+
<span style="width: 35px; top: -5px;"><svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="svg-inline--fa fa-youtube fa-w-18 fa-2x"><path fill="#f5413d" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" class=""></path></svg></span>
|
35 |
+
</div>
|
36 |
+
|
37 |
+
<h1>Combine all your social media channels into one single wall.</h1>
|
38 |
+
<h2>Maximize your social content and get more followers.</h2>
|
39 |
+
|
40 |
+
<div style="text-align: center;">
|
41 |
+
<a href="https://smashballoon.com/social-wall/?utm_source=plugin-pro&utm_campaign=ctf&utm_medium=sw-cta-1" target="_blank" class="cta button button-primary">Get the Social Wall plugin</a>
|
42 |
+
</div>
|
43 |
+
|
44 |
+
<div class="ctf-sw-info">
|
45 |
+
<div class="ctf-sw-features">
|
46 |
+
<p><span>A dash of Instagram</span>Add posts from your profile, public hashtag posts, or posts you're tagged in.</p>
|
47 |
+
<p><span>A sprinkle of Facebook</span>Include posts from your page or group timeline, or from your photos, videos, albums, and events pages.</p>
|
48 |
+
<p><span>A spoonful of Twitter</span>Add Tweets from any Twitter account, hashtag Tweets, mentions, and more.</p>
|
49 |
+
<p><span>And a dollop of YouTube</span>Embed videos from any public YouTube channel, playlists, searches, and more.</p>
|
50 |
+
<p><span>All in the same feed</span>Combine feeds from all of our Smash Balloon Pro plugins into one single wall feed, and show off all your social media content in one place.</p>
|
51 |
+
</div>
|
52 |
+
<a class="ctf-sw-screenshot" href="https://smashballoon.com/social-wall/demo?utm_source=plugin-pro&utm_campaign=ctf&utm_medium=sw-demo" target="_blank">
|
53 |
+
<span class="cta">View Demo</span>
|
54 |
+
|
55 |
+
<img src="<?php echo CTF_PLUGIN_URL . 'img/sw-screenshot.png'; ?>" alt="Smash Balloon Social Wall plugin screenshot showing Facebook, Instagram, Twitter, and YouTube posts combined into one wall.">
|
56 |
+
</a>
|
57 |
+
</div>
|
58 |
+
|
59 |
+
<div class="ctf-sw-footer-cta">
|
60 |
+
<a href="https://smashballoon.com/social-wall/?utm_source=plugin-pro&utm_campaign=ctf&utm_medium=sw-cta-2" target="_blank"><span>🚀</span>Get Social Wall and Increase Engagement >></a>
|
61 |
+
</div>
|
62 |
+
|
63 |
+
</div>
|
views/admin/support.php
CHANGED
@@ -90,6 +90,33 @@ if ( ! is_wp_error( $twitter_api->json ) ) {
|
|
90 |
|
91 |
?>
|
92 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
## Twitter API RESPONSE: ##
|
94 |
<?php
|
95 |
echo 'Screen Name: ' . $screen_name."\n";
|
90 |
|
91 |
?>
|
92 |
|
93 |
+
## Location Summary: ##
|
94 |
+
<?php
|
95 |
+
$locator_summary = CTF_Feed_Locator::summary();
|
96 |
+
$condensed_shortcode_atts = array( 'search', 'screenname', 'hashtag', 'hometimeline', 'mentionstimeline', 'lists', 'layout', 'whitelist', 'includewords' );
|
97 |
+
|
98 |
+
if ( ! empty( $locator_summary) ) {
|
99 |
+
|
100 |
+
foreach ( $locator_summary as $locator_section ) {
|
101 |
+
if ( ! empty( $locator_section['results'] ) ) {
|
102 |
+
$first_five = array_slice( $locator_section['results'], 0, 5 );
|
103 |
+
foreach ( $first_five as $result ) {
|
104 |
+
$condensed_shortcode_string = '[custom-twitter-feeds';
|
105 |
+
$shortcode_atts = json_decode( $result['shortcode_atts'], true );
|
106 |
+
$shortcode_atts = is_array( $shortcode_atts ) ? $shortcode_atts : array();
|
107 |
+
foreach ( $shortcode_atts as $key => $value ) {
|
108 |
+
if ( in_array( $key, $condensed_shortcode_atts, true ) ) {
|
109 |
+
$condensed_shortcode_string .= ' ' . esc_html( $key ). '="' . esc_html( $value ) . '"';
|
110 |
+
}
|
111 |
+
}
|
112 |
+
$condensed_shortcode_string .= ']';
|
113 |
+
echo esc_url( get_the_permalink( $result['post_id'] ) ) . ' ' . $condensed_shortcode_string . "\n";
|
114 |
+
}
|
115 |
+
|
116 |
+
}
|
117 |
+
}
|
118 |
+
}?>
|
119 |
+
|
120 |
## Twitter API RESPONSE: ##
|
121 |
<?php
|
122 |
echo 'Screen Name: ' . $screen_name."\n";
|