- extensions class for future integrations;

This commit is contained in:
nikitozzzzzzz
2018-11-28 11:13:51 +02:00
parent 304845b255
commit 9304f7a982
4 changed files with 313 additions and 8 deletions
+20 -5
View File
@@ -77,6 +77,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) {
add_action( 'in_plugin_update_message-' . um_plugin, array( $this, 'in_plugin_update_message' ) );
}
/**
* Function for major updates
*
@@ -134,17 +135,31 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) {
}
/**
* @return array
*/
function get_extension_upgrades() {
$extensions = UM()->extensions()->get_list();
if ( empty( $extensions ) ) {
return array();
}
$upgrades = array();
foreach ( $extensions as $extension ) {
$upgrades[ $extension ] = UM()->extensions()->get_packages( $extension );
}
return $upgrades;
}
/**
* Get array of necessary upgrade packages
*
* @return array
*/
function need_run_upgrades() {
$um_last_version_upgrade = get_option( 'um_last_version_upgrade' );
//first install
if ( ! $um_last_version_upgrade ) {
$um_last_version_upgrade = '1.3.88';
}
$um_last_version_upgrade = get_option( 'um_last_version_upgrade', '1.3.88' );
$diff_packages = array();
+230
View File
@@ -0,0 +1,230 @@
<?php
namespace um;
// Exit if executed directly
if ( ! defined( 'ABSPATH' ) ) exit;
if ( ! class_exists( 'um\Extensions' ) ) {
/**
* Class Extensions
*
* @package um
*
* @method void bbpress_activation()
*/
class Extensions {
/**
* Extensions list
*
* @var array
*/
var $list = array();
/**
* Extensions data
*
* @var array
*/
var $plugin_data = array();
/**
* Extensions constructor.
*/
function __construct() {
}
/**
*
*/
function check_dependencies() {
$extensions = $this->get_list();
foreach ( $extensions as $slug ) {
$extension = $this->get_info( $slug );
list( $run, $slug, $message ) = apply_filters_ref_array( 'um_extension_custom_dependencies', array( true, $slug, '' ) );
if ( $run ) {
$compare_version_result = UM()->dependencies()->compare_versions( $extension['min_core_version'], $extension['version'], $slug, $extension['title'] );
if ( true !== $compare_version_result ) {
UM()->notices()->add_notice( "{$slug}_dependencies", array(
'class' => 'error',
'message' => '<p>' . $compare_version_result . '</p>',
), 1 );
}
} elseif ( ! $run && ! empty( $message ) ) {
UM()->notices()->add_notice( "{$slug}_dependencies", array(
'class' => 'error',
'message' => $message,
), 1 );
}
if ( $run ) {
UM()->call_class( "um_ext\um_{$slug}\Init" );
}
}
}
/**
* @param $settings
*
* @return mixed
*/
function license_options( $settings ) {
$extensions = $this->get_list();
if ( empty( $extensions ) ) {
return $settings;
}
foreach ( $extensions as $slug ) {
$extension = $this->get_info( $slug );
if ( isset( $extension['plan'] ) && $extension['plan'] == 'free' ) {
continue;
}
$settings['licenses']['fields'][] = array(
'id' => "um_{$slug}_license_key",
'label' => sprintf( __( '%s License Key', 'ultimate-member' ), $extension['title'] ),
'item_name' => $extension['item_name'],
'author' => 'Ultimate Member',
'version' => $extension['version'],
);
}
return $settings;
}
/**
* Loading Extensions localizations
*/
function localization() {
$extensions = $this->get_list();
foreach ( $extensions as $slug ) {
$extension = $this->get_info( $slug );
$locale = ( get_locale() != '' ) ? get_locale() : 'en_US';
load_textdomain( $extension['textdomain'], WP_LANG_DIR . '/plugins/' . $extension['textdomain'] . '-' . $locale . '.mo');
load_plugin_textdomain( $extension['textdomain'], false, dirname( $extension['plugin'] ) . '/languages/' );
}
}
/**
* @param $slug
*
* @return string
*/
function get_version( $slug ) {
$version = '';
return $version;
}
/**
* @param $slug
* @param bool $field
*
* @return array|bool
*/
function get_info( $slug, $field = false ) {
if ( ! $field ) {
return ! empty( $this->plugin_data[ $slug ] ) ? $this->plugin_data[ $slug ] : array();
} else {
return ! empty( $this->plugin_data[ $slug ][ $field ] ) ? $this->plugin_data[ $slug ][ $field ] : false;
}
}
/**
* @param string $slug
* @param array $plugin_data
*/
function add( $slug, $plugin_data ) {
$this->list[] = $slug;
$this->plugin_data[ $slug ] = $plugin_data;
}
/**
* Activate Extension Process
* Common functions in activation
*
* @param $slug
*/
function activate( $slug ) {
$plugin_data = $this->get_info( $slug );
//if extension wasn't inited, init it firstly via "um_{$slug}_add" function
//"um_{$slug}_add" must be in the preset structure of UM extension
if ( empty( $plugin_data ) && function_exists( "um_{$slug}_add" ) ) {
call_user_func( "um_{$slug}_add" );
$plugin_data = $this->get_info( $slug );
}
//first install
$version = get_option( "um_{$slug}_version" );
if ( ! $version ) {
update_option( "um_{$slug}_last_version_upgrade", $plugin_data['version'] );
}
if ( $version != $plugin_data['version'] ) {
update_option( "um_{$slug}_version", $plugin_data['version'] );
}
//start setup
UM()->extension( $slug )->setup()->start();
}
/**
* @return array
*/
function get_list() {
return $this->list;
}
function get_packages( $slug ) {
$plugin_info = $this->get_info( $slug );
$packages_dir = $plugin_info['path'] . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'admin' . DIRECTORY_SEPARATOR . 'core' . DIRECTORY_SEPARATOR . 'packages';
$update_versions = array();
$handle = opendir( $packages_dir );
if ( $handle ) {
while ( false !== ( $filename = readdir( $handle ) ) ) {
if ( $filename != '.' && $filename != '..' ) {
if ( is_dir( $packages_dir . DIRECTORY_SEPARATOR . $filename ) ) {
$update_versions[] = $filename;
}
}
}
closedir( $handle );
usort( $update_versions, array( UM()->admin_upgrade(), 'version_compare_sort' ) );
}
return $update_versions;
}
}
}
+1 -1
View File
@@ -1,5 +1,6 @@
<?php if ( ! defined( 'ABSPATH' ) ) exit;
if ( ! class_exists( 'UM_Functions' ) ) {
@@ -327,6 +328,5 @@ if ( ! class_exists( 'UM_Functions' ) ) {
$cpt = apply_filters( 'um_cpt_list', array( 'um_form', 'um_directory' ) );
return $cpt;
}
}
}
+62 -2
View File
@@ -198,6 +198,8 @@ if ( ! class_exists( 'UM' ) ) {
// include hook files
add_action( 'plugins_loaded', array( &$this, 'init' ), 0 );
//run hook for extensions init
add_action( 'plugins_loaded', array( &$this, 'extensions_init' ), -19 );
add_action( 'init', array( &$this, 'old_update_patch' ), 0 );
@@ -478,6 +480,14 @@ if ( ! class_exists( 'UM' ) ) {
}
/**
*
*/
function extensions_init() {
do_action( 'um_core_loaded' );
}
/**
* Include required core files used in admin and on the frontend.
*
@@ -541,8 +551,45 @@ if ( ! class_exists( 'UM' ) ) {
$this->mobile();
$this->external_integrations();
$this->gdpr();
//$this->uploader();
}
/**
* Get extension API
*
* @since 2.0.34
*
* @param $slug
*
* @return um_ext\um_bbpress\Init
*/
function extension( $slug ) {
if ( empty( $this->classes[ $slug ] ) ) {
$class = "um_ext\um_{$slug}\Init";
/**
* @var $class um_ext\um_bbpress\Init
*/
$this->classes[ $slug ] = $class::instance();
}
return $this->classes[ $slug ];
}
/**
* @param $class
*
* @return mixed
*/
function call_class( $class ) {
$key = strtolower( $class );
if ( empty( $this->classes[ $key ] ) ) {
$this->classes[ $key ] = new $class;
}
return $this->classes[ $key ];
}
@@ -844,6 +891,19 @@ if ( ! class_exists( 'UM' ) ) {
}
/**
* @since 2.0.34
*
* @return um\Extensions
*/
function extensions() {
if ( empty( $this->classes['extensions'] ) ) {
$this->classes['extensions'] = new um\Extensions();
}
return $this->classes['extensions'];
}
/**
* @since 2.0