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

/**
 * The class handles the actions in WP
 */
class ABH_Classes_HookController {

    /** @var array the WP actions list from admin */
    private $admin_hooks = array();
    private $front_hooks = array();
    private $block_hooks = array();
    private static $shortCodesSet = false;

    public function __construct() {
        $this->admin_hooks = array(
            'init' => 'admin_init',
            'head' => 'admin_head',
            'footer' => 'admin_footer',
            // --
            'wmenu' => '_admin_menu',
            'menu' => 'admin_menu',
            'submenu' => 'add_submenu_page',
            'loaded' => 'plugins_loaded',
            'scripts' => 'admin_enqueue_scripts',
            'notices' => 'admin_notices',
        );
        $this->front_hooks = array(
            // --
            'frontinit' => 'init',
            'fronthead' => 'wp_head',
            'frontcontent' => 'the_content',
            'frontwidget' => 'widget_text',
            'frontfooter' => 'wp_footer',
        );
        $this->block_hooks = array('getContent' => 'getContent');
    }

    /**
     * Calls the specified action in WP
     * @param oject $instance The parent class instance
     *
     * @return void
     */
    public function setHooks($instance) {
        if (is_admin()) {
            $this->setAdminHooks($instance);
        } else {
            $this->setFrontHooks($instance);
        }
    }

    /**
     * Calls the specified action in WP
     * @param oject $instance The parent class instance
     *
     * @return void
     */
    public function setAdminHooks($instance) {
        if (!is_admin())
            return;
        /* for each admin action check if is defined in class and call it */
        foreach ($this->admin_hooks as $hook => $value) {

            if (is_callable(array($instance, 'hook' . ucfirst($hook)))) {
                //call the WP add_action function
                add_action($value, array($instance, 'hook' . ucfirst($hook)));
            }
        }
    }

    /**
     * Calls the specified action in WP
     * @param oject $instance The parent class instance
     *
     * @return void
     */
    public function setFrontHooks($instance) {

        /* for each admin action check if is defined in class and call it */
        foreach ($this->front_hooks as $hook => $value) {

            if (is_callable(array($instance, 'hook' . ucfirst($hook)))) {
                //call the WP add_action function
                add_action($value, array($instance, 'hook' . ucfirst($hook)));
            }
        }
    }

    /**
     * Calls the specified action in WP
     * @param string $action
     * @param array $callback Contains the class name or object and the callback function
     *
     * @return void
     */
    public function setAction($action, $obj, $callback) {

        /* calls the custom action function from WP */
        add_action($action, array($obj, $callback), 10);
    }

    /**
     * Calls the specified action in WP
     * @param oject $instance The parent class instance
     *
     * @return void
     */
    public function setBlockHooks($instance) {
        $param_arr = array();

        /* for each admin action check if is defined in class and call it */
        foreach ($this->block_hooks as $hook => $value)
            if (is_callable(array($instance, 'hook' . ucfirst($hook))))
                call_user_func_array(array($instance, 'hook' . ucfirst($hook)), $param_arr);
    }

    /**
     * Get all core classes from config.xml in core directory
     *
     */
    public function getShortcodes() {
        if (self::$shortCodesSet == true)
            return;

        //If the user doesn't use shortcodes

        if (ABH_Classes_Tools::getOption('abh_shortcode') == 0)
            return;

        self::$shortCodesSet = true;
        /* if config allready in cache */
        if (!isset(ABH_Classes_ObjController::$config)) {
            $config_file = _ABH_ROOT_DIR_ . 'config.json';
            if (!file_exists($config_file))
                return;

            /* load configuration blocks data from core config files */
            ABH_Classes_ObjController::$config = json_decode(file_get_contents($config_file), 1);
        }

        if (is_array(ABH_Classes_ObjController::$config))
            foreach (ABH_Classes_ObjController::$config['blocks']['block'] as $block) {
                if (isset($block['name'])) {
                    if (isset($block['active']) && $block['active'] == 1)
                        if (isset($block['shortcodes']['shortcode'])) {
                            $instance = ABH_Classes_ObjController::getController($block['name']);
                            if (!is_array($block['shortcodes']['shortcode'])) {

                                if (is_callable(array($instance, 'hookShortWidget' . ucfirst($block['shortcodes']['shortcode'])))) {
                                    add_action('widget_text', array($instance, 'hookShortWidget' . ucfirst($block['shortcodes']['shortcode'])), 10, 1);
                                }
                                add_shortcode($block['shortcodes']['shortcode'], array($instance, 'hookShort' . ucfirst($block['shortcodes']['shortcode'])));
                            } else {
                                foreach ($block['shortcodes']['shortcode'] as $shortcode) {
                                    if (is_callable(array($instance, 'hookShortWidget' . ucfirst($shortcode)))) {
                                        add_action('widget_text', array($instance, 'hookShortWidget' . ucfirst($shortcode)), 10, 1);
                                    }
                                    add_shortcode($shortcode, array($instance, 'hookShort' . ucfirst($shortcode)));
                                }
                            }
                        }
                }
            }
    }

}