/**
  * 
  * Returns a list of all groupings for which the current user hast write permission on all assigned objects. Or groupings
  * the given object id is assigned to.
  */
 function _getVisibleGroupings($a_obj_id)
 {
     global $ilObjDataCache, $ilAccess, $ilDB;
     $container_type = $ilObjDataCache->lookupType($a_obj_id) == 'grp' ? 'grp' : 'crs';
     // First get all groupings
     $query = "SELECT * FROM object_data WHERE type = 'crsg' ORDER BY title";
     $res = $ilDB->query($query);
     $groupings = array();
     while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
         $groupings[] = $row->obj_id;
     }
     //check access
     foreach ($groupings as $grouping_id) {
         $tmp_grouping_obj = new ilObjCourseGrouping($grouping_id);
         // Check container type
         if ($tmp_grouping_obj->getContainerType() != $container_type) {
             continue;
         }
         // Check if container is current container
         if ($tmp_grouping_obj->getContainerObjId() == $a_obj_id) {
             $visible_groupings[] = $grouping_id;
             continue;
         }
         // check if items are assigned
         if (count($items = $tmp_grouping_obj->getAssignedItems())) {
             foreach ($items as $condition_data) {
                 if ($ilAccess->checkAccess('write', '', $condition_data['target_ref_id'])) {
                     $visible_groupings[] = $grouping_id;
                     break;
                 }
             }
         }
     }
     return $visible_groupings ? $visible_groupings : array();
 }