From d6ca1232e2608b266b2c75f2ebab4c4b86c97f67 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Thu, 27 Jul 2023 09:24:40 -0400 Subject: [PATCH] Fix issue processwire/processwire-issues#1657 --- wire/core/ModulesInfo.php | 14 +++++++++----- wire/core/ModulesInstaller.php | 18 +++++++++++++++--- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/wire/core/ModulesInfo.php b/wire/core/ModulesInfo.php index 5f019112..6cf63c09 100644 --- a/wire/core/ModulesInfo.php +++ b/wire/core/ModulesInfo.php @@ -649,11 +649,15 @@ class ModulesInfo extends ModulesClass { if(!$info['installed'] && !$info['created'] && $installableFile) { // uninstalled modules get their created date from the file or dir that they are in (whichever is newer) $pathname = $installableFile; - $filemtime = (int) filemtime($pathname); - $dirname = dirname($pathname); - $coreModulesPath = $this->modules->coreModulesPath; - $dirmtime = substr($dirname, -7) == 'modules' || strpos($dirname, $coreModulesPath) !== false ? 0 : (int) filemtime($dirname); - $info['created'] = $dirmtime > $filemtime ? $dirmtime : $filemtime; + $filemtime = @filemtime($pathname); + if($filemtime === false) { + $info['created'] = 0; + } else { + $dirname = dirname($pathname); + $coreModulesPath = $this->modules->coreModulesPath; + $dirmtime = substr($dirname, -7) == 'modules' || strpos($dirname, $coreModulesPath) !== false ? 0 : (int) filemtime($dirname); + $info['created'] = $dirmtime > $filemtime ? $dirmtime : $filemtime; + } } // namespace diff --git a/wire/core/ModulesInstaller.php b/wire/core/ModulesInstaller.php index 0eaa8726..f0d88f18 100644 --- a/wire/core/ModulesInstaller.php +++ b/wire/core/ModulesInstaller.php @@ -116,10 +116,22 @@ class ModulesInstaller extends ModulesClass { if($languages) $languages->setDefault(); $pathname = $this->modules->installableFile($class); - $this->modules->files->includeModuleFile($pathname, $class); - $this->modules->files->setConfigPaths($class, dirname($pathname)); + + if(strpos($class, "\\") === false) { + $ns = $this->modules->info->getModuleNamespace($class, array( + 'file' => $pathname + )); + $nsClass = $ns . $class; + } else { + $nsClass = $class; + } + + if(!class_exists($nsClass, false)) { + $this->modules->files->includeModuleFile($pathname, $class); + $this->modules->files->setConfigPaths($class, dirname($pathname)); + } - $module = $this->modules->newModule($class); + $module = $this->modules->newModule($nsClass, $class); if(!$module) return null; $flags = 0;