posaune
[timetracker.git] / group_delete.php
index 65875fa..2865351 100644 (file)
 
 require_once('initialize.php');
 import('form.Form');
+import('ttGroupHelper');
 
 // Access checks.
-if (!ttAccessAllowed('delete_group')) {
-  header('Location: access_denied.php');
+if (!(ttAccessAllowed('delete_group') || ttAccessAllowed('manage_subgroups'))) {
+  header('Location: access_denied.php'); // No rights.
   exit();
 }
-// End of access checks.
-
-// TODO: refactor this... and the template.
 $group_id = (int)$request->getParameter('id');
+if (!$user->isGroupValid($group_id)) {
+  header('Location: access_denied.php'); // Wrong group id.
+  exit();
+}
+if ($group_id == $user->group_id && !$user->can('delete_group')) {
+  header('Location: access_denied.php'); // Trying to delete home group without right.
+  exit();
+}
+// End of access checks.
 
-$admin = new ttAdmin();
-$group_details = $admin->getGroupDetails($group_id);
-$group_name = $group_details['group_name'];
+$group_name = ttGroupHelper::getGroupName($group_id);
 
 $form = new Form('groupForm');
 $form->addInput(array('type'=>'hidden','name'=>'id','value'=>$group_id));
@@ -50,22 +55,38 @@ $form->addInput(array('type'=>'submit','name'=>'btn_cancel','value'=>$i18n->get(
 
 if ($request->isPost()) {
   if ($request->getParameter('btn_delete')) {
-    $result = $admin->markGroupDeleted($group_id);
-    if ($result) {
-      header('Location: admin_groups.php');
-      exit();
+    $markedDeleted = ttGroupHelper::markGroupDeleted($group_id);
+    if ($markedDeleted) {
+      if ($group_id == $user->group_id) {
+        // We marked deleted our own group. Logout and redirect to login page.
+        $auth->doLogout();
+        session_unset();
+        header('Location: login.php');
+        exit();
+      } else {
+        // We marked deleted a subgroup.
+        if ($user->behalfGroup && $user->behalfGroup->id == $group_id)
+          $user->setOnBehalfGroup($user->group_id); // Remove on behalf group from session.
+        header('Location: success.php');
+        exit();
+      }
     } else
       $err->add($i18n->get('error.db'));
   }
 
   if ($request->getParameter('btn_cancel')) {
-    header('Location: admin_groups.php');
-    exit();
+    if ($group_id == $user->group_id) {
+      header('Location: group_edit.php');
+      exit();
+    } else {
+      header('Location: groups.php');
+      exit();
+    }
   }
 } // isPost
 
 $smarty->assign('group_to_delete', $group_name);
 $smarty->assign('forms', array($form->getName()=>$form->toArray()));
 $smarty->assign('title', $i18n->get('title.delete_group'));
-$smarty->assign('content_page_name', 'admin_group_delete.tpl');
+$smarty->assign('content_page_name', 'group_delete.tpl');
 $smarty->display('index.tpl');