loaded = array(); } /** * Loads a $type of object from a $dir with a given $name * @param string $name - the name of the object to load * @param string $dir - the directory theese objects are stored in * @param string $type - the type of the object */ private function load_type($name, $dir, $type): object|NULL { $path = $dir . '/' . $name . '.php'; if (array_key_exists($path, $this->loaded)) { return $this->loaded[$path]; } if (!file_exists($path)) { return NULL; } $parts = explode('/', $name); $part = end($parts); $class = ucfirst($part) . '_' . $type; require($path); $ref = NULL; try { $ref = new ReflectionClass($class); } catch (Exception $_e) {} if ($ref === NULL) { return NULL; } $obj = $ref->newInstance($this); $this->loaded[$path] = $obj; return $obj; } /** * Loads a model * @param string $name - the name of the model to load */ public function model($name): object|NULL { $root = $GLOBALS['webroot']; $dir = $root . '/_model'; return $this->load_type($name, $dir, 'model'); } /** * Loads a controller * @param string $name - the name of the controller to load */ public function controller($name): Controller|NULL { $root = $GLOBALS['webroot']; $dir = $root . '/_controller'; return $this->load_type($name, $dir, 'controller'); } /** * Loads the given common lang * @param string $lang_code 0 the language code */ public function lang($lang_code): void { $dir = $GLOBALS['webroot'] . '/lang/' . $lang_code . '/'; $lang = $GLOBALS['lang']; if ($handle = opendir($dir)) { while (false !== ($entry = readdir($handle))) { if ($entry === '.' || $entry === '..' || $entry === 'apps') { continue; } $path = $dir . $entry; require($path); } } $GLOBALS['lang'] = $lang; } /** * Loads a given app specific lang * @param string $lang_code - the language code * @param string $name - the name of the app */ public function app_lang($lang_code, $name): void { $dir = $GLOBALS['webroot'] . '/lang/' . $lang_code . '/apps/'; $file = $dir . $name . '.php'; if (file_exists($file)) { $lang = $GLOBALS['lang']; require($dir . $name . '.php'); $GLOBALS['lang'] = $lang; } } }