mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-27 21:58:52 +00:00
[ticket/15088] Avoid code repetitions in extension manager
PHPBB3-15088
This commit is contained in:
parent
ee51bf26fa
commit
b0334d6b4f
1 changed files with 55 additions and 97 deletions
|
@ -160,6 +160,47 @@ class manager
|
||||||
return $this->extensions[$name]['metadata'];
|
return $this->extensions[$name]['metadata'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the database entry for an extension
|
||||||
|
*
|
||||||
|
* @param string $name Extension name to update
|
||||||
|
* @param array $data Data to update in the database
|
||||||
|
* @param string $action Action to perform, by default 'update', may be also 'insert' or 'delete'
|
||||||
|
*/
|
||||||
|
protected function update_state($name, $data, $action = 'update')
|
||||||
|
{
|
||||||
|
switch ($action)
|
||||||
|
{
|
||||||
|
case 'insert':
|
||||||
|
$this->extensions[$name] = $data;
|
||||||
|
$this->extensions[$name]['ext_path'] = $this->get_extension_path($name);
|
||||||
|
ksort($this->extensions);
|
||||||
|
$sql = 'INSERT INTO ' . $this->extension_table . ' ' . $this->db->sql_build_array('INSERT', $data);
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'update':
|
||||||
|
$this->extensions[$name] = array_merge($this->extensions[$name], $data);
|
||||||
|
$sql = 'UPDATE ' . $this->extension_table . '
|
||||||
|
SET ' . $this->db->sql_build_array('UPDATE', $data) . "
|
||||||
|
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'delete':
|
||||||
|
unset($this->extensions[$name]);
|
||||||
|
$sql = 'DELETE FROM ' . $this->extension_table . "
|
||||||
|
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
|
||||||
|
$this->db->sql_query($sql);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->cache)
|
||||||
|
{
|
||||||
|
$this->cache->purge();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runs a step of the extension enabling process.
|
* Runs a step of the extension enabling process.
|
||||||
*
|
*
|
||||||
|
@ -197,35 +238,7 @@ class manager
|
||||||
'ext_state' => serialize($state),
|
'ext_state' => serialize($state),
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->extensions[$name] = $extension_data;
|
$this->update_state($name, $extension_data, $this->is_configured($name) ? 'update' : 'insert');
|
||||||
$this->extensions[$name]['ext_path'] = $this->get_extension_path($extension_data['ext_name']);
|
|
||||||
ksort($this->extensions);
|
|
||||||
|
|
||||||
$sql = 'SELECT COUNT(ext_name) as row_count
|
|
||||||
FROM ' . $this->extension_table . "
|
|
||||||
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
|
|
||||||
$result = $this->db->sql_query($sql);
|
|
||||||
$count = $this->db->sql_fetchfield('row_count');
|
|
||||||
$this->db->sql_freeresult($result);
|
|
||||||
|
|
||||||
if ($count)
|
|
||||||
{
|
|
||||||
$sql = 'UPDATE ' . $this->extension_table . '
|
|
||||||
SET ' . $this->db->sql_build_array('UPDATE', $extension_data) . "
|
|
||||||
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
|
|
||||||
$this->db->sql_query($sql);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$sql = 'INSERT INTO ' . $this->extension_table . '
|
|
||||||
' . $this->db->sql_build_array('INSERT', $extension_data);
|
|
||||||
$this->db->sql_query($sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->cache)
|
|
||||||
{
|
|
||||||
$this->cache->purge();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($active)
|
if ($active)
|
||||||
{
|
{
|
||||||
|
@ -272,46 +285,15 @@ class manager
|
||||||
|
|
||||||
$extension = $this->get_extension($name);
|
$extension = $this->get_extension($name);
|
||||||
$state = $extension->disable_step($old_state);
|
$state = $extension->disable_step($old_state);
|
||||||
|
$active = ($state !== false);
|
||||||
// continue until the state is false
|
|
||||||
if ($state !== false)
|
|
||||||
{
|
|
||||||
$extension_data = array(
|
|
||||||
'ext_state' => serialize($state),
|
|
||||||
);
|
|
||||||
$this->extensions[$name]['ext_state'] = serialize($state);
|
|
||||||
|
|
||||||
$sql = 'UPDATE ' . $this->extension_table . '
|
|
||||||
SET ' . $this->db->sql_build_array('UPDATE', $extension_data) . "
|
|
||||||
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
|
|
||||||
$this->db->sql_query($sql);
|
|
||||||
|
|
||||||
if ($this->cache)
|
|
||||||
{
|
|
||||||
$this->cache->purge();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$extension_data = array(
|
$extension_data = array(
|
||||||
'ext_active' => false,
|
'ext_active' => $active,
|
||||||
'ext_state' => serialize(false),
|
'ext_state' => serialize($state),
|
||||||
);
|
);
|
||||||
$this->extensions[$name]['ext_active'] = false;
|
$this->update_state($name, $extension_data);
|
||||||
$this->extensions[$name]['ext_state'] = serialize(false);
|
|
||||||
|
|
||||||
$sql = 'UPDATE ' . $this->extension_table . '
|
return $active;
|
||||||
SET ' . $this->db->sql_build_array('UPDATE', $extension_data) . "
|
|
||||||
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
|
|
||||||
$this->db->sql_query($sql);
|
|
||||||
|
|
||||||
if ($this->cache)
|
|
||||||
{
|
|
||||||
$this->cache->purge();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -357,40 +339,16 @@ class manager
|
||||||
|
|
||||||
$extension = $this->get_extension($name);
|
$extension = $this->get_extension($name);
|
||||||
$state = $extension->purge_step($old_state);
|
$state = $extension->purge_step($old_state);
|
||||||
|
$purged = ($state === false);
|
||||||
|
|
||||||
|
$extension_data = array(
|
||||||
|
'ext_state' => serialize($state),
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->update_state($name, $extension_data, $purged ? 'delete' : 'update');
|
||||||
|
|
||||||
// continue until the state is false
|
// continue until the state is false
|
||||||
if ($state !== false)
|
return !$purged;
|
||||||
{
|
|
||||||
$extension_data = array(
|
|
||||||
'ext_state' => serialize($state),
|
|
||||||
);
|
|
||||||
$this->extensions[$name]['ext_state'] = serialize($state);
|
|
||||||
|
|
||||||
$sql = 'UPDATE ' . $this->extension_table . '
|
|
||||||
SET ' . $this->db->sql_build_array('UPDATE', $extension_data) . "
|
|
||||||
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
|
|
||||||
$this->db->sql_query($sql);
|
|
||||||
|
|
||||||
if ($this->cache)
|
|
||||||
{
|
|
||||||
$this->cache->purge();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
unset($this->extensions[$name]);
|
|
||||||
|
|
||||||
$sql = 'DELETE FROM ' . $this->extension_table . "
|
|
||||||
WHERE ext_name = '" . $this->db->sql_escape($name) . "'";
|
|
||||||
$this->db->sql_query($sql);
|
|
||||||
|
|
||||||
if ($this->cache)
|
|
||||||
{
|
|
||||||
$this->cache->purge();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue