ACC SHELL
<?php
/**
* Component
* @package Simple Lightbox
* @subpackage Base
* @author Archetyped
*/
class SLB_Component extends SLB_Base_Object {
/* Properties */
/**
* Pretty name
* @var string
*/
protected $name = '';
protected $props_required = array();
private $props_required_base = array('id');
/* Get/Set */
/**
* Set name
* @param string $name Name
* @return Current instance
*/
public function set_name($name) {
if ( is_string($name) ) {
$name = trim($name);
if ( !empty($name) ) {
$this->name = $name;
}
}
return $this;
}
public function get_name() {
return $this->name;
}
public function set_scripts($scripts) {
$this->add_files('scripts', $scripts);
}
public function set_styles($styles) {
$this->add_files('styles', $styles);
}
/* Assets */
/**
* Get formatted handle for file
* @param string $base_handle Base handle to format
* @return string Formatted handle
*/
public function get_handle($base_handle) {
return $this->add_prefix( array('asset', $this->get_id(), $base_handle), '-');
}
/**
* Enqueue files in client
* @param string $type (optional) Type of file to load (singular) (Default: All client file types)
*/
public function enqueue_client_files($type = null) {
if ( empty($type) ) {
$type = array ( 'script', 'style');
}
if ( !is_array($type) ) {
$type = array ( $type );
}
foreach ( $type as $t ) {
$m = (object) array (
'get' => $this->m('get_' . $t . 's'),
'enqueue' => 'wp_enqueue_' . $t,
);
$v = $this->util->get_plugin_version();
$files = call_user_func($m->get);
$param_final = ( 'script' == $t ) ? true : 'all';
foreach ( $files as $f ) {
$f = (object) $f;
// Format handle
$handle = $this->get_handle($f->handle);
// Format dependencies
$deps = array();
foreach ( $f->deps as $dep ) {
if ( $this->util->has_wrapper($dep) ) {
$dep = $this->get_handle( $this->util->remove_wrapper($dep) );
}
$deps[] = $dep;
}
call_user_func($m->enqueue, $handle, $f->uri, $deps, $v, $param_final);
}
unset($files, $f, $param_final, $handle, $deps, $dep);
}
}
/**
* Enqueue scripts
*/
public function enqueue_scripts() {
$this->enqueue_client_files('script');
}
/**
* Enqueue styles
*/
public function enqueue_styles() {
$this->enqueue_client_files('style');
}
/* Helpers */
/**
* Validate instance
* @see `Base_Object::is_valid()`
* @return bool Valid (TRUE) / Invalid (FALSE)
*/
public function is_valid() {
$ret = parent::is_valid();
if ( $ret ) {
// Check required component properties
$props = array_merge($this->props_required_base, $this->props_required);
foreach ( $props as $prop ) {
if ( !isset($this->{$prop}) || empty($this->{$prop}) ) {
$ret = false;
break;
}
}
}
return $ret;
}
}
ACC SHELL 2018