diff options
Diffstat (limited to 'phpBB/includes/groupposition')
| -rw-r--r-- | phpBB/includes/groupposition/exception.php | 23 | ||||
| -rw-r--r-- | phpBB/includes/groupposition/interface.php | 84 | ||||
| -rw-r--r-- | phpBB/includes/groupposition/legend.php | 251 | ||||
| -rw-r--r-- | phpBB/includes/groupposition/teampage.php | 604 | 
4 files changed, 0 insertions, 962 deletions
| diff --git a/phpBB/includes/groupposition/exception.php b/phpBB/includes/groupposition/exception.php deleted file mode 100644 index e4ff09c703..0000000000 --- a/phpBB/includes/groupposition/exception.php +++ /dev/null @@ -1,23 +0,0 @@ -<?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 -{ -} diff --git a/phpBB/includes/groupposition/interface.php b/phpBB/includes/groupposition/interface.php deleted file mode 100644 index eacc04e1a4..0000000000 --- a/phpBB/includes/groupposition/interface.php +++ /dev/null @@ -1,84 +0,0 @@ -<?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); -} diff --git a/phpBB/includes/groupposition/legend.php b/phpBB/includes/groupposition/legend.php deleted file mode 100644 index 7fddadde99..0000000000 --- a/phpBB/includes/groupposition/legend.php +++ /dev/null @@ -1,251 +0,0 @@ -<?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; -} - -/** -* Legend group position class -* -* 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_groupposition_legend implements phpbb_groupposition_interface -{ -	/** -	* Group is not displayed -	*/ -	const GROUP_DISABLED = 0; - -	/** -	* Database object -	* @var phpbb_db_driver -	*/ -	protected $db; - -	/** -	* User object -	* @var phpbb_user -	*/ -	protected $user; - -	/** -	* Constructor -	* -	* @param phpbb_db_driver	$db		Database object -	* @param phpbb_user			$user	User object -	*/ -	public function __construct(phpbb_db_driver $db, phpbb_user $user) -	{ -		$this->db = $db; -		$this->user = $user; -	} - -	/** -	* Returns the group_legend for a given group, if the group exists. -	* -	* {@inheritDoc} -	*/ -	public function get_group_value($group_id) -	{ -		$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_legend'); -		$this->db->sql_freeresult($result); - -		if ($current_value === false) -		{ -			// Group not found. -			throw new phpbb_groupposition_exception('NO_GROUP'); -		} - -		return (int) $current_value; -	} - -	/** -	* Get number of groups, displayed on the legend -	* -	* {@inheritDoc} -	*/ -	public function get_group_count() -	{ -		$sql = 'SELECT group_legend -			FROM ' . GROUPS_TABLE . ' -			ORDER BY group_legend DESC'; -		$result = $this->db->sql_query_limit($sql, 1); -		$group_count = (int) $this->db->sql_fetchfield('group_legend'); -		$this->db->sql_freeresult($result); - -		return $group_count; -	} - -	/** -	* Adds a group by group_id -	* -	* {@inheritDoc} -	*/ -	public function add_group($group_id) -	{ -		$current_value = $this->get_group_value($group_id); - -		if ($current_value == self::GROUP_DISABLED) -		{ -			// Group is currently not displayed, add it at the end. -			$next_value = 1 + $this->get_group_count(); - -			$sql = 'UPDATE ' . GROUPS_TABLE . ' -				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. -	* -	* {@inheritDoc} -	*/ -	public function delete_group($group_id, $skip_group = false) -	{ -		$current_value = $this->get_group_value($group_id); - -		if ($current_value != self::GROUP_DISABLED) -		{ -			$this->db->sql_transaction('begin'); - -			$sql = 'UPDATE ' . GROUPS_TABLE . ' -				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_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 -	* -	* {@inheritDoc} -	*/ -	public function move_up($group_id) -	{ -		return $this->move($group_id, 1); -	} - -	/** -	* Moves a group down by group_id -	* -	* {@inheritDoc} -	*/ -	public function move_down($group_id) -	{ -		return $this->move($group_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; -		$current_value = $this->get_group_value($group_id); - -		if ($current_value != self::GROUP_DISABLED) -		{ -			$this->db->sql_transaction('begin'); - -			// 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_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, -			// we use the number of changed groups, to update the group. -			$delta = (int) $this->db->sql_affectedrows(); - -			if ($delta) -			{ -				// 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_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; -	} - -	/** -	* 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'; -		} -	} -} diff --git a/phpBB/includes/groupposition/teampage.php b/phpBB/includes/groupposition/teampage.php deleted file mode 100644 index 7c758199e7..0000000000 --- a/phpBB/includes/groupposition/teampage.php +++ /dev/null @@ -1,604 +0,0 @@ -<?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'; -		} -	} -} | 
