/** * get email addresses of recipients * @access public * @param string string with login names or group names (start with #) or email address * @return string seperated by ',' */ function getEmailsOfRecipients($a_rcp) { global $rbacreview; $addresses = array(); $this->validatePear($a_rcp); if (ilMail::_usePearMail() && $this->getUsePear()) { $tmp_rcp = $this->explodeRecipients($a_rcp); if (!is_a($tmp_rcp, 'PEAR_Error')) { foreach ($tmp_rcp as $rcp) { // NO GROUP if (substr($rcp->mailbox, 0, 1) != '#') { if (strtolower($rcp->host) != 'ilias') { $addresses[] = $rcp->mailbox . '@' . $rcp->host; continue; } if ($id = ilObjUser::getUserIdByLogin(addslashes($rcp->mailbox))) { $tmp_user = self::getCachedUserInstance($id); $addresses[] = $tmp_user->getEmail(); continue; } } else { // Roles $role_ids = $rbacreview->searchRolesByMailboxAddressList($rcp->mailbox . '@' . $rcp->host); foreach ($role_ids as $role_id) { foreach ($rbacreview->assignedUsers($role_id) as $usr_id) { $tmp_user = self::getCachedUserInstance($usr_id); $addresses[] = $tmp_user->getEmail(); } } } } } } else { $tmp_rcp = $this->explodeRecipients($a_rcp, $this->getUsePear()); foreach ($tmp_rcp as $rcp) { // NO GROUP if (substr($rcp, 0, 1) != '#') { if (strpos($rcp, '@')) { $addresses[] = $rcp; continue; } if ($id = ilObjUser::getUserIdByLogin(addslashes($rcp))) { $tmp_user = self::getCachedUserInstance($id); $addresses[] = $tmp_user->getEmail(); continue; } } else { // GROUP THINGS include_once "./Services/Object/classes/class.ilObjectFactory.php"; include_once './Modules/Group/classes/class.ilObjGroup.php'; // Fix foreach (ilObjGroup::_getAllReferences(ilObjGroup::_lookupIdByTitle(addslashes(substr($rcp, 1)))) as $ref_id) { $grp_object = ilObjectFactory::getInstanceByRefId($ref_id); break; } // GET EMAIL OF MEMBERS AND STORE THEM IN $addresses foreach ($grp_object->getGroupMemberIds() as $id) { $tmp_user = self::getCachedUserInstance($id); $addresses[] = $tmp_user->getEmail(); } } } } return $addresses; }
/** * Invites a group to a survey * * @param integer $group_id The database id of the invited group * @access public */ function inviteGroup($group_id) { global $ilAccess; $invited = 0; include_once "./Modules/Group/classes/class.ilObjGroup.php"; $group = new ilObjGroup($group_id); $members = $group->getGroupMemberIds(); foreach ($members as $user_id) { if ($ilAccess->checkAccessOfUser($user_id, "read", "", $this->getRefId(), "svy", $this->getId())) { $this->inviteUser($user_id); if ($this->getInvitation() == self::INVITATION_ON) { include_once './Services/User/classes/class.ilObjUser.php'; ilObjUser::_addDesktopItem($user_id, $this->getRefId(), "svy"); } } } return $invited; }
/** * Invites all users of a group to a test * * @param integer $group_id The database id of the invited group * @access public */ function inviteGroup($group_id) { include_once "./Modules/Group/classes/class.ilObjGroup.php"; $group = new ilObjGroup($group_id); $members = $group->getGroupMemberIds(); include_once './Services/User/classes/class.ilObjUser.php'; foreach ($members as $user_id) { $this->inviteUser($user_id, ilObjUser::_lookupClientIP($user_id)); } }
function _isMember($a_user_id, $a_ref_id, $a_field = '') { global $rbacreview, $ilObjDataCache, $ilDB; $rolf = $rbacreview->getRoleFolderOfObject($a_ref_id); $local_roles = $rbacreview->getRolesOfRoleFolder($rolf["ref_id"], false); $user_roles = $rbacreview->assignedRoles($a_user_id); // Used for membership limitations -> check membership by given field if ($a_field) { include_once './Services/User/classes/class.ilObjUser.php'; $tmp_user =& ilObjectFactory::getInstanceByObjId($a_user_id); switch ($a_field) { case 'login': $and = "AND login = '******' "; break; case 'email': $and = "AND email = '" . $tmp_user->getEmail() . "' "; break; case 'matriculation': $and = "AND matriculation = '" . $tmp_user->getMatriculation() . "' "; break; default: $and = "AND usr_id = '" . $a_user_id . "'"; break; } if (!($members = ilObjGroup::_getMembers($ilObjDataCache->lookupObjId($a_ref_id)))) { return false; } $query = "SELECT * FROM usr_data as ud " . "WHERE usr_id IN (" . implode(",", ilUtil::quoteArray($members)) . ") " . $and; $res = $ilDB->query($query); return $res->numRows() ? true : false; } if (!array_intersect($local_roles, $user_roles)) { return false; } return true; }
/** * Create parallel group * @param type $course * @param type $group */ protected function createParallelGroup($a_content_id, $course, $group, $parent_ref) { include_once './Modules/Group/classes/class.ilObjGroup.php'; $group_obj = new ilObjGroup(); $title = strlen($group->title) ? $group->title : $course->title; $group_obj->setTitle($title); $group_obj->setMaxMembers((int) $group->maxParticipants); $group_obj->create(); $group_obj->createReference(); $group_obj->putInTree($parent_ref); $group_obj->setPermissions($parent_ref); $group_obj->initGroupStatus(GRP_TYPE_CLOSED); $this->setImported($course->lectureID, $group_obj, $a_content_id, $group->id); $this->setObjectCreated(true); }
/** * Get all objects with enabled access codes * @param string $a_code * @return */ protected static function lookupObjectsByCode($a_code) { include_once './Modules/Group/classes/class.ilObjGroup.php'; include_once './Modules/Course/classes/class.ilObjCourse.php'; return array_merge(ilObjGroup::lookupObjectsByCode($a_code), ilObjCourse::lookupObjectsByCode($a_code)); }
function _checkGoto($a_target) { global $objDefinition, $ilPluginAdmin, $ilUser; if (is_object($ilPluginAdmin)) { // get user interface plugins $pl_names = $ilPluginAdmin->getActivePluginsForSlot(IL_COMP_SERVICE, "UIComponent", "uihk"); // search foreach ($pl_names as $pl) { $ui_plugin = ilPluginAdmin::getPluginObject(IL_COMP_SERVICE, "UIComponent", "uihk", $pl); $gui_class = $ui_plugin->getUIClassInstance(); $resp = $gui_class->checkGotoHook($a_target); if ($resp["target"] !== false) { $a_target = $resp["target"]; break; } } } if ($a_target == "") { return false; } $t_arr = explode("_", $a_target); $type = $t_arr[0]; if ($type == "git") { $type = "glo"; } if ($type == "pg" | $type == "st") { $type = "lm"; } $class = $objDefinition->getClassName($type); if ($class == "") { return false; } $location = $objDefinition->getLocation($type); $full_class = "ilObj" . $class . "Access"; include_once $location . "/class." . $full_class . ".php"; $ret = call_user_func(array($full_class, "_checkGoto"), $a_target); // if no access and repository object => check for parent course/group if (!$ret && !stristr($a_target, "_wsp") && $ilUser->getId() != ANONYMOUS_USER_ID && !$objDefinition->isAdministrationObject($type) && $objDefinition->isRBACObject($type) && $t_arr[1]) { global $tree, $rbacsystem, $ilAccess; // original type "pg" => pg_<page_id>[_<ref_id>] if ($t_arr[0] == "pg") { if (isset($t_arr[2])) { $ref_id = $t_arr[2]; } else { $lm_id = ilLMObject::_lookupContObjID($t_arr[1]); $ref_id = ilObject::_getAllReferences($lm_id); if ($ref_id) { $ref_id = array_shift($ref_id); } } } else { $ref_id = $t_arr[1]; } include_once "Services/Membership/classes/class.ilParticipants.php"; $block_obj = array(); // walk path to find parent container $path = $tree->getPathId($ref_id); array_pop($path); foreach ($path as $path_ref_id) { $redirect_infopage = false; $add_member_role = false; $ptype = ilObject::_lookupType($path_ref_id, true); $pobj_id = ilObject::_lookupObjId($path_ref_id); // core checks: timings/object-specific if (!$ilAccess->doActivationCheck("read", "", $path_ref_id, $ilUser->getId(), $pobj_id, $ptype) || !$ilAccess->doStatusCheck("read", "", $path_ref_id, $ilUser->getId(), $pobj_id, $ptype)) { // object in path is inaccessible - aborting return false; } else { if ($ptype == "crs") { // check if already participant include_once "Modules/Course/classes/class.ilCourseParticipant.php"; $participants = new ilCourseParticipant($pobj_id, $ilUser->getId()); if (!$participants->isAssigned()) { // subscription currently possible? include_once "Modules/Course/classes/class.ilObjCourse.php"; if (ilObjCourse::_isActivated($pobj_id) && ilObjCourse::_registrationEnabled($pobj_id)) { $block_obj[] = $path_ref_id; $add_member_role = true; } else { $redirect_infopage = true; } } } else { if ($ptype == "grp") { // check if already participant include_once "Modules/Group/classes/class.ilGroupParticipants.php"; if (!ilGroupParticipants::_isParticipant($path_ref_id, $ilUser->getId())) { // subscription currently possible? include_once "Modules/Group/classes/class.ilObjGroup.php"; $group_obj = new ilObjGroup($path_ref_id); if ($group_obj->isRegistrationEnabled()) { $block_obj[] = $path_ref_id; $add_member_role = true; } else { $redirect_infopage = true; } } } } } // add members roles for all "blocking" objects if ($add_member_role) { // cannot join? goto will never work, so redirect to current object $rbacsystem->resetPACache($ilUser->getId(), $path_ref_id); if (!$rbacsystem->checkAccess("join", $path_ref_id)) { $redirect_infopage = true; } else { $rbacsystem->addTemporaryRole($ilUser->getId(), ilParticipants::getDefaultMemberRole($path_ref_id)); } } // redirect to infopage of 1st blocking object in path if ($redirect_infopage) { if ($rbacsystem->checkAccess("visible", $path_ref_id)) { ilUtil::redirect("ilias.php?baseClass=ilRepositoryGUI" . "&ref_id=" . $path_ref_id . "&cmd=infoScreen"); } else { return false; } } } // check if access will be possible with all (possible) member roles added $rbacsystem->resetPACache($ilUser->getId(), $ref_id); if ($rbacsystem->checkAccess("read", $ref_id) && sizeof($block_obj)) { // this won't work with lm-pages (see above) // include_once "Services/Link/classes/class.ilLink.php"; // $_SESSION["pending_goto"] = ilLink::_getStaticLink($ref_id, $type); // keep original target $_SESSION["pending_goto"] = "goto.php?target=" . $a_target; // redirect to 1st non-member object in path ilUtil::redirect("ilias.php?baseClass=ilRepositoryGUI" . "&ref_id=" . array_shift($block_obj)); } } return $ret; }
/** * Create course group permission intersection * @param array operation stack * @param int $a_id * @param string $a_type * @return */ protected function createPermissionIntersection($policy_stack, $a_current_ops, $a_id, $a_type) { global $ilDB, $rbacreview, $rbacadmin; static $course_non_member_id = null; static $group_non_member_id = null; static $group_open_id = null; static $group_closed_id = null; // Get template id switch ($a_type) { case 'grp': include_once './Modules/Group/classes/class.ilObjGroup.php'; $type = ilObjGroup::lookupGroupTye(ilObject::_lookupObjId($a_id)); #var_dump("GROUP TYPE",$type); switch ($type) { case GRP_TYPE_CLOSED: if (!$group_closed_id) { $query = "SELECT obj_id FROM object_data WHERE type='rolt' AND title='il_grp_status_closed'"; $res = $ilDB->query($query); while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) { $group_closed_id = $row->obj_id; } } $template_id = $group_closed_id; #var_dump("GROUP CLOSED id:" . $template_id); break; case GRP_TYPE_OPEN: default: if (!$group_open_id) { $query = "SELECT obj_id FROM object_data WHERE type='rolt' AND title='il_grp_status_open'"; $res = $ilDB->query($query); while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) { $group_open_id = $row->obj_id; } } $template_id = $group_open_id; #var_dump("GROUP OPEN id:" . $template_id); break; } break; case 'crs': if (!$course_non_member_id) { $query = "SELECT obj_id FROM object_data WHERE type='rolt' AND title='il_crs_non_member'"; $res = $ilDB->query($query); while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) { $course_non_member_id = $row->obj_id; } } $template_id = $course_non_member_id; break; } $current_ops = $a_current_ops[$a_type]; // Create intersection template permissions if ($template_id) { $rolf = $rbacreview->getRoleFolderIdOfObject($a_id); $rbacadmin->copyRolePermissionIntersection($template_id, ROLE_FOLDER_ID, $this->getId(), end($policy_stack), $rolf, $this->getId()); } else { #echo "No template id for ".$a_id.' of type'.$a_type.'<br>'; } #echo "ROLE ASSIGN: ".$rolf.' AID'.$a_id; if ($rolf) { $rbacadmin->assignRoleToFolder($this->getId(), $rolf, "n"); } return true; }
function importFileObject2() { if (!is_array($_FILES['xmldoc'])) { ilUtil::sendFailure($this->lng->txt("import_file_not_valid")); $this->createObject(); return false; } include_once './Modules/Group/classes/class.ilObjGroup.php'; if ($ref_id = ilObjGroup::_importFromFile($_FILES['xmldoc'], (int) $_GET['ref_id'])) { $this->ctrl->setParameter($this, "ref_id", $ref_id); ilUtil::sendSuccess($this->lng->txt("import_grp_finished"), true); ilUtil::redirect($this->ctrl->getLinkTarget($this, 'edit', '', false, false)); } ilUtil::sendFailure($this->lng->txt("import_file_not_valid")); $this->createObject(); }
/** * Get members for object * @param int $a_obj_id * @return array */ protected static function getMembers($a_obj_id) { global $ilObjDataCache; switch ($ilObjDataCache->lookupType($a_obj_id)) { case 'crs': include_once 'Modules/Course/classes/class.ilCourseParticipants.php'; $member_obj = ilCourseParticipants::_getInstanceByObjId($a_obj_id); return $member_obj->getMembers(); case 'grp': include_once './Modules/Group/classes/class.ilObjGroup.php'; return ilObjGroup::_getMembers($a_obj_id); } return array(); }
function _checkGroupingDependencies(&$container_obj, $a_user_id = null) { global $ilUser, $lng, $tree; include_once './Services/AccessControl/classes/class.ilConditionHandler.php'; $user_id = is_null($a_user_id) ? $ilUser->getId() : $a_user_id; $trigger_ids = array(); foreach (ilConditionHandler::_getConditionsOfTarget($container_obj->getRefId(), $container_obj->getId(), $container_obj->getType()) as $condition) { if ($condition['operator'] == 'not_member') { $trigger_ids[] = $condition['trigger_obj_id']; break; } } if (!count($trigger_ids)) { return true; } $matriculation_message = $assigned_message = ''; self::$assignedObjects = array(); foreach ($trigger_ids as $trigger_id) { foreach (ilConditionHandler::_getConditionsOfTrigger('crsg', $trigger_id) as $condition) { // Handle deleted items if ($tree->isDeleted($condition['target_ref_id'])) { continue; } if ($condition['operator'] == 'not_member') { switch ($condition['value']) { case 'matriculation': if (!strlen(ilObjUser::lookupMatriculation($user_id))) { if (!$matriculation_message) { $matriculation_message = $lng->txt('crs_grp_matriculation_required'); } } } if ($container_obj->getType() == 'crs') { include_once 'Modules/Course/classes/class.ilCourseParticipants.php'; $members = ilCourseParticipants::_getInstanceByObjId($condition['target_obj_id']); if ($members->isGroupingMember($user_id, $condition['value'])) { if (!$assigned_message) { self::$assignedObjects[] = $condition['target_obj_id']; $assigned_message = $lng->txt('crs_grp_already_assigned'); } } } elseif ($container_obj->getType() == 'grp') { include_once 'Modules/Group/classes/class.ilGroupParticipants.php'; $members = ilGroupParticipants::_getInstanceByObjId($condition['target_obj_id']); if ($members->isGroupingMember($user_id, $condition['value'])) { if (!$assigned_message) { self::$assignedObjects[] = $condition['target_obj_id']; $assigned_message = $lng->txt('crs_grp_already_assigned'); } } } else { if (ilObjGroup::_isMember($user_id, $condition['target_ref_id'], $condition['value'])) { if (!$assigned_message) { self::$assignedObjects[] = $condition['target_obj_id']; $assigned_message = $lng->txt('crs_grp_already_assigned'); } } } } } } if ($matriculation_message) { $container_obj->appendMessage($matriculation_message); return false; } elseif ($assigned_message) { $container_obj->appendMessage($assigned_message); return false; } return true; }
/** * Create parallel group * @param type $course * @param type $group */ protected function createParallelGroup($course, $group, $parent_ref) { include_once './Modules/Group/classes/class.ilObjGroup.php'; $group_obj = new ilObjGroup(); $group_obj->setTitle($group->title); $group_obj->setMaxMembers((int) $group->maxParticipants); $group_obj->create(); $group_obj->createReference(); $group_obj->putInTree($parent_ref); $group_obj->setPermissions($parent_ref); $group_obj->initGroupStatus(GRP_TYPE_CLOSED); $this->setImported($course->basicData->id, $group_obj, 0, $group->id); }