344 lines
7.6 KiB
PHP
344 lines
7.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Base Object
|
|
* @package Simple Lightbox
|
|
* @subpackage Base
|
|
* @author Archetyped
|
|
*/
|
|
class SLB_Base_Object extends SLB_Base {
|
|
/* Configuration */
|
|
|
|
/**
|
|
* @var string
|
|
* @see Base::$mode
|
|
*/
|
|
protected $mode = 'object';
|
|
|
|
/*-** Properties **-*/
|
|
|
|
/**
|
|
* Unique ID
|
|
* @var string
|
|
*/
|
|
protected $id = '';
|
|
|
|
/**
|
|
* Parent object
|
|
* @var Base_Object
|
|
*/
|
|
protected $parent = null;
|
|
|
|
/**
|
|
* Attached files
|
|
* @var array
|
|
* > scripts array JS scripts
|
|
* > styles array Stylesheets
|
|
*/
|
|
protected $files = array(
|
|
'scripts' => array(),
|
|
'styles' => array(),
|
|
);
|
|
|
|
/**
|
|
* Properties that can be inherited from parent
|
|
* @var array
|
|
*/
|
|
protected $parent_props = array();
|
|
|
|
/*-** Methods **-*/
|
|
|
|
/**
|
|
* Constructor
|
|
* @param string $id Unique ID for content type
|
|
* @param array $props (optional) Type properties (optional because props can be set post-init)
|
|
*/
|
|
public function __construct( $id, $props = null ) {
|
|
parent::__construct();
|
|
$this
|
|
->set_id( $id )
|
|
->set_props( $props );
|
|
}
|
|
|
|
/**
|
|
* Checks if object is valid
|
|
* To be overriden by child classes
|
|
*/
|
|
public function is_valid() {
|
|
return true;
|
|
}
|
|
|
|
/*-** Getters/Setters **-*/
|
|
|
|
/**
|
|
* Get ID
|
|
* @return string ID
|
|
*/
|
|
public function get_id() {
|
|
return $this->id;
|
|
}
|
|
|
|
/**
|
|
* Set ID
|
|
* @param string $id ID
|
|
* @return object Current instance
|
|
*/
|
|
public function set_id( $id ) {
|
|
$id = ( is_string( $id ) ) ? trim( $id ) : '';
|
|
if ( ! empty( $id ) ) {
|
|
$this->id = $id;
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Set type properties
|
|
* @param array $props Type properties to set
|
|
*/
|
|
protected function set_props( $props ) {
|
|
if ( is_array( $props ) && ! empty( $props ) ) {
|
|
foreach ( $props as $key => $val ) {
|
|
// Check for setter method
|
|
$m = 'set_' . $key;
|
|
if ( method_exists( $this, $m ) ) {
|
|
$this->{$m}( $val );
|
|
}
|
|
}
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get parent
|
|
* @return object|null Parent
|
|
*/
|
|
public function get_parent() {
|
|
return $this->parent;
|
|
}
|
|
|
|
/**
|
|
* Set parent
|
|
* @param object $parent Parent object
|
|
* @return object Current instance
|
|
*/
|
|
public function set_parent( $parent ) {
|
|
$this->parent = ( $parent instanceof $this ) ? $parent : null;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Check if parent is set
|
|
* @return bool TRUE if parent is set
|
|
*/
|
|
public function has_parent() {
|
|
return ( is_null( $this->parent ) ) ? false : true;
|
|
}
|
|
|
|
/**
|
|
* Retrieve all ancestors
|
|
* @return array Ancestors
|
|
*/
|
|
public function get_ancestors() {
|
|
$ret = array();
|
|
$curr = $this;
|
|
while ( $curr->has_parent() ) {
|
|
// Get next ancestor.
|
|
$curr = $curr->get_parent();
|
|
// Add ancestor.
|
|
$ret[] = $curr;
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
/* Files */
|
|
|
|
/**
|
|
* Add file
|
|
* @param string $type Group to add file to
|
|
* @param string $handle Name for resource
|
|
* @param string $src File URI
|
|
* @return object Current instance
|
|
*/
|
|
protected function add_file( $type, $handle, $src, $deps = array() ) {
|
|
if ( is_string( $type ) && is_string( $handle ) && is_string( $src ) ) {
|
|
// Validate dependencies
|
|
if ( ! is_array( $deps ) ) {
|
|
$deps = array();
|
|
}
|
|
// Init file group
|
|
if ( ! isset( $this->files[ $type ] ) || ! is_array( $this->files[ $type ] ) ) {
|
|
$this->files[ $type ] = array();
|
|
}
|
|
// Add file to group
|
|
$this->files[ $type ][ $handle ] = array(
|
|
'handle' => $handle,
|
|
'uri' => $src,
|
|
'deps' => $deps,
|
|
);
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Add multiple files
|
|
* @param string $type Group to add files to
|
|
* @param array $files Files to add
|
|
* @see add_file() for file parameters
|
|
* @return object Current instance
|
|
*/
|
|
protected function add_files( $type, $files ) {
|
|
if ( ! is_array( $files ) || empty( $files ) ) {
|
|
return false;
|
|
}
|
|
$m = $this->m( 'add_file' );
|
|
foreach ( $files as $file ) {
|
|
if ( ! is_array( $file ) || empty( $file ) ) {
|
|
continue;
|
|
}
|
|
array_unshift( $file, $type );
|
|
call_user_func_array( $m, $file );
|
|
}
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Retrieve files
|
|
* All files or a specific group of files can be retrieved
|
|
* @param string $type (optional) File group to retrieve
|
|
* @return array Files
|
|
*/
|
|
protected function get_files( $type = null ) {
|
|
$ret = $this->files;
|
|
if ( is_string( $type ) ) {
|
|
$ret = ( isset( $ret[ $type ] ) ) ? $ret[ $type ] : array();
|
|
}
|
|
if ( ! is_array( $ret ) ) {
|
|
$ret = array();
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Retrieve file
|
|
* @param string $type Group to retrieve file from
|
|
* @param string $handle
|
|
* @param string $format (optional) Format of return value (Default: array)
|
|
* @return array|null File properties (Default: NULL)
|
|
*/
|
|
protected function get_file( $type, $handle, $format = null ) {
|
|
// Get files
|
|
$files = $this->get_files( $type );
|
|
// Get specified file
|
|
$ret = ( is_string( $type ) && isset( $files[ $handle ] ) ) ? $files[ $handle ] : null;
|
|
// Format return value
|
|
if ( ! empty( $ret ) && ! ! $format ) {
|
|
switch ( $format ) {
|
|
case 'uri':
|
|
$ret = $ret['uri'];
|
|
// Normalize URI
|
|
if ( ! $this->util->is_uri( $ret ) ) {
|
|
$ret = $this->util->normalize_path( site_url(), $ret );
|
|
}
|
|
break;
|
|
case 'path':
|
|
$ret = $ret['uri'];
|
|
// Normalize path
|
|
if ( ! $this->util->is_uri( $ret ) ) {
|
|
$ret = $this->util->get_relative_path( $ret );
|
|
$ret = $this->util->normalize_path( ABSPATH, $ret );
|
|
}
|
|
break;
|
|
case 'object':
|
|
$ret = (object) $ret;
|
|
break;
|
|
case 'contents':
|
|
$ret = $ret['uri'];
|
|
if ( ! $this->util->is_uri( $ret ) ) {
|
|
$ret = $this->util->normalize_path( site_url(), $ret );
|
|
}
|
|
$get = wp_safe_remote_get( $ret );
|
|
$ret = ( ! is_wp_error( $get ) && 200 === $get['response']['code'] ) ? $get['body'] : '';
|
|
break;
|
|
}
|
|
}
|
|
return $ret;
|
|
}
|
|
|
|
/**
|
|
* Add stylesheet
|
|
* @param string $handle Name of the stylesheet
|
|
* @param string $src Stylesheet URI
|
|
* @return object Current instance
|
|
*/
|
|
public function add_style( $handle, $src, $deps = array() ) {
|
|
return $this->add_file( 'styles', $handle, $src, $deps );
|
|
}
|
|
|
|
/**
|
|
* Retrieve stylesheet files
|
|
* @return array Stylesheet files
|
|
*/
|
|
public function get_styles( $opts = null ) {
|
|
$files = $this->get_files( 'styles' );
|
|
if ( is_array( $opts ) ) {
|
|
$opts = (object) $opts;
|
|
}
|
|
if ( is_object( $opts ) && ! empty( $opts ) ) {
|
|
// Parse options
|
|
// URI Format
|
|
if ( isset( $opts->uri_format ) ) {
|
|
foreach ( $files as $hdl => $props ) {
|
|
switch ( $opts->uri_format ) {
|
|
case 'full':
|
|
if ( ! $this->util->is_uri( $props['uri'] ) ) {
|
|
$files[ $hdl ]['uri'] = $this->util->normalize_path( site_url(), $props['uri'] );
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $files;
|
|
}
|
|
|
|
/**
|
|
* Retrieve stylesheet file
|
|
* @param string $handle Name of stylesheet
|
|
* @param string $format (optional) Format of return value (@see `get_file()`)
|
|
* @return array|null File properties (Default: NULL)
|
|
*/
|
|
public function get_style( $handle, $format = null ) {
|
|
return $this->get_file( 'styles', $handle, $format );
|
|
}
|
|
|
|
/**
|
|
* Add script
|
|
* @param string $handle Name of the script
|
|
* @param string $src Script URI
|
|
* @return object Current instance
|
|
*/
|
|
public function add_script( $handle, $src, $deps = array() ) {
|
|
return $this->add_file( 'scripts', $handle, $src, $deps );
|
|
}
|
|
|
|
/**
|
|
* Retrieve script files
|
|
* @return array Script files
|
|
*/
|
|
public function get_scripts() {
|
|
return $this->get_files( 'scripts' );
|
|
}
|
|
|
|
/**
|
|
* Retrieve script file
|
|
* @param string $handle Name of script
|
|
* @param string $format (optional) Format of return value (@see `get_file()`)
|
|
* @return array|null File properties (Default: NULL)
|
|
*/
|
|
public function get_script( $handle, $format = null ) {
|
|
return $this->get_file( 'scripts', $handle, $format );
|
|
}
|
|
|
|
}
|