Skip to content

Commit

Permalink
Merge pull request #2220 from Portugao/1.3
Browse files Browse the repository at this point in the history
[Extensions] Incompatible modules get saved now
  • Loading branch information
craigh committed Feb 2, 2015
2 parents 07141db + dfdf4db commit 43eab9f
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 85 deletions.
1 change: 1 addition & 0 deletions src/docs/CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ CHANGELOG - ZIKULA 1.3.10
- Added missing hook area registration for HTML blocks
- Show registration errors in current language
- Improved language detection when using short urls
- Fixed error messages with new module that is not compatible (#1641)

CHANGELOG - ZIKULA 1.3.9
------------------------
Expand Down
187 changes: 102 additions & 85 deletions src/system/Extensions/lib/Extensions/Api/Admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -543,21 +543,21 @@ public function getfilemodules()
$moddependencies = serialize(array());
}
//if (!isset($args['name'])) {
$filemodules[$name] = array(
'directory' => $dir,
'name' => $name,
'type' => $moduletype,
'displayname' => $displayname,
'url' => $url,
'oldnames' => $oldnames,
'version' => $version,
'capabilities' => $capabilities,
'description' => $description,
'securityschema' => $securityschema,
'dependencies' => $moddependencies,
'core_min' => $core_min,
'core_max' => $core_max,
);
$filemodules[$name] = array(
'directory' => $dir,
'name' => $name,
'type' => $moduletype,
'displayname' => $displayname,
'url' => $url,
'oldnames' => $oldnames,
'version' => $version,
'capabilities' => $capabilities,
'description' => $description,
'securityschema' => $securityschema,
'dependencies' => $moddependencies,
'core_min' => $core_min,
'core_max' => $core_max,
);

// important: unset modversion and modtype, otherwise the
// following modules will have some values not defined in
Expand Down Expand Up @@ -621,39 +621,41 @@ public function regenerate($args)
if (isset($modinfo['oldnames']) && !empty($modinfo['oldnames'])) {
$tables = DBUtil::getTables();
foreach ($dbmodules as $dbname => $dbmodinfo) {
if (in_array($dbmodinfo['name'], (array)$modinfo['oldnames'])) {
// migrate its modvars
$cols = $tables['module_vars_column'];
$save = array('modname' => $modinfo['name']);
DBUtil::updateObject($save, 'module_vars', "{$cols['modname']} = '$dbname'");

// rename the module register
$save = $dbmodules[$dbname];
$save['name'] = $modinfo['name'];
unset($dbmodules[$dbname]);
$dbname = $modinfo['name'];
$dbmodules[$dbname] = $save;
DBUtil::updateObject($dbmodules[$dbname], 'modules');

// rename hooks in the hooks table.
$hooksColumns = $tables['hooks_column'];
$hooks = DBUtil::selectObjectArray('hooks', "$hooksColumns[smodule] = '$save[name]'");
if ($hooks) {
foreach ($hooks as $hook) {
$hook['smodule'] = $dbmodinfo['name'];
DBUtil::updateObject($hook, 'hooks');
if (isset($dbmodinfo['name'])) {
if (in_array($dbmodinfo['name'], (array)$modinfo['oldnames'])) {
// migrate its modvars
$cols = $tables['module_vars_column'];
$save = array('modname' => $modinfo['name']);
DBUtil::updateObject($save, 'module_vars', "{$cols['modname']} = '$dbname'");

// rename the module register
$save = $dbmodules[$dbname];
$save['name'] = $modinfo['name'];
unset($dbmodules[$dbname]);
$dbname = $modinfo['name'];
$dbmodules[$dbname] = $save;
DBUtil::updateObject($dbmodules[$dbname], 'modules');

// rename hooks in the hooks table.
$hooksColumns = $tables['hooks_column'];
$hooks = DBUtil::selectObjectArray('hooks', "$hooksColumns[smodule] = '$save[name]'");
if ($hooks) {
foreach ($hooks as $hook) {
$hook['smodule'] = $dbmodinfo['name'];
DBUtil::updateObject($hook, 'hooks');
}
}
}

$hooks = DBUtil::selectObjectArray('hooks', "$hooksColumns[tmodule] = '$save[name]'");
if ($hooks) {
foreach ($hooks as $hook) {
$hook['tmodule'] = $dbmodinfo['name'];
DBUtil::updateObject($hook, 'hooks');
$hooks = DBUtil::selectObjectArray('hooks', "$hooksColumns[tmodule] = '$save[name]'");
if ($hooks) {
foreach ($hooks as $hook) {
$hook['tmodule'] = $dbmodinfo['name'];
DBUtil::updateObject($hook, 'hooks');
}
}
}

DBUtil::deleteObjectByID('hooks', $modinfo['name'], 'tmodule');
DBUtil::deleteObjectByID('hooks', $modinfo['name'], 'tmodule');
}
}
}
unset($tables);
Expand Down Expand Up @@ -689,9 +691,11 @@ public function regenerate($args)
$maxok = version_compare($filemodules[$name]['core_max'], $coreVersion);
}

if ($minok == -1 || $maxok == -1) {
$dbmodules[$name]['state'] = $dbmodules[$name]['state'] + 20;
$this->setState(array('id' => $dbmodules[$name]['id'], 'state' => $dbmodules[$name]['state']));
if (isset($dbmodules[$name])) {
if ($minok == -1 || $maxok == -1) {
$dbmodules[$name]['state'] = $dbmodules[$name]['state'] + 20;
$this->setState(array('id' => $dbmodules[$name]['id'], 'state' => $dbmodules[$name]['state']));
}
}
if (isset($dbmodules[$name]['state'])) {
$filemodules[$name]['state'] = $dbmodules[$name]['state'];
Expand Down Expand Up @@ -735,6 +739,15 @@ public function regenerate($args)
if (!$modinfo['version']) {
$modinfo['state'] = ModUtil::STATE_INVALID;
}
if (!empty($modinfo['core_min'])) {
$minok = version_compare($coreVersion, $modinfo['core_min']);
}
if (!empty($modinfo['core_max'])) {
$maxok = version_compare($modinfo['core_max'], $coreVersion);
}
if ($minok == -1 || $maxok == -1) {
$modinfo['state'] = $modinfo['state'] + 20;
}
if ($this->serviceManager['multisites.enabled'] == 1) {
// only the main site can regenerate the modules list
if (($this->serviceManager['multisites.mainsiteurl'] == FormUtil::getPassedValue('sitedns', null, 'GET') && $this->serviceManager['multisites.based_on_domains'] == 0) || ($this->serviceManager['multisites.mainsiteurl'] == $_SERVER['HTTP_HOST'] && $this->serviceManager['multisites.based_on_domains'] == 1)) {
Expand All @@ -753,10 +766,14 @@ public function regenerate($args)
$modinfo = array_merge($modinfo, array('id' => $dbmodules[$name]['id'], 'state' => ModUtil::STATE_UNINITIALISED));
DBUtil::updateObject($modinfo, 'modules');
}
if ($dbmodules[$name]['version'] != $modinfo['version']) {
if ($dbmodules[$name]['state'] != ModUtil::STATE_UNINITIALISED &&
$dbmodules[$name]['state'] != ModUtil::STATE_INVALID) {
$this->setState(array('id' => $dbmodules[$name]['id'], 'state' => ModUtil::STATE_UPGRADED));
if (isset($dbmodinfo['version'])) {
if ($dbmodules[$name]['version'] != $modinfo['version']) {
if ($dbmodules[$name]['state'] != ModUtil::STATE_UNINITIALISED &&
$dbmodules[$name]['state'] != ModUtil::STATE_INVALID &&
$dbmodules[$name]['state'] != ModUtil::STATE_NOTALLOWED &&
$dbmodules[$name]['state'] < 10) {
$this->setState(array('id' => $dbmodules[$name]['id'], 'state' => ModUtil::STATE_UPGRADED));
}
}
}
}
Expand Down Expand Up @@ -1188,49 +1205,49 @@ public function getlinks()
'text' => $this->__('Modules list'),
'class' => 'z-icon-es-view',
'links' => array(
array('url' => ModUtil::url('Extensions', 'admin', 'view'),
'text' => $this->__('All')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_UNINITIALISED)),
'text' => $this->__('Not installed')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_INACTIVE)),
'text' => $this->__('Inactive')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_ACTIVE)),
'text' => $this->__('Active')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_MISSING)),
'text' => $this->__('Files missing')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_UPGRADED)),
'text' => $this->__('New version uploaded')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_INVALID)),
'text' => $this->__('Invalid structure'))
));
array('url' => ModUtil::url('Extensions', 'admin', 'view'),
'text' => $this->__('All')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_UNINITIALISED)),
'text' => $this->__('Not installed')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_INACTIVE)),
'text' => $this->__('Inactive')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_ACTIVE)),
'text' => $this->__('Active')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_MISSING)),
'text' => $this->__('Files missing')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_UPGRADED)),
'text' => $this->__('New version uploaded')),
array('url' => ModUtil::url('Extensions', 'admin', 'view', array('state'=>ModUtil::STATE_INVALID)),
'text' => $this->__('Invalid structure'))
));

$links[] = array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins'),
'text' => $this->__('Plugins list'),
'class' => 'z-icon-es-gears',
'links' => array(
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins'),
'text' => $this->__('All')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('state'=>PluginUtil::NOTINSTALLED)),
'text' => $this->__('Not installed')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('state'=>PluginUtil::DISABLED)),
'text' => $this->__('Inactive')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('state'=>PluginUtil::ENABLED)),
'text' => $this->__('Active'))
));

array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins'),
'text' => $this->__('All')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('state'=>PluginUtil::NOTINSTALLED)),
'text' => $this->__('Not installed')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('state'=>PluginUtil::DISABLED)),
'text' => $this->__('Inactive')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('state'=>PluginUtil::ENABLED)),
'text' => $this->__('Active'))
));
$links[] = array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true)),
'text' => $this->__('System Plugins'),
'class' => 'z-icon-es-gears',
'links' => array(
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true)),
'text' => $this->__('All')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true, 'state'=>PluginUtil::NOTINSTALLED)),
'text' => $this->__('Not installed')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true, 'state'=>PluginUtil::DISABLED)),
'text' => $this->__('Inactive')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true, 'state'=>PluginUtil::ENABLED)),
'text' => $this->__('Active'))
));
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true)),
'text' => $this->__('All')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true, 'state'=>PluginUtil::NOTINSTALLED)),
'text' => $this->__('Not installed')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true, 'state'=>PluginUtil::DISABLED)),
'text' => $this->__('Inactive')),
array('url' => ModUtil::url('Extensions', 'admin', 'viewPlugins', array('systemplugins' => true, 'state'=>PluginUtil::ENABLED)),
'text' => $this->__('Active'))
));

$legacyHooks = DBUtil::selectObjectArray('hooks');
if (System::isLegacyMode() && $legacyHooks) {
Expand Down

0 comments on commit 43eab9f

Please sign in to comment.