get_bearer_token($client_id, $client_secret, $code, get_admin_url() . '?instance_type=' . $instance_type); break; case 'pixelfed': update_option('fediembedi-pixelfed-token', 'nada'); $instance = get_option('fediembedi-pixelfed-instance'); $client = new \FediClient($instance); $token = $client->get_bearer_token($client_id, $client_secret, $code, get_admin_url() . '?instance_type=' . $instance_type); break; } if (isset($token->error)) { //TODO: Proper error message update_option( 'fediembedi-notice', serialize( array( 'message' => 'FediEmbedi : ' . __("Can't log you in.", 'fediembedi') . '

' . __('Instance message', 'fediembedi') . ' : ' . $token->error_description . '

', 'class' => 'error', ) ) ); unset($token); switch ($instance_type) { case 'mastodon': update_option('fediembedi-mastodon-token', ''); break; case 'pixelfed': update_option('fediembedi-pixelfed-token', ''); break; } } else { switch ($instance_type) { case 'mastodon': update_option('fediembedi-mastodon-client-id', $client_id);// update_option('fediembedi-mastodon-client-secret', $client_secret);// update_option('fediembedi-mastodon-token', $token->access_token); break; case 'pixelfed': update_option('fediembedi-pixelfed-client-id', $client_id);// update_option('fediembedi-pixelfed-client-secret', $client_secret);// update_option('fediembedi-pixelfed-token', $token->access_token); break; } } $redirect_url = get_admin_url() . 'options-general.php?page=fediembedi'; } else { //Probably hack or bad refresh, redirect to homepage $redirect_url = home_url(); } wp_redirect($redirect_url); exit; } $mastodon_token = get_option('fediembedi-mastodon-token'); $pixelfed_token = get_option('fediembedi-pixelfed-token'); } /* * Widget */ public function fediembedi_widget() { //Mastodon include(plugin_dir_path(__FILE__) . 'fediembedi-mastodon-widget.php' ); register_widget( 'FediEmbedi_Mastodon' ); if(empty(get_option('fediembedi-mastodon-token'))){ unregister_widget( 'FediEmbedi_Mastodon' ); } //Pixelfed include(plugin_dir_path(__FILE__) . 'fediembedi-pixelfed-widget.php' ); register_widget( 'FediEmbedi_Pixelfed' ); if(empty(get_option('fediembedi-pixelfed-token'))){ unregister_widget( 'FediEmbedi_Pixelfed' ); } //PeerTube include(plugin_dir_path(__FILE__) . 'fediembedi-peertube-widget.php' ); register_widget( 'FediEmbedi_PeerTube' ); } public function mastodon_shortcode($atts){ //fedi instance $fedi_instance = get_option('fediembedi-mastodon-instance'); $access_token = get_option('fediembedi-mastodon-token'); $client = new \FediClient($fedi_instance, $access_token); $cred = $client->verify_credentials($access_token); $atts = shortcode_atts( array( 'only_media' => false, 'pinned' => false, 'exclude_replies' => false, 'max_id' => null, 'since_id' => null, 'min_id' => null, 'limit' => 5, 'exclude_reblogs' => false, 'show_header' => true, 'height' => '100%', ), $atts, 'mastodon' ); //getStatus from remote instance $status = $client->getStatus($atts['only_media'], $atts['pinned'], $atts['exclude_replies'], null, null, null, $atts['limit'], $atts['exclude_reblogs']); //if(WP_DEBUG_DISPLAY === true): echo '
Mastodon
'; var_dump($status); echo '
'; endif; $show_header = $atts['show_header']; $account = $status[0]->account; ob_start(); include(plugin_dir_path(__FILE__) . 'templates/mastodon.tpl.php' ); return ob_get_clean(); } public function pixelfed_shortcode($atts){ //fedi instance $fedi_instance = get_option('fediembedi-pixelfed-instance'); $access_token = get_option('fediembedi-pixelfed-token'); $client = new \FediClient($fedi_instance, $access_token); $cred = $client->verify_credentials($access_token); $atts = shortcode_atts( array( 'only_media' => false, 'pinned' => false, 'exclude_replies' => false, 'max_id' => null, 'since_id' => null, 'min_id' => null, 'limit' => 9, 'exclude_reblogs' => false, 'show_header' => true, 'height' => '100%', ), $atts, 'pixelfed' ); //getStatus from remote instance $status = $client->getStatus($atts['only_media'], $atts['pinned'], $atts['exclude_replies'], null, null, null, $atts['limit'], $atts['exclude_reblogs']); //if(WP_DEBUG_DISPLAY === true): echo '
Pixelfed
'; var_dump($client->getStatus($atts)); echo '
'; endif; $show_header = $atts['show_header']; if($account = $status[0]->account){ ob_start(); include(plugin_dir_path(__FILE__) . 'templates/pixelfed.tpl.php' ); return ob_get_clean(); } else { return; } } public function peertube_shortcode($atts){ $atts = shortcode_atts( array( 'instance' => null, 'actor' => null, 'is_channel' => null, 'limit' => 9, 'nsfw' => null, 'show_header' => true, 'height' => '100%', ), $atts, 'peertube' ); $atts['instance'] = \esc_attr( $atts['instance'], 'https' ); $client = new \FediClient($atts['instance']); //getVideos from remote instance $status = $client->getVideos($atts['actor'], $atts['is_channel'], $atts['limit'], $atts['nsfw'] ); if(!is_null($atts['is_channel'])){ $account = $status->data[0]->channel; } else { $account = $status->data[0]->account; } if(WP_DEBUG_DISPLAY === true): echo '
PeerTube
'; var_dump($status); echo '
'; endif; $show_header = $atts['show_header']; $height = $atts['height']; ob_start(); include( plugin_dir_path(__FILE__) . 'templates/peertube.tpl.php' ); return ob_get_clean(); } /* * convert_emoji */ public function convert_emoji($string, $emojis){ if(is_null($emojis) || !is_array($emojis)){ return $string; } foreach($emojis as $emoji){ $match = '/:' . $emoji->shortcode .':/'; $string = preg_replace($match, "static_url}\">", $string); } return $string; } public function enqueue_styles($hook) { global $post; if( is_active_widget( false, false, 'mastodon') || is_active_widget( false, false, 'pixelfed') || ( is_a( $post, 'WP_Post' ) && ( has_shortcode( $post->post_content, 'mastodon') || has_shortcode( $post->post_content, 'pixelfed') ) ) ) { wp_enqueue_script( 'resize-sensor', plugin_dir_url( __FILE__ ) . 'assets/ResizeSensor.js', array(), 'css-element-queries-1.2.2' ); wp_enqueue_script( 'element-queries', plugin_dir_url( __FILE__ ) . 'assets/ElementQueries.js', array('resize-sensor'), 'css-element-queries-1.2.2' ); } if( is_active_widget( false, false, 'mastodon') || ( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, 'mastodon') ) ) { wp_enqueue_style( 'mastodon', plugin_dir_url( __FILE__ ) . 'assets/mastodon.css', array(), filemtime(plugin_dir_path( __FILE__ ) . 'assets/mastodon.css') ); } if( is_active_widget( false, false, 'pixelfed') || ( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, 'pixelfed') ) ) { wp_enqueue_style( 'bootstrap', plugin_dir_url( __FILE__ ) . 'assets/bootstrap/css/bootstrap.min.css', array(), '4.4.1' ); wp_enqueue_style( 'pixelfed', plugin_dir_url( __FILE__ ) . 'assets/pixelfed.css', array(), filemtime(plugin_dir_path( __FILE__ ) . 'assets/pixelfed.css') ); } if( is_active_widget( false, false, 'peertube') || ( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, 'peertube') ) ) { wp_enqueue_style( 'peertube', plugin_dir_url( __FILE__ ) . 'assets/peertube.css', array(), filemtime(plugin_dir_path( __FILE__ ) . 'assets/mastodon.css') ); } } public function enqueue_scripts($hook) { global $pagenow; $infos = get_plugin_data(__FILE__); if ($pagenow == "options-general.php") { //We might be on settings page <-- Do you know a bette solution to get if we are in our own settings page? $plugin_url = plugin_dir_url(__FILE__); //wp_enqueue_script('settings_page', $plugin_url . 'assets/settings_page.js', array('jquery'), $infos['Version'], true); } } /** * Configuration_page * * Add the configuration page menu * * @return void */ public function configuration_page() { add_options_page( 'FediEmbedi', 'FediEmbedi', 'manage_options', 'fediembedi', array($this, 'show_configuration_page') ); } /** * Show_configuration_page * * Content of the configuration page * * @throws Exception The exception. * @return void */ public function show_configuration_page() { wp_enqueue_style('fediembedi-configuration', plugin_dir_url(__FILE__) . 'style.css'); if (isset($_GET['fediembedi-disconnect'])) { switch ($_GET['fediembedi-disconnect']) { case 'mastodon': update_option('fediembedi-mastodon-token', ''); break; case 'pixelfed': update_option('fediembedi-pixelfed-token', ''); break; } } $mastodon_instance = null; $mastodon_token = get_option('fediembedi-mastodon-token'); $pixelfed_instance = null; $pixelfed_token = get_option('fediembedi-pixelfed-token'); if (isset($_POST['save'])) { $is_valid_nonce = wp_verify_nonce($_POST['_wpnonce'], 'fediembedi-configuration'); if ($is_valid_nonce) { $instance = esc_url($_POST['instance']); $instance_type = esc_attr($_POST['instance_type']); $client = new \FediClient($instance); $redirect_url = get_admin_url() . '?instance_type=' . $instance_type; $auth_url = $client->register_app($redirect_url); if ($auth_url == "ERROR") { update_option( 'fediembedi-notice', serialize( array( 'message' => 'FediEmbedi : ' . __('The given instance url belongs to an unrecognized service!', 'fediembedi'), 'class' => 'error', ) ) ); } else { if (empty($instance)) { update_option( 'fediembedi-notice', serialize( array( 'message' => 'FediEmbedi : ' . __('Please set your instance before you connect !', 'fediembedi'), 'class' => 'error', ) ) ); } else { switch ($instance_type) { case 'mastodon': update_option('fediembedi-mastodon-client-id', $client->get_client_id()); update_option('fediembedi-mastodon-client-secret', $client->get_client_secret()); update_option('fediembedi-mastodon-instance', $instance); $mastodon_account = $client->verify_credentials($mastodon_token); $account = $mastodon_account; break; case 'pixelfed': update_option('fediembedi-pixelfed-client-id', $client->get_client_id()); update_option('fediembedi-pixelfed-client-secret', $client->get_client_secret()); update_option('fediembedi-pixelfed-instance', $instance); $pixelfed_account = $client->verify_credentials($pixelfed_token); $account = $pixelfed_account; break; } //$account = $client->verify_credentials($token); if (is_null($account) || isset($account->error)) { echo ''; echo __('Redirect to ', 'fediembedi') . $instance; exit; } //Inform user that save was successfull update_option( 'fediembedi-notice', serialize( array( 'message' => 'FediEmbedi : ' . __('Configuration successfully saved!', 'fediembedi'), 'class' => 'success', ) ) ); } } $this->admin_notices(); } } if (!empty($mastodon_token)) { $mastodon_instance = get_option('fediembedi-mastodon-instance'); $client = new \FediClient($mastodon_instance); $mastodon_account = $client->verify_credentials($mastodon_token); } if (!empty($pixelfed_token)) { $pixelfed_instance = get_option('fediembedi-pixelfed-instance'); $client = new \FediClient($pixelfed_instance); $pixelfed_account = $client->verify_credentials($pixelfed_token); } include 'fediembedi-settings-form.tpl.php'; } /** * Admin_notices * Show the notice (error or info) * * @return void */ public function admin_notices() { $notice = unserialize(get_option('fediembedi-notice')); if (is_array($notice)) { echo '

' . $notice['message'] . '

'; update_option('fediembedi-notice', null); } } /** * @param $links * * @return array */ function fediembedi_add_plugin_page_settings_link( $links ) { $links[] = '' . __('Configuration', 'fediembedi') . ''; $links[] = '' . __('Support', 'fediembedi') . ''; return $links; } } $fediconfig = new FediConfig();