/**
  * Blo k role
  * @param int $a_role_id
  * @param ilObject $source
  */
 protected function blockRole($a_role_id, $source)
 {
     global $rbacadmin, $rbacreview;
     // Create role folder if it does not exist
     $rolf = $rbacreview->getRoleFolderIdOfObject($source->getRefId());
     if (!$rolf) {
         $rolf_obj = $source->createRoleFolder();
         $rolf = $rolf_obj->getRefId();
     }
     // Set assign to 'y' only if it is a local role
     $assign = $rbacreview->isAssignable($a_role_id, $rolf) ? 'y' : 'n';
     // Delete permissions
     $rbacadmin->revokeSubtreePermissions($source->getRefId(), $a_role_id);
     // Delete template permissions
     $rbacadmin->deleteSubtreeTemplates($source->getRefId(), $a_role_id);
     $rbacadmin->assignRoleToFolder($a_role_id, $rolf, $assign);
     return true;
 }
 final function createRoleFolder()
 {
     return parent::createRoleFolder();
 }
 public function testTreeTrash()
 {
     global $tree;
     $obj = new ilObject();
     $obj->setType("xxx");
     $obj->setTitle("TestObject");
     $obj->setDescription("TestDescription");
     $obj->setImportId("imp_44");
     $obj->create();
     $obj->createReference();
     $id = $obj->getId();
     $ref_id = $obj->getRefId();
     $obj = new ilObject($ref_id);
     $obj->putInTree(ROOT_FOLDER_ID);
     $obj->createRoleFolder();
     $obj->setPermissions(ROOT_FOLDER_ID);
     if ($tree->isInTree($ref_id)) {
         $value .= "tree1-";
     }
     if (ilObject::_hasUntrashedReference($id)) {
         $value .= "tree2-";
     }
     // isSaved() uses internal cache!
     $tree->useCache(false);
     $tree->saveSubTree($ref_id, true);
     if ($tree->isDeleted($ref_id)) {
         $value .= "tree3-";
     }
     if ($tree->isSaved($ref_id)) {
         $value .= "tree4-";
     }
     if (ilObject::_isInTrash($ref_id)) {
         $value .= "tree5-";
     }
     if (!ilObject::_hasUntrashedReference($id)) {
         $value .= "tree6-";
     }
     $saved_tree = new ilTree(-(int) $ref_id);
     $node_data = $saved_tree->getNodeData($ref_id);
     $saved_tree->deleteTree($node_data);
     if (!ilObject::_isInTrash($ref_id)) {
         $value .= "tree7-";
     }
     $obs = ilUtil::_getObjectsByOperations("cat", "read");
     foreach ($obs as $ob) {
         if (ilObject::_lookupType(ilObject::_lookupObjId($ob)) != "cat") {
             $value .= "nocat-";
         }
     }
     $obj->delete();
     $this->assertEquals("tree1-tree2-tree3-tree4-tree5-tree6-tree7-", $value);
 }