Files
san-reymoros/ext/phpbbstudio/aps/points/blockader.php
2020-04-04 18:27:27 +02:00

159 lines
3.8 KiB
PHP

<?php
/**
*
* phpBB Studio - Advanced Points System. An extension for the phpBB Forum Software package.
*
* @copyright (c) 2019, phpBB Studio, https://www.phpbbstudio.com
* @license GNU General Public License, version 2 (GPL-2.0)
*
*/
namespace phpbbstudio\aps\points;
/**
* phpBB Studio - Advanced Points System blockader.
*/
class blockader
{
/** @var \phpbb\db\driver\driver_interface */
protected $db;
/** @var string APS Display table */
protected $blocks_table;
/** @var int User identifier used for admin desired blocks */
protected $admin_id = 0;
/**
* Constructor.
*
* @param \phpbb\db\driver\driver_interface $db Database object
* @param string $blocks_table APS Display table
* @return void
* @access public
*/
public function __construct(\phpbb\db\driver\driver_interface $db, $blocks_table)
{
$this->db = $db;
$this->blocks_table = $blocks_table;
}
/**
* User identifier user for admin desired blocks.
*
* @return int The admin identifier
* @access public
*/
public function get_admin_id()
{
return $this->admin_id;
}
/**
* Fetch a row from the database for the provided user identifier.
*
* @param int $user_id The user identifier
* @return array The json decoded database row
* @access public
*/
public function row($user_id)
{
$sql = 'SELECT aps_display FROM ' . $this->blocks_table . ' WHERE user_id = ' . (int) $user_id;
$result = $this->db->sql_query_limit($sql, 1);
$display = $this->db->sql_fetchfield('aps_display');
$this->db->sql_freeresult($result);
return $display ? (array) json_decode($display, true) : [];
}
/**
* Fetch a rowset from the database for the provided user identifier and admin identifier.
*
* @param int $user_id The user identifier
* @return array The json decoded database rowset
* @access public
*/
public function rowset($user_id)
{
$rowset = [];
$sql = 'SELECT user_id, aps_display
FROM ' . $this->blocks_table . '
WHERE ' . $this->db->sql_in_set('user_id', [$this->admin_id, (int) $user_id]);
$result = $this->db->sql_query($sql);
while ($row = $this->db->sql_fetchrow($result))
{
if ($row['user_id'] != ANONYMOUS)
{
$rowset[(int) $row['user_id']] = (array) json_decode($row['aps_display'], true);
}
}
$this->db->sql_freeresult($result);
return (array) $rowset;
}
/**
* Set the user desired blocks in the database.
*
* @param int $user_id The user identifier
* @param array $blocks The user desired blocks
* @param bool $insert Whether to insert or update
* @return bool|int Bool on update, integer on insert
* @access public
*/
public function set_blocks($user_id, array $blocks, $insert)
{
if ($user_id == ANONYMOUS)
{
return false;
}
if ($insert)
{
return $this->insert($user_id, $blocks);
}
else
{
return $this->update($user_id, $blocks);
}
}
/**
* Insert a user desired blocks into the database.
*
* @param int $user_id The user identifier
* @param array $blocks The user desired blocks
* @return int
* @access public
*/
public function insert($user_id, array $blocks)
{
$sql = 'INSERT INTO ' . $this->blocks_table . ' ' . $this->db->sql_build_array('INSERT', [
'user_id' => (int) $user_id,
'aps_display' => json_encode($blocks),
]);
$this->db->sql_query($sql);
return (int) $this->db->sql_nextid();
}
/**
* Update a user desired blocks in the database.
*
* @param int $user_id The user identifier
* @param array $blocks The user desired blocks
* @return bool
* @access public
*/
public function update($user_id, array $blocks)
{
$sql = 'UPDATE ' . $this->blocks_table . ' SET ' . $this->db->sql_build_array('UPDATE', [
'aps_display' => json_encode($blocks),
]) . ' WHERE user_id = ' . (int) $user_id;
$this->db->sql_query($sql);
return (bool) $this->db->sql_affectedrows();
}
}