mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00:00
Merge branch '3.3.x'
This commit is contained in:
commit
29a116aea1
2 changed files with 56 additions and 98 deletions
|
@ -158,6 +158,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.
|
||||||
*
|
*
|
||||||
|
@ -195,35 +236,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)
|
||||||
{
|
{
|
||||||
|
@ -270,46 +283,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(
|
$extension_data = array(
|
||||||
|
'ext_active' => $active,
|
||||||
'ext_state' => serialize($state),
|
'ext_state' => serialize($state),
|
||||||
);
|
);
|
||||||
$this->extensions[$name]['ext_state'] = serialize($state);
|
$this->update_state($name, $extension_data);
|
||||||
|
|
||||||
$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 true;
|
|
||||||
}
|
|
||||||
|
|
||||||
$extension_data = array(
|
|
||||||
'ext_active' => false,
|
|
||||||
'ext_state' => serialize(false),
|
|
||||||
);
|
|
||||||
$this->extensions[$name]['ext_active'] = false;
|
|
||||||
$this->extensions[$name]['ext_state'] = serialize(false);
|
|
||||||
|
|
||||||
$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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -355,40 +337,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);
|
||||||
|
|
||||||
// continue until the state is false
|
|
||||||
if ($state !== false)
|
|
||||||
{
|
|
||||||
$extension_data = array(
|
$extension_data = array(
|
||||||
'ext_state' => serialize($state),
|
'ext_state' => serialize($state),
|
||||||
);
|
);
|
||||||
$this->extensions[$name]['ext_state'] = serialize($state);
|
|
||||||
|
|
||||||
$sql = 'UPDATE ' . $this->extension_table . '
|
$this->update_state($name, $extension_data, $purged ? 'delete' : 'update');
|
||||||
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)
|
// continue until the state is false
|
||||||
{
|
return !$purged;
|
||||||
$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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -234,7 +234,7 @@ class phpbb_functional_test_case extends phpbb_test_case
|
||||||
{
|
{
|
||||||
global $phpbb_root_path, $phpEx;
|
global $phpbb_root_path, $phpEx;
|
||||||
|
|
||||||
$config = new \phpbb\config\config(array());
|
$config = new \phpbb\config\config(array('version' => PHPBB_VERSION));
|
||||||
$db = $this->get_db();
|
$db = $this->get_db();
|
||||||
$factory = new \phpbb\db\tools\factory();
|
$factory = new \phpbb\db\tools\factory();
|
||||||
$db_tools = $factory->get($db);
|
$db_tools = $factory->get($db);
|
||||||
|
|
Loading…
Add table
Reference in a new issue