Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Extensions] Incompatible modules get saved now #2220

Merged
merged 2 commits into from
Feb 2, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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