Ejemplo n.º 1
0
 /**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 3
0
 /**
 * 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));
     }
 }
Ejemplo n.º 4
0
 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));
 }
Ejemplo n.º 7
0
 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;
 }
Ejemplo n.º 8
0
 /**
  * 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);
 }