/**
  * Checks wether a user may invoke a command or not
  * (this method is called by ilAccessHandler::checkAccess)
  *
  * Please do not check any preconditions handled by
  * ilConditionHandler here.
  *
  * @param	string		$a_cmd		command (not permission!)
  * @param	string		$a_permission	permission
  * @param	int			$a_ref_id	reference id
  * @param	int			$a_obj_id	object id
  * @param	int			$a_user_id	user id (if not provided, current user is taken)
  *
  * @return	boolean		true, if everything is ok
  */
 function _checkAccess($a_cmd, $a_permission, $a_ref_id, $a_obj_id, $a_user_id = "")
 {
     global $ilUser, $lng, $rbacsystem, $ilAccess;
     if ($a_user_id == "") {
         $a_user_id = $ilUser->getId();
     }
     $is_admin = $rbacsystem->checkAccessOfUser($a_user_id, 'write', $a_ref_id);
     // check "global" online switch
     if (!self::_isOnline($a_obj_id) && !$is_admin) {
         $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("offline"));
         return false;
     }
     switch ($a_permission) {
         case "visible":
         case "read":
             if (!ilObjTestAccess::_lookupCreationComplete($a_obj_id) && !$is_admin) {
                 $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("tst_warning_test_not_complete"));
                 return false;
             }
             break;
     }
     switch ($a_cmd) {
         case "eval_a":
         case "eval_stat":
             if (!ilObjTestAccess::_lookupCreationComplete($a_obj_id)) {
                 $ilAccess->addInfoItem(IL_NO_OBJECT_ACCESS, $lng->txt("tst_warning_test_not_complete"));
                 return false;
             }
             break;
     }
     return true;
 }