Merge remote-tracking branch 'remotes/nickv/ticket/10411-2' into develop

# By Joas Schilling
# Via Joas Schilling
* remotes/nickv/ticket/10411-2: (33 commits)
  [ticket/10411] Fix call to function on non-object $db->...()
  [ticket/10411] Remove ajax delete, so the page is refreshed
  [ticket/10411] Update schema file with new table and remove the column
  [ticket/10411] Add unit tests for move() with values >1
  [ticket/10411] Add migrations file for teampage table
  [ticket/10411] Revert database_update.php changes from for easier update
  [ticket/10411] Add maxlength to category name input field
  [ticket/10411] Test for thrown exceptions when group does not exist
  [ticket/10411] Catch exceptions from grouppositions
  [ticket/10411] Throw exceptions instead of using trigger_error()
  [ticket/10411] Add return values to add/delete function
  [ticket/10411] Add return value to move functions
  [ticket/10411] Fix typehinting and change private to protected
  [ticket/10411] Use template loops instead of defining the html in php files
  [ticket/10411] Ensure we only get services that do exist
  [ticket/10411] Add a comment why we left join the group table
  [ticket/10411] Rename template variable CUR_ to CURRENT_
  [ticket/10411] Move globals to the top and use array for cache destroy
  [ticket/10411] Use new ajax callback name row_up/row_down
  [ticket/10411] Fix logic error when editing/creating a group
  ...
This commit is contained in:
Nathaniel Guse 2013-03-04 13:25:53 -06:00
commit 029f096411
26 changed files with 2541 additions and 526 deletions

View file

@ -17,8 +17,8 @@
</dl>
<p class="submit-buttons">
<input class="button1" type="submit" id="submit" name="update" value="{L_SUBMIT}" />&nbsp;
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
<input class="button1" type="submit" name="update" value="{L_SUBMIT}" />&nbsp;
<input class="button2" type="reset" name="reset" value="{L_RESET}" />
<input type="hidden" name="action" value="set_config_legend" />
{S_FORM_TOKEN}
</p>
@ -38,22 +38,22 @@
</thead>
<tbody>
<!-- BEGIN legend -->
<tr>
<td><strong{legend.GROUP_COLOUR}>{legend.GROUP_NAME}</strong></td>
<tr data-down="{legend.U_MOVE_DOWN}" data-up="{legend.U_MOVE_UP}">
<td><strong<!-- IF legend.GROUP_COLOUR --> style="color: {legend.GROUP_COLOUR}"<!-- ENDIF -->>{legend.GROUP_NAME}</strong></td>
<td style="text-align: center;">{legend.GROUP_TYPE}</td>
<td style="vertical-align: top; width: 100px; text-align: right; white-space: nowrap;">
<!-- IF legend.S_FIRST_ROW && not legend.S_LAST_ROW -->
{ICON_MOVE_UP_DISABLED}
<a href="{legend.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a>
<span class="up">{ICON_MOVE_UP_DISABLED}</span>
<span class="down"><a href="{legend.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
<!-- ELSEIF not legend.S_FIRST_ROW && not legend.S_LAST_ROW -->
<a href="{legend.U_MOVE_UP}">{ICON_MOVE_UP}</a>
<a href="{legend.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a>
<span class="up"><a href="{legend.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
<span class="down"><a href="{legend.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
<!-- ELSEIF legend.S_LAST_ROW && not legend.S_FIRST_ROW -->
<a href="{legend.U_MOVE_UP}">{ICON_MOVE_UP}</a>
{ICON_MOVE_DOWN_DISABLED}
<span class="up"><a href="{legend.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
<span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
<!-- ELSE -->
{ICON_MOVE_UP_DISABLED}
{ICON_MOVE_DOWN_DISABLED}
<span class="up">{ICON_MOVE_UP_DISABLED}</span>
<span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
<!-- ENDIF -->
<a href="{legend.U_DELETE}">{ICON_DELETE}</a>
</td>
@ -66,9 +66,14 @@
</tbody>
</table>
<form id="acp_groups" method="post" action="{U_ACTION_LEGEND}">
<form id="legend_add_group" method="post" action="{U_ACTION_LEGEND}">
<fieldset class="quick">
<select name="g"><option value="0">{L_SELECT_GROUP}</option>{S_GROUP_SELECT_LEGEND}</select>
<select name="g">
<option value="0">{L_SELECT_GROUP}</option>
<!-- BEGIN add_legend -->
<option<!-- IF add_legend.GROUP_SPECIAL --> class="sep"<!-- ENDIF --> value="{add_legend.GROUP_ID}">{add_legend.GROUP_NAME}</option>
<!-- END add_legend -->
</select>
<input class="button2" type="submit" name="submit" value="{L_ADD}" />
<input type="hidden" name="action" value="add" />
{S_FORM_TOKEN}
@ -82,7 +87,7 @@
<fieldset>
<legend>{L_TEAMPAGE_SETTINGS}</legend>
<dl>
<dt><label for="teampage_multiple">{L_TEAMPAGE_MEMBERSHIPS}{L_COLON}</label></dt>
<dt><label for="teampage_memberships">{L_TEAMPAGE_MEMBERSHIPS}{L_COLON}</label></dt>
<dd>
<label><input type="radio" name="teampage_memberships" class="radio" value="0"<!-- IF DISPLAY_MEMBERSHIPS == 0 --> checked="checked"<!-- ENDIF --> /> {L_TEAMPAGE_DISP_FIRST}</label><br />
<label><input type="radio" name="teampage_memberships" class="radio" value="1"<!-- IF DISPLAY_MEMBERSHIPS == 1 --> checked="checked"<!-- ENDIF --> /> {L_TEAMPAGE_DISP_DEFAULT}</label><br />
@ -98,8 +103,8 @@
</dl>
<p class="submit-buttons">
<input class="button1" type="submit" id="submit" name="update" value="{L_SUBMIT}" />&nbsp;
<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
<input class="button1" type="submit" name="update" value="{L_SUBMIT}" />&nbsp;
<input class="button2" type="reset" name="reset" value="{L_RESET}" />
<input type="hidden" name="action" value="set_config_teampage" />
{S_FORM_TOKEN}
</p>
@ -108,6 +113,8 @@
<p>{L_TEAMPAGE_EXPLAIN}</p>
<!-- IF S_TEAMPAGE_CATEGORY and CURRENT_CATEGORY_NAME --><p><strong><a href="{U_ACTION}">{L_TEAMPAGE}</a> &raquo; {CURRENT_CATEGORY_NAME}</strong></p><!-- ENDIF -->
<table cellspacing="1">
<col class="col1" /><col class="col2" /><col class="col2" />
<thead>
@ -119,22 +126,29 @@
</thead>
<tbody>
<!-- BEGIN teampage -->
<tr>
<td><strong{teampage.GROUP_COLOUR}>{teampage.GROUP_NAME}</strong></td>
<td style="text-align: center;">{teampage.GROUP_TYPE}</td>
<tr data-down="{teampage.U_MOVE_DOWN}" data-up="{teampage.U_MOVE_UP}">
<td>
<!-- IF teampage.U_CATEGORY -->
<a href="{teampage.U_CATEGORY}">{teampage.GROUP_NAME}</a>
<!-- ELSE -->
<strong<!-- IF teampage.GROUP_COLOUR --> style="color: {teampage.GROUP_COLOUR}"<!-- ENDIF -->>{teampage.GROUP_NAME}</strong>
<!-- ENDIF -->
</td>
<td style="text-align: center;"><!-- IF teampage.GROUP_TYPE -->{teampage.GROUP_TYPE}<!-- ELSE -->-<!-- ENDIF -->
</td></td>
<td style="vertical-align: top; width: 100px; text-align: right; white-space: nowrap;">
<!-- IF teampage.S_FIRST_ROW && not teampage.S_LAST_ROW -->
{ICON_MOVE_UP_DISABLED}
<a href="{teampage.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a>
<span class="up">{ICON_MOVE_UP_DISABLED}</span>
<span class="down"><a href="{teampage.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
<!-- ELSEIF not teampage.S_FIRST_ROW && not teampage.S_LAST_ROW -->
<a href="{teampage.U_MOVE_UP}">{ICON_MOVE_UP}</a>
<a href="{teampage.U_MOVE_DOWN}">{ICON_MOVE_DOWN}</a>
<span class="up"><a href="{teampage.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
<span class="down"><a href="{teampage.U_MOVE_DOWN}" data-ajax="row_down" data-overlay="false">{ICON_MOVE_DOWN}</a></span>
<!-- ELSEIF teampage.S_LAST_ROW && not teampage.S_FIRST_ROW -->
<a href="{teampage.U_MOVE_UP}">{ICON_MOVE_UP}</a>
{ICON_MOVE_DOWN_DISABLED}
<span class="up"><a href="{teampage.U_MOVE_UP}" data-ajax="row_up" data-overlay="false">{ICON_MOVE_UP}</a></span>
<span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
<!-- ELSE -->
{ICON_MOVE_UP_DISABLED}
{ICON_MOVE_DOWN_DISABLED}
<span class="up">{ICON_MOVE_UP_DISABLED}</span>
<span class="down">{ICON_MOVE_DOWN_DISABLED}</span>
<!-- ENDIF -->
<a href="{teampage.U_DELETE}">{ICON_DELETE}</a>
</td>
@ -147,13 +161,37 @@
</tbody>
</table>
<form id="acp_groups" method="post" action="{U_ACTION_TEAMPAGE}">
<!-- IF not S_TEAMPAGE_CATEGORY -->
<form id="teampage_add_category" method="post" action="{U_ACTION_TEAMPAGE}">
<fieldset class="quick">
<select name="g"><option value="0">{L_SELECT_GROUP}</option>{S_GROUP_SELECT_TEAMPAGE}</select>
<input class="inputbox autowidth" type="text" maxlength="255" name="category_name" placeholder="{L_GROUP_CATEGORY_NAME}" />
<input class="button2" type="submit" name="submit" value="{L_ADD_GROUP_CATEGORY}" />
<input type="hidden" name="action" value="add_category" />
{S_FORM_TOKEN}
</fieldset>
</form>
<!-- ENDIF -->
<form id="teampage_add_group" method="post" action="{U_ACTION_TEAMPAGE}">
<fieldset class="quick">
<select name="g">
<option value="0">{L_SELECT_GROUP}</option>
<!-- BEGIN add_teampage -->
<option<!-- IF add_teampage.GROUP_SPECIAL --> class="sep"<!-- ENDIF --> value="{add_teampage.GROUP_ID}">{add_teampage.GROUP_NAME}</option>
<!-- END add_teampage -->
</select>
<input class="button2" type="submit" name="submit" value="{L_ADD}" />
<input type="hidden" name="action" value="add" />
{S_FORM_TOKEN}
</fieldset>
</form>
<div class="hidden">
<a class="template-up-img" href="#">{ICON_MOVE_UP}</a>
<span class="template-up-img-disabled">{ICON_MOVE_UP_DISABLED}</span>
<a class="template-down-img" href="#">{ICON_MOVE_DOWN}</a>
<span class="template-down-img-disabled">{ICON_MOVE_DOWN_DISABLED}</span>
</div>
<!-- INCLUDE overall_footer.html -->

View file

@ -132,6 +132,19 @@ services:
- .%core.php_ext%
- _ext_finder
groupposition.legend:
class: phpbb_groupposition_legend
arguments:
- @dbal.conn
- @user
groupposition.teampage:
class: phpbb_groupposition_teampage
arguments:
- @dbal.conn
- @user
- @cache.driver
http_kernel:
class: Symfony\Component\HttpKernel\HttpKernel
arguments:

View file

@ -1178,7 +1178,6 @@ function get_schema_struct()
'group_message_limit' => array('UINT', 0),
'group_max_recipients' => array('UINT', 0),
'group_legend' => array('UINT', 0),
'group_teampage' => array('UINT', 0),
),
'PRIMARY_KEY' => 'group_id',
'KEYS' => array(
@ -1711,6 +1710,17 @@ function get_schema_struct()
),
);
$schema_data['phpbb_teampage'] = array(
'COLUMNS' => array(
'teampage_id' => array('UINT', NULL, 'auto_increment'),
'group_id' => array('UINT', 0),
'teampage_name' => array('VCHAR_UNI:255', ''),
'teampage_position' => array('UINT', 0),
'teampage_parent' => array('UINT', 0),
),
'PRIMARY_KEY' => 'teampage_id',
);
$schema_data['phpbb_topics'] = array(
'COLUMNS' => array(
'topic_id' => array('UINT', NULL, 'auto_increment'),

View file

@ -61,9 +61,11 @@ class acp_groups
// Grab basic data for group, if group_id is set and exists
if ($group_id)
{
$sql = 'SELECT *
FROM ' . GROUPS_TABLE . "
WHERE group_id = $group_id";
$sql = 'SELECT g.*, t.teampage_position AS group_teampage
FROM ' . GROUPS_TABLE . ' g
LEFT JOIN ' . TEAMPAGE_TABLE . ' t
ON (t.group_id = g.group_id)
WHERE g.group_id = ' . $group_id;
$result = $db->sql_query($sql);
$group_row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
@ -514,7 +516,7 @@ class acp_groups
}
}
$cache->destroy('sql', GROUPS_TABLE);
$cache->destroy('sql', array(GROUPS_TABLE, TEAMPAGE_TABLE));
$message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
trigger_error($user->lang[$message] . adm_back_link($this->u_action));
@ -829,36 +831,66 @@ class acp_groups
public function manage_position()
{
global $config, $db, $template, $user;
global $config, $db, $template, $user, $request, $phpbb_container;
$this->tpl_name = 'acp_groups_position';
$this->page_title = 'ACP_GROUPS_POSITION';
$field = request_var('field', '');
$action = request_var('action', '');
$group_id = request_var('g', 0);
$field = $request->variable('field', '');
$action = $request->variable('action', '');
$group_id = $request->variable('g', 0);
$teampage_id = $request->variable('t', 0);
$category_id = $request->variable('c', 0);
if ($field && !in_array($field, array('legend', 'teampage')))
{
// Invalid mode
trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING);
}
else if ($field)
else if ($field && in_array($field, array('legend', 'teampage')))
{
$group_position = new phpbb_group_positions($db, $field, $this->u_action);
$group_position = $phpbb_container->get('groupposition.' . $field);
}
if ($field == 'teampage')
{
try
{
switch ($action)
{
case 'set_config_legend':
set_config('legend_sort_groupname', request_var('legend_sort_groupname', 0));
case 'add':
$group_position->add_group_teampage($group_id, $category_id);
break;
case 'set_config_teampage':
set_config('teampage_forums', request_var('teampage_forums', 0));
set_config('teampage_memberships', request_var('teampage_memberships', 0));
case 'add_category':
$group_position->add_category_teampage($request->variable('category_name', '', true));
break;
case 'delete':
$group_position->delete_teampage($teampage_id);
break;
case 'move_up':
$group_position->move_up_teampage($teampage_id);
break;
case 'move_down':
$group_position->move_down_teampage($teampage_id);
break;
}
}
catch (phpbb_groupposition_exception $exception)
{
trigger_error($user->lang($exception->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
}
}
else if ($field == 'legend')
{
try
{
switch ($action)
{
case 'add':
$group_position->add_group($group_id);
break;
@ -875,10 +907,36 @@ class acp_groups
$group_position->move_down($group_id);
break;
}
}
catch (phpbb_groupposition_exception $exception)
{
trigger_error($user->lang($exception->getMessage()) . adm_back_link($this->u_action), E_USER_WARNING);
}
}
else
{
switch ($action)
{
case 'set_config_teampage':
$config->set('teampage_forums', $request->variable('teampage_forums', 0));
$config->set('teampage_memberships', $request->variable('teampage_memberships', 0));
break;
case 'set_config_legend':
$config->set('legend_sort_groupname', $request->variable('legend_sort_groupname', 0));
break;
}
}
if (($action == 'move_up' || $action == 'move_down') && $request->is_ajax())
{
$json_response = new phpbb_json_response;
$json_response->send(array('success' => true));
}
$sql = 'SELECT group_id, group_name, group_colour, group_type, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_legend, group_name ASC';
ORDER BY group_legend ASC, group_type DESC, group_name ASC';
$result = $db->sql_query($sql);
$s_group_select_legend = '';
@ -889,8 +947,8 @@ class acp_groups
{
$template->assign_block_vars('legend', array(
'GROUP_NAME' => $group_name,
'GROUP_COLOUR' => ($row['group_colour']) ? ' style="color: #' . $row['group_colour'] . '"' : '',
'GROUP_TYPE' => $user->lang[phpbb_group_positions::group_type_language($row['group_type'])],
'GROUP_COLOUR' => ($row['group_colour']) ? '#' . $row['group_colour'] : '',
'GROUP_TYPE' => $user->lang[phpbb_groupposition_legend::group_type_language($row['group_type'])],
'U_MOVE_DOWN' => "{$this->u_action}&amp;field=legend&amp;action=move_down&amp;g=" . $row['group_id'],
'U_MOVE_UP' => "{$this->u_action}&amp;field=legend&amp;action=move_up&amp;g=" . $row['group_id'],
@ -899,46 +957,88 @@ class acp_groups
}
else
{
$s_group_select_legend .= '<option value="' . (int) $row['group_id'] . '">' . $group_name . '</option>';
$template->assign_block_vars('add_legend', array(
'GROUP_ID' => (int) $row['group_id'],
'GROUP_NAME' => $group_name,
'GROUP_SPECIAL' => ($row['group_type'] == GROUP_SPECIAL),
));
}
}
$db->sql_freeresult($result);
$sql = 'SELECT group_id, group_name, group_colour, group_type, group_teampage
FROM ' . GROUPS_TABLE . '
ORDER BY group_teampage, group_name ASC';
$category_url_param = (($category_id) ? '&amp;c=' . $category_id : '');
$sql = 'SELECT t.*, g.group_name, g.group_colour, g.group_type
FROM ' . TEAMPAGE_TABLE . ' t
LEFT JOIN ' . GROUPS_TABLE . ' g
ON (t.group_id = g.group_id)
WHERE t.teampage_parent = ' . $category_id . '
OR t.teampage_id = ' . $category_id . '
ORDER BY t.teampage_position ASC';
$result = $db->sql_query($sql);
$category_data = array();
while ($row = $db->sql_fetchrow($result))
{
if ($row['teampage_id'] == $category_id)
{
$template->assign_vars(array(
'CURRENT_CATEGORY_NAME' => $row['teampage_name'],
));
continue;
}
if ($row['group_id'])
{
$group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
$group_type = $user->lang[phpbb_groupposition_teampage::group_type_language($row['group_type'])];
}
else
{
$group_name = $row['teampage_name'];
$group_type = '';
}
$template->assign_block_vars('teampage', array(
'GROUP_NAME' => $group_name,
'GROUP_COLOUR' => ($row['group_colour']) ? '#' . $row['group_colour'] : '',
'GROUP_TYPE' => $group_type,
'U_CATEGORY' => (!$row['group_id']) ? "{$this->u_action}&amp;c=" . $row['teampage_id'] : '',
'U_MOVE_DOWN' => "{$this->u_action}&amp;field=teampage&amp;action=move_down{$category_url_param}&amp;t=" . $row['teampage_id'],
'U_MOVE_UP' => "{$this->u_action}&amp;field=teampage&amp;action=move_up{$category_url_param}&amp;t=" . $row['teampage_id'],
'U_DELETE' => "{$this->u_action}&amp;field=teampage&amp;action=delete{$category_url_param}&amp;t=" . $row['teampage_id'],
));
}
$db->sql_freeresult($result);
$sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type
FROM ' . GROUPS_TABLE . ' g
LEFT JOIN ' . TEAMPAGE_TABLE . ' t
ON (t.group_id = g.group_id)
WHERE t.teampage_id IS NULL
ORDER BY g.group_type DESC, g.group_name ASC';
$result = $db->sql_query($sql);
$s_group_select_teampage = '';
while ($row = $db->sql_fetchrow($result))
{
$group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
if ($row['group_teampage'])
{
$template->assign_block_vars('teampage', array(
$template->assign_block_vars('add_teampage', array(
'GROUP_ID' => (int) $row['group_id'],
'GROUP_NAME' => $group_name,
'GROUP_COLOUR' => ($row['group_colour']) ? ' style="color: #' . $row['group_colour'] . '"' : '',
'GROUP_TYPE' => $user->lang[phpbb_group_positions::group_type_language($row['group_type'])],
'U_MOVE_DOWN' => "{$this->u_action}&amp;field=teampage&amp;action=move_down&amp;g=" . $row['group_id'],
'U_MOVE_UP' => "{$this->u_action}&amp;field=teampage&amp;action=move_up&amp;g=" . $row['group_id'],
'U_DELETE' => "{$this->u_action}&amp;field=teampage&amp;action=delete&amp;g=" . $row['group_id'],
'GROUP_SPECIAL' => ($row['group_type'] == GROUP_SPECIAL),
));
}
else
{
$s_group_select_teampage .= '<option value="' . (int) $row['group_id'] . '">' . $group_name . '</option>';
}
}
$db->sql_freeresult($result);
$template->assign_vars(array(
'U_ACTION' => $this->u_action,
'U_ACTION_LEGEND' => $this->u_action . '&amp;field=legend',
'U_ACTION_TEAMPAGE' => $this->u_action . '&amp;field=teampage',
'U_ACTION_TEAMPAGE' => $this->u_action . '&amp;field=teampage' . $category_url_param,
'U_ACTION_TEAMPAGE_CAT' => $this->u_action . '&amp;field=teampage_cat',
'S_GROUP_SELECT_LEGEND' => $s_group_select_legend,
'S_GROUP_SELECT_TEAMPAGE' => $s_group_select_teampage,
'S_TEAMPAGE_CATEGORY' => $category_id,
'DISPLAY_FORUMS' => ($config['teampage_forums']) ? true : false,
'DISPLAY_MEMBERSHIPS' => $config['teampage_memberships'],
'LEGEND_SORT_GROUPNAME' => ($config['legend_sort_groupname']) ? true : false,

View file

@ -270,6 +270,7 @@ define('STYLES_TEMPLATE_DATA_TABLE',$table_prefix . 'styles_template_data');
define('STYLES_THEME_TABLE', $table_prefix . 'styles_theme');
define('STYLES_IMAGESET_TABLE', $table_prefix . 'styles_imageset');
define('STYLES_IMAGESET_DATA_TABLE',$table_prefix . 'styles_imageset_data');
define('TEAMPAGE_TABLE', $table_prefix . 'teampage');
define('TOPICS_TABLE', $table_prefix . 'topics');
define('TOPICS_POSTED_TABLE', $table_prefix . 'topics_posted');
define('TOPICS_TRACK_TABLE', $table_prefix . 'topics_track');

View file

@ -0,0 +1,104 @@
<?php
/**
*
* @package migration
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2
*
*/
class phpbb_db_migration_data_310_teampage extends phpbb_db_migration
{
public function effectively_installed()
{
return $this->db_tools->sql_table_exists($this->table_prefix . 'teampage');
}
static public function depends_on()
{
return array('phpbb_db_migration_data_310_dev');
}
public function update_schema()
{
return array(
'add_tables' => array(
$this->table_prefix . 'teampage' => array(
'COLUMNS' => array(
'teampage_id' => array('UINT', NULL, 'auto_increment'),
'group_id' => array('UINT', 0),
'teampage_name' => array('VCHAR_UNI:255', ''),
'teampage_position' => array('UINT', 0),
'teampage_parent' => array('UINT', 0),
),
'PRIMARY_KEY' => 'teampage_id',
),
),
'drop_columns' => array(
$this->table_prefix . 'groups' => array(
'group_teampage',
),
),
);
}
public function revert_schema()
{
return array(
'drop_tables' => array(
$this->table_prefix . 'teampage',
),
'add_columns' => array(
$this->table_prefix . 'groups' => array(
'group_teampage' => array('UINT', 0, 'after' => 'group_legend'),
),
),
);
}
public function update_data()
{
return array(
array('custom', array(array($this, 'add_groups_teampage'))),
);
}
public function add_groups_teampage()
{
$sql = 'SELECT teampage_id
FROM ' . TEAMPAGE_TABLE;
$result = $this->db->sql_query_limit($sql, 1);
$added_groups_teampage = (bool) $this->db->sql_fetchfield('teampage_id');
$this->db->sql_freeresult($result);
if (!$added_groups_teampage)
{
$sql = 'SELECT *
FROM ' . GROUPS_TABLE . '
WHERE group_type = ' . GROUP_SPECIAL . "
AND (group_name = 'ADMINISTRATORS'
OR group_name = 'GLOBAL_MODERATORS')
ORDER BY group_name ASC";
$result = $this->db->sql_query($sql);
$teampage_entries = array();
while ($row = $this->db->sql_fetchrow($result))
{
$teampage_entries[] = array(
'group_id' => (int) $row['group_id'],
'teampage_name' => '',
'teampage_position' => sizeof($teampage_entries) + 1,
'teampage_parent' => 0,
);
}
$this->db->sql_freeresult($result);
if (sizeof($teampage_entries))
{
$this->db->sql_multi_insert(TEAMPAGE_TABLE, $teampage_entries);
}
unset($teampage_entries);
}
}
}

View file

@ -2570,7 +2570,7 @@ function phpbb_avatar_explanation_string()
*/
function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow_desc_bbcode = false, $allow_desc_urls = false, $allow_desc_smilies = false)
{
global $phpbb_root_path, $config, $db, $user, $file_upload;
global $phpbb_root_path, $config, $db, $user, $file_upload, $phpbb_container;
$error = array();
@ -2594,22 +2594,32 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow
$error[] = $user->lang['GROUP_ERR_TYPE'];
}
$group_teampage = !empty($group_attributes['group_teampage']);
unset($group_attributes['group_teampage']);
if (!sizeof($error))
{
$current_legend = phpbb_group_positions::GROUP_DISABLED;
$current_teampage = phpbb_group_positions::GROUP_DISABLED;
$current_legend = phpbb_groupposition_legend::GROUP_DISABLED;
$current_teampage = phpbb_groupposition_teampage::GROUP_DISABLED;
$legend = new phpbb_group_positions($db, 'legend');
$teampage = new phpbb_group_positions($db, 'teampage');
$legend = $phpbb_container->get('groupposition.legend');
$teampage = $phpbb_container->get('groupposition.teampage');
if ($group_id)
{
try
{
$current_legend = $legend->get_group_value($group_id);
$current_teampage = $teampage->get_group_value($group_id);
}
catch (phpbb_groupposition_exception $exception)
{
trigger_error($user->lang($exception->getMessage()));
}
}
if (!empty($group_attributes['group_legend']))
{
if (($group_id && ($current_legend == phpbb_group_positions::GROUP_DISABLED)) || !$group_id)
if (($group_id && ($current_legend == phpbb_groupposition_legend::GROUP_DISABLED)) || !$group_id)
{
// Old group currently not in the legend or new group, add at the end.
$group_attributes['group_legend'] = 1 + $legend->get_group_count();
@ -2620,44 +2630,26 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow
$group_attributes['group_legend'] = $current_legend;
}
}
else if ($group_id && ($current_legend > phpbb_group_positions::GROUP_DISABLED))
else if ($group_id && ($current_legend != phpbb_groupposition_legend::GROUP_DISABLED))
{
// Group is removed from the legend
try
{
$legend->delete_group($group_id, true);
$group_attributes['group_legend'] = phpbb_group_positions::GROUP_DISABLED;
}
catch (phpbb_groupposition_exception $exception)
{
trigger_error($user->lang($exception->getMessage()));
}
$group_attributes['group_legend'] = phpbb_groupposition_legend::GROUP_DISABLED;
}
else
{
$group_attributes['group_legend'] = phpbb_group_positions::GROUP_DISABLED;
}
if (!empty($group_attributes['group_teampage']))
{
if (($group_id && ($current_teampage == phpbb_group_positions::GROUP_DISABLED)) || !$group_id)
{
// Old group currently not on the teampage or new group, add at the end.
$group_attributes['group_teampage'] = 1 + $teampage->get_group_count();
}
else
{
// Group stayes on the teampage
$group_attributes['group_teampage'] = $current_teampage;
}
}
else if ($group_id && ($current_teampage > phpbb_group_positions::GROUP_DISABLED))
{
// Group is removed from the teampage
$teampage->delete_group($group_id, true);
$group_attributes['group_teampage'] = phpbb_group_positions::GROUP_DISABLED;
}
else
{
$group_attributes['group_teampage'] = phpbb_group_positions::GROUP_DISABLED;
$group_attributes['group_legend'] = phpbb_groupposition_legend::GROUP_DISABLED;
}
// Unset the objects, we don't need them anymore.
unset($legend);
unset($teampage);
$user_ary = array();
$sql_ary = array(
@ -2751,6 +2743,20 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow
$db->sql_query($sql);
}
// Remove the group from the teampage, only if unselected and we are editing a group,
// which is currently displayed.
if (!$group_teampage && $group_id && $current_teampage != phpbb_groupposition_teampage::GROUP_DISABLED)
{
try
{
$teampage->delete_group($group_id);
}
catch (phpbb_groupposition_exception $exception)
{
trigger_error($user->lang($exception->getMessage()));
}
}
if (!$group_id)
{
$group_id = $db->sql_nextid();
@ -2761,6 +2767,31 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow
}
}
try
{
if ($group_teampage && $current_teampage == phpbb_groupposition_teampage::GROUP_DISABLED)
{
$teampage->add_group($group_id);
}
if ($group_teampage)
{
if ($current_teampage == phpbb_groupposition_teampage::GROUP_DISABLED)
{
$teampage->add_group($group_id);
}
}
else if ($group_id && ($current_teampage != phpbb_groupposition_teampage::GROUP_DISABLED))
{
$teampage->delete_group($group_id);
}
}
catch (phpbb_groupposition_exception $exception)
{
trigger_error($user->lang($exception->getMessage()));
}
unset($teampage);
// Set user attributes
$sql_ary = array();
if (sizeof($group_attributes))
@ -2842,7 +2873,7 @@ function avatar_remove_db($avatar_name)
*/
function group_delete($group_id, $group_name = false)
{
global $db, $cache, $auth, $phpbb_root_path, $phpEx, $phpbb_dispatcher;
global $db, $cache, $auth, $user, $phpbb_root_path, $phpEx, $phpbb_dispatcher, $phpbb_container;
if (!$group_name)
{
@ -2884,12 +2915,31 @@ function group_delete($group_id, $group_name = false)
while ($start);
// Delete group from legend and teampage
$legend = new phpbb_group_positions($db, 'legend');
try
{
$legend = $phpbb_container->get('groupposition.legend');
$legend->delete_group($group_id);
unset($legend);
$teampage = new phpbb_group_positions($db, 'teampage');
}
catch (phpbb_groupposition_exception $exception)
{
// The group we want to delete does not exist.
// No reason to worry, we just continue the deleting process.
//trigger_error($user->lang($exception->getMessage()));
}
try
{
$teampage = $phpbb_container->get('groupposition.teampage');
$teampage->delete_group($group_id);
unset($teampage);
}
catch (phpbb_groupposition_exception $exception)
{
// The group we want to delete does not exist.
// No reason to worry, we just continue the deleting process.
//trigger_error($user->lang($exception->getMessage()));
}
// Delete group
$sql = 'DELETE FROM ' . GROUPS_TABLE . "

View file

@ -0,0 +1,23 @@
<?php
/**
*
* @package groupposition
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* @package groupposition
*/
class phpbb_groupposition_exception extends \Exception
{
}

View file

@ -0,0 +1,84 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Interface to manage group positions in various places of phpbb
*
* The interface provides simple methods to add, delete and move a group
*
* @package phpBB3
*/
interface phpbb_groupposition_interface
{
/**
* Returns the value for a given group, if the group exists.
* @param int $group_id group_id of the group to be selected
* @return int position of the group
*/
public function get_group_value($group_id);
/**
* Get number of groups displayed
*
* @return int value of the last item displayed
*/
public function get_group_count();
/**
* Addes a group by group_id
*
* @param int $group_id group_id of the group to be added
* @return bool True if the group was added successfully
*/
public function add_group($group_id);
/**
* Deletes a group by group_id
*
* @param int $group_id group_id of the group to be deleted
* @param bool $skip_group Skip setting the value for this group, to save the query, when you need to update it anyway.
* @return bool True if the group was deleted successfully
*/
public function delete_group($group_id, $skip_group = false);
/**
* Moves a group up by group_id
*
* @param int $group_id group_id of the group to be moved
* @return bool True if the group was moved successfully
*/
public function move_up($group_id);
/**
* Moves a group down by group_id
*
* @param int $group_id group_id of the group to be moved
* @return bool True if the group was moved successfully
*/
public function move_down($group_id);
/**
* Moves a group up/down
*
* @param int $group_id group_id of the group to be moved
* @param int $delta number of steps:
* - positive = move up
* - negative = move down
* @return bool True if the group was moved successfully
*/
public function move($group_id, $delta);
}

View file

@ -2,7 +2,7 @@
/**
*
* @package phpBB3
* @copyright (c) 2011 phpBB Group
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
@ -16,13 +16,14 @@ if (!defined('IN_PHPBB'))
}
/**
* Group Position class, containing all functions to manage the groups in the teampage and legend.
* Legend group position class
*
* group_teampage/group_legend is an ascending list 1, 2, ..., n for groups which are displayed. 1 is the first group, n the last.
* group_legend is an ascending list 1, 2, ..., n for groups which are displayed. 1 is the first group, n the last.
* If the value is 0 (self::GROUP_DISABLED) the group is not displayed.
*
* @package phpBB3
*/
class phpbb_group_positions
class phpbb_groupposition_legend implements phpbb_groupposition_interface
{
/**
* Group is not displayed
@ -30,81 +31,73 @@ class phpbb_group_positions
const GROUP_DISABLED = 0;
/**
* phpbb-database object
* Database object
* @var phpbb_db_driver
*/
public $db = null;
protected $db;
/**
* Name of the field we want to handle: either 'teampage' or 'legend'
* User object
* @var phpbb_user
*/
private $field = '';
/**
* URI for the adm_back_link when there was an error.
*/
private $adm_back_link = '';
protected $user;
/**
* Constructor
*
* @param phpbb_db_driver $db Database object
* @param phpbb_user $user User object
*/
public function __construct ($db, $field, $adm_back_link = '')
public function __construct(phpbb_db_driver $db, phpbb_user $user)
{
$this->adm_back_link = $adm_back_link;
if (!in_array($field, array('teampage', 'legend')))
{
$this->error('NO_MODE');
}
$this->db = $db;
$this->field = $field;
$this->user = $user;
}
/**
* Returns the group_{$this->field} for a given group, if the group exists.
* @param int $group_id group_id of the group to be selected
* @return int position of the group
* Returns the group_legend for a given group, if the group exists.
*
* {@inheritDoc}
*/
public function get_group_value($group_id)
{
$sql = 'SELECT group_' . $this->field . '
$sql = 'SELECT group_legend
FROM ' . GROUPS_TABLE . '
WHERE group_id = ' . (int) $group_id;
$result = $this->db->sql_query($sql);
$current_value = $this->db->sql_fetchfield('group_' . $this->field);
$current_value = $this->db->sql_fetchfield('group_legend');
$this->db->sql_freeresult($result);
if ($current_value === false)
{
// Group not found.
$this->error('NO_GROUP');
throw new phpbb_groupposition_exception('NO_GROUP');
}
return (int) $current_value;
}
/**
* Get number of groups, displayed on the teampage/legend
* Get number of groups, displayed on the legend
*
* @return int value of the last group displayed
* {@inheritDoc}
*/
public function get_group_count()
{
$sql = 'SELECT group_' . $this->field . '
$sql = 'SELECT group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_' . $this->field . ' DESC';
ORDER BY group_legend DESC';
$result = $this->db->sql_query_limit($sql, 1);
$group_count = (int) $this->db->sql_fetchfield('group_' . $this->field);
$group_count = (int) $this->db->sql_fetchfield('group_legend');
$this->db->sql_freeresult($result);
return $group_count;
}
/**
* Addes a group by group_id
* Adds a group by group_id
*
* @param int $group_id group_id of the group to be added
* @return null
* {@inheritDoc}
*/
public function add_group($group_id)
{
@ -116,19 +109,20 @@ class phpbb_group_positions
$next_value = 1 + $this->get_group_count();
$sql = 'UPDATE ' . GROUPS_TABLE . '
SET group_' . $this->field . ' = ' . $next_value . '
WHERE group_' . $this->field . ' = ' . self::GROUP_DISABLED . '
SET group_legend = ' . $next_value . '
WHERE group_legend = ' . self::GROUP_DISABLED . '
AND group_id = ' . (int) $group_id;
$this->db->sql_query($sql);
return true;
}
return false;
}
/**
* Deletes a group by setting the field to self::GROUP_DISABLED and closing the gap in the list.
*
* @param int $group_id group_id of the group to be deleted
* @param bool $skip_group Skip setting the group to GROUP_DISABLED, to save the query, when you need to update it anyway.
* @return null
* {@inheritDoc}
*/
public function delete_group($group_id, $skip_group = false)
{
@ -139,58 +133,57 @@ class phpbb_group_positions
$this->db->sql_transaction('begin');
$sql = 'UPDATE ' . GROUPS_TABLE . '
SET group_' . $this->field . ' = group_' . $this->field . ' - 1
WHERE group_' . $this->field . ' > ' . $current_value;
SET group_legend = group_legend - 1
WHERE group_legend > ' . $current_value;
$this->db->sql_query($sql);
if (!$skip_group)
{
$sql = 'UPDATE ' . GROUPS_TABLE . '
SET group_' . $this->field . ' = ' . self::GROUP_DISABLED . '
SET group_legend = ' . self::GROUP_DISABLED . '
WHERE group_id = ' . (int) $group_id;
$this->db->sql_query($sql);
}
$this->db->sql_transaction('commit');
return true;
}
return false;
}
/**
* Moves a group up by group_id
*
* @param int $group_id group_id of the group to be moved
* @return null
* {@inheritDoc}
*/
public function move_up($group_id)
{
$this->move($group_id, 1);
return $this->move($group_id, 1);
}
/**
* Moves a group down by group_id
*
* @param int $group_id group_id of the group to be moved
* @return null
* {@inheritDoc}
*/
public function move_down($group_id)
{
$this->move($group_id, -1);
return $this->move($group_id, -1);
}
/**
* Moves a group up/down
*
* @param int $group_id group_id of the group to be moved
* @param int $delta number of steps:
* - positive = move up
* - negative = move down
* @return null
* {@inheritDoc}
*/
public function move($group_id, $delta)
{
if (!is_int($delta) || !$delta)
$delta = (int) $delta;
if (!$delta)
{
return;
return false;
}
$move_up = ($delta > 0) ? true : false;
@ -203,10 +196,10 @@ class phpbb_group_positions
// First we move all groups between our current value and the target value up/down 1,
// so we have a gap for our group to move.
$sql = 'UPDATE ' . GROUPS_TABLE . '
SET group_' . $this->field . ' = group_' . $this->field . (($move_up) ? ' + 1' : ' - 1') . '
WHERE group_' . $this->field . ' > ' . self::GROUP_DISABLED . '
AND group_' . $this->field . (($move_up) ? ' >= ' : ' <= ') . ($current_value - $delta) . '
AND group_' . $this->field . (($move_up) ? ' < ' : ' > ') . $current_value;
SET group_legend = group_legend' . (($move_up) ? ' + 1' : ' - 1') . '
WHERE group_legend > ' . self::GROUP_DISABLED . '
AND group_legend' . (($move_up) ? ' >= ' : ' <= ') . ($current_value - $delta) . '
AND group_legend' . (($move_up) ? ' < ' : ' > ') . $current_value;
$this->db->sql_query($sql);
// Because there might be fewer groups above/below the group than we wanted to move,
@ -218,13 +211,19 @@ class phpbb_group_positions
// And now finally, when we moved some other groups and built a gap,
// we can move the desired group to it.
$sql = 'UPDATE ' . GROUPS_TABLE . '
SET group_' . $this->field . ' = group_' . $this->field . (($move_up) ? ' - ' : ' + ') . $delta . '
SET group_legend = group_legend ' . (($move_up) ? ' - ' : ' + ') . $delta . '
WHERE group_id = ' . (int) $group_id;
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
return true;
}
$this->db->sql_transaction('commit');
}
return false;
}
/**
@ -249,13 +248,4 @@ class phpbb_group_positions
return 'GROUP_OPEN';
}
}
/**
* Error
*/
public function error($message)
{
global $user;
trigger_error($user->lang[$message] . (($this->adm_back_link) ? adm_back_link($this->adm_back_link) : ''), E_USER_WARNING);
}
}

View file

@ -0,0 +1,604 @@
<?php
/**
*
* @package phpBB3
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Teampage group position class
*
* Teampage position is an ascending list 1, 2, ..., n for items which are displayed. 1 is the first item, n the last.
*
* @package phpBB3
*/
class phpbb_groupposition_teampage implements phpbb_groupposition_interface
{
/**
* Group is not displayed
*/
const GROUP_DISABLED = 0;
/**
* No parent item
*/
const NO_PARENT = 0;
/**
* Database object
* @var phpbb_db_driver
*/
protected $db;
/**
* User object
* @var phpbb_user
*/
protected $user;
/**
* Cache object
* @var phpbb_cache_driver_interface
*/
protected $cache;
/**
* Constructor
*
* @param phpbb_db_driver $db Database object
* @param phpbb_user $user User object
* @param phpbb_cache_driver_interface $cache Cache object
*/
public function __construct(phpbb_db_driver $db, phpbb_user $user, phpbb_cache_driver_interface $cache)
{
$this->db = $db;
$this->user = $user;
$this->cache = $cache;
}
/**
* Returns the teampage position for a given group, if the group exists.
*
* {@inheritDoc}
*/
public function get_group_value($group_id)
{
// The join is required to ensure that the group itself exists
$sql = 'SELECT g.group_id, t.teampage_position
FROM ' . GROUPS_TABLE . ' g
LEFT JOIN ' . TEAMPAGE_TABLE . ' t
ON (t.group_id = g.group_id)
WHERE g.group_id = ' . (int) $group_id;
$result = $this->db->sql_query($sql);
$row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
if ($row === false)
{
// Group not found.
throw new phpbb_groupposition_exception('NO_GROUP');
}
return (int) $row['teampage_position'];
}
/**
* Returns the row for a given group, if the group exists.
*
* @param int $group_id group_id of the group to be selected
* @return array Data row of the group
*/
public function get_group_values($group_id)
{
// The join is required to ensure that the group itself exists
$sql = 'SELECT *
FROM ' . GROUPS_TABLE . ' g
LEFT JOIN ' . TEAMPAGE_TABLE . ' t
ON (t.group_id = g.group_id)
WHERE g.group_id = ' . (int) $group_id;
$result = $this->db->sql_query($sql);
$row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
if ($row === false)
{
// Group not found.
throw new phpbb_groupposition_exception('NO_GROUP');
}
return $row;
}
/**
* Returns the teampage position for a given teampage item, if the item exists.
*
* @param int $teampage_id Teampage_id of the selected item
* @return int Teampage position of the item
*/
public function get_teampage_value($teampage_id)
{
$sql = 'SELECT teampage_position
FROM ' . TEAMPAGE_TABLE . '
WHERE teampage_id = ' . (int) $teampage_id;
$result = $this->db->sql_query($sql);
$current_value = $this->db->sql_fetchfield('teampage_position');
$this->db->sql_freeresult($result);
if ($current_value === false)
{
// Group not found.
throw new phpbb_groupposition_exception('NO_GROUP');
}
return (int) $current_value;
}
/**
* Returns the teampage row for a given teampage item, if the item exists.
*
* @param int $teampage_id Teampage_id of the selected item
* @return array Teampage row of the item
*/
public function get_teampage_values($teampage_id)
{
$sql = 'SELECT teampage_position, teampage_parent
FROM ' . TEAMPAGE_TABLE . '
WHERE teampage_id = ' . (int) $teampage_id;
$result = $this->db->sql_query($sql);
$row = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
if ($row === false)
{
// Group not found.
throw new phpbb_groupposition_exception('NO_GROUP');
}
return $row;
}
/**
* Get number of items displayed
*
* {@inheritDoc}
*/
public function get_group_count()
{
$sql = 'SELECT teampage_position
FROM ' . TEAMPAGE_TABLE . '
ORDER BY teampage_position DESC';
$result = $this->db->sql_query_limit($sql, 1);
$group_count = (int) $this->db->sql_fetchfield('teampage_position');
$this->db->sql_freeresult($result);
return $group_count;
}
/**
* Adds a group by group_id
*
* {@inheritDoc}
*/
public function add_group($group_id)
{
return $this->add_group_teampage($group_id, self::NO_PARENT);
}
/**
* Adds a group by group_id
*
* @param int $group_id group_id of the group to be added
* @param int $parent_id Teampage ID of the parent item
* @return bool True if the group was added successfully
*/
public function add_group_teampage($group_id, $parent_id)
{
$current_value = $this->get_group_value($group_id);
if ($current_value == self::GROUP_DISABLED)
{
if ($parent_id != self::NO_PARENT)
{
// Check, whether the given parent is a category
$sql = 'SELECT teampage_id
FROM ' . TEAMPAGE_TABLE . '
WHERE group_id = 0
AND teampage_id = ' . (int) $parent_id;
$result = $this->db->sql_query_limit($sql, 1);
$parent_is_category = (bool) $this->db->sql_fetchfield('teampage_id');
$this->db->sql_freeresult($result);
if ($parent_is_category)
{
// Get value of last child from this parent and add group there
$sql = 'SELECT teampage_position
FROM ' . TEAMPAGE_TABLE . '
WHERE teampage_parent = ' . (int) $parent_id . '
OR teampage_id = ' . (int) $parent_id . '
ORDER BY teampage_position DESC';
$result = $this->db->sql_query_limit($sql, 1);
$new_position = (int) $this->db->sql_fetchfield('teampage_position');
$this->db->sql_freeresult($result);
$sql = 'UPDATE ' . TEAMPAGE_TABLE . '
SET teampage_position = teampage_position + 1
WHERE teampage_position > ' . $new_position;
$this->db->sql_query($sql);
}
}
else
{
// Add group at the end
$new_position = $this->get_group_count();
}
$sql_ary = array(
'group_id' => $group_id,
'teampage_position' => $new_position + 1,
'teampage_parent' => $parent_id,
);
$sql = 'INSERT INTO ' . TEAMPAGE_TABLE . ' ' . $this->db->sql_build_array('INSERT', $sql_ary);
$this->db->sql_query($sql);
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return true;
}
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return false;
}
/**
* Adds a new category
*
* @param string $category_name Name of the category to be added
* @return bool True if the category was added successfully
*/
public function add_category_teampage($category_name)
{
if ($category_name === '')
{
return false;
}
$num_entries = $this->get_group_count();
$sql_ary = array(
'group_id' => 0,
'teampage_position' => $num_entries + 1,
'teampage_parent' => 0,
'teampage_name' => truncate_string($category_name, 255, 255),
);
$sql = 'INSERT INTO ' . TEAMPAGE_TABLE . ' ' . $this->db->sql_build_array('INSERT', $sql_ary);
$this->db->sql_query($sql);
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return true;
}
/**
* Deletes a group from the list and closes the gap in the position list.
*
* {@inheritDoc}
*/
public function delete_group($group_id, $skip_group = false)
{
$current_value = $this->get_group_value($group_id);
if ($current_value != self::GROUP_DISABLED)
{
$sql = 'UPDATE ' . TEAMPAGE_TABLE . '
SET teampage_position = teampage_position - 1
WHERE teampage_position > ' . $current_value;
$this->db->sql_query($sql);
$sql = 'DELETE FROM ' . TEAMPAGE_TABLE . '
WHERE group_id = ' . $group_id;
$this->db->sql_query($sql);
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return true;
}
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return false;
}
/**
* Deletes an item from the list and closes the gap in the position list.
*
* @param int $teampage_id teampage_id of the item to be deleted
* @param bool $skip_group Skip setting the group to GROUP_DISABLED, to save the query, when you need to update it anyway.
* @return bool True if the item was deleted successfully
*/
public function delete_teampage($teampage_id, $skip_group = false)
{
$current_value = $this->get_teampage_value($teampage_id);
if ($current_value != self::GROUP_DISABLED)
{
$sql = 'DELETE FROM ' . TEAMPAGE_TABLE . '
WHERE teampage_id = ' . $teampage_id . '
OR teampage_parent = ' . $teampage_id;
$this->db->sql_query($sql);
$delta = (int) $this->db->sql_affectedrows();
$sql = 'UPDATE ' . TEAMPAGE_TABLE . '
SET teampage_position = teampage_position - ' . $delta . '
WHERE teampage_position > ' . $current_value;
$this->db->sql_query($sql);
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return true;
}
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return false;
}
/**
* Moves a group up by group_id
*
* {@inheritDoc}
*/
public function move_up($group_id)
{
return $this->move($group_id, 1);
}
/**
* Moves an item up by teampage_id
*
* @param int $group_id group_id of the group to be moved
* @return bool True if the group was moved successfully
*/
public function move_up_teampage($teampage_id)
{
return $this->move_teampage($teampage_id, 1);
}
/**
* Moves a group down by group_id
*
* {@inheritDoc}
*/
public function move_down($group_id)
{
return $this->move($group_id, -1);
}
/**
* Movesan item down by teampage_id
*
* @param int $group_id group_id of the group to be moved
* @return bool True if the group was moved successfully
*/
public function move_down_teampage($teampage_id)
{
return $this->move_teampage($teampage_id, -1);
}
/**
* Moves a group up/down
*
* {@inheritDoc}
*/
public function move($group_id, $delta)
{
$delta = (int) $delta;
if (!$delta)
{
return false;
}
$move_up = ($delta > 0) ? true : false;
$data = $this->get_group_values($group_id);
$current_value = (int) $data['teampage_position'];
if ($current_value != self::GROUP_DISABLED)
{
$this->db->sql_transaction('begin');
if (!$move_up && $data['teampage_parent'] == self::NO_PARENT)
{
// If we move items down, we need to grab the one sibling more,
// so we do not ignore the children of the previous sibling.
// We will remove the additional sibling later on.
$delta = abs($delta) + 1;
}
$sql = 'SELECT teampage_position
FROM ' . TEAMPAGE_TABLE . '
WHERE teampage_parent = ' . (int) $data['teampage_parent'] . '
AND teampage_position' . (($move_up) ? ' < ' : ' > ') . $current_value . '
ORDER BY teampage_position' . (($move_up) ? ' DESC' : ' ASC');
$result = $this->db->sql_query_limit($sql, $delta);
$sibling_count = 0;
$sibling_limit = $delta;
// Reset the delta, as we recalculate the new real delta
$delta = 0;
while ($row = $this->db->sql_fetchrow($result))
{
$sibling_count++;
$delta = $current_value - $row['teampage_position'];
if (!$move_up && $data['teampage_parent'] == self::NO_PARENT && $sibling_count == $sibling_limit)
{
// Remove the additional sibling we added previously
$delta++;
}
}
$this->db->sql_freeresult($result);
if ($delta)
{
// First we move all items between our current value and the target value up/down 1,
// so we have a gap for our item to move.
$sql = 'UPDATE ' . TEAMPAGE_TABLE . '
SET teampage_position = teampage_position' . (($move_up) ? ' + 1' : ' - 1') . '
WHERE teampage_position' . (($move_up) ? ' >= ' : ' <= ') . ($current_value - $delta) . '
AND teampage_position' . (($move_up) ? ' < ' : ' > ') . $current_value;
$this->db->sql_query($sql);
// And now finally, when we moved some other items and built a gap,
// we can move the desired item to it.
$sql = 'UPDATE ' . TEAMPAGE_TABLE . '
SET teampage_position = teampage_position ' . (($move_up) ? ' - ' : ' + ') . abs($delta) . '
WHERE group_id = ' . (int) $group_id;
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return true;
}
$this->db->sql_transaction('commit');
}
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return false;
}
/**
* Moves an item up/down
*
* @param int $teampage_id teampage_id of the item to be moved
* @param int $delta number of steps:
* - positive = move up
* - negative = move down
* @return bool True if the group was moved successfully
*/
public function move_teampage($teampage_id, $delta)
{
$delta = (int) $delta;
if (!$delta)
{
return false;
}
$move_up = ($delta > 0) ? true : false;
$data = $this->get_teampage_values($teampage_id);
$current_value = (int) $data['teampage_position'];
if ($current_value != self::GROUP_DISABLED)
{
$this->db->sql_transaction('begin');
if (!$move_up && $data['teampage_parent'] == self::NO_PARENT)
{
// If we move items down, we need to grab the one sibling more,
// so we do not ignore the children of the previous sibling.
// We will remove the additional sibling later on.
$delta = abs($delta) + 1;
}
$sql = 'SELECT teampage_id, teampage_position
FROM ' . TEAMPAGE_TABLE . '
WHERE teampage_parent = ' . (int) $data['teampage_parent'] . '
AND teampage_position' . (($move_up) ? ' < ' : ' > ') . $current_value . '
ORDER BY teampage_position' . (($move_up) ? ' DESC' : ' ASC');
$result = $this->db->sql_query_limit($sql, $delta);
$sibling_count = 0;
$sibling_limit = $delta;
// Reset the delta, as we recalculate the new real delta
$delta = 0;
while ($row = $this->db->sql_fetchrow($result))
{
$sibling_count++;
$delta = $current_value - $row['teampage_position'];
// Remove the additional sibling we added previously
// But only, if we included it, this is not be the case
// when we reached the end of our list
if (!$move_up && $data['teampage_parent'] == self::NO_PARENT && $sibling_count == $sibling_limit)
{
$delta++;
}
}
$this->db->sql_freeresult($result);
if ($delta)
{
$sql = 'SELECT COUNT(teampage_id) as num_items
FROM ' . TEAMPAGE_TABLE . '
WHERE teampage_id = ' . (int) $teampage_id . '
OR teampage_parent = ' . (int) $teampage_id;
$result = $this->db->sql_query($sql);
$num_items = (int) $this->db->sql_fetchfield('num_items');
$this->db->sql_freeresult($result);
// First we move all items between our current value and the target value up/down 1,
// so we have a gap for our item to move.
$sql = 'UPDATE ' . TEAMPAGE_TABLE . '
SET teampage_position = teampage_position' . (($move_up) ? ' + ' : ' - ') . $num_items . '
WHERE teampage_position' . (($move_up) ? ' >= ' : ' <= ') . ($current_value - $delta) . '
AND teampage_position' . (($move_up) ? ' < ' : ' > ') . $current_value . '
AND NOT (teampage_id = ' . (int) $teampage_id . '
OR teampage_parent = ' . (int) $teampage_id . ')';
$this->db->sql_query($sql);
$delta = (!$move_up && $data['teampage_parent'] == self::NO_PARENT) ? (abs($delta) - ($num_items - 1)) : abs($delta);
// And now finally, when we moved some other items and built a gap,
// we can move the desired item to it.
$sql = 'UPDATE ' . TEAMPAGE_TABLE . '
SET teampage_position = teampage_position ' . (($move_up) ? ' - ' : ' + ') . $delta . '
WHERE teampage_id = ' . (int) $teampage_id . '
OR teampage_parent = ' . (int) $teampage_id;
$this->db->sql_query($sql);
$this->db->sql_transaction('commit');
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return true;
}
$this->db->sql_transaction('commit');
}
$this->cache->destroy('sql', TEAMPAGE_TABLE);
return false;
}
/**
* Get group type language var
*
* @param int $group_type group_type from the groups-table
* @return string name of the language variable for the given group-type.
*/
static public function group_type_language($group_type)
{
switch ($group_type)
{
case GROUP_OPEN:
return 'GROUP_REQUEST';
case GROUP_CLOSED:
return 'GROUP_CLOSED';
case GROUP_HIDDEN:
return 'GROUP_HIDDEN';
case GROUP_SPECIAL:
return 'GROUP_SPECIAL';
case GROUP_FREE:
return 'GROUP_OPEN';
}
}
}

View file

@ -454,8 +454,7 @@ CREATE TABLE phpbb_groups (
group_receive_pm INTEGER DEFAULT 0 NOT NULL,
group_message_limit INTEGER DEFAULT 0 NOT NULL,
group_max_recipients INTEGER DEFAULT 0 NOT NULL,
group_legend INTEGER DEFAULT 0 NOT NULL,
group_teampage INTEGER DEFAULT 0 NOT NULL
group_legend INTEGER DEFAULT 0 NOT NULL
);;
ALTER TABLE phpbb_groups ADD PRIMARY KEY (group_id);;
@ -1165,6 +1164,29 @@ BEGIN
END;;
# Table: 'phpbb_teampage'
CREATE TABLE phpbb_teampage (
teampage_id INTEGER NOT NULL,
group_id INTEGER DEFAULT 0 NOT NULL,
teampage_name VARCHAR(255) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE,
teampage_position INTEGER DEFAULT 0 NOT NULL,
teampage_parent INTEGER DEFAULT 0 NOT NULL
);;
ALTER TABLE phpbb_teampage ADD PRIMARY KEY (teampage_id);;
CREATE GENERATOR phpbb_teampage_gen;;
SET GENERATOR phpbb_teampage_gen TO 0;;
CREATE TRIGGER t_phpbb_teampage FOR phpbb_teampage
BEFORE INSERT
AS
BEGIN
NEW.teampage_id = GEN_ID(phpbb_teampage_gen, 1);
END;;
# Table: 'phpbb_topics'
CREATE TABLE phpbb_topics (
topic_id INTEGER NOT NULL,

View file

@ -562,8 +562,7 @@ CREATE TABLE [phpbb_groups] (
[group_receive_pm] [int] DEFAULT (0) NOT NULL ,
[group_message_limit] [int] DEFAULT (0) NOT NULL ,
[group_max_recipients] [int] DEFAULT (0) NOT NULL ,
[group_legend] [int] DEFAULT (0) NOT NULL ,
[group_teampage] [int] DEFAULT (0) NOT NULL
[group_legend] [int] DEFAULT (0) NOT NULL
) ON [PRIMARY]
GO
@ -1416,6 +1415,26 @@ CREATE UNIQUE INDEX [style_name] ON [phpbb_styles]([style_name]) ON [PRIMARY]
GO
/*
Table: 'phpbb_teampage'
*/
CREATE TABLE [phpbb_teampage] (
[teampage_id] [int] IDENTITY (1, 1) NOT NULL ,
[group_id] [int] DEFAULT (0) NOT NULL ,
[teampage_name] [varchar] (255) DEFAULT ('') NOT NULL ,
[teampage_position] [int] DEFAULT (0) NOT NULL ,
[teampage_parent] [int] DEFAULT (0) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [phpbb_teampage] WITH NOCHECK ADD
CONSTRAINT [PK_phpbb_teampage] PRIMARY KEY CLUSTERED
(
[teampage_id]
) ON [PRIMARY]
GO
/*
Table: 'phpbb_topics'
*/

View file

@ -327,7 +327,6 @@ CREATE TABLE phpbb_groups (
group_message_limit mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
group_max_recipients mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
group_legend mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
group_teampage mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
PRIMARY KEY (group_id),
KEY group_legend_name (group_legend, group_name(255))
);
@ -813,6 +812,17 @@ CREATE TABLE phpbb_styles (
);
# Table: 'phpbb_teampage'
CREATE TABLE phpbb_teampage (
teampage_id mediumint(8) UNSIGNED NOT NULL auto_increment,
group_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
teampage_name blob NOT NULL,
teampage_position mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
teampage_parent mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
PRIMARY KEY (teampage_id)
);
# Table: 'phpbb_topics'
CREATE TABLE phpbb_topics (
topic_id mediumint(8) UNSIGNED NOT NULL auto_increment,

View file

@ -327,7 +327,6 @@ CREATE TABLE phpbb_groups (
group_message_limit mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
group_max_recipients mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
group_legend mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
group_teampage mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
PRIMARY KEY (group_id),
KEY group_legend_name (group_legend, group_name)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
@ -813,6 +812,17 @@ CREATE TABLE phpbb_styles (
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
# Table: 'phpbb_teampage'
CREATE TABLE phpbb_teampage (
teampage_id mediumint(8) UNSIGNED NOT NULL auto_increment,
group_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
teampage_name varchar(255) DEFAULT '' NOT NULL,
teampage_position mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
teampage_parent mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
PRIMARY KEY (teampage_id)
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
# Table: 'phpbb_topics'
CREATE TABLE phpbb_topics (
topic_id mediumint(8) UNSIGNED NOT NULL auto_increment,

View file

@ -620,7 +620,6 @@ CREATE TABLE phpbb_groups (
group_message_limit number(8) DEFAULT '0' NOT NULL,
group_max_recipients number(8) DEFAULT '0' NOT NULL,
group_legend number(8) DEFAULT '0' NOT NULL,
group_teampage number(8) DEFAULT '0' NOT NULL,
CONSTRAINT pk_phpbb_groups PRIMARY KEY (group_id)
)
/
@ -1541,6 +1540,36 @@ END;
/
/*
Table: 'phpbb_teampage'
*/
CREATE TABLE phpbb_teampage (
teampage_id number(8) NOT NULL,
group_id number(8) DEFAULT '0' NOT NULL,
teampage_name varchar2(765) DEFAULT '' ,
teampage_position number(8) DEFAULT '0' NOT NULL,
teampage_parent number(8) DEFAULT '0' NOT NULL,
CONSTRAINT pk_phpbb_teampage PRIMARY KEY (teampage_id)
)
/
CREATE SEQUENCE phpbb_teampage_seq
/
CREATE OR REPLACE TRIGGER t_phpbb_teampage
BEFORE INSERT ON phpbb_teampage
FOR EACH ROW WHEN (
new.teampage_id IS NULL OR new.teampage_id = 0
)
BEGIN
SELECT phpbb_teampage_seq.nextval
INTO :new.teampage_id
FROM dual;
END;
/
/*
Table: 'phpbb_topics'
*/

View file

@ -473,7 +473,6 @@ CREATE TABLE phpbb_groups (
group_message_limit INT4 DEFAULT '0' NOT NULL CHECK (group_message_limit >= 0),
group_max_recipients INT4 DEFAULT '0' NOT NULL CHECK (group_max_recipients >= 0),
group_legend INT4 DEFAULT '0' NOT NULL CHECK (group_legend >= 0),
group_teampage INT4 DEFAULT '0' NOT NULL CHECK (group_teampage >= 0),
PRIMARY KEY (group_id)
);
@ -1055,6 +1054,21 @@ CREATE TABLE phpbb_styles (
CREATE UNIQUE INDEX phpbb_styles_style_name ON phpbb_styles (style_name);
/*
Table: 'phpbb_teampage'
*/
CREATE SEQUENCE phpbb_teampage_seq;
CREATE TABLE phpbb_teampage (
teampage_id INT4 DEFAULT nextval('phpbb_teampage_seq'),
group_id INT4 DEFAULT '0' NOT NULL CHECK (group_id >= 0),
teampage_name varchar(255) DEFAULT '' NOT NULL,
teampage_position INT4 DEFAULT '0' NOT NULL CHECK (teampage_position >= 0),
teampage_parent INT4 DEFAULT '0' NOT NULL CHECK (teampage_parent >= 0),
PRIMARY KEY (teampage_id)
);
/*
Table: 'phpbb_topics'
*/

View file

@ -461,13 +461,17 @@ INSERT INTO phpbb_users (user_type, group_id, username, username_clean, user_reg
INSERT INTO phpbb_users (user_type, group_id, username, username_clean, user_regdate, user_password, user_email, user_lang, user_style, user_rank, user_colour, user_posts, user_permissions, user_ip, user_birthday, user_lastpage, user_last_confirm_key, user_post_sortby_type, user_post_sortby_dir, user_topic_sortby_type, user_topic_sortby_dir, user_avatar, user_sig, user_sig_bbcode_uid, user_from, user_icq, user_aim, user_yim, user_msnm, user_jabber, user_website, user_occ, user_interests, user_actkey, user_newpasswd) VALUES (3, 5, 'Admin', 'admin', 0, '21232f297a57a5a743894a0e4a801fc3', 'admin@yourdomain.com', 'en', 1, 1, 'AA0000', 1, '', '', '', '', '', 't', 'a', 't', 'd', '', '', '', '', '', '', '', '', '', '', '', '', '', '');
# -- Groups
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_teampage, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('GUESTS', 3, 0, '', 0, 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_teampage, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('REGISTERED', 3, 0, '', 0, 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_teampage, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('REGISTERED_COPPA', 3, 0, '', 0, 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_teampage, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('GLOBAL_MODERATORS', 3, 0, '00AA00', 2, 2, '', '', '', 0);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_teampage, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('ADMINISTRATORS', 3, 1, 'AA0000', 1, 1, '', '', '', 0);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_teampage, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('BOTS', 3, 0, '9E8DA7', 0, 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_teampage, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('NEWLY_REGISTERED', 3, 0, '', 0, 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('GUESTS', 3, 0, '', 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('REGISTERED', 3, 0, '', 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('REGISTERED_COPPA', 3, 0, '', 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('GLOBAL_MODERATORS', 3, 0, '00AA00', 2, '', '', '', 0);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('ADMINISTRATORS', 3, 1, 'AA0000', 1, '', '', '', 0);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('BOTS', 3, 0, '9E8DA7', 0, '', '', '', 5);
INSERT INTO phpbb_groups (group_name, group_type, group_founder_manage, group_colour, group_legend, group_avatar, group_desc, group_desc_uid, group_max_recipients) VALUES ('NEWLY_REGISTERED', 3, 0, '', 0, '', '', '', 5);
# -- Teampage
INSERT INTO phpbb_teampage (group_id, teampage_name, teampage_position, teampage_parent) VALUES (5, '', 1, 0);
INSERT INTO phpbb_teampage (group_id, teampage_name, teampage_position, teampage_parent) VALUES (4, '', 2, 0);
# -- User -> Group
INSERT INTO phpbb_user_group (group_id, user_id, user_pending, group_leader) VALUES (1, 1, 0, 0);

View file

@ -318,8 +318,7 @@ CREATE TABLE phpbb_groups (
group_receive_pm INTEGER UNSIGNED NOT NULL DEFAULT '0',
group_message_limit INTEGER UNSIGNED NOT NULL DEFAULT '0',
group_max_recipients INTEGER UNSIGNED NOT NULL DEFAULT '0',
group_legend INTEGER UNSIGNED NOT NULL DEFAULT '0',
group_teampage INTEGER UNSIGNED NOT NULL DEFAULT '0'
group_legend INTEGER UNSIGNED NOT NULL DEFAULT '0'
);
CREATE INDEX phpbb_groups_group_legend_name ON phpbb_groups (group_legend, group_name);
@ -787,6 +786,16 @@ CREATE TABLE phpbb_styles (
CREATE UNIQUE INDEX phpbb_styles_style_name ON phpbb_styles (style_name);
# Table: 'phpbb_teampage'
CREATE TABLE phpbb_teampage (
teampage_id INTEGER PRIMARY KEY NOT NULL ,
group_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
teampage_name varchar(255) NOT NULL DEFAULT '',
teampage_position INTEGER UNSIGNED NOT NULL DEFAULT '0',
teampage_parent INTEGER UNSIGNED NOT NULL DEFAULT '0'
);
# Table: 'phpbb_topics'
CREATE TABLE phpbb_topics (
topic_id INTEGER PRIMARY KEY NOT NULL ,

View file

@ -36,6 +36,7 @@ if (empty($lang) || !is_array($lang))
$lang = array_merge($lang, array(
'ACP_GROUPS_MANAGE_EXPLAIN' => 'From this panel you can administer all your usergroups. You can delete, create and edit existing groups. Furthermore, you may choose group leaders, toggle open/hidden/closed group status and set the group name and description.',
'ADD_GROUP_CATEGORY' => 'Add category',
'ADD_USERS' => 'Add users',
'ADD_USERS_EXPLAIN' => 'Here you can add new users to the group. You may select whether this group becomes the new default for the selected users. Additionally you can define them as group leaders. Please enter each username on a separate line.',
@ -50,6 +51,7 @@ $lang = array_merge($lang, array(
'GROUP_APPROVED' => 'Approved members',
'GROUP_AVATAR' => 'Group avatar',
'GROUP_AVATAR_EXPLAIN' => 'This image will be displayed in the Group Control Panel.',
'GROUP_CATEGORY_NAME' => 'Category name',
'GROUP_CLOSED' => 'Closed',
'GROUP_COLOR' => 'Group colour',
'GROUP_COLOR_EXPLAIN' => 'Defines the colour members usernames will appear in, leave blank for user default.',
@ -130,6 +132,7 @@ $lang = array_merge($lang, array(
'SPECIAL_GROUPS' => 'Pre-defined groups',
'SPECIAL_GROUPS_EXPLAIN' => 'Pre-defined groups are special groups, they cannot be deleted or directly modified. However you can still add users and alter basic settings.',
'TEAMPAGE' => 'Teampage',
'TEAMPAGE_DISP_ALL' => 'All memberships',
'TEAMPAGE_DISP_DEFAULT' => 'Users default group only',
'TEAMPAGE_DISP_FIRST' => 'First membership only',

View file

@ -71,21 +71,28 @@ switch ($mode)
$page_title = $user->lang['THE_TEAM'];
$template_html = 'memberlist_leaders.html';
$sql = 'SELECT *
FROM ' . TEAMPAGE_TABLE . '
ORDER BY teampage_position ASC';
$result = $db->sql_query($sql, 3600);
$teampage_data = $db->sql_fetchrowset($result);
$db->sql_freeresult($result);
$sql_ary = array(
'SELECT' => 'g.group_id, g.group_name, g.group_colour, g.group_type, g.group_teampage, ug.user_id as ug_user_id',
'SELECT' => 'g.group_id, g.group_name, g.group_colour, g.group_type, ug.user_id as ug_user_id, t.teampage_id',
'FROM' => array(GROUPS_TABLE => 'g'),
'LEFT_JOIN' => array(
array(
'FROM' => array(TEAMPAGE_TABLE => 't'),
'ON' => 't.group_id = g.group_id',
),
array(
'FROM' => array(USER_GROUP_TABLE => 'ug'),
'ON' => 'ug.group_id = g.group_id AND ug.user_pending = 0 AND ug.user_id = ' . (int) $user->data['user_id'],
),
),
'WHERE' => '',
'ORDER_BY' => 'g.group_teampage ASC',
);
$result = $db->sql_query($db->sql_build_query('SELECT', $sql_ary));
@ -104,7 +111,7 @@ switch ($mode)
$row['u_group'] = append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']);
}
if ($row['group_teampage'])
if ($row['teampage_id'])
{
// Only put groups into the array we want to display.
// We are fetching all groups, to ensure we got all data for default groups.
@ -204,10 +211,26 @@ switch ($mode)
}
}
foreach ($groups_ary as $group_id => $group_data)
$parent_team = 0;
foreach ($teampage_data as $team_data)
{
if ($group_data['group_teampage'])
// If this team entry has no group, it's a category
if (!$team_data['group_id'])
{
$template->assign_block_vars('group', array(
'GROUP_NAME' => $team_data['teampage_name'],
));
$parent_team = (int) $team_data['teampage_id'];
continue;
}
$group_data = $groups_ary[(int) $team_data['group_id']];
$group_id = (int) $team_data['group_id'];
if (!$team_data['teampage_parent'])
{
// If the group does not have a parent category, we display the groupname as category
$template->assign_block_vars('group', array(
'GROUP_NAME' => $group_data['group_name'],
'GROUP_COLOR' => $group_data['group_colour'],
@ -223,7 +246,7 @@ switch ($mode)
if (isset($user_ary[$user_id]))
{
$row = $user_ary[$user_id];
if ($config['teampage_memberships'] == 1 && ($group_id != $groups_ary[$row['default_group']]['group_id']) && $groups_ary[$row['default_group']]['group_teampage'])
if ($config['teampage_memberships'] == 1 && ($group_id != $groups_ary[$row['default_group']]['group_id']) && $groups_ary[$row['default_group']]['teampage_id'])
{
// Display users in their primary group, instead of the first group, when it is displayed on the teampage.
continue;

View file

@ -1,287 +0,0 @@
<?php
/**
*
* @package testing
* @copyright (c) 2011 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
class phpbb_group_positions_test extends phpbb_database_test_case
{
public function getDataSet()
{
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/group_positions.xml');
}
public function get_group_value_data()
{
return array(
array('teampage', 1, 0),
array('teampage', 2, 1),
array('legend', 1, 0),
array('legend', 3, 1),
);
}
/**
* @dataProvider get_group_value_data
*/
public function test_get_group_value($field, $group_id, $expected)
{
global $db;
$db = $this->new_dbal();
$test_class = new phpbb_group_positions($db, $field);
$this->assertEquals($expected, $test_class->get_group_value($group_id));
}
public function get_group_count_data()
{
return array(
array('teampage', 2),
array('legend', 1),
);
}
/**
* @dataProvider get_group_count_data
*/
public function test_get_group_count($field, $expected)
{
global $db;
$db = $this->new_dbal();
$test_class = new phpbb_group_positions($db, $field);
$this->assertEquals($expected, $test_class->get_group_count());
}
public function add_group_data()
{
return array(
array('teampage', 1, array(
array('group_id' => 1, 'group_teampage' => 3, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 2, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
);
}
/**
* @dataProvider add_group_data
*/
public function test_add_group($field, $group_id, $expected)
{
global $db;
$db = $this->new_dbal();
$test_class = new phpbb_group_positions($db, $field);
$test_class->add_group($group_id);
$result = $db->sql_query('SELECT group_id, group_teampage, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function delete_group_data()
{
return array(
array('teampage', 1, false, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 2, false, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 1, 'group_legend' => 1),
)),
array('teampage', 3, false, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 0, 'group_legend' => 1),
)),
array('teampage', 1, true, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 2, true, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 1, 'group_legend' => 1),
)),
array('teampage', 3, true, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
);
}
/**
* @dataProvider delete_group_data
*/
public function test_delete_group($field, $group_id, $skip_group, $expected)
{
global $db;
$db = $this->new_dbal();
$test_class = new phpbb_group_positions($db, $field);
$test_class->delete_group($group_id, $skip_group);
$result = $db->sql_query('SELECT group_id, group_teampage, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function move_up_data()
{
return array(
array('teampage', 1, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 2, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 3, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 2, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 1, 'group_legend' => 1),
)),
);
}
/**
* @dataProvider move_up_data
*/
public function test_move_up($field, $group_id, $expected)
{
global $db;
$db = $this->new_dbal();
$test_class = new phpbb_group_positions($db, $field);
$test_class->move_up($group_id);
$result = $db->sql_query('SELECT group_id, group_teampage, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function move_down_data()
{
return array(
array('teampage', 1, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 2, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 2, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 1, 'group_legend' => 1),
)),
array('teampage', 3, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
);
}
/**
* @dataProvider move_down_data
*/
public function test_move_down($field, $group_id, $expected)
{
global $db;
$db = $this->new_dbal();
$test_class = new phpbb_group_positions($db, $field);
$test_class->move_down($group_id);
$result = $db->sql_query('SELECT group_id, group_teampage, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function move_data()
{
return array(
array('teampage', 1, 1, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 1, -1, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 3, 3, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 2, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 1, 'group_legend' => 1),
)),
array('teampage', 2, 0, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
array('teampage', 2, -1, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 2, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 1, 'group_legend' => 1),
)),
array('teampage', 2, -3, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 2, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 1, 'group_legend' => 1),
)),
array('teampage', 3, -1, array(
array('group_id' => 1, 'group_teampage' => 0, 'group_legend' => 0),
array('group_id' => 2, 'group_teampage' => 1, 'group_legend' => 0),
array('group_id' => 3, 'group_teampage' => 2, 'group_legend' => 1),
)),
);
}
/**
* @dataProvider move_data
*/
public function test_move($field, $group_id, $increment, $expected)
{
global $db;
$db = $this->new_dbal();
$test_class = new phpbb_group_positions($db, $field);
$test_class->move($group_id, $increment);
$result = $db->sql_query('SELECT group_id, group_teampage, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
}

View file

@ -2,25 +2,21 @@
<dataset>
<table name="phpbb_groups">
<column>group_id</column>
<column>group_teampage</column>
<column>group_legend</column>
<column>group_desc</column>
<row>
<value>1</value>
<value>0</value>
<value>0</value>
<value></value>
</row>
<row>
<value>2</value>
<value>1</value>
<value>0</value>
<value></value>
</row>
<row>
<value>3</value>
<value>2</value>
<value>1</value>
<value></value>
</row>
</table>

View file

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<table name="phpbb_groups">
<column>group_id</column>
<column>group_desc</column>
<row>
<value>1</value>
<value></value>
</row>
<row>
<value>2</value>
<value></value>
</row>
<row>
<value>3</value>
<value></value>
</row>
<row>
<value>4</value>
<value></value>
</row>
<row>
<value>5</value>
<value></value>
</row>
<row>
<value>6</value>
<value></value>
</row>
<row>
<value>7</value>
<value></value>
</row>
<row>
<value>8</value>
<value></value>
</row>
</table>
<table name="phpbb_teampage">
<column>teampage_id</column>
<column>group_id</column>
<column>teampage_name</column>
<column>teampage_position</column>
<column>teampage_parent</column>
<row>
<value>1</value>
<value>1</value>
<value></value>
<value>1</value>
<value>0</value>
</row>
<row>
<value>2</value>
<value>0</value>
<value>category - 2 children</value>
<value>2</value>
<value>0</value>
</row>
<row>
<value>3</value>
<value>2</value>
<value></value>
<value>3</value>
<value>2</value>
</row>
<row>
<value>4</value>
<value>3</value>
<value></value>
<value>4</value>
<value>2</value>
</row>
<row>
<value>5</value>
<value>0</value>
<value>category2 - 2 children</value>
<value>5</value>
<value>0</value>
</row>
<row>
<value>6</value>
<value>4</value>
<value></value>
<value>6</value>
<value>5</value>
</row>
<row>
<value>7</value>
<value>5</value>
<value></value>
<value>7</value>
<value>5</value>
</row>
<row>
<value>8</value>
<value>6</value>
<value></value>
<value>8</value>
<value>0</value>
</row>
</table>
</dataset>

View file

@ -0,0 +1,403 @@
<?php
/**
*
* @package testing
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
class phpbb_groupposition_legend_test extends phpbb_database_test_case
{
public function getDataSet()
{
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/legend.xml');
}
public function get_group_value_data()
{
return array(
array(1, 0, ''),
array(3, 2, ''),
array(4, 0, 'phpbb_groupposition_exception'),
);
}
/**
* @dataProvider get_group_value_data
*/
public function test_get_group_value($group_id, $expected, $throws_exception)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
if ($throws_exception)
{
$this->setExpectedException($throws_exception);
}
$test_class = new phpbb_groupposition_legend($db, $user);
$this->assertEquals($expected, $test_class->get_group_value($group_id));
}
public function test_get_group_count()
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_legend($db, $user);
$this->assertEquals(2, $test_class->get_group_count());
}
public function add_group_data()
{
return array(
array(
1,
true,
array(
array('group_id' => 1, 'group_legend' => 3),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
2,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
);
}
/**
* @dataProvider add_group_data
*/
public function test_add_group($group_id, $expected_added, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_legend($db, $user);
$this->assertEquals($expected_added, $test_class->add_group($group_id));
$result = $db->sql_query('SELECT group_id, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function delete_group_data()
{
return array(
array(
1,
false,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
2,
false,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 0),
array('group_id' => 3, 'group_legend' => 1),
),
),
array(
3,
false,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 0),
),
),
array(
1,
true,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
2,
true,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 1),
),
),
array(
3,
true,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
);
}
/**
* @dataProvider delete_group_data
*/
public function test_delete_group($group_id, $skip_group, $expected_deleted, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_legend($db, $user);
$this->assertEquals($expected_deleted, $test_class->delete_group($group_id, $skip_group));
$result = $db->sql_query('SELECT group_id, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function move_up_data()
{
return array(
array(
1,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
2,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
3,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 2),
array('group_id' => 3, 'group_legend' => 1),
),
),
);
}
/**
* @dataProvider move_up_data
*/
public function test_move_up($group_id, $excepted_moved, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_legend($db, $user);
$this->assertEquals($excepted_moved, $test_class->move_up($group_id));
$result = $db->sql_query('SELECT group_id, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function move_down_data()
{
return array(
array(
1,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
2,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 2),
array('group_id' => 3, 'group_legend' => 1),
),
),
array(
3,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
);
}
/**
* @dataProvider move_down_data
*/
public function test_move_down($group_id, $excepted_moved, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_legend($db, $user);
$this->assertEquals($excepted_moved, $test_class->move_down($group_id));
$result = $db->sql_query('SELECT group_id, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function move_data()
{
return array(
array(
1,
1,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
1,
-1,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
3,
3,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 2),
array('group_id' => 3, 'group_legend' => 1),
),
),
array(
2,
0,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
array(
2,
-1,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 2),
array('group_id' => 3, 'group_legend' => 1),
),
),
array(
2,
-3,
true,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 2),
array('group_id' => 3, 'group_legend' => 1),
),
),
array(
3,
-1,
false,
array(
array('group_id' => 1, 'group_legend' => 0),
array('group_id' => 2, 'group_legend' => 1),
array('group_id' => 3, 'group_legend' => 2),
),
),
);
}
/**
* @dataProvider move_data
*/
public function test_move($group_id, $increment, $excepted_moved, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_legend($db, $user);
$this->assertEquals($excepted_moved, $test_class->move($group_id, $increment));
$result = $db->sql_query('SELECT group_id, group_legend
FROM ' . GROUPS_TABLE . '
ORDER BY group_id ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
}

View file

@ -0,0 +1,641 @@
<?php
/**
*
* @package testing
* @copyright (c) 2012 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
require_once dirname(__FILE__) . '/../../phpBB/includes/utf/utf_tools.php';
require_once dirname(__FILE__) . '/../../phpBB/includes/functions_content.php';
class phpbb_groupposition_teampage_test extends phpbb_database_test_case
{
public function getDataSet()
{
return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/teampage.xml');
}
public function get_group_value_data()
{
return array(
array(2, 3, ''),
array(6, 8, ''),
array(10, 0, 'phpbb_groupposition_exception'),
);
}
/**
* @dataProvider get_group_value_data
*/
public function test_get_group_value($group_id, $expected, $throws_exception)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
if ($throws_exception)
{
$this->setExpectedException($throws_exception);
}
$test_class = new phpbb_groupposition_teampage($db, $user, $cache);
$this->assertEquals($expected, $test_class->get_group_value($group_id));
}
public function test_get_group_count()
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_teampage($db, $user, $cache);
$this->assertEquals(8, $test_class->get_group_count());
}
public function add_group_teampage_data()
{
return array(
array(
1,
2,
false,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
6,
2,
false,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
7,
2,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 7, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 6, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 7, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 9, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
7,
0,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 9, 'group_id' => 7, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
);
}
/**
* @dataProvider add_group_teampage_data
*/
public function test_add_group_teampage($group_id, $parent_id, $expected_added, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_teampage($db, $user, $cache);
$this->assertEquals($expected_added, $test_class->add_group_teampage($group_id, $parent_id));
$result = $db->sql_query('SELECT teampage_position, group_id, teampage_parent, teampage_name
FROM ' . TEAMPAGE_TABLE . '
ORDER BY teampage_position ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function add_category_teampage_data()
{
return array(
array(
'new',
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 9, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'new'),
),
),
);
}
/**
* @dataProvider add_category_teampage_data
*/
public function test_add_category_teampage($group_name, $expected_added, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_teampage($db, $user, $cache);
$this->assertEquals($expected_added, $test_class->add_category_teampage($group_name));
$result = $db->sql_query('SELECT teampage_position, group_id, teampage_parent, teampage_name
FROM ' . TEAMPAGE_TABLE . '
ORDER BY teampage_position ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function delete_group_data()
{
return array(
array(
1,
true,
array(
array('teampage_position' => 1, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 2, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 3, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 5, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 6, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
2,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 5, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 6, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
6,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
),
),
);
}
/**
* @dataProvider delete_group_data
*/
public function test_delete_group($group_id, $expected_deleted, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_teampage($db, $user, $cache);
$this->assertEquals($expected_deleted, $test_class->delete_group($group_id, false));
$result = $db->sql_query('SELECT teampage_position, group_id, teampage_parent, teampage_name
FROM ' . TEAMPAGE_TABLE . '
ORDER BY teampage_position ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function delete_teampage_data()
{
return array(
array(
1,
true,
array(
array('teampage_position' => 1, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 2, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 3, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 5, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 6, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
2,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 3, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
);
}
/**
* @dataProvider delete_teampage_data
*/
public function test_delete_teampage($teampage_id, $expected_deleted, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_teampage($db, $user, $cache);
$this->assertEquals($expected_deleted, $test_class->delete_teampage($teampage_id, false));
$result = $db->sql_query('SELECT teampage_position, group_id, teampage_parent, teampage_name
FROM ' . TEAMPAGE_TABLE . '
ORDER BY teampage_position ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function move_data()
{
return array(
array(
1,
1,
false,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
2,
1,
false,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
5,
1,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
6,
1,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 6, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 7, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
),
),
array(
1,
-1,
true,
array(
array('teampage_position' => 1, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 2, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 3, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
2,
-1,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
5,
-1,
false,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
6,
-1,
false,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
6,
3,
true,
array(
array('teampage_position' => 1, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 3, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 4, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 6, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 7, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
),
),
);
}
/**
* @dataProvider move_data
*/
public function test_move($group_id, $move_delta, $excepted_moved, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_teampage($db, $user, $cache);
$this->assertEquals($excepted_moved, $test_class->move($group_id, $move_delta));
$result = $db->sql_query('SELECT teampage_position, group_id, teampage_parent, teampage_name
FROM ' . TEAMPAGE_TABLE . '
ORDER BY teampage_position ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
public function move_teampage_data()
{
return array(
array(
1,
1,
false,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
2,
1,
true,
array(
array('teampage_position' => 1, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 2, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 3, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
5,
1,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 3, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 6, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
6,
1,
false,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
1,
-1,
true,
array(
array('teampage_position' => 1, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 2, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 3, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
2,
-1,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 3, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 6, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
5,
-1,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 6, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 7, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
),
),
array(
6,
-1,
true,
array(
array('teampage_position' => 1, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 3, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 4, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 6, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 7, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
),
),
array(
8,
3,
true,
array(
array('teampage_position' => 1, 'group_id' => 6, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 2, 'group_id' => 1, 'teampage_parent' => 0, 'teampage_name' => ''),
array('teampage_position' => 3, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category - 2 children'),
array('teampage_position' => 4, 'group_id' => 2, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 5, 'group_id' => 3, 'teampage_parent' => 2, 'teampage_name' => ''),
array('teampage_position' => 6, 'group_id' => 0, 'teampage_parent' => 0, 'teampage_name' => 'category2 - 2 children'),
array('teampage_position' => 7, 'group_id' => 4, 'teampage_parent' => 5, 'teampage_name' => ''),
array('teampage_position' => 8, 'group_id' => 5, 'teampage_parent' => 5, 'teampage_name' => ''),
),
),
);
}
/**
* @dataProvider move_teampage_data
*/
public function test_move_teampage($teampage_id, $move_delta, $excepted_moved, $expected)
{
global $cache;
$cache = new phpbb_mock_cache;
$db = $this->new_dbal();
$user = new phpbb_user;
$user->lang = array();
$test_class = new phpbb_groupposition_teampage($db, $user, $cache);
$this->assertEquals($excepted_moved, $test_class->move_teampage($teampage_id, $move_delta));
$result = $db->sql_query('SELECT teampage_position, group_id, teampage_parent, teampage_name
FROM ' . TEAMPAGE_TABLE . '
ORDER BY teampage_position ASC');
$this->assertEquals($expected, $db->sql_fetchrowset($result));
}
}