} else { if (array_key_exists('diagnose', $_POST)) { $oTpl = new OA_Admin_Template('plugin-view.html'); $aPackageInfo = $oPluginManager->getPackageInfo($plugin); $aComponents = $aPackageInfo['contents']; unset($aPackageInfo['contents']); if ($aPackageInfo['readme']) { $readme = file_get_contents($aPackageInfo['readme']); } $aPackageInfo['package'] = true; $oTpl->assign('aPackage', $aPackageInfo); $oTpl->assign('aPlugins', $aComponents); $oTpl->assign('readme', $readme); $oTpl->assign('backURL', MAX::constructURL(MAX_URL_ADMIN, "plugin-index.php?selection=packages")); $oTpl->assign('aWarnings', $oPluginManager->aWarnings); $oPluginManager->getPackageDiagnostics($plugin); if (!count($oPluginManager->aErrors)) { $oPluginManager->aMessages[] = 'No problems detected'; } $oTpl->assign('aErrors', $oPluginManager->aErrors); $oTpl->assign('aMessages', $oPluginManager->aMessages); } else { if (array_key_exists('export', $_POST)) { require_once LIB_PATH . '/Plugin/PluginExport.php'; $oExporter = new OX_PluginExport(); if ($file = $oExporter->exportPlugin($plugin)) { $aMessages = 'Plugin exported to ' . $file; } $oTpl = new OA_Admin_Template('plugin-view.html'); $aPackageInfo = $oPluginManager->getPackageInfo($plugin); $aComponents = $aPackageInfo['contents'];
function checkPlugin($pluginName) { $aErrors = array(); $aResult = array('name' => $pluginName, 'status' => '', 'errors' => &$aErrors); require_once LIB_PATH . '/Plugin/PluginManager.php'; $oPluginManager = new OX_PluginManager(); // if plugin definition is not found in situ // try to import plugin code from the previous installation if (!file_exists(MAX_PATH . $GLOBALS['_MAX']['CONF']['pluginPaths']['packages'] . $pluginName . '.xml')) { if (isset($GLOBALS['_MAX']['CONF']['pluginPaths']['export'])) { $file = $GLOBALS['_MAX']['CONF']['pluginPaths']['export'] . $pluginName . '.zip'; if (file_exists($file)) { $aFile['name'] = $file; $aFile['tmp_name'] = $file; $aErrors[] = 'Exported plugin file found, attempting to import from ' . $file; if (!$oPluginManager->installPackageCodeOnly($aFile)) { if ($oPluginManager->countErrors()) { $aResult['status'] = 'Failed'; foreach ($oPluginManager->aErrors as $errmsg) { $aErrors[] = $errmsg; } } } else { $aResult['status'] = 'OK'; } } } } // Try to upgrade bundled plugins include_once MAX_PATH . '/etc/default_plugins.php'; if ($aDefaultPlugins) { foreach ($aDefaultPlugins as $idx => $aPlugin) { if ($aPlugin['name'] == $pluginName) { $upgraded = false; $oPluginManager = new OX_PluginManager(); $aFileName['name'] = $aPlugin['name'] . '.' . $aPlugin['ext']; $aFileName['tmp_name'] = $aPlugin['path'] . $aPlugin['name'] . '.' . $aPlugin['ext']; $aFileName['type'] = 'application/zip'; $upgraded = $oPluginManager->upgradePackage($aFileName, $pluginName); if (!empty($oPluginManager->aErrors) && !empty($oPluginManager->previousVersionInstalled) && $oPluginManager->previousVersionInstalled != OX_PLUGIN_SAME_VERSION_INSTALLED) { foreach ($oPluginManager->aErrors as $i => $msg) { $aErrors[] = $msg; } } } } } // now diagnose problems $aDiag = $oPluginManager->getPackageDiagnostics($pluginName); if ($aDiag['plugin']['error']) { $aErrors[] = 'Problems found with plugin ' . $pluginName . '. The plugin has been disabled. Go to the Configuration Plugins page for details '; foreach ($aDiag['plugin']['errors'] as $i => $msg) { $aErrors[] = $msg; } } foreach ($aDiag['groups'] as $idx => &$aGroup) { if ($aGroup['error']) { $aDiag['plugin']['error'] = true; $aErrors[] = 'Problems found with components in group ' . $aGroup['name'] . '. The ' . $pluginName . ' plugin has been disabled. Go to the Configuration->Plugins page for details '; foreach ($aGroup['errors'] as $i => $msg) { $aErrors[] = $msg; } } } $enabled = wasPluginEnabled($pluginName); // original setting if (!$aDiag['plugin']['error']) { if ($upgraded) { $aResult['status'] .= 'OK, Upgraded'; } elseif ($oPluginManager->previousVersionInstalled == OX_PLUGIN_NEWER_VERSION_INSTALLED) { $aResult['status'] .= 'OK. Notice: You have a newer plugin version installed than the one that comes with this upgrade package.'; } elseif ($oPluginManager->previousVersionInstalled == OX_PLUGIN_SAME_VERSION_INSTALLED) { $aResult['status'] .= 'OK, Up to date'; } else { $aResult['status'] .= 'OK'; } if ($enabled) { if ($oPluginManager->enablePackage($pluginName)) { $aResult['status'] .= ', Enabled'; } else { $aResult['status'] .= ', failed to enable, check plugin configuration'; } } else { $aResult['status'] .= ', Disabled'; } } else { $aResult['status'] = 'Errors, disabled'; } return $aResult; }
function test_getPackageDiagnostics() { $oPkgMgr = new OX_PluginManager(); $file = MAX_PATH . $this->testpathData . 'zipDiagnosticTest/testPluginPackage.zip'; unset($GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage']); unset($GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin001']); //install $this->assertTrue($oPkgMgr->installPackage(array('tmp_name' => $file, 'name' => 'testPluginPackage.zip'))); if (count($oPkgMgr->aErrors)) { foreach ($oPkgMgr->aErrors as $error) { $this->fail($error); } } $aResultGood = $oPkgMgr->getPackageDiagnostics('testPluginPackage'); $this->assertFalse($aResultGood['plugin']['error']); unlink(MAX_PATH . $oPkgMgr->pathPluginsAdmin . 'testPlugin001/' . 'testPlugin-common.php'); $oPkgMgr->_unregisterSettings('testPlugin001', false); unset($GLOBALS['_MAX']['CONF']['testPlugin001']); unset($GLOBALS['_MAX']['CONF']['testPlugin001']['setting1']); $oPkgMgr->_unregisterPluginVersion('testPlugin001'); $oPkgMgr->_unregisterSchemaVersion('testPlugin001'); $oPkgMgr->_unregisterPreferences('testPlugin001', $aResultGood['groups'][0]['install']['config']['preferences']); $oPkgMgr->_dropTables('testPlugin', $aResultGood['groups'][0]['install']['database']['mdb2schema']); $aResultBad = $oPkgMgr->getPackageDiagnostics('testPluginPackage'); $this->assertTrue($aResultBad['groups'][1]['error']); //uninstall $this->assertTrue($oPkgMgr->uninstallPackage('testPluginPackage')); TestEnv::restoreConfig(); }
function getPluginsDiagnostics() { require_once LIB_PATH . '/Plugin/PluginManager.php'; $oPluginManager = new OX_PluginManager(); $aPlugins = $GLOBALS['_MAX']['CONF']['plugins'] ? $GLOBALS['_MAX']['CONF']['plugins'] : array(); $aComponentGroups = $GLOBALS['_MAX']['CONF']['pluginGroupComponents'] ? $GLOBALS['_MAX']['CONF']['pluginGroupComponents'] : array(); foreach ($aPlugins as $name => $enabled) { $aPlugin = $oPluginManager->getPackageDiagnostics($name, true); $aResult['detail'][] = $aPlugin; $aGroups = $aPlugin['groups']; $aPlugin = $aPlugin['plugin']; if ($aPlugin['error']) { foreach ($aPlugin['errors'] as $i => $msg) { $aResult['errors'][] = $name . ': ' . $msg; } } foreach ($aGroups as $i => &$aGroup) { if (array_key_exists($aGroup['name'], $aComponentGroups)) { unset($aComponentGroups[$aGroup['name']]); } if ($aGroup['error']) { foreach ($aGroup['errors'] as $i => $msg) { $aResult['errors'][] = $aGroup['name'] . ': ' . $msg; } $aPlugin['error'] = true; } } $aResult['simple'][] = array('name' => $aPlugin['name'], 'version' => $aPlugin['version'], 'enabled' => $enabled, 'error' => $aPlugin['error']); } foreach ($aComponentGroups as $name => $enabled) { $aResult['errors'][] = $name . ': ' . ' is configured as installed but not found to exist'; } return $aResult; }