Current File : /home/resuelf/www/wp-content/plugins/starbox/classes/ObjController.php
<?php defined('ABSPATH') || die('Cheatin\' uh?'); ?>
<?php

/**
 * The class creates object for plugin classes
 */
class ABH_Classes_ObjController {

    /** @var array of instances */
    public static $instances;

    /** @var array from core config */
    public static $config;

    /**
     * Get the instance of the specified class
     *
     * @param string $className
     * @param bool $core TRUE is the class is a core class or FALSE if it is from classes directory
     *
     * @return object of the class|false
     */
    public static function getController($className) {
        if ($class = self::getClassPath($className)) {
            if (!isset(self::$instances[$className])) {
                /* check if class is already defined */
                if (!class_exists($className)) {
                    self::includeController($class['dir'], $class['name']);
                    self::$instances[$className] = new $className;
                    return self::$instances[$className];
                }
            }
            else
                return self::$instances[$className];
        }
        return false;
    }

    private static function includeController($classDir, $className) {

        if (file_exists($classDir . $className . '.php'))
            try {
                include_once($classDir . $className . '.php');
            } catch (Exception $e) {
                echo 'Controller Error: ' . $e->getMessage();
            }
    }

    /**
     * Get the instance of the specified model class
     *
     * @param string $className
     *
     * @return object of the class
     */
    public static function getModel($className) {
        if ($class = self::getClassPath($className)) {
            //set the model name for this class
            $className = _ABH_NAMESPACE_ . '_Models_' . $class['name'];

            if (!isset(self::$instances[$className])) {
                /* if $core == true then call the class from core directory */
                self::includeModel(_ABH_MODEL_DIR_, $class['name']);

                //echo $className . '<br />';
                if (class_exists($className)) {
                    self::$instances[$className] = new $className;
                    return self::$instances[$className];
                }
            }
            else
                return self::$instances[$className];
        }
        return;
    }

    private static function includeModel($classDir, $className) {

        /* check if class is already defined */
        if (file_exists($classDir . $className . '.php'))
            try {
                include_once($classDir . $className . '.php');
            } catch (Exception $e) {
                echo 'Model Error: ' . $e->getMessage();
            }
    }

    /**
     * Get the instance of the specified block from core directory
     *
     * @param string $className
     *
     * @return object of the class
     */
    public static function getBlock($className) {
        if ($class = self::getClassPath($className)) {
            $className = _ABH_NAMESPACE_ . '_Core_' . $class['name'];

            //set the model name for this class
            if (!isset(self::$instances[$className])) {

                /* if $core == true then call the class from core directory */
                self::includeBlock(_ABH_CORE_DIR_, $class['name']);

                if (class_exists($className)) {
                    self::$instances[$className] = new $className;
                    return self::$instances[$className];
                }
                else
                    exit("Block error: Can't call $className class");
            }
            else
                return self::$instances[$className];
        }
        return;
    }

    private static function includeBlock($classDir, $className) {

        if (file_exists($classDir . $className . '.php'))
            try {
                require_once($classDir . $className . '.php');
            } catch (Exception $e) {
                echo 'Model Error: ' . $e->getMessage();
            }
    }

    /**
     * Get all core classes from config.xml in core directory
     *
     * @param string $for
     */
    public function getBlocks($for) {
        /* if config allready in cache */
        if (!isset(self::$config)) {
            $config_file = _ABH_ROOT_DIR_ . 'config.json';
            if (!file_exists($config_file))
                return;

            /* load configuration blocks data from core config files */
            self::$config = json_decode(file_get_contents($config_file), 1);
        }
        //print_r(self::$config);
        if (is_array(self::$config))
            foreach (self::$config['blocks']['block'] as $block) {
                if (isset($block['active']) && $block['active'] == 1)
                    if (isset($block['controllers']['controller']))
                        if (!is_array($block['controllers']['controller'])) {
                            /* if the block should load for the current controller */
                            if ($for == $block['controllers']['controller']) {
                                ABH_Classes_ObjController::getBlock($block['name'])->init();
                            }
                        } else {
                            foreach ($block['controllers']['controller'] as $controller) {
                                /* if the block should load for the current controller */
                                if ($for == $controller) {
                                    ABH_Classes_ObjController::getBlock($block['name'])->init();
                                }
                            }
                        }
            }
    }

    /**
     * Check if the class is correctly set
     *
     * @param string $className
     * @return boolean
     */
    private static function checkClassPath($className) {
        $path = preg_split('/[_]+/', $className);
        if (is_array($path) && count($path) > 1) {
            if (in_array(_ABH_NAMESPACE_, $path)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Get the path of the class and name of the class
     *
     * @param string $className
     * @return array | boolean
     * array(
     * dir - absolute path of the class
     * name - the name of the file
     * }
     */
    public static function getClassPath($className) {
        $path = array();
        $dir = '';

        if (self::checkClassPath($className)) {
            $path = preg_split('/[_]+/', $className);
            for ($i = 1; $i < sizeof($path) - 1; $i++)
                $dir .= strtolower($path[$i]) . '/';

            return array('dir' => _ABH_ROOT_DIR_ . '/' . $dir,
                'name' => $path[sizeof($path) - 1]);
        }
        return false;
    }

}