212 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| class S2_Block_Editor {
 | |
| 	/**
 | |
| 	 * Constructor
 | |
| 	 */
 | |
| 	public function __construct() {
 | |
| 		// maybe use dev scripts
 | |
| 		$this->script_debug = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
 | |
| 
 | |
| 		add_action( 'init', array( &$this, 'register_s2_meta' ) );
 | |
| 		add_action( 'rest_api_init', array( $this, 'register_preview_endpoint' ) );
 | |
| 		add_action( 'rest_api_init', array( $this, 'register_resend_endpoint' ) );
 | |
| 		add_action( 'rest_api_init', array( $this, 'register_settings_endpoint' ) );
 | |
| 
 | |
| 		if ( is_admin() ) {
 | |
| 			add_action( 'enqueue_block_editor_assets', array( &$this, 'gutenberg_block_editor_assets' ), 6 );
 | |
| 			add_action( 'enqueue_block_editor_assets', array( &$this, 'gutenberg_i18n' ), 6 );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Register _s2mail meta data for Block Editor
 | |
| 	 */
 | |
| 	public function register_s2_meta() {
 | |
| 		register_meta(
 | |
| 			'post',
 | |
| 			'_s2mail',
 | |
| 			array(
 | |
| 				'show_in_rest'  => true,
 | |
| 				'single'        => true,
 | |
| 				'type'          => 'string',
 | |
| 				'auth_callback' => function() {
 | |
| 					return current_user_can( 'edit_posts' );
 | |
| 				},
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Register REST endpoints for preview email
 | |
| 	 */
 | |
| 	public function register_preview_endpoint() {
 | |
| 		register_rest_route(
 | |
| 			's2/v1',
 | |
| 			'/preview/(?P<id>[0-9]+)',
 | |
| 			array(
 | |
| 				'methods'             => WP_REST_Server::READABLE,
 | |
| 				'callback'            => array( $this, 'preview' ),
 | |
| 				'args'                => array(
 | |
| 					'id' => array(
 | |
| 						'validate_callback' => function( $param ) {
 | |
| 							return is_numeric( $param );
 | |
| 						},
 | |
| 					),
 | |
| 				),
 | |
| 				'permission_callback' => function () {
 | |
| 					return current_user_can( 'edit_posts' );
 | |
| 				},
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Register REST endpoints for resending emails
 | |
| 	 */
 | |
| 	public function register_resend_endpoint() {
 | |
| 		register_rest_route(
 | |
| 			's2/v1',
 | |
| 			'/resend/(?P<id>[0-9]+)',
 | |
| 			array(
 | |
| 				'methods'             => WP_REST_Server::READABLE,
 | |
| 				'callback'            => array( $this, 'resend' ),
 | |
| 				'args'                => array(
 | |
| 					'id' => array(
 | |
| 						'validate_callback' => function( $param ) {
 | |
| 							return is_numeric( $param );
 | |
| 						},
 | |
| 					),
 | |
| 				),
 | |
| 				'permission_callback' => function () {
 | |
| 					return current_user_can( 'edit_posts' );
 | |
| 				},
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Register REST endpoints for surfacing settings
 | |
| 	 */
 | |
| 	public function register_settings_endpoint() {
 | |
| 		register_rest_route(
 | |
| 			's2/v1',
 | |
| 			'/settings/(?P<setting>[a-z0-9_]+)',
 | |
| 			array(
 | |
| 				'methods'             => WP_REST_Server::READABLE,
 | |
| 				'callback'            => array( $this, 'setting' ),
 | |
| 				'args'                => array(
 | |
| 					'id' => array(
 | |
| 						'validate_callback' => function( $param ) {
 | |
| 							return preg_match( '/^[a-z0-9_]+$/', $param ) > 0;
 | |
| 						},
 | |
| 					),
 | |
| 				),
 | |
| 				'permission_callback' => function () {
 | |
| 					return current_user_can( 'edit_posts' );
 | |
| 				},
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Function to trigger Preview email on REST API request
 | |
| 	 */
 | |
| 	public function preview( $data ) {
 | |
| 		global $mysubscribe2;
 | |
| 		$post = get_post( intval( $data['id'] ) );
 | |
| 
 | |
| 		$current_user = wp_get_current_user();
 | |
| 		if ( 0 === $current_user->ID ) {
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		if ( 'never' !== $this->subscribe2_options['email_freq'] ) {
 | |
| 			$mysubscribe2->subscribe2_cron( $current_user->user_email );
 | |
| 		} else {
 | |
| 			$mysubscribe2->publish( $post, $current_user->user_email );
 | |
| 		}
 | |
| 
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Function to trigger resending of email on REST API request
 | |
| 	 */
 | |
| 	public function resend( $data ) {
 | |
| 		global $mysubscribe2;
 | |
| 		$post = get_post( intval( $data['id'] ) );
 | |
| 
 | |
| 		$current_user = wp_get_current_user();
 | |
| 		if ( 0 === $current_user->ID ) {
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		$mysubscribe2->publish( $post );
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Function to return value for passed setting
 | |
| 	 */
 | |
| 	public function setting( $data ) {
 | |
| 		global $mysubscribe2;
 | |
| 		if ( array_key_exists( $data['setting'], $mysubscribe2->subscribe2_options ) ) {
 | |
| 			return $mysubscribe2->subscribe2_options[ $data['setting'] ];
 | |
| 		}
 | |
| 
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Enqueue Block Editor assets
 | |
| 	 */
 | |
| 	public function gutenberg_block_editor_assets() {
 | |
| 		wp_enqueue_script(
 | |
| 			'subscribe2-shortcode',
 | |
| 			S2URL . 'gutenberg/shortcode' . $this->script_debug . '.js',
 | |
| 			array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-components', 'wp-editor' ),
 | |
| 			'1.1',
 | |
| 			true
 | |
| 		);
 | |
| 
 | |
| 		register_block_type(
 | |
| 			'subscribe2-html/shortcode',
 | |
| 			array(
 | |
| 				'editor_script' => 'subscribe2-shortcode',
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		wp_enqueue_script(
 | |
| 			'subscribe2-sidebar',
 | |
| 			S2URL . 'gutenberg/sidebar' . $this->script_debug . '.js',
 | |
| 			array( 'wp-plugins', 'wp-element', 'wp-i18n', 'wp-edit-post', 'wp-components', 'wp-data', 'wp-compose', 'wp-api-fetch' ),
 | |
| 			'1.1',
 | |
| 			true
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Handle translation of Block Editor assets
 | |
| 	 */
 | |
| 	public function gutenberg_i18n() {
 | |
| 		$translations = get_translations_for_domain( 'subscribe2' );
 | |
| 
 | |
| 		$locale_data = array(
 | |
| 			'' => array(
 | |
| 				'domain'       => 'subscribe2',
 | |
| 				'lang'         => get_user_locale(),
 | |
| 				'plural_forms' => 'nplurals=2; plural=n != 1;',
 | |
| 			),
 | |
| 		);
 | |
| 
 | |
| 		foreach ( $translations->entries as $msgid => $entry ) {
 | |
| 			$locale_data[ $msgid ] = $entry->translations;
 | |
| 		}
 | |
| 
 | |
| 		wp_add_inline_script(
 | |
| 			'wp-i18n',
 | |
| 			'wp.i18n.setLocaleData( ' . wp_json_encode( $locale_data ) . ', "subscribe2" );'
 | |
| 		);
 | |
| 	}
 | |
| }
 |