/** * @public * * Erzeugt das File KnownModules */ public function BuildKnownModules() { $knownRepositories = $this->GetKnownRepositories(); $knownModules = array(); $repositoryVersions = array(); $changeList = array(); $requiredModules = array(); foreach ($knownRepositories as $repositoryIdx=>$repository) { echo 'Process Repsoitory '.$repository.PHP_EOL; $fileHandler = new IPSFileHandler(); $repository = IPSFileHandler::AddTrailingPathDelimiter($repository); $localAvailableModuleList = sys_get_temp_dir().'\\AvailableModules.ini'; $repositoryAvailableModuleList = $repository.'IPSLibrary\\config\\AvailableModules.ini'; $fileHandler->CopyFiles(array($repositoryAvailableModuleList), array($localAvailableModuleList)); $availableModules = parse_ini_file($localAvailableModuleList, true); foreach ($availableModules as $moduleName=>$moduleData) { $moduleProperties = explode('|',$moduleData); $modulePath = $moduleProperties[0]; $moduleDescription = ''; if (array_key_exists(1, $moduleProperties)) { $moduleDescription = $moduleProperties[1]; } $localDownloadIniFile = sys_get_temp_dir().'\\DownloadListfile.ini'; $repositoryDownloadIniFile = $repository.'IPSLibrary\\install\\DownloadListFiles\\'.$moduleName.'_FileList.ini'; $result = $fileHandler->CopyFiles(array($repositoryDownloadIniFile), array($localDownloadIniFile), false); if ($result===false) { echo ' '.$moduleName.'could NOT be found in '.$repository.PHP_EOL; } else { echo ' Processing '.$moduleName.' in '.$repository.PHP_EOL; $configHandler = new IPSIniConfigHandler($localDownloadIniFile); $availableVersion = $configHandler->GetValue(IPSConfigHandler::SCRIPTVERSION); $changeListModule = $configHandler->GetValueDef(IPSConfigHandler::CHANGELIST, null, array()); $requiredModulesOfModule = $configHandler->GetValueDef(IPSConfigHandler::REQUIREDMODULES, null, array()); $replaceModule = false; if (!array_key_exists($moduleName, $knownModules)) { $replaceModule = true; } elseif ($versionHandler->CompareVersionsNewer($knownModules[$moduleName]['Version'], $availableVersion)) { $replaceModule = true; } elseif ($versionHandler->CompareVersionsEqual($knownModules[$moduleName]['Version'], $availableVersion) and $versionHandler->IsModuleInstalled($moduleName)) { $versionHandler = new IPSFileVersionHandler($moduleName); if ($versionHandler->GetModuleRepository()==$repository) { $replaceModule = true; } } else { } if ($replaceModule) { $knownModules[$moduleName]['Version'] = $availableVersion; $knownModules[$moduleName]['Repository'] = $repository; $knownModules[$moduleName]['Description'] = $moduleDescription; $knownModules[$moduleName]['Path'] = $modulePath; if ($this->IsModuleInstalled($moduleName)) { $versionHandler = new IPSFileVersionHandler($moduleName); } $knownModules[$moduleName]['LastRepository'] = $versionHandler->GetModuleRepository(); $changeList[$moduleName] = $changeListModule; $requiredModules[$moduleName] = $requiredModulesOfModule; } $repositoryVersions[$moduleName][$repository] = $availableVersion; } } } $fileContent = ''; foreach ($knownModules as $moduleName=>$moduleData) { $fileContent .= '['.$moduleName.']'.PHP_EOL; foreach ($moduleData as $property=>$value) { // "//192.168..." not handled correct in case of usage "" if ($property=='Repository') { $fileContent .= $property.'='.$value.''.PHP_EOL; } else { $fileContent .= $property.'="'.$value.'"'.PHP_EOL; } } } file_put_contents($this->fileNameKnownModules, $fileContent); $fileContent = ''; foreach ($repositoryVersions as $moduleName=>$moduleData) { $fileContent .= '['.$moduleName.']'.PHP_EOL; foreach ($moduleData as $property=>$value) { $fileContent .= $property.'="'.$value.'"'.PHP_EOL; } } file_put_contents($this->fileNameRepositoryVersions, $fileContent); $fileContent = ''; foreach ($changeList as $moduleName=>$moduleData) { $fileContent .= '['.$moduleName.']'.PHP_EOL; foreach ($moduleData as $property=>$value) { $fileContent .= $property.'="'.$value.'"'.PHP_EOL; } } file_put_contents($this->fileNameChangeList, $fileContent); $fileContent = ''; foreach ($requiredModules as $moduleName=>$moduleData) { $fileContent .= '['.$moduleName.']'.PHP_EOL; foreach ($moduleData as $property=>$value) { $fileContent .= $property.'="'.$value.'"'.PHP_EOL; } } file_put_contents($this->fileNameRequiredModules, $fileContent); $this->LoadFileKnownModules(); $this->LoadFileRepositoryVersions(); $this->LoadFileChangeList(); $this->LoadFileRequiredModules(); }
function SearchLastRepositories() { IPSUtils_Include ("IPSModuleManager.class.php", "IPSLibrary::install::IPSModuleManager"); $moduleManager = $_IPS['MODULEMANAGER']; $infos = $moduleManager->GetModuleInfos(); $modules = $moduleManager->GetInstalledModules(); //print_r($modules); foreach ($modules as $module=>$data) { $downloadFile = IPS_GetKernelDir().'scripts\\IPSLibrary\\install\\DownloadListFiles\\'.$module.'_FileList.ini'; $configFile = IPS_GetKernelDir().'scripts\\IPSLibrary\\install\\InitializationFiles\\'.$module.'.ini'; if (!file_exists($downloadFile) or !file_exists($configFile)) { $moduleManager->LogHandler()->Debug('Remove Module "'.$module.'" from InstalledModules (No Ini Files found)'); $versionHandler = new IPSFileVersionHandler($module); $versionHandler->DeleteModule(); } else { $moduleManager = new IPSModuleManager($module, '', sys_get_temp_dir(), true); $versionHandler = $moduleManager->VersionHandler(); $repository = $versionHandler->GetModuleRepository(); // Search current Repository if ($repository=='') { $files = scandir(IPS_GetKernelDir().'\\logs\\', 1); foreach ($files as $file) { // Found LogFile if ($repository<>'') { break; } elseif (strpos($file,'IPSModuleManager_')!==false) { $fileContent = file_get_contents(IPS_GetKernelDir().'\\logs\\'.$file); $lines = explode(PHP_EOL, $fileContent); $line1 = ''; $line2 = ''; if (count($lines)>0) { $line1 = $lines[0]; } if (count($lines)>1) { $line2 = $lines[1]; } // Found LogFile for Module if ( strpos($line1,'Set Version '.$module.'=')!==false or strpos($line2,''.$module.'_FileList.ini')!==false) { //echo 'found '.$module; //return; // Search Repository foreach ($lines as $idx=>$line) { // Found Repository if (strpos($line,' --> '.IPS_GetKernelDir().'scripts\\IPSLibrary\\install\\DownloadListFiles\\'.$module.'_FileList.ini')!==false) { $start = strpos($line,'Copy ')+5; $end = strpos($line,'IPSLibrary',strpos($line,'IPSLibrary')+1); $repository = substr($line, $start, $end-$start); break; } } } } } $moduleManager->LogHandler()->Debug('Add Last Repository: '.$module.'='.$repository); $versionHandler->SetModuleRepository($repository); } echo $module.'='.$repository.PHP_EOL; } } }