Skip to content
Snippets Groups Projects
Commit 2b76d70f authored by Krzysztof Dyszczyk's avatar Krzysztof Dyszczyk
Browse files

alpha version of builder

parent 1b4aadda
No related branches found
No related tags found
1 merge request!1alpha version of builder
{
"name": "wpdesk/wp-builder",
"authors": [
{
"name": "Krzysiek",
"email": "krzysiek@wpdesk.pl"
}
],
"require": {
"php": ">=5.5"
},
"require-dev": {
"phpunit/phpunit": "<7",
"wp-coding-standards/wpcs": "^0.14.1",
"squizlabs/php_codesniffer": "^3.0.2",
"mockery/mockery": "*",
"10up/wp_mock": "*",
"wimg/php-compatibility": "^8"
},
"autoload": {
"psr-4": {"WPDesk\\PluginBuilder\\": "src/"}
},
"autoload-dev": {
},
"scripts": {
"phpcs": "phpcs",
"phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
"phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
"phpunit-integration": "phpunit --configuration phpunit-integration.xml --coverage-text --colors=never",
"phpunit-integration-fast": "phpunit --configuration phpunit-integration.xml --no-coverage"
}
}
<?php
namespace WPDesk\PluginBuilder\Builder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
class AbstractBuilder
{
const FILTER_PLUGIN_CLASS = 'wpdesk_plugin_class';
const HOOK_BEFORE_PLUGIN_INIT = 'wpdesk_before_plugin_init';
const HOOK_AFTER_PLUGIN_INIT = 'wpdesk_before_afterinit';
protected static $instances = [];
/**
* @param string $class
* @param AbstractPlugin $object
*/
protected function addToStorage($class, $object) {
if (isset(self::$instances[$class])) {
throw new Exception\ClassAlreadyExists("Class {$class} already exists");
}
self::$instances[$class] = $object;
}
/**
* @param string $class
*
* @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");
}
}
}
\ No newline at end of file
<?php
namespace WPDesk\PluginBuilder\Builder\Exception;
class ClassAlreadyExists extends \RuntimeException
{
}
\ No newline at end of file
<?php
namespace WPDesk\PluginBuilder\Builder\Exception;
class ClassNotExists extends \RuntimeException
{
}
\ No newline at end of file
<?php
namespace WPDesk\PluginBuilder\Builder;
use WPDesk\PluginBuilder\Plugin\AbstractPlugin;
class InfoBuilder extends AbstractBuilder
{
const FILTER_PLUGIN_CLASS = 'wpdesk_plugin_class';
const HOOK_BEFORE_PLUGIN_INIT = 'wpdesk_before_plugin_init';
const HOOK_AFTER_PLUGIN_INIT = 'wpdesk_before_afterinit';
/**
* Builds instance of plugin
*
* @return AbstractPlugin
*/
public function build_from_info(\WPDesk_Plugin_Info $info)
{
$class_name = apply_filters( self::FILTER_PLUGIN_CLASS, $info->get_class_name() );
/** @var AbstractPlugin $plugin */
$plugin = new $class_name($info);
$this->addToStorage($info->get_class_name(), $plugin);
do_action(self::HOOK_BEFORE_PLUGIN_INIT, $plugin);
$plugin->init();
do_action(self::HOOK_AFTER_PLUGIN_INIT, $plugin);
return $plugin;
}
/**
* @param string $class
*
* @return AbstractPlugin
*/
public function get_plugin_instance($class) {
return $this->getFromStorage($class);
}
}
\ No newline at end of file
<?php
namespace WPDesk\PluginBuilder\Plugin;
/**
* Base plugin class for WP Desk plugins
*
* @author Grzegorz
*
*/
abstract class AbstractPlugin {
/** @var \WPDesk_PluginInfo */
protected $plugin_info;
/** @var string */
protected $plugin_namespace;
/** @var string */
protected $plugin_url;
/** @var string */
protected $docs_url;
/** @var string */
protected $settings_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_class_name()); // ?? NOT SURE
}
public function init() {
$this->init_base_variables();
$this->load_plugin_text_domain();
$this->hooks();
}
/**
* @return $this
*/
public function get_plugin() {
return $this;
}
/**
* @return string
*/
public function get_text_domain() {
return $this->get_namespace();
}
/**
* @return void
*/
public function load_plugin_text_domain() {
$plugin_translation = 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() );
}
/**
* @return void
*/
protected function hooks() {
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
add_action( 'wp_enqueue_scripts', array( $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(
$this,
'links_filter'
) );
}
/**
*
* @return string
*/
public function get_plugin_url() {
return esc_url( trailingslashit( $this->plugin_url ) );
}
public function get_plugin_assets_url() {
return esc_url( trailingslashit( $this->get_plugin_url() . 'assets' ) );
}
/**
* @return string
*/
public function get_plugin_file_path() {
return $this->plugin_info->get_plugin_dir();
}
/**
* @return string
*/
public function get_namespace() {
return $this->plugin_namespace;
}
public function admin_enqueue_scripts( ) {
}
public function wp_enqueue_scripts() {
}
/**
* action_links function.
*
* @access public
*
* @param mixed $links
*
* @return array
*/
public function links_filter( $links ) {
$support_link = get_locale() === 'pl_PL' ? 'https://www.wpdesk.pl/support/' : 'https://www.wpdesk.net/support';
$plugin_links = array(
'<a href="' . $support_link . '">' . __( 'Support', 'wpdesk-plugin' ) . '</a>',
);
$links = array_merge( $plugin_links, $links );
if ( $this->docs_url ) {
$plugin_links = array(
'<a href="' . $this->docs_url . '">' . __( 'Docs', 'wpdesk-plugin' ) . '</a>',
);
$links = array_merge( $plugin_links, $links );
}
if ( $this->settings_url ) {
$plugin_links = array(
'<a href="' . $this->settings_url . '">' . __( 'Settings', 'wpdesk-plugin' ) . '</a>',
);
$links = array_merge( $plugin_links, $links );
}
return $links;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment