From 9e70f7a4e0e419984ad5dd0392857ecd810ad252 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 26 Feb 2013 16:53:51 +0100 Subject: [PATCH] [ticket/10411] Catch exceptions from grouppositions PHPBB3-10411 --- phpBB/includes/acp/acp_groups.php | 73 ++++++++++++++++----------- phpBB/includes/functions_user.php | 84 ++++++++++++++++++++++++------- 2 files changed, 108 insertions(+), 49 deletions(-) diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php index 805fc28520..17145508aa 100644 --- a/phpBB/includes/acp/acp_groups.php +++ b/phpBB/includes/acp/acp_groups.php @@ -851,53 +851,66 @@ class acp_groups { $group_position = $phpbb_container->get('groupposition.' . $field); - $group_position->set_admin_back_link($this->u_action); } if ($field == 'teampage') { - switch ($action) + try { - case 'add': - $group_position->add_group_teampage($group_id, $category_id); - break; + switch ($action) + { + case 'add': + $group_position->add_group_teampage($group_id, $category_id); + break; - case 'add_category': - $group_position->add_category_teampage($request->variable('category_name', '', true)); - break; + case 'add_category': + $group_position->add_category_teampage($request->variable('category_name', '', true)); + break; - case 'delete': - $group_position->delete_teampage($teampage_id); - break; + case 'delete': + $group_position->delete_teampage($teampage_id); + break; - case 'move_up': - $group_position->move_up_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; + 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') { - switch ($action) + try { - case 'add': - $group_position->add_group($group_id); - break; + switch ($action) + { + case 'add': + $group_position->add_group($group_id); + break; - case 'delete': - $group_position->delete_group($group_id); - break; + case 'delete': + $group_position->delete_group($group_id); + break; - case 'move_up': - $group_position->move_up($group_id); - break; + case 'move_up': + $group_position->move_up($group_id); + break; - case 'move_down': - $group_position->move_down($group_id); - break; + case 'move_down': + $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 diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 379abe4d42..cae83bf203 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -2606,8 +2606,15 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow $teampage = $phpbb_container->get('groupposition.teampage'); if ($group_id) { - $current_legend = $legend->get_group_value($group_id); - $current_teampage = $teampage->get_group_value($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'])) @@ -2626,7 +2633,14 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow else if ($group_id && ($current_legend != phpbb_groupposition_legend::GROUP_DISABLED)) { // Group is removed from the legend - $legend->delete_group($group_id, true); + try + { + $legend->delete_group($group_id, true); + } + catch (phpbb_groupposition_exception $exception) + { + trigger_error($user->lang($exception->getMessage())); + } $group_attributes['group_legend'] = phpbb_groupposition_legend::GROUP_DISABLED; } else @@ -2733,7 +2747,14 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow // which is currently displayed. if (!$group_teampage && $group_id && $current_teampage != phpbb_groupposition_teampage::GROUP_DISABLED) { - $teampage->delete_group($group_id); + try + { + $teampage->delete_group($group_id); + } + catch (phpbb_groupposition_exception $exception) + { + trigger_error($user->lang($exception->getMessage())); + } } if (!$group_id) @@ -2746,21 +2767,28 @@ function group_create(&$group_id, $type, $name, $desc, $group_attributes, $allow } } - if ($group_teampage && $current_teampage == phpbb_groupposition_teampage::GROUP_DISABLED) + try { - $teampage->add_group($group_id); - } - - if ($group_teampage) - { - if ($current_teampage == phpbb_groupposition_teampage::GROUP_DISABLED) + 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); + } } - else if ($group_id && ($current_teampage != phpbb_groupposition_teampage::GROUP_DISABLED)) + catch (phpbb_groupposition_exception $exception) { - $teampage->delete_group($group_id); + trigger_error($user->lang($exception->getMessage())); } unset($teampage); @@ -2887,13 +2915,31 @@ function group_delete($group_id, $group_name = false) while ($start); // Delete group from legend and teampage - $legend = $phpbb_container->get('groupposition.legend'); - $legend->delete_group($group_id); - unset($legend); + try + { + $legend = $phpbb_container->get('groupposition.legend'); + $legend->delete_group($group_id); + unset($legend); + } + 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())); + } - $teampage = $phpbb_container->get('groupposition.teampage'); - $teampage->delete_group($group_id); - unset($teampage); + 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 . "