File: /var/www/html/wp-content/plugins/jet-engine/includes/modules/data-stores/inc/stores/manager.php
<?php
namespace Jet_Engine\Modules\Data_Stores\Stores;
use Jet_Engine\Modules\Data_Stores\Module;
class Manager {
private $store_types = array();
private $stores = array();
public function __construct() {
$this->register_store_types();
$this->register_stores();
}
/**
* Register store types
*/
public function register_store_types() {
require jet_engine()->modules->modules_path( 'data-stores/inc/stores/base.php' );
require jet_engine()->modules->modules_path( 'data-stores/inc/stores/cookies.php' );
require jet_engine()->modules->modules_path( 'data-stores/inc/stores/session.php' );
require jet_engine()->modules->modules_path( 'data-stores/inc/stores/user-meta.php' );
require jet_engine()->modules->modules_path( 'data-stores/inc/stores/local-storage.php' );
require jet_engine()->modules->modules_path( 'data-stores/inc/stores/user-ip.php' );
$this->register_store_type( new Cookies_Store() );
$this->register_store_type( new Session_Store() );
$this->register_store_type( new User_Meta_Store() );
$this->register_store_type( new Local_Storage() );
$this->register_store_type( new User_Ip_Store() );
do_action( 'jet-engine/data-stores/register-store-types', $this );
}
/**
* Register store instances
*/
public function register_stores() {
$stores = Module::instance()->settings->get();
if ( ! empty( $stores ) ) {
require jet_engine()->modules->modules_path( 'data-stores/inc/stores/factory.php' );
foreach ( $stores as $store ) {
$this->register_store( $store );
}
require_once jet_engine()->modules->modules_path( 'data-stores/inc/stores/on-view.php' );
new On_View( $this );
require_once jet_engine()->modules->modules_path( 'data-stores/inc/stores/user-ip-schedules.php' );
new User_Ip_Schedules( $this );
}
do_action( 'jet-engine/data-stores/register-stores', $this );
}
/**
* Regsiter new store instance
* $store should be array with next data
* array(
* 'slug' => 'store-slug',
* 'name' => 'store-name',
* 'type' => 'store-type', - one of the reigistered types
* 'size' => 0, - stores max size, set 0 to unlimited size
* )
*/
public function register_store( $store = array() ) {
if ( empty( $store['slug'] ) || empty( $store['type'] ) ) {
return;
}
$store_type = ! empty( $this->store_types[ $store['type'] ] ) ? $this->store_types[ $store['type'] ] : false;
if ( ! $store_type ) {
return;
}
$this->stores[ $store['slug'] ] = new Factory( $store, $store_type );
}
/**
* Register store type
*/
public function register_store_type( $type_instance ) {
$this->store_types[ $type_instance->type_id() ] = $type_instance;
}
/**
* Deregister store type
*
* @param [type] $type_id [description]
* @return [type] [description]
*/
public function unregister_store_type( $type_id ) {
if ( isset( $this->store_types[ $type_id ] ) ) {
$type_instance = $this->store_types[ $type_id ];
$type_instance->on_unregister();
unset( $this->store_types[ $type_id ] );
}
}
/**
* Get registered store instances list
*/
public function get_stores() {
return $this->stores;
}
/**
* Get registered store instances list
*/
public function get_store_types() {
return $this->store_types;
}
/**
* Get store types list for JS
*/
public function get_types_for_js() {
$result =array();
foreach ( $this->store_types as $type ) {
$result[] = array(
'value' => $type->type_id(),
'label' => $type->type_name(),
);
}
return $result;
}
/**
* Return store instance by store slug
*/
public function get_store( $store ) {
return isset( $this->stores[ $store ] ) ? $this->stores[ $store ] : false;
}
}