ModuleManager.php 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace Tools;
  3. class ModuleManager
  4. {
  5. private $context;
  6. private $modules = array();
  7. public function __construct($context)
  8. {
  9. $this->context = $context;
  10. $modulesRoot = $context->router->getModulesPath();
  11. $modules = \Entity\Module::getActivated();
  12. $ids = array();
  13. foreach ($modules as $i)
  14. {
  15. $modulePath = "{$modulesRoot}{$i->directory}/main.php";
  16. if (file_exists($modulePath) && $this->loadModule($modulePath, $i))
  17. {
  18. $ids[] = $i->id;
  19. }
  20. else
  21. {
  22. $i->active = false;
  23. $i->save();
  24. }
  25. }
  26. \Tools\Hooks::loadHooks(\Entity\ModuleHook::getModules($ids));
  27. }
  28. private function loadModule($path, $module)
  29. {
  30. $this->modules[] = $module;
  31. return true;
  32. }
  33. public function listAvailableModules()
  34. {
  35. $modulesRoot = $context->router->getModulesPath();
  36. $modules = scandir($modulesRoot, SCANDIR_SORT_NONE);
  37. foreach ($modules as $i)
  38. {
  39. $path = $modulesRoot.$i;
  40. if ($i == '.' || $i == '..' || !is_dir($path))
  41. continue;
  42. $this->loadModule($path);
  43. }
  44. }
  45. public function __get($key)
  46. {
  47. switch ($key)
  48. {
  49. case "modules":
  50. return $this->modules; break;
  51. }
  52. throw new \Exception("Cannot access attribute {$key}");
  53. }
  54. }