mirror of
https://github.com/phpbb/phpbb.git
synced 2025-04-11 11:24:23 +02:00
Merge pull request #5557 from senky/ticket/15088
[ticket/15088] Avoid code repetitions in extension manager
This commit is contained in:
commit
423345d517
@ -160,6 +160,47 @@ class manager
|
||||
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.
|
||||
*
|
||||
@ -197,35 +238,7 @@ class manager
|
||||
'ext_state' => serialize($state),
|
||||
);
|
||||
|
||||
$this->extensions[$name] = $extension_data;
|
||||
$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();
|
||||
}
|
||||
$this->update_state($name, $extension_data, $this->is_configured($name) ? 'update' : 'insert');
|
||||
|
||||
if ($active)
|
||||
{
|
||||
@ -272,46 +285,15 @@ class manager
|
||||
|
||||
$extension = $this->get_extension($name);
|
||||
$state = $extension->disable_step($old_state);
|
||||
|
||||
// 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;
|
||||
}
|
||||
$active = ($state !== false);
|
||||
|
||||
$extension_data = array(
|
||||
'ext_active' => false,
|
||||
'ext_state' => serialize(false),
|
||||
'ext_active' => $active,
|
||||
'ext_state' => serialize($state),
|
||||
);
|
||||
$this->extensions[$name]['ext_active'] = false;
|
||||
$this->extensions[$name]['ext_state'] = serialize(false);
|
||||
$this->update_state($name, $extension_data);
|
||||
|
||||
$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 false;
|
||||
return $active;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -357,40 +339,16 @@ class manager
|
||||
|
||||
$extension = $this->get_extension($name);
|
||||
$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
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
return !$purged;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -234,7 +234,7 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||
{
|
||||
global $phpbb_root_path, $phpEx;
|
||||
|
||||
$config = new \phpbb\config\config(array());
|
||||
$config = new \phpbb\config\config(array('version' => PHPBB_VERSION));
|
||||
$db = $this->get_db();
|
||||
$factory = new \phpbb\db\tools\factory();
|
||||
$db_tools = $factory->get($db);
|
||||
|
Loading…
x
Reference in New Issue
Block a user