diff -r 7b1b88e27a20 -r 48c4eec2b7e6 wp/wp-content/plugins/include-mastodon-feed/plugin.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wp/wp-content/plugins/include-mastodon-feed/plugin.php Fri Sep 05 18:40:08 2025 +0200 @@ -0,0 +1,750 @@ + 'INCLUDE_MASTODON_FEED_DEBUG', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_DEFAULT_INSTANCE', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_LIMIT', + 'value' => 20, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_EXCLUDE_BOOSTS', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_EXCLUDE_REPLIES', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_EXCLUDE_CONVERSATIONSTARTERS', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_ONLY_PINNED', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_ONLY_MEDIA', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_PRESERVE_IMAGE_ASPECT_RATIO', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_TAGGED', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_LINKTARGET', + 'value' => '_self', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_SHOW_PREVIEWCARDS', + 'value' => true, + ], + + // set styles + [ + 'key' => 'INCLUDE_MASTODON_FEED_DARKMODE', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_STYLE_BG_LIGHT_COLOR', + 'value' => 'rgba(100, 100, 100, 0.15)', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_STYLE_BG_DARK_COLOR', + 'value' => 'rgba(155, 155, 155, 0.15)', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_STYLE_ACCENT_COLOR', + 'value' => 'rgb(99, 100, 255)', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_STYLE_ACCENT_FONT_COLOR', + 'value' => 'rgb(255, 255, 255)', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_STYLE_BORDER_RADIUS', + 'value' => '0.25rem', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_HIDE_STATUS_META', + 'value' => false, + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_HIDE_DATETIME', + 'value' => false, + ], + // set texts and localization + [ + 'key' => 'INCLUDE_MASTODON_FEED_TEXT_LOADING', + 'value' => 'Loading Mastodon feed...', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_TEXT_NO_STATUSES', + 'value' => 'No statuses availablae', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_TEXT_BOOSTED', + 'value' => 'boosted 🚀', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_TEXT_VIEW_ON_INSTANCE', + 'value' => 'view on instance', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_TEXT_SHOW_CONTENT', + 'value' => 'Show content', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_TEXT_PERMALINK_PRE', + 'value' => 'on', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_TEXT_PERMALINK_POST', + 'value' => '', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_TEXT_EDITED', + 'value' => '(edited)', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_DATE_LOCALE', + 'value' => 'en-US', + ], + [ + 'key' => 'INCLUDE_MASTODON_FEED_DATE_OPTIONS', + 'value' => "{}", + ], +]; +foreach($constants as $constant) { + if(!defined($constant['key'])) { + define($constant['key'], $constant['value']); + } +} +unset($constants); + +function error($msg) { + return '[include-mastodon-feed] ' . $msg; +} + + +function init_styles() { + ob_start(); +?> + + + + ( INCLUDE_MASTODON_FEED_DEFAULT_INSTANCE === false ? false : filter_var( INCLUDE_MASTODON_FEED_DEFAULT_INSTANCE, FILTER_UNSAFE_RAW ) ), + 'account' => false, + 'tag' => false, + 'limit' => INCLUDE_MASTODON_FEED_LIMIT, + 'excludeboosts' => filter_var(esc_html(INCLUDE_MASTODON_FEED_EXCLUDE_BOOSTS), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'excludereplies' => filter_var(esc_html(INCLUDE_MASTODON_FEED_EXCLUDE_REPLIES), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'excludeconversationstarters' => filter_var(esc_html(INCLUDE_MASTODON_FEED_EXCLUDE_CONVERSATIONSTARTERS), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'onlypinned' => filter_var(esc_html(INCLUDE_MASTODON_FEED_ONLY_PINNED), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'onlymedia' => filter_var(esc_html(INCLUDE_MASTODON_FEED_ONLY_MEDIA), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'preserveimageaspectratio' => filter_var(esc_html(INCLUDE_MASTODON_FEED_PRESERVE_IMAGE_ASPECT_RATIO), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'tagged' => INCLUDE_MASTODON_FEED_TAGGED, + 'linktarget' => INCLUDE_MASTODON_FEED_LINKTARGET, + 'showpreviewcards' => filter_var(esc_html(INCLUDE_MASTODON_FEED_SHOW_PREVIEWCARDS), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'hidestatusmeta' => filter_var(esc_html(INCLUDE_MASTODON_FEED_HIDE_STATUS_META), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'hidedatetime' => filter_var(esc_html(INCLUDE_MASTODON_FEED_HIDE_DATETIME), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + 'text-loading' => INCLUDE_MASTODON_FEED_TEXT_LOADING, + 'text-nostatuses' => INCLUDE_MASTODON_FEED_TEXT_NO_STATUSES, + 'text-boosted' => INCLUDE_MASTODON_FEED_TEXT_BOOSTED, + 'text-viewoninstance' => INCLUDE_MASTODON_FEED_TEXT_VIEW_ON_INSTANCE, + 'text-showcontent' => INCLUDE_MASTODON_FEED_TEXT_SHOW_CONTENT, + 'text-permalinkpre' => INCLUDE_MASTODON_FEED_TEXT_PERMALINK_PRE, + 'text-permalinkpost' => INCLUDE_MASTODON_FEED_TEXT_PERMALINK_POST, + 'text-edited' => INCLUDE_MASTODON_FEED_TEXT_EDITED, + 'date-locale' => INCLUDE_MASTODON_FEED_DATE_LOCALE, + 'date-options' => INCLUDE_MASTODON_FEED_DATE_OPTIONS, + 'darkmode' => filter_var(esc_html(INCLUDE_MASTODON_FEED_DARKMODE), FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE), + ), array_change_key_case($atts, CASE_LOWER) + ); + + if(false === filter_var($atts['instance'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + return error('missing configuration: instance'); + } + if(false === filter_var($atts['account'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) && false === filter_var($atts['tag'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + return error('missing configuration: account id or tag'); + } + + + if(false !== filter_var($atts['account'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + $apiUrl = 'https://'.urlencode($atts['instance']).'/api/v1/accounts/'.$atts['account'].'/statuses'; + } + if(false !== filter_var($atts['tag'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + $apiUrl = 'https://'.urlencode($atts['instance']).'/api/v1/timelines/tag/'.urlencode($atts['tag']); + } + + $getParams = []; + if($atts['limit'] != 20 && $atts['limit'] > 0) { + $getParams[] = 'limit=' . filter_var( $atts['limit'], FILTER_SANITIZE_NUMBER_INT ); + } + if(false !== filter_var($atts['excludeboosts'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + $getParams[] = 'exclude_reblogs=true'; + } + if(false !== filter_var($atts['excludereplies'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + $getParams[] = 'exclude_replies=true'; + } + if(true === filter_var($atts['onlypinned'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + $getParams[] = 'pinned=true'; + } + if(true === filter_var($atts['onlymedia'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + $getParams[] = 'only_media=true'; + } + if(false !== filter_var($atts['tagged'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) { + $getParams[] = 'tagged=' . filter_var( $atts['tagged'], FILTER_UNSAFE_RAW ); + } + if(sizeof($getParams) > 0) { + $apiUrl .= '?' . implode('&', $getParams); + } + $elemId = uniqid('include-mastodon-feed-'); + ob_start(); +?> + +
+