<?php
///////////////////////////////////////////////////////////////////////////////
//
// NagiosQL
///////////////////////////////////////////////////////////////////////////////
//
// (c) 2005-2018 by Martin Willisegger
//
// Project   : NagiosQL
// Component : Autoloader Class
// Website   : https://sourceforge.net/projects/nagiosql/
// Version   : 3.4.0
// GIT Repo  : https://gitlab.com/wizonet/NagiosQL
//
///////////////////////////////////////////////////////////////////////////////
namespace functions;

class Autoloader
{
    // Define class variables
    public $preBasePath = DIRECTORY_SEPARATOR;

    /**
     * Autoloader constructor.
     */
    public function __construct()
    {
        spl_autoload_register(array($this, 'loadClass'));
    }

    /**
     * @param string $strBasePath           Base path of project
     */
    public static function register($strBasePath)
    {
        $object = new Autoloader();
        $object->preBasePath = $strBasePath;
    }

    /**
     * Load class from path
     * @param string $strClassName          Class name
     */
    public function loadClass($strClassName)
    {
        $className = ltrim($strClassName, '\\');
        $fileName  = '';
        $lastNsPos = strrpos($className, '\\');
        if ($lastNsPos != 0) {
            $namespace  = substr($className, 0, $lastNsPos);
            $className  = substr($className, $lastNsPos + 1);
            $fileName   = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
        }
        $fileName     .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
        $strFilePath1  = $this->preBasePath.$fileName;
        $strFilePath2  = $this->preBasePath.'install/'.$fileName;
        if (file_exists($strFilePath1) && is_readable($strFilePath1)) {
            require_once $strFilePath1;
        }
        if (file_exists($strFilePath2) && is_readable($strFilePath2)) {
            require_once $strFilePath2;
        }
    }
}