Extensions

This commit is contained in:
Gauvain Boiché
2020-04-04 23:28:30 +02:00
parent 3a964fe237
commit 155e626426
286 changed files with 10757 additions and 2 deletions

View File

@@ -0,0 +1,306 @@
<?php
/**
* phpBB Studio's Dice 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\dice\operator;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Operator for roll entities.
*/
class roll implements roll_interface
{
/** @var \phpbb\config\config */
protected $config;
/** @var \phpbb\config\db_text */
protected $config_text;
/** @var ContainerInterface */
protected $container;
/** @var \phpbb\db\driver\driver_interface */
protected $db;
/** @var \phpbb\filesystem\filesystem */
protected $filesystem;
/** @var \phpbbstudio\dice\core\functions_common */
protected $functions;
/** @var \phpbb\controller\helper */
protected $helper;
/** @var \phpbb\template\template */
protected $template;
/** @var \phpbb\user */
protected $user;
/** @var string Posts table */
protected $posts_table;
/** @var string Dice rolls table */
protected $rolls_table;
/** @var string phpBB root path */
protected $root_path;
/**
* Constructor.
*
* @param \phpbb\config\config $config Configuration object
* @param \phpbb\config\db_text $config_text Text configuration object
* @param ContainerInterface $container Container injection Service
* @param \phpbb\db\driver\driver_interface $db Database object
* @param \phpbb\filesystem\filesystem $filesystem Filesystem object
* @param \phpbbstudio\dice\core\functions_common $functions Dice common functions
* @param \phpbb\controller\helper $helper Controller helper object
* @param \phpbb\template\template $template Template object
* @param \phpbb\user $user User object
* @param string $posts_table Posts table
* @param string $rolls_table Dice rolls table
* @param string $root_path phpBB root path
* @return void
* @access public
*/
public function __construct(
\phpbb\config\config $config,
\phpbb\config\db_text $config_text,
ContainerInterface $container,
\phpbb\db\driver\driver_interface $db,
\phpbb\filesystem\filesystem $filesystem,
\phpbbstudio\dice\core\functions_common $functions,
\phpbb\controller\helper $helper,
\phpbb\template\template $template,
\phpbb\user $user,
$posts_table,
$rolls_table,
$root_path
)
{
$this->config = $config;
$this->config_text = $config_text;
$this->container = $container;
$this->db = $db;
$this->filesystem = $filesystem;
$this->functions = $functions;
$this->helper = $helper;
$this->template = $template;
$this->user = $user;
$this->posts_table = $posts_table;
$this->rolls_table = $rolls_table;
$this->root_path = $root_path;
}
/**
* {@inheritdoc}
*/
public function get_entity()
{
return $this->container->get('phpbbstudio.dice.entity.roll');
}
/**
* {@inheritdoc}
*/
public function get_entities(array $rowset)
{
// Set up an array for entities collection.
$entities = [];
foreach ($rowset as $row)
{
// Get an entity, import the row data and add it to the entities array
$entities[] = $this->get_entity()->import($row);
}
return $entities;
}
/**
* {@inheritdoc}
*/
public function delete($roll_ids)
{
// No roll identifiers were provided
if (empty($roll_ids))
{
return false;
}
$sql_where = is_array($roll_ids) ? $this->db->sql_in_set('roll_id', $roll_ids) : 'roll_id = ' . (int) $roll_ids;
$sql = 'DELETE FROM ' . $this->rolls_table . ' WHERE ' . $sql_where;
$this->db->sql_query($sql);
return (bool) $this->db->sql_affectedrows();
}
/**
* {@inheritdoc}
*/
public function get_author($roll_id)
{
$sql = 'SELECT p.poster_id
FROM ' . $this->rolls_table . ' r
LEFT JOIN ' . $this->posts_table . ' p
ON p.post_id = r.post_id
WHERE r.roll_id = ' . (int) $roll_id;
$result = $this->db->sql_query_limit($sql, 1);
$poster_id = $this->db->sql_fetchfield('poster_id');
$this->db->sql_freeresult($result);
return (int) $poster_id;
}
/**
* {@inheritdoc}
*/
public function get_rolls_for_topic($forum_id, $topic_id, array $post_list)
{
$sql = 'SELECT *
FROM ' . $this->rolls_table . '
WHERE forum_id = ' . (int) $forum_id . '
AND topic_id = ' . (int) $topic_id . '
AND ' . $this->db->sql_in_set('post_id', $post_list);
$result = $this->db->sql_query($sql);
$rowset = $this->db->sql_fetchrowset($result);
$this->db->sql_freeresult($result);
return $this->get_entities($rowset);
}
/**
* {@inheritdoc}
*/
public function get_rolls_for_posting($forum_id, $topic_id, $post_id)
{
$sql = 'SELECT *
FROM ' . $this->rolls_table . '
WHERE forum_id = ' . (int) $forum_id . '
AND topic_id = ' . (int) $topic_id . '
AND post_id = ' . (int) $post_id;
$sql .= (empty($topic_id) && empty($post_id)) ? ' AND user_id = ' . (int) $this->user->data['user_id'] : '';
$result = $this->db->sql_query($sql);
$rowset = $this->db->sql_fetchrowset($result);
$this->db->sql_freeresult($result);
return $this->get_entities($rowset);
}
/**
* {@inheritdoc}
*/
public function set_rolls_identifiers($mode, $forum_id, $topic_id, $post_id)
{
// If the mode is 'post', a topic was created
$s_topic = $mode === 'post';
// If a topic was created, the rolls currently have no topic identifier
$sql = 'SELECT *
FROM ' . $this->rolls_table . '
WHERE forum_id = ' . (int) $forum_id . '
AND user_id = ' . (int) $this->user->data['user_id'] . '
AND topic_id = ' . ($s_topic ? 0 : (int) $topic_id) . '
AND post_id = 0';
$result = $this->db->sql_query($sql);
$rowset = $this->db->sql_fetchrowset($result);
$this->db->sql_freeresult($result);
// Get entities from rowset
$entities = $this->get_entities($rowset);
/** @var \phpbbstudio\dice\entity\roll $entity */
foreach ($entities as $entity)
{
// If a topic was created, set the topic identifier
if ($s_topic)
{
$entity->set_topic($topic_id);
}
// Set the post identifier and save the entity
$entity->set_post($post_id)
->save();
}
}
/**
* {@inheritdoc}
*/
public function assign_block_vars(array $entities, $block = 'dice_rolls')
{
/** @var \phpbbstudio\dice\entity\roll $entity */
foreach ($entities as $entity)
{
$this->template->assign_block_vars($block, [
'FORUM_ID' => $entity->get_forum(),
'TOPIC_ID' => $entity->get_topic(),
'POST_ID' => $entity->get_post(),
'USER_ID' => $entity->get_user(),
'ROLL_ID' => $entity->get_id(),
'ROLL_NOTATION' => $entity->get_notation(),
'ROLL_TIME' => $this->user->format_date($entity->get_time()),
'U_DELETE' => $this->helper->route('phpbbstudio_dice_del', ['roll_id' => (int) $entity->get_id()]),
'U_EDIT' => $this->helper->route('phpbbstudio_dice_edit', ['roll_id' => (int) $entity->get_id()]),
]);
}
}
/**
* {@inheritdoc}
*/
public function get_roll_data_for_edit($entity)
{
/** @var \phpbbstudio\dice\entity\roll $entity */
return [
'id' => $entity->get_id(),
'notation' => $entity->get_notation(),
'time' => $this->user->format_date($entity->get_time()),
];
}
/**
* {@inheritdoc}
*/
public function get_roll_data_for_display($entity, array $skin)
{
/** @var \phpbbstudio\dice\entity\roll $entity */
return [
'notation' => $entity->get_notation(),
'display' => $entity->get_display($skin['name'], $skin['dir'], $skin['ext']),
'output' => $entity->get_output(),
'total' => $entity->get_total(),
'post' => $entity->get_post(),
'inline' => false,
];
}
/**
* {@inheritdoc}
*/
public function assign_roll_vars(array $roll)
{
$this->template->set_filenames([
'dice' => '@phpbbstudio_dice/dice_roll.html',
]);
$this->template->assign_vars([
'NOTATION' => $roll['notation'],
'DISPLAY' => $roll['display'],
'OUTPUT' => $roll['output'],
'TOTAL' => $roll['total'],
'DICE_IMG_HEIGHT' => (int) $this->config['dice_skins_img_height'],
'DICE_IMG_WIDTH' => (int) $this->config['dice_skins_img_width'],
]);
return $this->template->assign_display('dice');
}
}

View File

@@ -0,0 +1,125 @@
<?php
/**
* phpBB Studio's Dice 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\dice\operator;
/**
* Interface for our roll operator.
*
* This describes all of the methods we'll have for working with a set of rolls.
*/
interface roll_interface
{
/**
* Get a roll entity.
*
* @return object \phpbbstudio\dice\entity\roll
* @access public
*/
public function get_entity();
/**
* Create roll entities from a rowset.
*
* @param array $rowset A rowset of fetched from the rolls table
* @return array Array of roll entities
* @access public
*/
public function get_entities(array $rowset);
/**
* Delete roll entity|entities.
*
* @param mixed $roll_ids Roll identifier(s) to delete (int|array)
* @return bool Whether any rows were deleted
* @access public
*/
public function delete($roll_ids);
/**
* Get the author of the post this roll belongs to.
*
* @param int $roll_id Roll identifier
* @return int User identifier of the poster
* @access public
*/
public function get_author($roll_id);
/**
* Get roll entities for display.
*
* @param int $forum_id Forum identifier
* @param int $topic_id Topic identifier
* @param array $post_list Array with post identifiers
* @return array Array of roll entities
* @access public
*/
public function get_rolls_for_topic($forum_id, $topic_id, array $post_list);
/**
* Get roll entities for posting, depending on the identifiers.
*
* @param int $forum_id The forum identifier
* @param int $topic_id The topic identifier
* @param int $post_id The post identifier
* @return array
* @access public
*/
public function get_rolls_for_posting($forum_id, $topic_id, $post_id);
/**
* Update identifiers after a post has been submitted.
*
* @param string $mode The post mode
* @param int $forum_id The forum identifier
* @param int $topic_id The topic identifier
* @param int $post_id The post identifier
* @return void
* @access public
* @throws \phpbbstudio\dice\exception\out_of_bounds
*/
public function set_rolls_identifiers($mode, $forum_id, $topic_id, $post_id);
/**
* Assign roll entities' variables to the template.
*
* @param array $entities Array of roll entities
* @param string $block The template block name
* @return void
* @access public
*/
public function assign_block_vars(array $entities, $block = 'dice_rolls');
/**
* Get roll data used for editing.
*
* @param \phpbbstudio\dice\entity\roll $entity The roll entity
* @return array Array with the roll data
* @access public
*/
public function get_roll_data_for_edit($entity);
/**
* Get roll data used for display.
*
* @param \phpbbstudio\dice\entity\roll $entity The roll entity
* @param array $skin Dice skin data
* @return array Array with the roll data
* @access public
*/
public function get_roll_data_for_display($entity, array $skin);
/**
* Assign roll variables to the template.
*
* @param array $roll Array with the roll data
* @return string String of the compiled roll
* @access public
*/
public function assign_roll_vars(array $roll);
}