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 @@
namespace WPDesk\PluginBuilder\Builder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
use WPDesk\PluginBuilder\Storage\PluginStorage;
class AbstractBuilder {
protected static $instances = [];
abstract class AbstractBuilder {
/**
* Create plugin class
*/
public function build_plugin() {
}
/**
* @param string $class
* @param AbstractPlugin $object
* Store plugin class in some kind of storage
*/
protected function addToStorage( $class, $object ) {
if ( isset( self::$instances[ $class ] ) ) {
throw new Exception\ClassAlreadyExists( "Class {$class} already exists" );
public function store_plugin( PluginStorage $storage ) {
}
self::$instances[ $class ] = $object;
/**
* Init plugin internal structure
*/
public function init_plugin() {
}
/**
* @param string $class
*
* Return built plugin
* @return AbstractPlugin
*/
protected function getFromStorage( $class ) {
if ( isset( self::$instances[ $class ] ) ) {
return self::$instances[ $class ];
} else {
throw new Exception\ClassNotExists( "Class {$class} not exists in storage" );
abstract function get_plugin();
/**
* Set settings class in plugin
*
* @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 @@
namespace WPDesk\PluginBuilder\Builder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
use WPDesk\PluginBuilder\Storage\PluginStorage;
class InfoBuilder extends AbstractBuilder {
const FILTER_PLUGIN_CLASS = 'wp_builder_plugin_class';
const HOOK_BEFORE_PLUGIN_INIT = 'wp_builder_before_plugin_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
*
* @param \WPDesk_Plugin_Info $info
* @return AbstractPlugin
*
* @return AbstractPlugin
*/
public function build_from_info( \WPDesk_Buildable $info ) {
$class_name = apply_filters( self::FILTER_PLUGIN_CLASS, $info->get_class_name() );
public function build_plugin() {
$class_name = apply_filters( self::FILTER_PLUGIN_CLASS, $this->info->get_class_name() );
/** @var AbstractPlugin $plugin */
$plugin = new $class_name( $info );
$this->addToStorage( $info->get_class_name(), $plugin );
$this->plugin = new $class_name( $this->info );
}
do_action( self::HOOK_BEFORE_PLUGIN_INIT, $plugin );
$plugin->init();
do_action( self::HOOK_AFTER_PLUGIN_INIT, $plugin );
public function store_plugin( PluginStorage $storage ) {
$storage->add_to_storage( $this->storage_id, $this->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
*/
public function get_plugin_instance( $class ) {
return $this->getFromStorage( $class );
public function get_plugin() {
return $this->plugin;
}
}
\ No newline at end of file
......@@ -40,27 +40,6 @@ abstract class AbstractPlugin implements \WPDesk_Translable {
$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() {
$this->plugin_url = plugin_dir_url( $this->plugin_info->get_plugin_dir() );
}
......@@ -69,35 +48,44 @@ abstract class AbstractPlugin implements \WPDesk_Translable {
* @return void
*/
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_filter( 'plugin_action_links_' . plugin_basename( $this->get_plugin_file_path() ), array(
add_action( 'plugins_loaded', [ $this, 'load_plugin_text_domain' ] );
add_filter( 'plugin_action_links_' . plugin_basename( $this->get_plugin_file_path() ), [
$this,
'links_filter'
) );
] );
}
/**
*
* @return string
*/
public function get_plugin_url() {
return esc_url( trailingslashit( $this->plugin_url ) );
public function get_plugin_file_path() {
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
*/
public function get_plugin_file_path() {
return $this->plugin_info->get_plugin_dir();
public function get_text_domain() {
return $this->plugin_info->get_text_domain();
}
/**
......@@ -107,6 +95,18 @@ abstract class AbstractPlugin implements \WPDesk_Translable {
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() {
}
......@@ -125,22 +125,22 @@ abstract class AbstractPlugin implements \WPDesk_Translable {
public function links_filter( $links ) {
$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>',
);
];
$links = array_merge( $plugin_links, $links );
if ( $this->docs_url ) {
$plugin_links = array(
$plugin_links = [
'<a href="' . $this->docs_url . '">' . __( 'Docs', $this->get_text_domain() ) . '</a>',
);
];
$links = array_merge( $plugin_links, $links );
}
if ( $this->settings_url ) {
$plugin_links = array(
$plugin_links = [
'<a href="' . $this->settings_url . '">' . __( 'Settings', $this->get_text_domain() ) . '</a>',
);
];
$links = array_merge( $plugin_links, $links );
}
......
<?php
namespace WPDesk\PluginBuilder\Builder\Exception;
namespace WPDesk\PluginBuilder\Storage\Exception;
class ClassAlreadyExists extends \RuntimeException
{
......
<?php
namespace WPDesk\PluginBuilder\Builder\Exception;
namespace WPDesk\PluginBuilder\Storage\Exception;
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