/**
  * @param Request $request
  * @return Response
  */
 protected function handle(Request $request)
 {
     /* Get array of groups that this user is an admin of */
     $groupsWhereUserIsAdmin = GetGroupArray(Auth::getUserId());
     if (empty($groupsWhereUserIsAdmin)) {
         $text = _("You have no permission to manage any group.");
         return $this->render('include/base.html.twig', $this->mergeWithDefault(array('content' => $text)));
     }
     $folder_pk = intval($request->get('folder'));
     $upload_pk = intval($request->get('upload'));
     $perm_upload_pk = intval($request->get('permupk'));
     $perm = intval($request->get('perm'));
     $newgroup = intval($request->get('newgroup'));
     $newperm = intval($request->get('newperm'));
     $public_perm = $request->get('public', -1);
     /* @var $folderDao FolderDao */
     $folderDao = $this->getObject('dao.folder');
     $root_folder_pk = $folderDao->getRootFolder(Auth::getUserId())->getId();
     if (empty($folder_pk)) {
         $folder_pk = $root_folder_pk;
     }
     $UploadList = FolderListUploads_perm($folder_pk, Auth::PERM_WRITE);
     if (empty($upload_pk) && !empty($UploadList)) {
         $upload_pk = $UploadList[0]['upload_pk'];
     }
     if (!empty($perm_upload_pk)) {
         $this->uploadPermDao->updatePermissionId($perm_upload_pk, $perm);
     } else {
         if (!empty($newgroup) && !empty($newperm)) {
             $this->insertPermission($newgroup, $upload_pk, $newperm, $UploadList);
             $newperm = $newgroup = 0;
         } else {
             if ($public_perm >= 0) {
                 $this->uploadPermDao->setPublicPermission($upload_pk, $public_perm);
             }
         }
     }
     $vars = array('folderStructure' => $folderDao->getFolderStructure($root_folder_pk), 'groupArray' => $groupsWhereUserIsAdmin, 'uploadId' => $upload_pk, 'folderId' => $folder_pk, 'baseUri' => Traceback_uri() . '?mod=upload_permissions', 'newPerm' => $newperm, 'newGroup' => $newgroup, 'uploadList' => $UploadList, 'permNames' => $GLOBALS['PERM_NAMES']);
     if (!empty($UploadList)) {
         $vars['publicPerm'] = $this->uploadPermDao->getPublicPermission($upload_pk);
         $permGroups = $this->uploadPermDao->getPermissionGroups($upload_pk);
         $vars['permGroups'] = $permGroups;
         $additableGroups = array(0 => '-- select group --');
         foreach ($groupsWhereUserIsAdmin as $gId => $gName) {
             if (!array_key_exists($gId, $permGroups)) {
                 $additableGroups[$gId] = $gName;
             }
         }
         $vars['additableGroups'] = $additableGroups;
     }
     $vars['gumJson'] = json_encode($this->getGroupMembers($groupsWhereUserIsAdmin));
     if (!empty($upload_pk)) {
         $vars['permNamesWithReuse'] = $this->getPermNamesWithReuse($upload_pk);
     }
     return $this->render('upload_permissions.html.twig', $this->mergeWithDefault($vars));
 }
 public function testUpdatePermissionId()
 {
     $this->testDb->createPlainTables(array('perm_upload'));
     $this->testDb->insertData(array('perm_upload'));
     $_SESSION[Auth::USER_LEVEL] = PLUGIN_DB_READ;
     $adminBefore = $this->uploadPermissionDao->isEditable($uploadId = 1, $groupId = 2);
     assertThat($adminBefore, equalTo(true));
     $this->uploadPermissionDao->updatePermissionId(1, Auth::PERM_READ);
     $adminNomore = $this->uploadPermissionDao->isEditable($uploadId, $groupId);
     assertThat($adminNomore, equalTo(false));
     $this->uploadPermissionDao->updatePermissionId(1, Auth::PERM_WRITE);
     $adminAgain = $this->uploadPermissionDao->isEditable($uploadId, $groupId);
     assertThat($adminAgain, equalTo(true));
 }