mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-07 20:08:53 +00:00
[ticket/9687] Add unbanning to the manager
PHPBB3-9687
This commit is contained in:
parent
64af01f528
commit
95de576ccd
5 changed files with 140 additions and 18 deletions
|
@ -95,12 +95,12 @@ class manager
|
|||
// TODO throw exception
|
||||
}
|
||||
|
||||
if ($ban_mode->get_log_string() !== false)
|
||||
if ($ban_mode->get_ban_log_string() !== false)
|
||||
{
|
||||
$ban_items_log = implode(', ', $ban_items);
|
||||
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, $ban_mode->get_log_string(), false, [$reason, $ban_items_log]);
|
||||
$this->log->add('mod', $this->user->data['user_id'], $this->user->ip, $ban_mode->get_log_string(), false, [
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, $ban_mode->get_ban_log_string(), false, [$reason, $ban_items_log]);
|
||||
$this->log->add('mod', $this->user->data['user_id'], $this->user->ip, $ban_mode->get_ban_log_string(), false, [
|
||||
'forum_id' => 0,
|
||||
'topic_id' => 0,
|
||||
$reason,
|
||||
|
@ -172,9 +172,50 @@ class manager
|
|||
$this->cache->destroy('sql', $this->ban_table);
|
||||
}
|
||||
|
||||
public function unban($mode, array $items, $reason, $logging = true)
|
||||
public function unban($mode, array $items)
|
||||
{
|
||||
if (!isset($this->types[$mode]))
|
||||
{
|
||||
throw new type_not_found_exception(); // TODO
|
||||
}
|
||||
/** @var \phpbb\ban\type\type_interface $ban_mode */
|
||||
$ban_mode = $this->types[$mode];
|
||||
|
||||
$sql_ids = array_map('intval', $items);
|
||||
$sql = 'SELECT ban_item
|
||||
FROM ' . $this->ban_table . '
|
||||
WHERE ' . $this->db->sql_in_set('ban_id', $sql_ids); // TODO (what if empty?)
|
||||
$result = $this->db->sql_query($sql);
|
||||
|
||||
$unbanned_items = [];
|
||||
while ($row = $this->db->sql_fetchrow($result))
|
||||
{
|
||||
$unbanned_items[] = $row['ban_item'];
|
||||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
$sql = 'DELETE FROM ' . $this->ban_table . '
|
||||
WHERE ' . $this->db->sql_in_set('ban_id', $sql_ids);
|
||||
$this->db->sql_query($sql);
|
||||
|
||||
if ($ban_mode->get_unban_log_string() !== false)
|
||||
{
|
||||
$unban_items_log = implode(', ', $unbanned_items);
|
||||
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, $ban_mode->get_unban_log_string(), false, [$unban_items_log]);
|
||||
$this->log->add('mod', $this->user->data['user_id'], $this->user->ip, $ban_mode->get_unban_log_string(), false, [
|
||||
'forum_id' => 0,
|
||||
'topic_id' => 0,
|
||||
$unban_items_log,
|
||||
]);
|
||||
}
|
||||
|
||||
$unban_data = [
|
||||
'items' => $unbanned_items,
|
||||
];
|
||||
$ban_mode->after_unban($unban_data);
|
||||
|
||||
$this->cache->destroy('sql', $this->ban_table);
|
||||
}
|
||||
|
||||
public function check(array $user_data = [])
|
||||
|
@ -183,5 +224,6 @@ class manager
|
|||
|
||||
public function tidy()
|
||||
{
|
||||
// TODO: Delete stale bans
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,12 +37,15 @@ abstract class base implements type_interface
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function after_ban($data)
|
||||
public function after_ban(array $data)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function after_unban()
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function after_unban(array $data)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -15,11 +15,16 @@ namespace phpbb\ban\type;
|
|||
|
||||
class email extends base
|
||||
{
|
||||
public function get_log_string()
|
||||
public function get_ban_log_string()
|
||||
{
|
||||
return 'LOG_BAN_EMAIL';
|
||||
}
|
||||
|
||||
public function get_unban_log_string()
|
||||
{
|
||||
return 'LOG_UNBAN_EMAIL';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
|
|
@ -19,12 +19,20 @@ namespace phpbb\ban\type;
|
|||
interface type_interface
|
||||
{
|
||||
/**
|
||||
* Returns the language key that's used for the log entry.
|
||||
* Returns the language key that's used for the ban log entry.
|
||||
* False, if there is none (and thus no logs are created)
|
||||
*
|
||||
* @return string|bool
|
||||
*/
|
||||
public function get_log_string();
|
||||
public function get_ban_log_string();
|
||||
|
||||
/**
|
||||
* Returns the language key that's used for the unban log entry.
|
||||
* False, if thee is none (and thus no logs are created)
|
||||
*
|
||||
* @return string|bool
|
||||
*/
|
||||
public function get_unban_log_string();
|
||||
|
||||
/**
|
||||
* Returns the type identifier for this ban type
|
||||
|
@ -44,7 +52,7 @@ interface type_interface
|
|||
public function get_user_column();
|
||||
|
||||
/**
|
||||
* Gives the possibility to do some clean up after banning
|
||||
* Gives the possibility to do some clean up after banning.
|
||||
* Returns true if affected users should be logged out and
|
||||
* false otherwise
|
||||
*
|
||||
|
@ -54,9 +62,19 @@ interface type_interface
|
|||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function after_ban($data);
|
||||
public function after_ban(array $data);
|
||||
|
||||
public function after_unban(); // ???
|
||||
/**
|
||||
* Gives the possiblity to do some clean up after unbanning.
|
||||
* The return value of this method will be ignored and thus
|
||||
* should be null
|
||||
*
|
||||
* @param array $data An array containing information about
|
||||
* the unbans, e.g. the unbanned items.
|
||||
*
|
||||
* @return null
|
||||
*/
|
||||
public function after_unban(array $data);
|
||||
|
||||
/**
|
||||
* In the case that get_user_column() returns null, this method
|
||||
|
|
|
@ -22,17 +22,27 @@ class user extends base
|
|||
protected $log;
|
||||
|
||||
/** @var string */
|
||||
private $log_string = 'LOG_BAN_USER';
|
||||
private $ban_log_string = 'LOG_BAN_USER';
|
||||
|
||||
private $unban_log_string = 'LOG_UNBAN_USER';
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function get_log_string()
|
||||
public function get_ban_log_string()
|
||||
{
|
||||
// Have to handle logging differently here
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function get_unban_log_string()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
@ -52,12 +62,12 @@ class user extends base
|
|||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function after_ban($data)
|
||||
public function after_ban(array $data)
|
||||
{
|
||||
$usernames_log = implode(', ', $this->banned_users);
|
||||
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, $this->log_string, false, [$data['reason'], $usernames_log]);
|
||||
$this->log->add('mod', $this->user->data['user_id'], $this->user->ip, $this->log_string, false, [
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, $this->ban_log_string, false, [$data['reason'], $usernames_log]);
|
||||
$this->log->add('mod', $this->user->data['user_id'], $this->user->ip, $this->ban_log_string, false, [
|
||||
'forum_id' => 0,
|
||||
'topic_id' => 0,
|
||||
$data['reason'],
|
||||
|
@ -66,7 +76,7 @@ class user extends base
|
|||
|
||||
foreach ($this->banned_users as $user_id => $username)
|
||||
{
|
||||
$this->log->add('user', $this->user->data['user_id'], $this->user->ip, $this->log_string, false, [
|
||||
$this->log->add('user', $this->user->data['user_id'], $this->user->ip, $this->ban_log_string, false, [
|
||||
'reportee_id' => $user_id,
|
||||
$data['reason'],
|
||||
$usernames_log,
|
||||
|
@ -76,6 +86,50 @@ class user extends base
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function after_unban(array $data)
|
||||
{
|
||||
$user_ids = array_map('intval', $data['items']);
|
||||
|
||||
$sql = 'SELECT user_id, username
|
||||
FROM ' . $this->users_table . '
|
||||
WHERE ' . $this->db->sql_in_set('user_id', $user_ids);
|
||||
$result = $this->db->sql_query($sql);
|
||||
|
||||
$real_user_ids = [];
|
||||
$usernames = [];
|
||||
while ($row = $this->db->sql_fetchrow($result))
|
||||
{
|
||||
$real_user_ids[] = $row['user_id'];
|
||||
$usernames[] = $row['username'];
|
||||
}
|
||||
$this->db->sql_freeresult($result);
|
||||
|
||||
if (empty($usernames))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
$usernames_log = implode(', ', $usernames);
|
||||
|
||||
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, $this->unban_log_string, false, [$usernames_log]);
|
||||
$this->log->add('mod', $this->user->data['user_id'], $this->user->ip, $this->unban_log_string, false, [
|
||||
'forum_id' => 0,
|
||||
'topic_id' => 0,
|
||||
$usernames_log,
|
||||
]);
|
||||
|
||||
foreach ($real_user_ids as $user_id)
|
||||
{
|
||||
$this->log->add('user', $this->user->data['user_id'], $this->user->ip, $this->unban_log_string, false, [
|
||||
'reportee_id' => $user_id,
|
||||
$usernames_log,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue