Skip to content
Snippets Groups Projects
Commit 899720bd authored by Dyszczo's avatar Dyszczo
Browse files

Merge branch 'devel' into 'master'

Devel

See merge request !5
parents cf3162b5 b392d25b
No related branches found
No related tags found
1 merge request!5Devel
<?php
namespace WPDesk\PluginBuilder\BuildDirector;
use WPDesk\PluginBuilder\Builder\AbstractBuilder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
use WPDesk\PluginBuilder\Storage\StorageFactory;
class LegacyBuildDirector {
/** @var AbstractBuilder */
private $builder;
public function __construct( AbstractBuilder $builder ) {
$this->builder = $builder;
}
/**
* Builds plugin
*/
public function build_plugin() {
$this->builder->build_plugin();
$this->builder->init_plugin();
$storage = new StorageFactory();
$this->builder->store_plugin( $storage->create_storage() );
}
/**
* Returns built plugin
*
* @return AbstractPlugin
*/
public function get_plugin() {
return $this->builder->get_plugin();
}
}
\ No newline at end of file
...@@ -3,31 +3,62 @@ ...@@ -3,31 +3,62 @@
namespace WPDesk\PluginBuilder\Builder; namespace WPDesk\PluginBuilder\Builder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin; use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
use WPDesk\PluginBuilder\Storage\PluginStorage;
class AbstractBuilder { abstract class AbstractBuilder {
protected static $instances = []; /**
* Create plugin class
*/
public function build_plugin() {
}
/** /**
* @param string $class * Store plugin class in some kind of storage
* @param AbstractPlugin $object
*/ */
protected function addToStorage( $class, $object ) { public function store_plugin( PluginStorage $storage ) {
if ( isset( self::$instances[ $class ] ) ) {
throw new Exception\ClassAlreadyExists( "Class {$class} already exists" );
} }
self::$instances[ $class ] = $object;
/**
* Init plugin internal structure
*/
public function init_plugin() {
} }
/** /**
* @param string $class * Return built plugin
*
* @return AbstractPlugin * @return AbstractPlugin
*/ */
protected function getFromStorage( $class ) { abstract function get_plugin();
if ( isset( self::$instances[ $class ] ) ) {
return self::$instances[ $class ]; /**
} else { * Set settings class in plugin
throw new Exception\ClassNotExists( "Class {$class} not exists in storage" ); *
* @param $settings
*/
public function set_settings( $settings ) {
} }
/**
* Set view class in plugin
*
* @param $view
*/
public function set_view( $view ) {
}
/**
* Set tracker class in plugin
*
* @param $tracker
*/
public function set_tracker( $tracker ) {
}
/**
* Set helper class in plugin
*
* @param $helper
*/
public function set_helper( $helper ) {
} }
} }
\ No newline at end of file
...@@ -3,40 +3,51 @@ ...@@ -3,40 +3,51 @@
namespace WPDesk\PluginBuilder\Builder; namespace WPDesk\PluginBuilder\Builder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin; use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
use WPDesk\PluginBuilder\Storage\PluginStorage;
class InfoBuilder extends AbstractBuilder { class InfoBuilder extends AbstractBuilder {
const FILTER_PLUGIN_CLASS = 'wp_builder_plugin_class'; const FILTER_PLUGIN_CLASS = 'wp_builder_plugin_class';
const HOOK_BEFORE_PLUGIN_INIT = 'wp_builder_before_plugin_init'; const HOOK_BEFORE_PLUGIN_INIT = 'wp_builder_before_plugin_init';
const HOOK_AFTER_PLUGIN_INIT = 'wp_builder_before_init'; const HOOK_AFTER_PLUGIN_INIT = 'wp_builder_before_init';
/** @var AbstractPlugin */
private $plugin;
/** @var \WPDesk_Buildable */
private $info;
/** @var string */
protected $storage_id;
public function __construct( \WPDesk_Buildable $info ) {
$this->info = $info;
$this->storage_id = $info->get_class_name();
}
/** /**
* Builds instance of plugin * Builds instance of plugin
*
* @param \WPDesk_Plugin_Info $info
* @return AbstractPlugin
*
* @return AbstractPlugin
*/ */
public function build_from_info( \WPDesk_Buildable $info ) { public function build_plugin() {
$class_name = apply_filters( self::FILTER_PLUGIN_CLASS, $info->get_class_name() ); $class_name = apply_filters( self::FILTER_PLUGIN_CLASS, $this->info->get_class_name() );
/** @var AbstractPlugin $plugin */ /** @var AbstractPlugin $plugin */
$plugin = new $class_name( $info ); $this->plugin = new $class_name( $this->info );
$this->addToStorage( $info->get_class_name(), $plugin ); }
do_action( self::HOOK_BEFORE_PLUGIN_INIT, $plugin ); public function store_plugin( PluginStorage $storage ) {
$plugin->init(); $storage->add_to_storage( $this->storage_id, $this->plugin );
do_action( self::HOOK_AFTER_PLUGIN_INIT, $plugin ); }
return $plugin; public function init_plugin() {
do_action( self::HOOK_BEFORE_PLUGIN_INIT, $this->plugin );
$this->plugin->init();
do_action( self::HOOK_AFTER_PLUGIN_INIT, $this->plugin );
} }
/** /**
* @param string $class
*
* @return AbstractPlugin * @return AbstractPlugin
*/ */
public function get_plugin_instance( $class ) { public function get_plugin() {
return $this->getFromStorage( $class ); return $this->plugin;
} }
} }
\ No newline at end of file
...@@ -40,27 +40,6 @@ abstract class AbstractPlugin implements \WPDesk_Translable { ...@@ -40,27 +40,6 @@ abstract class AbstractPlugin implements \WPDesk_Translable {
$this->hooks(); $this->hooks();
} }
/**
* @return $this
*/
public function get_plugin() {
return $this;
}
/**
* @return string
*/
public function get_text_domain() {
return $this->plugin_info->get_text_domain();
}
/**
* @return void
*/
public function load_plugin_text_domain() {
load_plugin_textdomain( $this->get_text_domain(), false, $this->get_namespace() . '/lang/' );
}
public function init_base_variables() { public function init_base_variables() {
$this->plugin_url = plugin_dir_url( $this->plugin_info->get_plugin_dir() ); $this->plugin_url = plugin_dir_url( $this->plugin_info->get_plugin_dir() );
} }
...@@ -69,35 +48,44 @@ abstract class AbstractPlugin implements \WPDesk_Translable { ...@@ -69,35 +48,44 @@ abstract class AbstractPlugin implements \WPDesk_Translable {
* @return void * @return void
*/ */
protected function hooks() { protected function hooks() {
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) ); add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ] );
add_action( 'wp_enqueue_scripts', array( $this, 'wp_enqueue_scripts' ) ); add_action( 'wp_enqueue_scripts', [ $this, 'wp_enqueue_scripts' ] );
add_action( 'plugins_loaded', array( $this, 'load_plugin_text_domain' ) ); add_action( 'plugins_loaded', [ $this, 'load_plugin_text_domain' ] );
add_filter( 'plugin_action_links_' . plugin_basename( $this->get_plugin_file_path() ), array( add_filter( 'plugin_action_links_' . plugin_basename( $this->get_plugin_file_path() ), [
$this, $this,
'links_filter' 'links_filter'
) ); ] );
} }
/** /**
*
* @return string * @return string
*/ */
public function get_plugin_url() { public function get_plugin_file_path() {
return esc_url( trailingslashit( $this->plugin_url ) ); return $this->plugin_info->get_plugin_dir();
} }
public function get_plugin_assets_url() { /**
return esc_url( trailingslashit( $this->get_plugin_url() . 'assets' ) ); * @return $this
*/
public function get_plugin() {
return $this;
}
/**
* @return void
*/
public function load_plugin_text_domain() {
load_plugin_textdomain( $this->get_text_domain(), false, $this->get_namespace() . '/lang/' );
} }
/** /**
* @return string * @return string
*/ */
public function get_plugin_file_path() { public function get_text_domain() {
return $this->plugin_info->get_plugin_dir(); return $this->plugin_info->get_text_domain();
} }
/** /**
...@@ -107,6 +95,18 @@ abstract class AbstractPlugin implements \WPDesk_Translable { ...@@ -107,6 +95,18 @@ abstract class AbstractPlugin implements \WPDesk_Translable {
return $this->plugin_namespace; return $this->plugin_namespace;
} }
public function get_plugin_assets_url() {
return esc_url( trailingslashit( $this->get_plugin_url() . 'assets' ) );
}
/**
*
* @return string
*/
public function get_plugin_url() {
return esc_url( trailingslashit( $this->plugin_url ) );
}
public function admin_enqueue_scripts() { public function admin_enqueue_scripts() {
} }
...@@ -125,22 +125,22 @@ abstract class AbstractPlugin implements \WPDesk_Translable { ...@@ -125,22 +125,22 @@ abstract class AbstractPlugin implements \WPDesk_Translable {
public function links_filter( $links ) { public function links_filter( $links ) {
$support_link = get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/support/' : 'https://www.wpdesk.net/support'; $support_link = get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/support/' : 'https://www.wpdesk.net/support';
$plugin_links = array( $plugin_links = [
'<a href="' . $support_link . '">' . __( 'Support', $this->get_text_domain() ) . '</a>', '<a href="' . $support_link . '">' . __( 'Support', $this->get_text_domain() ) . '</a>',
); ];
$links = array_merge( $plugin_links, $links ); $links = array_merge( $plugin_links, $links );
if ( $this->docs_url ) { if ( $this->docs_url ) {
$plugin_links = array( $plugin_links = [
'<a href="' . $this->docs_url . '">' . __( 'Docs', $this->get_text_domain() ) . '</a>', '<a href="' . $this->docs_url . '">' . __( 'Docs', $this->get_text_domain() ) . '</a>',
); ];
$links = array_merge( $plugin_links, $links ); $links = array_merge( $plugin_links, $links );
} }
if ( $this->settings_url ) { if ( $this->settings_url ) {
$plugin_links = array( $plugin_links = [
'<a href="' . $this->settings_url . '">' . __( 'Settings', $this->get_text_domain() ) . '</a>', '<a href="' . $this->settings_url . '">' . __( 'Settings', $this->get_text_domain() ) . '</a>',
); ];
$links = array_merge( $plugin_links, $links ); $links = array_merge( $plugin_links, $links );
} }
......
<?php <?php
namespace WPDesk\PluginBuilder\Builder\Exception; namespace WPDesk\PluginBuilder\Storage\Exception;
class ClassAlreadyExists extends \RuntimeException class ClassAlreadyExists extends \RuntimeException
{ {
......
<?php <?php
namespace WPDesk\PluginBuilder\Builder\Exception; namespace WPDesk\PluginBuilder\Storage\Exception;
class ClassNotExists extends \RuntimeException class ClassNotExists extends \RuntimeException
{ {
......
<?php
namespace WPDesk\PluginBuilder\Storage;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
interface PluginStorage {
/**
* @param string $class
* @param AbstractPlugin $object
*/
public function add_to_storage( $class, $object );
/**
* @param string $class
*
* @return AbstractPlugin
*/
public function get_from_storage( $class );
}
<?php
namespace WPDesk\PluginBuilder\Storage;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
class StaticStorage implements PluginStorage {
protected static $instances = [];
/**
* @param string $class
* @param AbstractPlugin $object
*/
public function add_to_storage( $class, $object ) {
if ( isset( self::$instances[ $class ] ) ) {
throw new Exception\ClassAlreadyExists( "Class {$class} already exists" );
}
self::$instances[ $class ] = $object;
}
/**
* @param string $class
*
* @return AbstractPlugin
*/
public function get_from_storage( $class ) {
if ( isset( self::$instances[ $class ] ) ) {
return self::$instances[ $class ];
} else {
throw new Exception\ClassNotExists( "Class {$class} not exists in storage" );
}
}
}
<?php
namespace WPDesk\PluginBuilder\Storage;
class StorageFactory {
/**
* @return PluginStorage
*/
public function create_storage() {
return new StaticStorage();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment