Skip to content
Snippets Groups Projects
Select Git revision
  • c48871ff0813ed2064b68d89e35f6e5614718a3f
  • master default protected
  • devel
  • feature/add-escaping-to-templates
  • feature/add-priority-sorting
  • 3.3.0
  • 3.2.1
  • 3.2.0
  • 3.1.0
  • 3.0.0
  • 2.4.12
  • 2.4.11
  • 2.4.10
  • 2.4.9
  • 2.4.8
  • 2.4.7
  • 2.4.6
  • 2.4.5
  • 2.4.4
  • 2.4.2
  • 2.4.1
  • 2.4.0
  • 2.3.2
  • 2.3.1
  • 2.3
25 results

TextAreaField.php

Blame
  • AbstractPlugin.php 5.17 KiB
    <?php
    
    namespace WPDesk\PluginBuilder\Plugin;
    
    /**
     * Base plugin with most basic functionalities used by every WPDesk plugin.
     *
     *
     * Known issues:
     *
     * The class name is too generic but can't be changed as it would introduce a major incompatibility for most of the plugins.
     * The $plugin_url, $docs_url and most other fields should be removed as they only litter the place but for compatibility reasons we can't do it right now.
     * Hook methods should be moved to external classes but for compatibility reasons we can't do it right now.
     */
    abstract class AbstractPlugin extends SlimPlugin {
    
    	/**
    	 * Most info about plugin internals.
    	 *
    	 * @var \WPDesk_Plugin_Info
    	 */
    	protected $plugin_info;
    
    	/**
    	 * Unique string for this plugin in [a-z_]+ format.
    	 *
    	 * @var string
    	 */
    	protected $plugin_namespace;
    
    	/**
    	 * Absolute URL to the plugin dir.
    	 *
    	 * @var string
    	 */
    	protected $plugin_url;
    
    	/**
    	 * Absolute URL to the plugin docs.
    	 *
    	 * @var string
    	 */
    	protected $docs_url;
    
    	/**
    	 * Absolute URL to the plugin settings url.
    	 *
    	 * @var string
    	 */
    	protected $settings_url;
    
    	/**
    	 * Support URL.
    	 *
    	 * @var string
    	 */
    	protected $support_url;
    
    	/**
    	 * AbstractPlugin constructor.
    	 *
    	 * @param \WPDesk_Plugin_Info $plugin_info
    	 */
    	public function __construct( $plugin_info ) {
    		$this->plugin_info      = $plugin_info;
    		$this->plugin_namespace = strtolower( $plugin_info->get_plugin_dir() );
    		$this->plugin_url       = $this->plugin_info->get_plugin_url();
    		$this->init_base_variables();
    	}
    
    	/**
    	 * Initialize internal state of the plugin.
    	 *
    	 * @return void
    	 * @deprecated Just use __construct to initialize plugin internal state.
    	 *
    	 */
    	public function init_base_variables() {
    	}
    
    	/**
    	 * Initializes plugin external state.
    	 *
    	 * The plugin internal state is initialized in the constructor and the plugin should be internally consistent after creation.
    	 * The external state includes hooks execution, communication with other plugins, integration with WC etc.
    	 *
    	 * @return void
    	 */
    	public function init() {
    		$this->hooks();
    	}
    
    	/**
    	 * Returns absolute path to the plugin dir.
    	 *
    	 * @return string
    	 */
    	public function get_plugin_file_path() {
    		return $this->plugin_info->get_plugin_file_name();
    	}
    
    	/**
    	 * Returns plugin text domain.
    	 *
    	 * @return string
    	 */
    	public function get_text_domain() {
    		return $this->plugin_info->get_text_domain();
    	}
    
    	/**
    	 * Returns unique string for plugin in [a-z_]+ format. Can be used as plugin id in various places like plugin slug etc.
    	 *
    	 * @return string
    	 */
    	public function get_namespace() {
    		return $this->plugin_namespace;
    	}
    
    	/**
    	 * Returns plugin absolute URL.
    	 *
    	 * @return string
    	 */
    	public function get_plugin_url() {
    		return esc_url( trailingslashit( $this->plugin_url ) );
    	}
    
    	/**
    	 * Returns plugin absolute URL to dir with front end assets.
    	 *
    	 * @return string
    	 */
    	public function get_plugin_assets_url() {
    		return esc_url( trailingslashit( $this->get_plugin_url() . 'assets' ) );
    	}
    
    	/**
    	 * @return $this
    	 * @deprecated For backward compatibility.
    	 *
    	 */
    	public function get_plugin() {
    		return $this;
    	}
    
    	/**
    	 * Integrate with WordPress and with other plugins using action/filter system.
    	 *
    	 * @return void
    	 */
    	protected function hooks() {
    		add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] );
    		add_action( 'wp_enqueue_scripts', [ $this, 'wp_enqueue_scripts' ] );
    		add_action( 'plugins_loaded', [ $this, 'load_plugin_text_domain' ] );
    		add_filter( 'plugin_action_links_' . plugin_basename( $this->get_plugin_file_path() ), [
    			$this,
    			'links_filter'
    		] );
    	}
    	/**
    	 * Initialize plugin test domain. This is a hook function. Do not execute directly.
    	 *
    	 * @return void
    	 */
    	public function load_plugin_text_domain() {
    		load_plugin_textdomain( $this->get_text_domain(), '', $this->get_namespace() . '/lang/' );
    	}
    	/**
    
    	 * Append JS scripts in the WordPress admin panel. This is a hook function. Do not execute directly.
    	 *
    	 * @return void
    	 */
    	public function admin_enqueue_scripts() {
    	}
    
    	/**
    	 * Append JS scripts in WordPress. This is a hook function. Do not execute directly.
    	 *
    	 * @return void
    	 */
    	public function wp_enqueue_scripts() {
    	}
    
    	/**
    	 * Initialize plugin admin links. This is a hook function. Do not execute directly.
    	 *
    	 * @param string[] $links
    	 *
    	 * @return string[]
    	 */
    	public function links_filter( $links ) {
    		$support_link = get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/support/' : 'https://www.wpdesk.net/support';
    
    		if ( $this->support_url ) {
    			$support_link = $this->support_url;
    		}
    
    		$plugin_links = [
    			'<a target="_blank" href="' . $support_link . '">' . esc_html__( 'Support', 'wpdesk-wp-builder' ) . '</a>',
    		];
    		$links        = array_merge( $plugin_links, $links );
    
    		if ( $this->docs_url ) {
    			$plugin_links = [
    				'<a target="_blank" href="' . $this->docs_url . '">' . esc_html__( 'Docs', 'wpdesk-wp-builder' ) . '</a>',
    			];
    			$links        = array_merge( $plugin_links, $links );
    		}
    
    		if ( $this->settings_url ) {
    			$plugin_links = [
    				'<a href="' . $this->settings_url . '">' . esc_html__( 'Settings', 'wpdesk-wp-builder' ) . '</a>',
    			];
    			$links        = array_merge( $plugin_links, $links );
    		}
    
    		return $links;
    	}
    
    }