Exemplo n.º 1
0
 /**
  * The constructor method.
  *
  * @return OX_Maintenance_Statistics_Task_MigrateBucketData
  */
 function OX_Maintenance_Statistics_Task_MigrateBucketData()
 {
     parent::OX_Maintenance_Statistics_Task();
     // Locate all plugins (packages) that have been installed
     $oPluginManager = new OX_PluginManager();
     $this->aPackages = $oPluginManager->getPackagesList();
 }
 /**
  * The constructor method.
  *
  * @return OX_Maintenance_Statistics_Task_MigrateBucketData
  */
 function __construct()
 {
     parent::__construct();
     // Locate all plugins (packages) that have been installed
     $oPluginManager = new OX_PluginManager();
     $this->aPackages = $oPluginManager->getPackagesList();
 }
 function __construct()
 {
     // Get a connection to the datbase
     $this->oDbh =& OA_DB::singleton();
     // Locate all plugins (packages) that have been installed
     $oPluginManager = new OX_PluginManager();
     $this->aPackages = $oPluginManager->getPackagesList();
 }
 function test_Enabled()
 {
     $oManager = new OX_PluginManager();
     $GLOBALS['_MAX']['CONF']['plugins']['foo'] = 0;
     $this->assertFalse($oManager->isEnabled('foo'));
     $GLOBALS['_MAX']['CONF']['plugins']['foo'] = 1;
     $this->assertTrue($oManager->isEnabled('foo'));
     unset($GLOBALS['_MAX']['CONF']['plugins']['foo']);
 }
Exemplo n.º 5
0
 /**
  * Prepare urls to run install plugin tasks
  *
  * @param string $baseInstalUrl Base install URL (prepared by
  *                              OX_Admin_UI_Controller_Request::getBaseUrl)
  * @return array Array of arrays of 'id', name' and 'url' strings
  */
 static function getTasksUrls($baseInstallUrl)
 {
     $aUrls = array();
     $aPluginZips = array();
     // Collect all plugin files present in the etc/plugins folder...
     $PLUGINS_DIR = opendir(MAX_PATH . '/etc/plugins');
     while ($file = readdir($PLUGINS_DIR)) {
         if (substr($file, 0, 1) == '.' || substr($file, strrpos($file, '.')) != '.zip') {
             continue;
         }
         $name = substr($file, 0, strrpos($file, '.'));
         $aPluginZips[$name] = array('id' => 'plugin:' . $name, 'name' => $GLOBALS['strPluginTaskChecking'] . ': <br/> ' . OX_Upgrade_InstallPlugin_Controller::openxToRevivePluginName($name), 'url' => $baseInstallUrl . 'install-plugin.php?status=0&plugin=' . $name . '&disabled=1');
     }
     closedir($PLUGINS_DIR);
     // Get installed plugins if upgrade
     $oStorage = OX_Admin_UI_Install_InstallUtils::getSessionStorage();
     $oStatus = $oStorage->get('installStatus');
     if (isset($oStatus) && $oStatus->isUpgrade()) {
         foreach ($GLOBALS['_MAX']['CONF']['plugins'] as $name => $enabled) {
             if (in_array($name, self::$DEPRECATED_PLUGINS)) {
                 $status = '2';
                 // Remove plugin; deprecated
             } else {
                 $status = '1';
                 // Install or migrate
             }
             $displayName = $name;
             $oPluginManager = new OX_PluginManager();
             $aPackageInfo = $oPluginManager->getPackageInfo($name);
             if ($aPackageInfo['displayname']) {
                 $displayName = $aPackageInfo['displayname'];
             }
             $aUrls[] = array('id' => 'plugin:' . $name, 'name' => $GLOBALS['strPluginTaskChecking'] . ': <br/> ' . OX_Upgrade_InstallPlugin_Controller::openxToRevivePluginName($displayName), 'url' => $baseInstallUrl . 'install-plugin.php?status=' . $status . '&plugin=' . $name);
             unset($aPluginZips[$name]);
         }
     }
     // Get the list of bundled plugins, retain order
     include MAX_PATH . '/etc/default_plugins.php';
     if ($aDefaultPlugins) {
         foreach ($aDefaultPlugins as $idx => $aPlugin) {
             if (!array_key_exists($aPlugin['name'], $GLOBALS['_MAX']['CONF']['plugins'])) {
                 $url = $baseInstallUrl . 'install-plugin.php?status=0&plugin=' . $aPlugin['name'];
                 if (!empty($aPlugin['disabled'])) {
                     $url .= '&disabled=1';
                 }
                 $aUrls[] = array('id' => 'plugin:' . $aPlugin['name'], 'name' => $GLOBALS['strPluginTaskInstalling'] . ': <br/> ' . OX_Upgrade_InstallPlugin_Controller::openxToRevivePluginName($aPlugin['name']), 'url' => $url);
                 unset($aPluginZips[$aPlugin['name']]);
             }
         }
     }
     // Anything left in the $aPluginsZip array are unknown plugins, should be installed but disabled
     foreach ($aPluginZips as $pluginName => $pluginArray) {
         $aUrls[] = $pluginArray;
     }
     return $aUrls;
 }
 function test_upgradeConfig()
 {
     $oPkgMgr = new OX_PluginManager();
     $zipFile = $this->aUpload['tmp_name'];
     // version 2 package should be installed
     // put the version 3 package in place
     $this->_switchFiles(3);
     $this->assertTrue($oPkgMgr->_checkPackageContents($this->packageName . '.xml', $zipFile, true));
     $aPlugin = $oPkgMgr->aParse['plugins'][1];
     $this->assertEqual($aPlugin['version'], '0.0.3');
     // Test 2 : upgrade to version 0.0.3 ; this involves 0 upgrade or schema packages, just a version stamp
     $oUpgrader = new OX_Plugin_UpgradeComponentGroup($aPlugin, $oPkgMgr);
     $this->assertTrue($oUpgrader->canUpgrade());
     $this->assertEqual($oUpgrader->existing_installation_status, OA_STATUS_CAN_UPGRADE);
     // decompress the zip file, 2nd param indicates overwrite previous files
     $oPkgMgr->_unpack($this->aUpload, true);
     // now that the files are in place, the upgrader can do a schema integrity check
     $this->assertTrue($oUpgrader->canUpgrade());
     $this->assertEqual($oUpgrader->existing_installation_status, OA_STATUS_CAN_UPGRADE);
     $this->assertEqual(count($oUpgrader->aPackageList), 0);
     $aConf =& $GLOBALS['_MAX']['CONF'][$aPlugin['name']];
     // _upgradeConfig calls _upgradeSettings() and _upgradePreferences
     // Test 1 Settings
     // set non-default settings
     $aConf['setting1'] = 'testval1';
     $aConf['setting2'] = 'testval2';
     $aConf['setting3'] = 'testval3';
     $this->assertTrue($oUpgrader->_upgradeSettings());
     // old settings should have original values
     // new setting should have default value
     // deprecated setting should no longer exist
     $aConf =& $GLOBALS['_MAX']['CONF'][$aPlugin['name']];
     $this->assertEqual(count($aConf), 3);
     $this->assertEqual($aConf['setting1'], 'testval1');
     $this->assertEqual($aConf['setting2'], 'testval2');
     $this->assertFalse(isset($aConf['setting3']));
     $this->assertEqual($aConf['setting4'], 'setval4');
     // Test 2 Preferences
     $oDbh = OA_DB::singleton();
     $qryPrefs = 'preference_name LIKE ' . $oDbh->quote('%' . $prefix . '%');
     $prefix = $aPlugin['name'] . '_';
     $doPreferences = OA_Dal::factoryDO('preferences');
     $doPreferences->whereAdd($qryPrefs);
     $doPreferences->find();
     while ($doPreferences->fetch()) {
         $doAccount_Preference_Assoc = OA_Dal::factoryDO('account_preference_assoc');
         $doAccount_Preference_Assoc->whereAdd('preference_id = ' . $doPreferences->preference_id);
         $aPrefsOld[$doPreferences->preference_name] = array('permission' => $doPreferences->account_type, 'id' => $doPreferences->preference_id, 'acct_assoc' => $doAccount_Preference_Assoc->getAll());
     }
     $this->assertEqual(count($aPrefsOld), 2);
     $this->assertFalse(isset($aPrefsOld[$prefix . 'preference3']));
     $this->assertTrue(isset($aPrefsOld[$prefix . 'preference1']));
     $this->assertTrue(isset($aPrefsOld[$prefix . 'preference2']));
     $this->assertEqual($aPrefsOld[$prefix . 'preference1']['permission'], 'MANAGER');
     $this->assertEqual($aPrefsOld[$prefix . 'preference2']['permission'], 'ADMIN');
     $this->assertTrue(isset($aPrefsOld[$prefix . 'preference1']['acct_assoc']));
     $this->assertTrue(isset($aPrefsOld[$prefix . 'preference2']['acct_assoc']));
     $this->assertEqual($aPrefsOld[$prefix . 'preference1']['acct_assoc'][0]['account_id'], '0');
     $this->assertEqual($aPrefsOld[$prefix . 'preference2']['acct_assoc'][0]['account_id'], '0');
     $this->assertTrue($oUpgrader->_upgradePreferences());
     $doPreferences = OA_Dal::factoryDO('preferences');
     $doPreferences->whereAdd($qryPrefs);
     $doPreferences->find();
     while ($doPreferences->fetch()) {
         $doAccount_Preference_Assoc = OA_Dal::factoryDO('account_preference_assoc');
         $doAccount_Preference_Assoc->whereAdd('preference_id = ' . $doPreferences->preference_id);
         $aPrefsNew[$doPreferences->preference_name] = array('permission' => $doPreferences->account_type, 'id' => $doPreferences->preference_id, 'acct_assoc' => $doAccount_Preference_Assoc->getAll());
     }
     $this->assertEqual(count($aPrefsNew), 2);
     $this->assertFalse(isset($aPrefsNew[$prefix . 'preference2']));
     $this->assertTrue(isset($aPrefsNew[$prefix . 'preference1']));
     $this->assertTrue(isset($aPrefsNew[$prefix . 'preference3']));
     $this->assertEqual($aPrefsNew[$prefix . 'preference1']['permission'], 'MANAGER');
     $this->assertEqual($aPrefsNew[$prefix . 'preference3']['permission'], 'ADMIN');
     $this->assertTrue(isset($aPrefsNew[$prefix . 'preference1']['acct_assoc']));
     $this->assertTrue(isset($aPrefsNew[$prefix . 'preference3']['acct_assoc']));
     $this->assertEqual($aPrefsNew[$prefix . 'preference1']['acct_assoc'][0]['account_id'], '0');
     $this->assertEqual($aPrefsNew[$prefix . 'preference3']['acct_assoc'][0]['account_id'], '0');
     $doAccount_Preference_Assoc = OA_Dal::factoryDO('account_preference_assoc');
     $doAccount_Preference_Assoc->preference_id = $aPrefsOld['testPlugin_preference2']['id'];
     $this->assertFalse($doAccount_Preference_Assoc->find());
     $oPkgMgr->uninstallPackage($this->packageName);
 }
Exemplo n.º 7
0
 function getComponentsHookCache()
 {
     if (!isset($GLOBALS['_MAX']['ComponentHooks'])) {
         $oCache = new OA_Cache('Plugins', 'ComponentHooks');
         $oCache->setFileNameProtection(false);
         $GLOBALS['_MAX']['ComponentHooks'] = $oCache->load(true);
         if ($GLOBALS['_MAX']['ComponentHooks'] === false) {
             require_once LIB_PATH . '/Plugin/PluginManager.php';
             $oPluginManager = new OX_PluginManager();
             $GLOBALS['_MAX']['ComponentHooks'] = $oPluginManager->getComponentHooks();
             $oCache->save($GLOBALS['_MAX']['ComponentHooks']);
         }
     }
     return $GLOBALS['_MAX']['ComponentHooks'];
 }
Exemplo n.º 8
0
|                                                                           |
| You should have received a copy of the GNU General Public License         |
| along with this program; if not, write to the Free Software               |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA |
+---------------------------------------------------------------------------+
$Id: plugin-index.php 37157 2009-05-28 12:31:10Z andrew.hill $
*/
// Require the initialisation file
require_once '../../init.php';
// Required files
require_once MAX_PATH . '/www/admin/config.php';
require_once LIB_PATH . '/Plugin/PluginManager.php';
require_once LIB_PATH . '/Plugin/ComponentGroupManager.php';
// Security check
OA_Permission::enforceAccount(OA_ACCOUNT_ADMIN);
$oPluginManager = new OX_PluginManager();
$oComponentGroupManager = new OX_Plugin_ComponentGroupManager();
$action = $_REQUEST['action'];
$plugin = $_REQUEST['package'];
$group = $_REQUEST['group'];
$parent = $_REQUEST['parent'];
//install
if (array_key_exists('install', $_POST)) {
    if (array_key_exists('filename', $_FILES)) {
        $oPluginManager->installPackage($_FILES['filename']);
    }
} else {
    if (array_key_exists('import', $_POST)) {
        if (array_key_exists('filename', $_FILES)) {
            $oPluginManager->installPackageCodeOnly($_FILES['filename']);
        }
 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();
 }
Exemplo n.º 10
0
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;
}
Exemplo n.º 11
0
/**
 * A function to remove the configiration setup for any plugins that were found
 * in the previous installation before upgrade, but which have been marked as
 * deprecated plugins.
 *
 * @param string $pluginName The name of the plugin to remove.
 * @return array An array of the 'name', 'status' and any 'errors' as an array.
 */
function removePlugin($pluginName)
{
    $aErrors = array();
    $aResult = array('name' => $pluginName, 'status' => '', 'errors' => &$aErrors);
    if (array_key_exists($pluginName, $GLOBALS['_MAX']['CONF']['plugins'])) {
        require_once RV_PATH . '/lib/RV.php';
        require_once MAX_PATH . '/lib/OA.php';
        require_once LIB_PATH . '/Plugin/PluginManager.php';
        $oPluginManager = new OX_PluginManager();
        $result = $oPluginManager->uninstallPackage($pluginName, true);
        if ($result) {
            $aResult['status'] = '<br />Uninstalled';
        } else {
            $aResult['status'] = '<br />Error';
            $aErrors[] = 'Problems found with plugin ' . $pluginName . '. The plugin was found in the previous installation' . ' and has been marked as deprecated, but was unable to' . ' be removed. Please go to the Configuration Plugins page' . ' and remove it.';
        }
    } else {
        $aResult['status'] = '<br />OK; Not installed';
        $aErrors[] = 'Problems found with plugin ' . $pluginName . '. The plugin was found in the previous installation' . ' and has been marked as deprecated, but was then not' . ' found as being installed when attempting to remove it.' . ' Please go to the Configuration Plugins page to ensure' . ' it is not installed.';
    }
    return $aResult;
}
Exemplo n.º 12
0
 static function getPluginPackageManager($mock)
 {
     if ($mock) {
         Mock::generatePartial('OX_PluginManager', $mockPkgMgrClass = 'MOX_PluginManager' . rand(), array('_auditInit', '_auditSetKeys', '_auditStart', '_auditUpdate', '_auditSetID', '_checkDatabaseEnvironment', '_registerSchema', '_registerPreferences', '_registerPluginVersion', '_unregisterSchema', '_unregisterPreferences', '_unregisterPluginVersion', '_runExtensionTasks'));
         $oPkgMgr = new $mockPkgMgrClass();
         // install tasks
         $oPkgMgr->setReturnValue('_auditInit', true);
         $oPkgMgr->setReturnValue('_auditSetKeys', true);
         $oPkgMgr->setReturnValue('_auditStart', true);
         $oPkgMgr->setReturnValue('_auditUpdate', true);
         $oPkgMgr->setReturnValue('_checkDatabaseEnvironment', true);
         //$oPkgMgr->setReturnValue('_runScript', true);
         //$oPkgMgr->setReturnValue('_checkDependenciesForInstallOrEnable', true);
         //$oPkgMgr->setReturnValue('_checkFiles', true);
         //$oPkgMgr->setReturnValue('_checkMenus', true);
         $oPkgMgr->setReturnValue('_registerSchema', true);
         $oPkgMgr->setReturnValue('_registerPreferences', true);
         //$oPkgMgr->setReturnValue('_registerSettings', true);
         $oPkgMgr->setReturnValue('_registerPluginVersion', true);
         // uninstall tasks
         //$oPkgMgr->setReturnValue('_checkDependenciesForUninstallOrDisable', true);
         $oPkgMgr->setReturnValue('_unregisterPluginVersion', true);
         $oPkgMgr->setReturnValue('_unregisterPreferences', true);
         //$oPkgMgr->setReturnValue('_unregisterSettings', true);
         $oPkgMgr->setReturnValue('_unregisterSchema', true);
         //$oPkgMgr->setReturnValue('_removeFiles', true);
     } else {
         $oPkgMgr = new OX_PluginManager();
     }
     $oPkgMgr->init();
     return $oPkgMgr;
 }
Exemplo n.º 13
0
function processForm(&$form, $aPluginValues)
{
    global $pathPlugin, $pathPackages, $pathAdmin;
    $aPaths = $GLOBALS['_MAX']['CONF']['pluginPaths'];
    $varTmp = MAX_PATH . '/var/tmp/';
    if (!file_exists($varTmp)) {
        mkdir($varTmp, 0777);
    }
    $pathPlugin = $varTmp . $aPluginValues['name'];
    if (!file_exists($pathPlugin)) {
        mkdir($pathPlugin, 0777);
    }
    $pathPackages = $pathPlugin . $aPaths['packages'];
    $pathAdmin = $pathPlugin . $aPaths['admin'];
    require_once LIB_PATH . '/Plugin/PluginManager.php';
    $oPluginManager = new OX_PluginManager();
    $aVersion = $aPluginValues['version'];
    $aPluginValues['date'] = date('Y-m-d');
    $aPluginValues['oxversion'] = OA_VERSION;
    $aPluginValues['version'] = $aVersion['major'] . '.' . $aVersion['minor'] . '.' . $aVersion['build'] . $aVersion['status'];
    $aGroupValues = $aPluginValues['group'];
    unset($aPluginValues['group']);
    foreach ($aGroupValues as $extension => $aGroup) {
        if ($aGroup['groupname']) {
            $aVals = $aPluginValues;
            $aVals['extension'] = $extension;
            $aVals['name'] = $aGroup['groupname'];
            $aVals['group'] = $aGroup['groupname'];
            $aPluginValues['grouporder'][] = $aGroup['groupname'];
            $oPluginManager->_decompressFile('etc/group.zip', $pathPackages . $aGroup['groupname']);
            $oBuilder = new OX_PluginBuilder_Group();
            if (isset($aGroup['schema']) && $aGroup['schema']) {
                $oBuilder->schema = true;
                $oPluginManager->_decompressFile('etc/schema.zip', $pathPackages . $aGroup['groupname']);
            }
            if ($extension == 'admin') {
                $oPluginManager->_decompressFile('etc/admin.zip', $pathPlugin);
                rename($pathAdmin . 'group', $pathAdmin . $aGroup['groupname']);
            }
            $oBuilder->init($aVals);
            $oBuilder->putGroup();
        }
    }
    $oPluginManager->_decompressFile('etc/plugin.zip', $pathPackages);
    $oBuilder = new OX_PluginBuilder_Package();
    $oBuilder->init($aPluginValues);
    $oBuilder->putPlugin();
    $aMessages[] = $aPluginValues['name'] . ' created in ' . $pathPlugin;
    return $aMessages;
}
 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;
 }