From 7595b51ee856e6c27962cd9c3ea2841b417aed0d Mon Sep 17 00:00:00 2001
From: lucha <lucha@paranoici.org>
Date: Sun, 30 Dec 2018 13:22:20 -0800
Subject: [PATCH] [auto] plugin: autopost-to-mastodon 3.2.6

---
 .../plugins/autopost-to-mastodon/form.tpl.php |    4 +-
 .../mastodon_autopost.php                     | 1102 +++++++++--------
 .../plugins/autopost-to-mastodon/readme.txt   |   24 +-
 3 files changed, 577 insertions(+), 553 deletions(-)

diff --git a/wp-content/plugins/autopost-to-mastodon/form.tpl.php b/wp-content/plugins/autopost-to-mastodon/form.tpl.php
index c44a438c7..e86d566ac 100644
--- a/wp-content/plugins/autopost-to-mastodon/form.tpl.php
+++ b/wp-content/plugins/autopost-to-mastodon/form.tpl.php
@@ -13,8 +13,8 @@ define("ADVANCED_VIEW",false);
 	<a href="https://github.com/simonfrey/mastodon_wordpress_autopost" target="_blank" class="github-icon" target="_blank">
 		<svg aria-hidden="true" class="octicon octicon-mark-github" height="32" version="1.1" viewBox="0 0 16 16" width="32"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg>
 	</a>
-
-	<a href="https://liberapay.com/Mastodon-Auto-Share-Team/donate" target="_blank"><img src="<?php echo plugins_url( 'img/donate.svg', __FILE__ );?>"></a>
+	
+	<a href="https://paypal.me/51edpo" target="_blank"><img src="<?php echo plugins_url( 'img/paypal.png', __FILE__ );?>" style="height:30px;"></a> <a href="https://patreon.com/simonfrey" target="_blank"><img src="<?php echo plugins_url( 'img/patron.png', __FILE__ );?>" style="height:30px;"></a>  <a href="https://liberapay.com/Mastodon-Auto-Share-Team/donate" target="_blank"><img src="<?php echo plugins_url( 'img/donate.svg', __FILE__ );?>"></a>
 <br>
 <br>
 	<?php if(ACCOUNT_CONNECTED): ?>
diff --git a/wp-content/plugins/autopost-to-mastodon/mastodon_autopost.php b/wp-content/plugins/autopost-to-mastodon/mastodon_autopost.php
index 6a8e6f025..04f2ae31c 100644
--- a/wp-content/plugins/autopost-to-mastodon/mastodon_autopost.php
+++ b/wp-content/plugins/autopost-to-mastodon/mastodon_autopost.php
@@ -1,547 +1,555 @@
-<?php
-/**
-* Plugin Name: Mastodon Autopost
-* Plugin URI: https://github.com/simonfrey/mastodon_wordpress_autopost
-* Description: A Wordpress Plugin that automatically posts your new articles to Mastodon
-* Version: 3.2.2
-* Author: L1am0
-* Author URI: http://www.simon-frey.eu
-* License: GPL2
-* Text Domain: autopost-to-mastodon
-* Domain Path: /languages
-*/
-
-
-require_once 'client.php';
-
-
-class autopostToMastodon
-{
-	public function __construct(){
-		add_action( 'plugins_loaded', array($this, 'init' ) );
-		add_action( 'admin_enqueue_scripts', array($this, 'enqueue_scripts' ) );
-		add_action( 'admin_menu', array($this, 'configuration_page' ) );
-		add_action( 'save_post', array($this, 'toot_post' ) );
-		add_action( 'admin_notices', array($this, 'admin_notices' ) );
-		add_action( 'add_meta_boxes', array($this, 'add_metabox' ) );
-		add_action( 'publish_future_post', array($this, 'toot_scheduled_post') );
-		add_action( 'wp_ajax_get_toot_preview', array($this,'get_toot_preview_ajax_handler' ));
-
-	}
-
-	/**
-	 * Init
-	 *
-	 * Plugin initialization
-	 *
-	 * @return void
-	 */
-	public function init(){
-		$plugin_dir = basename( dirname( __FILE__ ) );
-		load_plugin_textdomain( 'autopost-to-mastodon', false, $plugin_dir . '/languages' );
-
-		if(isset($_GET['code'])){
-			$code = $_GET['code'];
-			$client_id = get_option('autopostToMastodon-client-id');
-			$client_secret = get_option('autopostToMastodon-client-secret');
-
-			if(!empty($code) && !empty($client_id) && !empty($client_secret))
-			{
-				echo __( 'Authentification, please wait', 'autopost-to-mastodon' ) . '...';
-
-				update_option( 'autopostToMastodon-token', 'nada' );
-
-				$instance = get_option( 'autopostToMastodon-instance' );
-				$client = new Client($instance);
-				$token = $client->get_bearer_token($client_id, $client_secret, $code, get_admin_url());
-
-				if(isset($token->error)){
-					print_r($token);
-					//TODO: Propper error message
-					update_option(
-						'autopostToMastodon-notice',
-						serialize(
-							array(
-								'message' => '<strong>Mastodon Autopost</strong> : ' . __( "Can't log you in.", 'autopost-to-mastodon' ) .
-								'<p><strong>' . __( 'Instance message', 'autopost-to-mastodon' ) . '</strong> : ' . $token->error_description . '</p>',
-								'class' => 'error',
-							)
-						)
-					);
-					unset($token);
-					update_option('autopostToMastodon-token', '');
-				}else{
-					update_option('autopostToMastodon-client-id', '');
-					update_option('autopostToMastodon-client-secret', '');
-					update_option('autopostToMastodon-token', $token->access_token);
-				}
-				$redirect_url = get_admin_url().'options-general.php?page=autopost-to-mastodon';
-			}
-			else
-			{
-				//Probably hack or bad refresh, redirect to homepage
-				$redirect_url = home_url();
-			}
-
-			wp_redirect($redirect_url);
-			exit;
-		}
-
-		$token = get_option('autopostToMastodon-token');
-		if (empty($token)){
-			update_option(
-				'autopostToMastodon-notice',
-				serialize(
-					array(
-						'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'Please login to your mastodon account!', 'autopost-to-mastodon' ) . '<a href="'.get_admin_url() . 'options-general.php?page=autopost-to-mastodon"> '. __( 'Go to Mastodon Autopost Settings', 'autopost-to-mastodon' ).'</a>',
-						'class' => 'error',
-					)
-				)
-			);
-		}
-
-	}
-
-	/**
-	 * Enqueue_scripts
-	 *
-	 * @return void
-	 */
-	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 . 'js/settings_page.js', array('jquery'), $infos['Version'], true );
-
-		}
-		if ( in_array( $pagenow, [ 'post-new.php', 'post.php' ] ) ) {
-			$plugin_url = plugin_dir_url( __FILE__ );
-			wp_enqueue_script( 'toot_editor', $plugin_url . 'js/toot_editor.js', array('jquery'), $infos['Version'], true );
-
-			$title_nonce = wp_create_nonce( 'mastodonNonce' );
-			wp_localize_script( 'toot_editor', 'ajax_obj', array(
-				'ajax_url' => admin_url( 'admin-ajax.php' ),
-				'nonce'    => $title_nonce
-			) );
-		}
-	}
-
-	/**
-	 * Configuration_page
-	 *
-	 * Add the configuration page menu
-	 *
-	 * @return void
-	 */
-	public function configuration_page() {
-		add_options_page(
-			'Mastodon Autopost',
-			'Mastodon Autopost',
-			'install_plugins',
-			'autopost-to-mastodon',
-			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('autopostToMastodon-configuration', plugin_dir_url(__FILE__).'style.css');
-
-		if( isset( $_GET['disconnect'] ) ) {
-			update_option( 'autopostToMastodon-token' , '');
-		}elseif( isset( $_GET['testToot'] ) ) {
-			$this->sendTestToot();
-		}
-
-		$token = get_option( 'autopostToMastodon-token' );
-
-		if ( isset( $_POST['save'] ) ) {
-
-			$is_valid_nonce = wp_verify_nonce( $_POST['_wpnonce'], 'autopostToMastodon-configuration' );
-
-			if ( $is_valid_nonce ) {
-				$instance = esc_url( $_POST['instance'] );
-				$message = stripslashes($_POST['message']);
-				$content_warning = $_POST['content_warning'];
-
-				$client = new Client($instance);
-				$redirect_url = get_admin_url();
-				$auth_url = $client->register_app($redirect_url);
-
-				if ($auth_url == "ERROR"){
-					update_option(
-						'autopostToMastodon-notice',
-						serialize(
-							array(
-								'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'The given instance url belongs to no valid mastodon instance !', 'autopost-to-mastodon' ),
-								'class' => 'error',
-							)
-						)
-					);
-
-				}else{
-
-					if(empty($instance)){
-						update_option(
-							'autopostToMastodon-notice',
-							serialize(
-								array(
-									'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'Thank you to set your Mastodon instance before connect !', 'autopost-to-mastodon' ),
-									'class' => 'error',
-								)
-							)
-						);
-					} else 	{
-						update_option('autopostToMastodon-client-id', $client->get_client_id());
-						update_option('autopostToMastodon-client-secret', $client->get_client_secret());
-						update_option( 'autopostToMastodon-instance', $instance );
-
-						update_option( 'autopostToMastodon-message', sanitize_textarea_field( $message ) );
-						update_option( 'autopostToMastodon-mode', sanitize_text_field( $_POST['mode'] ) );
-						update_option( 'autopostToMastodon-toot-size', (int) $_POST['size'] );
-
-						if (isset($_POST['autopost_standard'])){
-							update_option( 'autopostToMastodon-postOnStandard', 'on' );
-						}else{
-							update_option( 'autopostToMastodon-postOnStandard', 'off' );	
-						}
-
-						update_option( 'autopostToMastodon-content-warning', sanitize_textarea_field( $content_warning ) );
-
-						$account = $client->verify_credentials($token);
-
-						if( isset( $account->error ) ){
-							echo '<meta http-equiv="refresh" content="0; url=' . $auth_url . '" />';
-							echo __( 'Redirect to ', 'autopost-to-mastodon' ) . $instance;
-							exit;
-						}
-
-					//Inform user that save was successfull
-						update_option(
-							'autopostToMastodon-notice',
-							serialize(
-								array(
-									'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'Configuration successfully saved !', 'autopost-to-mastodon' ),
-									'class' => 'success',
-								)
-							)
-						);
-
-					}
-				}
-
-				$this->admin_notices();
-			}
-		}
-
-		$instance = get_option( 'autopostToMastodon-instance' );
-
-		if( !empty( $token ) ) {
-			$client = new Client($instance);
-			$account = $client->verify_credentials($token);
-		}
-
-		$message = get_option( 'autopostToMastodon-message', "[title]\n[excerpt]\n[permalink]\n[tags]" );
-		$mode = get_option( 'autopostToMastodon-mode', 'public' );
-		$toot_size = get_option( 'autopostToMastodon-toot-size', 500 );
-		$content_warning = get_option( 'autopostToMastodon-content-warning', '');
-		$autopost = get_option( 'autopostToMastodon-postOnStandard', 'on');
-
-		include 'form.tpl.php';
-	}
-
-	/**
-	 * Toot_post
-	 * Post the toot
-	 *
-	 * @param int $id The post ID.
-	 * @return void
-	 */
-	public function toot_post( $id ) {
-
-		$post = get_post( $id );
-
-		$thumb_url = get_the_post_thumbnail_url($id, 'medium_large'); //Don't change the resolution !
-
-		$toot_size = (int) get_option( 'autopostToMastodon-toot-size', 500 );
-
-		$toot_on_mastodon_option = false;
-		$cw_content = (string) get_option( 'autopostToMastodon-content-warning', '' );
-
-		$toot_on_mastodon_option = isset( $_POST['toot_on_mastodon'] );
-
-		if ($toot_on_mastodon_option){
-			update_post_meta( $id, 'autopostToMastodon-post-status', 'on' );
-		}else{
-			if (get_post_meta($id, 'autopostToMastodon-post-status',true) == 'on'){
-				update_post_meta( $id, 'autopostToMastodon-post-status', 'off' );
-			}
-		}
-
-		if ( $toot_on_mastodon_option ) {
-			$message = $this->getTootFromTemplate($id);
-
-			if ( ! empty( $message ) ) {
-
-                //Save the toot, for scheduling
-				if($post->post_status == 'future') {
-					update_post_meta($id, 'autopostToMastodon-toot', $message);
-
-					if ( $thumb_url ) {
-
-						$thumb_path = str_replace( get_site_url(), get_home_path(), $thumb_url );
-						update_post_meta($id, 'autopostToMastodon-toot-thumbnail', $thumb_path);
-					}
-
-					update_option(
-						'autopostToMastodon-notice',
-						serialize(
-							array(
-								'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'Toot saved for schedule !', 'autopost-to-mastodon' ),
-								'class' => 'info'
-							)
-						)
-					);
-				} else if($post->post_status == 'publish') {
-
-					$instance = get_option( 'autopostToMastodon-instance' );
-					$access_token = get_option('autopostToMastodon-token');
-					$mode = get_option( 'autopostToMastodon-mode', 'public' );
-
-					$client = new Client($instance, $access_token);
-
-					if ( $thumb_url ) {
-
-
-						$thumb_path = str_replace( get_site_url(), get_home_path(), $thumb_url );
-						$attachment = $client->create_attachment( $thumb_path );
-
-						if(is_object($attachment))
-						{
-							$media = $attachment->id;
-						}
-					}
-
-					$toot = $client->postStatus($message, $mode, $media, $cw_content);
-
-					update_post_meta( $id, 'autopostToMastodon-post-status', 'off' );
-
-					add_action('admin_notices', 'autopostToMastodon_notice_toot_success');
-					if ( isset( $toot->error ) ) {
-						update_option(
-							'autopostToMastodon-notice',
-							serialize(
-								array(
-									'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'Sorry, can\'t send toot !', 'autopost-to-mastodon' ) .
-									'<p><strong>' . __( 'Instance message', 'autopost-to-mastodon' ) . '</strong> : ' . $toot->error . '</p>',
-									'class' => 'error',
-								)
-							)
-						);
-					} else {
-						update_option(
-							'autopostToMastodon-notice',
-							serialize(
-								array(
-									'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'Toot successfully sent !', 'autopost-to-mastodon' ). ' <a href="'.$toot->url.'" target="_blank">'. __('View Toot', 'autopost-to-mastodon') .'</a>',
-									'class' => 'success',
-								)
-							)
-						);
-						//Save the toot url for syndication
-						update_post_meta($id, 'autopostToMastodonshare-lastSuccessfullTootURL',$toot->url);
-					}
-				}
-
-			}
-		}
-	}
-
-	/**
-	 * Toot_scheduled_post
-	 * @param  integer $post_id
-	 */
-	public function toot_scheduled_post($post_id) {
-
-		$instance = get_option( 'autopostToMastodon-instance' );
-		$access_token = get_option('autopostToMastodon-token');
-		$mode = get_option( 'autopostToMastodon-mode', 'public' );
-
-		$message = get_post_meta($post_id, 'autopostToMastodon-toot', true);
-
-		$thumb_url = get_the_post_thumbnail_url($post_id);
-		$thumb_path = get_post_meta($post_id, 'autopostToMastodon-toot-thumbnail', true);
-
-		$client = new Client($instance, $access_token);
-
-		if ( $thumb_url && $thumb_path ) {
-
-			$attachment = $client->create_attachment( $thumb_path );
-
-			if(is_object($attachment))
-			{
-				$media = $attachment->id;
-			}
-		}
-
-		$toot = $client->postStatus($message, $mode, $media);
-	}
-
-	/**
-	 * Admin_notices
-	 * Show the notice (error or info)
-	 *
-	 * @return void
-	 */
-	public function admin_notices() {
-
-		$notice = unserialize( get_option( 'autopostToMastodon-notice' ) );
-
-		if ( is_array( $notice ) ) {
-			echo '<div class="notice notice-' . sanitize_html_class( $notice['class'] ) . ' is-dismissible"><p>' . $notice['message'] . '</p></div>';
-			update_option( 'autopostToMastodon-notice', null );
-		}
-	}
-
-	/**
-	 * Add_metabox
-	 *
-	 * @return void
-	 */
-	public function add_metabox() {
-		add_meta_box(
-			'autopostToMastodon_metabox',
-			'Mastodon Autopost',
-			array($this, 'metabox'),
-			['post', 'page'],
-			'side',
-			'high'
-		);
-	}
-
-	/**
-	 * Metabox
-	 *
-	 * @param WP_Post $post the current post.
-	 * @return void
-	 */
-	public function metabox( $post ) {
-		if ( $post->post_title == '' && $post->post_content == ''){
-			$status = ('on' == (string) get_option('autopostToMastodon-postOnStandard', true));
-		}else{
-			$status = ('on' == (string) get_post_meta( $post->ID, 'autopostToMastodon-post-status', 'off' ));	
-		}
-
-		$checked = ( $status ) ? 'checked' : '';
-
-		echo '<div style="margin: 20px 0;"><input ' . $checked . ' type="checkbox" name="toot_on_mastodon" id="toot_on_mastodon" value="on">' .
-		'<label for="toot_on_mastodon">' . __( 'Toot on Mastodon', 'autopost-to-mastodon' ) . '</label></div>';
-
-	}
-
-
-
-
-	public function get_toot_preview_ajax_handler() {
-		check_ajax_referer( 'mastodonNonce' );
-
-		$return = array(
-			'message'  => $this->getTootFromTemplate($_POST['post_ID'])
-		);
-
-		wp_send_json( $return);
-	}
-
-	private function getTootFromTemplate($id){
-
-		$post = get_post( $id );
-		$toot_size = (int) get_option( 'autopostToMastodon-toot-size', 500 );
-
-
-		$message_template = get_option( 'autopostToMastodon-message', "[title]\n[excerpt]\n[permalink]\n[tags]" );
-
-				//Replace title
-		$post_title = html_entity_decode(get_the_title( $id ), ENT_COMPAT, 'UTF-8');
-		$message_template = str_replace("[title]", $post_title, $message_template);
-
-				//Replace permalink
-		$post_permalink = get_the_permalink( $id);
-		$message_template = str_replace("[permalink]", $post_permalink, $message_template);
-
-				//Replace tags  
-		$post_tags = html_entity_decode(get_the_tags($post->ID ), ENT_COMPAT, 'UTF-8');
-		$post_tags_content = '';
-		if ( $post_tags ) {
-			foreach( $post_tags as $tag ) {
-				$post_tags_content =  $post_tags_content . '#'.  preg_replace('/\s+/', '',$tag->name). ' '  ; 
-			}
-			$post_tags_content = trim($post_tags_content);
-		}
-		$message_template = str_replace("[tags]", $post_tags_content, $message_template);
-
-				//Replace excerpt
-		$post_content_long = wp_trim_words($post->post_content);
-		$post_content_long = strip_shortcodes($post_content_long);
-		$post_content_long = html_entity_decode($post_content_long,ENT_COMPAT, 'UTF-8');
-		$post_content_long = str_replace("...", "",$post_content_long);
-
-		$excerpt_len = $toot_size - strlen($message_template) + 9 - 5;
-
-		$post_excerpt = substr($post_content_long,0,$excerpt_len) ."[...]";
-
-		$message_template = str_replace("[excerpt]", $post_excerpt, $message_template);
-
-
-		return substr($message_template,0,$toot_size);
-	}
-
-	private function sendTestToot(){
-		$instance = get_option( 'autopostToMastodon-instance' );
-		$access_token = get_option('autopostToMastodon-token');
-		$mode = 'public';
-
-		$client = new Client($instance, $access_token);
-		//TODO: Add propper message
-		$message=__("This is my first post with Mastodon Autopost for Wordpress",'autopost-to-mastodon'). " - https://wordpress.org/plugins/autopost-to-mastodon/";
-		$media=null;
-		$toot = $client->postStatus($message, $mode, $media);
-
-		if ( isset( $toot->error ) ) {
-			update_option(
-				'autopostToMastodon-notice',
-				serialize(
-					array(
-						'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'Sorry, can\'t send toot !', 'autopost-to-mastodon' ) .
-						'<p><strong>' . __( 'Instance message', 'autopost-to-mastodon' ) . '</strong> : ' . $toot->error . '</p>',
-						'class' => 'error',
-					)
-				)
-			);
-		} else {
-			update_option(
-				'autopostToMastodon-notice',
-				serialize(
-					array(
-						'message' => '<strong>Mastodon Autopost</strong> : ' . __( 'Toot successfully sent !', 'autopost-to-mastodon' ). ' <a href="'.$toot->url.'" target="_blank">'. __('View Toot', 'autopost-to-mastodon') .'</a>',
-						'class' => 'success',
-					)
-				)
-			);
-		}
-		$this->admin_notices();
-	}
-}
-
-$autopostToMastodon = new autopostToMastodon();
+<?php
+/**
+ * Plugin Name: Mastodon Autopost
+ * Plugin URI: https://github.com/simonfrey/mastodon_wordpress_autopost
+ * Description: A Wordpress Plugin that automatically posts your new articles to Mastodon
+ * Version: 3.2.6
+ * Author: L1am0
+ * Author URI: http://www.simon-frey.eu
+ * License: GPL2
+ * Text Domain: autopost-to-mastodon
+ * Domain Path: /languages
+ */
+
+require_once 'client.php';
+
+class autopostToMastodon
+{
+    public function __construct()
+    {
+        add_action('plugins_loaded', array($this, 'init'));
+        add_action('admin_enqueue_scripts', array($this, 'enqueue_scripts'));
+        add_action('admin_menu', array($this, 'configuration_page'));
+        add_action('save_post', array($this, 'toot_post'));
+        add_action('admin_notices', array($this, 'admin_notices'));
+        add_action('add_meta_boxes', array($this, 'add_metabox'));
+        add_action('publish_future_post', array($this, 'toot_scheduled_post'));
+        add_action('wp_ajax_get_toot_preview', array($this, 'get_toot_preview_ajax_handler'));
+
+    }
+
+    /**
+     * Init
+     *
+     * Plugin initialization
+     *
+     * @return void
+     */
+    public function init()
+    {
+        $plugin_dir = basename(dirname(__FILE__));
+        load_plugin_textdomain('autopost-to-mastodon', false, $plugin_dir . '/languages');
+
+        if (isset($_GET['code'])) {
+            $code = $_GET['code'];
+            $client_id = get_option('autopostToMastodon-client-id');
+            $client_secret = get_option('autopostToMastodon-client-secret');
+
+            if (!empty($code) && !empty($client_id) && !empty($client_secret)) {
+                echo __('Authentification, please wait', 'autopost-to-mastodon') . '...';
+
+                update_option('autopostToMastodon-token', 'nada');
+
+                $instance = get_option('autopostToMastodon-instance');
+                $client = new Client($instance);
+                $token = $client->get_bearer_token($client_id, $client_secret, $code, get_admin_url());
+
+                if (isset($token->error)) {
+                    print_r($token);
+                    //TODO: Propper error message
+                    update_option(
+                        'autopostToMastodon-notice',
+                        serialize(
+                            array(
+                                'message' => '<strong>Mastodon Autopost</strong> : ' . __("Can't log you in.", 'autopost-to-mastodon') .
+                                '<p><strong>' . __('Instance message', 'autopost-to-mastodon') . '</strong> : ' . $token->error_description . '</p>',
+                                'class' => 'error',
+                            )
+                        )
+                    );
+                    unset($token);
+                    update_option('autopostToMastodon-token', '');
+                } else {
+                    update_option('autopostToMastodon-client-id', '');
+                    update_option('autopostToMastodon-client-secret', '');
+                    update_option('autopostToMastodon-token', $token->access_token);
+                }
+                $redirect_url = get_admin_url() . 'options-general.php?page=autopost-to-mastodon';
+            } else {
+                //Probably hack or bad refresh, redirect to homepage
+                $redirect_url = home_url();
+            }
+
+            wp_redirect($redirect_url);
+            exit;
+        }
+
+        $token = get_option('autopostToMastodon-token');
+        if (empty($token)) {
+            update_option(
+                'autopostToMastodon-notice',
+                serialize(
+                    array(
+                        'message' => '<strong>Mastodon Autopost</strong> : ' . __('Please login to your mastodon account!', 'autopost-to-mastodon') . '<a href="' . get_admin_url() . 'options-general.php?page=autopost-to-mastodon"> ' . __('Go to Mastodon Autopost Settings', 'autopost-to-mastodon') . '</a>',
+                        'class' => 'error',
+                    )
+                )
+            );
+        }
+
+    }
+
+    /**
+     * Enqueue_scripts
+     *
+     * @return void
+     */
+    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 . 'js/settings_page.js', array('jquery'), $infos['Version'], true);
+
+        }
+        if (in_array($pagenow, ['post-new.php', 'post.php'])) {
+            $plugin_url = plugin_dir_url(__FILE__);
+            wp_enqueue_script('toot_editor', $plugin_url . 'js/toot_editor.js', array('jquery'), $infos['Version'], true);
+
+            $title_nonce = wp_create_nonce('mastodonNonce');
+            wp_localize_script('toot_editor', 'ajax_obj', array(
+                'ajax_url' => admin_url('admin-ajax.php'),
+                'nonce' => $title_nonce,
+            ));
+        }
+    }
+
+    /**
+     * Configuration_page
+     *
+     * Add the configuration page menu
+     *
+     * @return void
+     */
+    public function configuration_page()
+    {
+        add_options_page(
+            'Mastodon Autopost',
+            'Mastodon Autopost',
+            'manage_options',
+            'autopost-to-mastodon',
+            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('autopostToMastodon-configuration', plugin_dir_url(__FILE__) . 'style.css');
+
+        if (isset($_GET['disconnect'])) {
+            update_option('autopostToMastodon-token', '');
+        } elseif (isset($_GET['testToot'])) {
+            $this->sendTestToot();
+        }
+
+        $token = get_option('autopostToMastodon-token');
+
+        if (isset($_POST['save'])) {
+
+            $is_valid_nonce = wp_verify_nonce($_POST['_wpnonce'], 'autopostToMastodon-configuration');
+
+            if ($is_valid_nonce) {
+                $instance = esc_url($_POST['instance']);
+                $message = stripslashes($_POST['message']);
+                $content_warning = $_POST['content_warning'];
+
+                $client = new Client($instance);
+                $redirect_url = get_admin_url();
+                $auth_url = $client->register_app($redirect_url);
+
+                if ($auth_url == "ERROR") {
+                    update_option(
+                        'autopostToMastodon-notice',
+                        serialize(
+                            array(
+                                'message' => '<strong>Mastodon Autopost</strong> : ' . __('The given instance url belongs to no valid mastodon instance !', 'autopost-to-mastodon'),
+                                'class' => 'error',
+                            )
+                        )
+                    );
+
+                } else {
+
+                    if (empty($instance)) {
+                        update_option(
+                            'autopostToMastodon-notice',
+                            serialize(
+                                array(
+                                    'message' => '<strong>Mastodon Autopost</strong> : ' . __('Thank you to set your Mastodon instance before connect !', 'autopost-to-mastodon'),
+                                    'class' => 'error',
+                                )
+                            )
+                        );
+                    } else {
+                        update_option('autopostToMastodon-client-id', $client->get_client_id());
+                        update_option('autopostToMastodon-client-secret', $client->get_client_secret());
+                        update_option('autopostToMastodon-instance', $instance);
+
+                        update_option('autopostToMastodon-message', sanitize_textarea_field($message));
+                        update_option('autopostToMastodon-mode', sanitize_text_field($_POST['mode']));
+                        update_option('autopostToMastodon-toot-size', (int) $_POST['size']);
+
+                        if (isset($_POST['autopost_standard'])) {
+                            update_option('autopostToMastodon-postOnStandard', 'on');
+                        } else {
+                            update_option('autopostToMastodon-postOnStandard', 'off');
+                        }
+
+                        update_option('autopostToMastodon-content-warning', sanitize_textarea_field($content_warning));
+
+                        $account = $client->verify_credentials($token);
+
+                        if (isset($account->error)) {
+                            echo '<meta http-equiv="refresh" content="0; url=' . $auth_url . '" />';
+                            echo __('Redirect to ', 'autopost-to-mastodon') . $instance;
+                            exit;
+                        }
+
+                        //Inform user that save was successfull
+                        update_option(
+                            'autopostToMastodon-notice',
+                            serialize(
+                                array(
+                                    'message' => '<strong>Mastodon Autopost</strong> : ' . __('Configuration successfully saved !', 'autopost-to-mastodon'),
+                                    'class' => 'success',
+                                )
+                            )
+                        );
+
+                    }
+                }
+
+                $this->admin_notices();
+            }
+        }
+
+        $instance = get_option('autopostToMastodon-instance');
+
+        if (!empty($token)) {
+            $client = new Client($instance);
+            $account = $client->verify_credentials($token);
+        }
+
+        $message = get_option('autopostToMastodon-message', "[title]\n[excerpt]\n[permalink]\n[tags]");
+        $mode = get_option('autopostToMastodon-mode', 'public');
+        $toot_size = get_option('autopostToMastodon-toot-size', 500);
+        $content_warning = get_option('autopostToMastodon-content-warning', '');
+        $autopost = get_option('autopostToMastodon-postOnStandard', 'on');
+
+        include 'form.tpl.php';
+    }
+
+    /**
+     * Toot_post
+     * Post the toot
+     *
+     * @param int $id The post ID.
+     * @return void
+     */
+    public function toot_post($id)
+    {
+
+        $post = get_post($id);
+
+        $thumb_url = get_the_post_thumbnail_url($id, 'medium_large'); //Don't change the resolution !
+
+        $toot_size = (int) get_option('autopostToMastodon-toot-size', 500);
+
+        $toot_on_mastodon_option = false;
+        $cw_content = (string) get_option('autopostToMastodon-content-warning', '');
+
+        $toot_on_mastodon_option = isset($_POST['toot_on_mastodon']);
+
+        if ($toot_on_mastodon_option) {
+            update_post_meta($id, 'autopostToMastodon-post-status', 'on');
+        } else {
+            if (get_post_meta($id, 'autopostToMastodon-post-status', true) == 'on') {
+                update_post_meta($id, 'autopostToMastodon-post-status', 'off');
+            }
+        }
+
+        if ($toot_on_mastodon_option) {
+            $message = $this->getTootFromTemplate($id);
+
+            if (!empty($message)) {
+
+                //Save the toot, for scheduling
+                if ($post->post_status == 'future') {
+                    update_post_meta($id, 'autopostToMastodon-toot', $message);
+
+                    if ($thumb_url) {
+
+                        $thumb_path = str_replace(get_site_url(), get_home_path(), $thumb_url);
+                        update_post_meta($id, 'autopostToMastodon-toot-thumbnail', $thumb_path);
+                    }
+
+                    update_option(
+                        'autopostToMastodon-notice',
+                        serialize(
+                            array(
+                                'message' => '<strong>Mastodon Autopost</strong> : ' . __('Toot saved for schedule !', 'autopost-to-mastodon'),
+                                'class' => 'info',
+                            )
+                        )
+                    );
+                } else if ($post->post_status == 'publish') {
+
+                    $instance = get_option('autopostToMastodon-instance');
+                    $access_token = get_option('autopostToMastodon-token');
+                    $mode = get_option('autopostToMastodon-mode', 'public');
+
+                    $client = new Client($instance, $access_token);
+
+                    if ($thumb_url) {
+
+                        $thumb_path = str_replace(get_site_url(), get_home_path(), $thumb_url);
+                        $attachment = $client->create_attachment($thumb_path);
+
+                        if (is_object($attachment)) {
+                            $media = $attachment->id;
+                        }
+                    }
+
+                    $toot = $client->postStatus($message, $mode, $media, $cw_content);
+
+                    update_post_meta($id, 'autopostToMastodon-post-status', 'off');
+
+                    add_action('admin_notices', 'autopostToMastodon_notice_toot_success');
+                    if (isset($toot->error)) {
+                        update_option(
+                            'autopostToMastodon-notice',
+                            serialize(
+                                array(
+                                    'message' => '<strong>Mastodon Autopost</strong> : ' . __('Sorry, can\'t send toot !', 'autopost-to-mastodon') .
+                                    '<p><strong>' . __('Instance message', 'autopost-to-mastodon') . '</strong> : ' . $toot->error . '</p>',
+                                    'class' => 'error',
+                                )
+                            )
+                        );
+                    } else {
+                        update_option(
+                            'autopostToMastodon-notice',
+                            serialize(
+                                array(
+                                    'message' => '<strong>Mastodon Autopost</strong> : ' . __('Toot successfully sent !', 'autopost-to-mastodon') . ' <a href="' . $toot->url . '" target="_blank">' . __('View Toot', 'autopost-to-mastodon') . '</a>',
+                                    'class' => 'success',
+                                )
+                            )
+                        );
+                        //Save the toot url for syndication
+                        update_post_meta($id, 'autopostToMastodonshare-lastSuccessfullTootURL', $toot->url);
+                    }
+                }
+
+            }
+        }
+    }
+
+    /**
+     * Toot_scheduled_post
+     * @param  integer $post_id
+     */
+    public function toot_scheduled_post($post_id)
+    {
+        $instance = get_option('autopostToMastodon-instance');
+        $access_token = get_option('autopostToMastodon-token');
+        $mode = get_option('autopostToMastodon-mode', 'public');
+
+        $message = $this->getTootFromTemplate($post_id);
+        if (!empty($message)) {
+
+            $thumb_url = get_the_post_thumbnail_url($post_id);
+            $thumb_path = get_post_meta($post_id, 'autopostToMastodon-toot-thumbnail', true);
+
+            $client = new Client($instance, $access_token);
+
+            if ($thumb_url && $thumb_path) {
+
+                $attachment = $client->create_attachment($thumb_path);
+
+                if (is_object($attachment)) {
+                    $media = $attachment->id;
+                }
+            }
+
+            $toot = $client->postStatus($message, $mode, $media);
+        }
+    }
+
+    /**
+     * Admin_notices
+     * Show the notice (error or info)
+     *
+     * @return void
+     */
+    public function admin_notices()
+    {
+
+        $notice = unserialize(get_option('autopostToMastodon-notice'));
+
+        if (is_array($notice)) {
+            echo '<div class="notice notice-' . sanitize_html_class($notice['class']) . ' is-dismissible"><p>' . $notice['message'] . '</p></div>';
+            update_option('autopostToMastodon-notice', null);
+        }
+    }
+
+    /**
+     * Add_metabox
+     *
+     * @return void
+     */
+    public function add_metabox()
+    {
+        add_meta_box(
+            'autopostToMastodon_metabox',
+            'Mastodon Autopost',
+            array($this, 'metabox'),
+            ['post', 'page'],
+            'side',
+            'high'
+        );
+    }
+
+    /**
+     * Metabox
+     *
+     * @param WP_Post $post the current post.
+     * @return void
+     */
+    public function metabox($post)
+    {
+        if ($post->post_title == '' && $post->post_content == '') {
+            $status = ('on' == (string) get_option('autopostToMastodon-postOnStandard', true));
+        } else {
+            $status = ('on' == (string) get_post_meta($post->ID, 'autopostToMastodon-post-status', 'off'));
+        }
+
+        $checked = ($status) ? 'checked' : '';
+
+        echo '<div style="margin: 20px 0;"><input ' . $checked . ' type="checkbox" name="toot_on_mastodon" id="toot_on_mastodon" value="on">' .
+        '<label for="toot_on_mastodon">' . __('Toot on Mastodon', 'autopost-to-mastodon') . '</label></div>';
+
+    }
+
+    public function get_toot_preview_ajax_handler()
+    {
+        check_ajax_referer('mastodonNonce');
+
+        $return = array(
+            'message' => $this->getTootFromTemplate($_POST['post_ID']),
+        );
+
+        wp_send_json($return);
+    }
+
+    private function getTootFromTemplate($id)
+    {
+
+        $post = get_post($id);
+        $toot_size = (int) get_option('autopostToMastodon-toot-size', 500);
+
+        $message_template = get_option('autopostToMastodon-message', "[title]\n[excerpt]\n[permalink]\n[tags]");
+
+        //Replace title
+        $post_title = html_entity_decode(get_the_title($id), ENT_COMPAT, 'UTF-8');
+        $message_template = str_replace("[title]", $post_title, $message_template);
+
+        //Replace permalink
+        $post_permalink = get_the_permalink($id);
+        $message_template = str_replace("[permalink]", $post_permalink, $message_template);
+
+        //Replace tags
+        $post_tags = get_the_tags($id);
+
+        if (sizeof($post_tags) > 0) {
+            $post_tags_content = '';
+            if ($post_tags) {
+                foreach ($post_tags as $tag) {
+                    $post_tags_content = $post_tags_content . '#' . preg_replace('/\s+/', '', html_entity_decode($tag->name, ENT_COMPAT, 'UTF-8')) . ' ';
+                }
+                $post_tags_content = trim($post_tags_content);
+            }
+            $message_template = str_replace("[tags]", $post_tags_content, $message_template);
+        }
+
+        //Replace excerpt
+        $post_content_long = $post->post_content;
+        if ($wp_version[0] == "5"){
+            $post_content_long = excerpt_remove_blocks($post_content_long);
+        }
+        $post_content_long = wp_strip_all_tags($post_content_long);
+        $post_content_long = strip_shortcodes($post_content_long);
+        $post_content_long = html_entity_decode($post_content_long, ENT_COMPAT, 'UTF-8');
+        //$post_content_long = str_replace("...", "",$post_content_long);
+
+        $excerpt_len = $toot_size - strlen($message_template) + 9 - 5;
+
+        $post_excerpt = substr($post_content_long, 0, $excerpt_len);
+
+        $message_template = str_replace("[excerpt]", $post_excerpt, $message_template);
+
+        return substr($message_template, 0, $toot_size);
+    }
+
+    private function sendTestToot()
+    {
+        $instance = get_option('autopostToMastodon-instance');
+        $access_token = get_option('autopostToMastodon-token');
+        $mode = 'public';
+
+        $client = new Client($instance, $access_token);
+        //TODO: Add propper message
+        $message = __("This is my first post with Mastodon Autopost for Wordpress", 'autopost-to-mastodon') . " - https://wordpress.org/plugins/autopost-to-mastodon/";
+        $media = null;
+        $toot = $client->postStatus($message, $mode, $media);
+
+        if (isset($toot->error)) {
+            update_option(
+                'autopostToMastodon-notice',
+                serialize(
+                    array(
+                        'message' => '<strong>Mastodon Autopost</strong> : ' . __('Sorry, can\'t send toot !', 'autopost-to-mastodon') .
+                        '<p><strong>' . __('Instance message', 'autopost-to-mastodon') . '</strong> : ' . $toot->error . '</p>',
+                        'class' => 'error',
+                    )
+                )
+            );
+        } else {
+            update_option(
+                'autopostToMastodon-notice',
+                serialize(
+                    array(
+                        'message' => '<strong>Mastodon Autopost</strong> : ' . __('Toot successfully sent !', 'autopost-to-mastodon') . ' <a href="' . $toot->url . '" target="_blank">' . __('View Toot', 'autopost-to-mastodon') . '</a>',
+                        'class' => 'success',
+                    )
+                )
+            );
+        }
+        $this->admin_notices();
+    }
+}
+
+$autopostToMastodon = new autopostToMastodon();
diff --git a/wp-content/plugins/autopost-to-mastodon/readme.txt b/wp-content/plugins/autopost-to-mastodon/readme.txt
index f3fe9e91b..738117b56 100644
--- a/wp-content/plugins/autopost-to-mastodon/readme.txt
+++ b/wp-content/plugins/autopost-to-mastodon/readme.txt
@@ -2,10 +2,10 @@
 Contributors: l1am0, Hellexis
 Tags: mastodon, Mastodon, Mastdon Autopost, federated web, GNU social, statusnet, social web, social media, auto post
 Requires at least: 4.6
-Tested up to: 4.9.4
-Stable tag: 3.2.2
+Tested up to: 5.0
+Stable tag: 3.2.6
 License: GPLv2
-Donate link: https://liberapay.com/Mastodon-Auto-Share-Team/donate
+Donate link: https://patreon.com/simonfrey
 License URI: http://www.gnu.org/licenses/gpl-2.0.html
  
 A Wordpress Plugin that automatically posts your new articles to Mastodon. The best: It is set and forget! 
@@ -26,7 +26,7 @@ For any questions, do not hesitate to contact me:
 
 Do you want to help translating this plugin in your language? [Visit the translation page](https://translate.wordpress.org/projects/wp-plugins/autopost-to-mastodon)
 
-Please consider donating via [Liberapay](https://liberapay.com/Mastodon-Auto-Share-Team/donate) <3
+Please consider donating via [Patreon](https://patreon.com/simonfrey), [PayPal](https://paypal.me/51edpo) or [Liberapay](https://liberapay.com/Mastodon-Auto-Share-Team/donate) <3
 
 == Frequently Asked Questions ==
  
@@ -46,6 +46,22 @@ The plugin never transmits any data to me, or anyone else than the mastodon node
 
 == Changelog ==
 
+= 3.2.6 =
+* Change permission for settings page to manage_options
+
+= 3.2.5 =
+* 5.0 Fix: Post only the tags of the post
+
+= 3.2.4 =
+* Add version check to prevent call to undefined 5.0 function
+
+= 3.2.3 =
+* fixup for tags
+* remove hardcoded `[...]` from post excerpt
+* different excerpt function
+* Works with 5.0 and Gutenberg Editor
+* Create future toot the moment it gets tooted (not upfront)
+
 = 3.2.2 =
 * revert change
 
-- 
GitLab