gdoo/app/Gdoo/Model/Services/ModuleService.php

109 lines
2.6 KiB
PHP

<?php namespace Gdoo\Model\Services;
use App\Support\Hook;
class ModuleService
{
public static $modules;
public static $details = [];
public static $dialogs = [];
public static $widgets = [];
public static $badges = [];
public static function details()
{
return static::$details;
}
public static function all()
{
if (static::$modules) {
return static::$modules;
}
$path = base_path().'/app/Gdoo';
if (is_dir($path)) {
$folders = new \DirectoryIterator($path);
foreach ($folders as $folder) {
if (!$folder->isDot() && $folder->isDir()) {
$folder = $folder->getFileName();
$file = $path.'/'.$folder.'/config.php';
if (is_file($file)) {
static::$modules[$folder] = $path.'/'.$folder;
}
}
}
}
return static::$modules;
}
public static function allWithDetails()
{
$modules = static::all();
$json = [];
foreach ($modules as $key => $module) {
$file = $module.'/config.php';
if (is_file($file)) {
$content = include($file);
$content['path'] = $module;
if (not_empty($content['listens'])) {
foreach ($content['listens'] as $k => $v) {
Hook::listen($k, $v);
}
}
if (not_empty($content['widgets'])) {
static::$widgets = static::$widgets + $content['widgets'];
}
if (not_empty($content['badges'])) {
static::$badges = static::$badges + $content['badges'];
}
// 获取对话框
if (not_empty($content['dialogs'])) {
static::$dialogs = static::$dialogs + $content['dialogs'];
}
$json[lcfirst($key)] = $content;
}
}
static::$details = $json;
return $json;
}
public static function widgets($key = null)
{
if ($key) {
return static::$widgets[$key];
}
return static::$widgets;
}
public static function dialogs($key = null)
{
if ($key) {
return static::$dialogs[$key];
}
return static::$dialogs;
}
public static function badges($key = null)
{
if ($key) {
return static::$badges[$key];
}
return static::$badges;
}
}