/** * Init acceptance * @return */ protected function initSettings() { if (self::$accepted_ids !== NULL) { return true; } self::$export_allowed = ilPrivacySettings::_getInstance()->checkExportAccess($this->getParentObject()->object->getRefId()); self::$confirmation_required = ilPrivacySettings::_getInstance()->groupConfirmationRequired(); include_once 'Services/Membership/classes/class.ilMemberAgreement.php'; self::$accepted_ids = ilMemberAgreement::lookupAcceptedAgreements($this->getParentObject()->object->getId()); include_once 'Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php'; self::$has_odf_definitions = ilCourseDefinedFieldDefinition::_hasFields($this->getParentObject()->object->getId()); }
/** * delete course and all related data * * @access public * @return boolean true if all object data were removed; false if only a references were removed */ function delete() { global $ilAppEventHandler; // always call parent delete function first!! if (!parent::delete()) { return false; } // delete meta data $this->deleteMetaData(); // put here course specific stuff $this->__deleteSettings(); include_once 'Modules/Course/classes/class.ilCourseParticipants.php'; ilCourseParticipants::_deleteAllEntries($this->getId()); $this->initCourseArchiveObject(); $this->archives_obj->deleteAll(); include_once './Modules/Course/classes/class.ilCourseObjective.php'; ilCourseObjective::_deleteAll($this->getId()); include_once './Modules/Course/classes/class.ilObjCourseGrouping.php'; ilObjCourseGrouping::_deleteAll($this->getId()); include_once './Modules/Course/classes/class.ilCourseFile.php'; ilCourseFile::_deleteByCourse($this->getId()); include_once 'Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php'; ilCourseDefinedFieldDefinition::_deleteByContainer($this->getId()); $ilAppEventHandler->raise('Modules/Course', 'delete', array('object' => $this, 'obj_id' => $this->getId(), 'appointments' => $this->prepareAppointments('delete'))); return true; }
/** * Update field definition * @return */ protected function updateField() { $GLOBALS['ilLog']->write(__METHOD__ . ': ' . print_r($_POST, true)); $this->initFieldForm(self::MODE_UPDATE); if ($this->form->checkInput()) { $udf = new ilCourseDefinedFieldDefinition($this->getObjId(), (int) $_REQUEST['field_id']); $udf->setName($this->form->getInput('na')); $udf->setType($this->form->getInput('ty')); $udf->setValues($udf->prepareValues($this->form->getInput('va'))); $udf->setValueOptions($this->form->getItemByPostVar('va')->getOpenAnswerIndexes()); $udf->enableRequired($this->form->getInput('re')); $udf->update(); // Finally reset member agreements ilMemberAgreement::_deleteByObjId($this->getObjId()); ilUtil::sendSuccess($this->lng->txt('settings_saved')); $this->listFields(); return true; } ilUtil::sendFailure($this->lng->txt('err_check_input')); $this->form->setValuesByPost(); $this->tpl->setContent($this->form->getHTML()); return false; }
/** * Checks whether the agreement is accepted * This function return always true if no acceptance is required by global setting * * @access public * @return bool */ public function agreementRequired() { if (!$this->privacy->confirmationRequired($this->type) and !ilCourseDefinedFieldDefinition::_hasFields($this->obj_id)) { return false; } return $this->accepted ? false : true; }
/** * Check Agreement * * @access private * */ private function checkAgreement() { global $ilUser; if ($_POST['agreed']) { return true; } if (!$this->privacy->confirmationRequired($this->type) and !ilCourseDefinedFieldDefinition::_hasFields($this->obj_id)) { return true; } return false; }
/** * Constructor * * @access public * @param * @return */ public function __construct($a_parent_obj, $show_content = true, $show_subject = true) { global $lng, $ilCtrl; $this->lng = $lng; $this->lng->loadLanguageModule('grp'); $this->lng->loadLanguageModule('crs'); $this->ctrl = $ilCtrl; $this->setShowSubject($show_subject); $this->setId('crs_sub_' . $a_parent_obj->object->getId()); parent::__construct($a_parent_obj, 'members'); $this->setFormName('subscribers'); $this->setFormAction($this->ctrl->getFormAction($a_parent_obj, 'members')); $this->addColumn('', 'f', "1"); $this->addColumn($this->lng->txt('name'), 'lastname', '20%'); $all_cols = $this->getSelectableColumns(); foreach ($this->getSelectedColumns() as $col) { $this->addColumn($all_cols[$col]['txt'], $col); } $this->addColumn($this->lng->txt('application_date'), 'sub_time', "10%"); if ($this->getShowSubject()) { $this->addColumn($this->lng->txt('subject'), 'subject', '15%'); } $this->addColumn('', 'mail', '10%'); $this->addMultiCommand('assignSubscribers', $this->lng->txt('assign')); $this->addMultiCommand('refuseSubscribers', $this->lng->txt('refuse')); $this->addMultiCommand('sendMailToSelectedUsers', $this->lng->txt('crs_mem_send_mail')); $this->setPrefix('subscribers'); $this->setSelectAllCheckbox('subscribers'); $this->setRowTemplate("tpl.show_subscribers_row.html", "Services/Membership"); if ($show_content) { $this->enable('sort'); $this->enable('header'); $this->enable('numinfo'); $this->enable('select_all'); } else { $this->disable('content'); $this->disable('header'); $this->disable('footer'); $this->disable('numinfo'); $this->disable('select_all'); } $this->setExternalSegmentation(true); include_once 'Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php'; self::$has_odf_definitions = ilCourseDefinedFieldDefinition::_hasFields($this->getParentObject()->object->getId()); }
/** * Show list of export files * * @access public * */ public function show($a_deliver_file = false) { $this->showFileList(); $this->tpl->addBlockFile('ADM_CONTENT', 'adm_content', 'tpl.member_export.html', 'Modules/Course'); $this->tpl->setVariable('FORM_ACTION', $this->ctrl->getFormAction($this)); $this->tpl->setVariable('TXT_EXPORT_SETTINGS', $this->lng->txt('ps_export_settings')); $this->tpl->setVariable('TXT_USER_SELECTION', $this->lng->txt('ps_user_selection')); $this->tpl->setVariable('TXT_EXPORT_ADMIN', $this->lng->txt('ps_export_admin')); $this->tpl->setVariable('TXT_EXPORT_MEMBER', $this->lng->txt('ps_export_member')); $this->tpl->setVariable('TXT_EXPORT_WAIT', $this->lng->txt('ps_export_wait')); $this->tpl->setVariable('TXT_EXPORT_SUB', $this->lng->txt('ps_export_sub')); // Check user selection $this->exportSettings = new ilUserFormSettings('memexp'); $this->tpl->setVariable('CHECK_EXPORT_ADMIN', ilUtil::formCheckbox($this->exportSettings->enabled('admin'), 'export_members[admin]', 1)); if ($this->type == 'crs') { $this->tpl->setVariable('CHECK_EXPORT_TUTOR', ilUtil::formCheckbox($this->exportSettings->enabled('tutor'), 'export_members[tutor]', 1)); $this->tpl->setVariable('TXT_EXPORT_TUTOR', $this->lng->txt('ps_export_tutor')); } $this->tpl->setVariable('CHECK_EXPORT_MEMBER', ilUtil::formCheckbox($this->exportSettings->enabled('member'), 'export_members[member]', 1)); $this->tpl->setVariable('CHECK_EXPORT_SUB', ilUtil::formCheckbox($this->exportSettings->enabled('subscribers'), 'export_members[subscribers]', 1)); $this->tpl->setVariable('CHECK_EXPORT_WAIT', ilUtil::formCheckbox($this->exportSettings->enabled('waiting_list'), 'export_members[waiting_list]', 1)); $this->tpl->setVariable('TXT_EXPORT', $this->lng->txt('ps_perform_export')); $this->tpl->setVariable('TXT_EXPORT_EXCEL', $this->lng->txt('ps_export_excel')); // User Data $this->tpl->setVariable('TXT_USER_DATA_SELECTION', $this->lng->txt('ps_export_data')); $this->tpl->setVariable('TXT_EXPORT_USER_DATA_HEADER', $this->lng->txt('ps_export_user_data')); include_once './Services/Booking/classes/class.ilBookingEntry.php'; if (ilBookingEntry::hasObjectBookingEntries($this->obj_id, $GLOBALS['ilUser']->getId())) { $this->tpl->setCurrentBlock('consultation'); $this->lng->loadLanguageModule('dateplaner'); $this->tpl->setVariable('TXT_CH', $this->lng->txt('cal_ch_field_ch')); $this->tpl->setVariable('TXT_EXPORT_CH', $this->lng->txt('cal_ch_export_apps')); $this->tpl->setVariable('CHECK_EXPORT_CH', ilUtil::formCheckbox($this->exportSettings->enabled('consultation_hour'), 'export_members[consultation_hour]', 1)); $this->tpl->parseCurrentBlock(); } $fields = $this->fields_info->getFieldsInfo(); foreach ($fields as $field => $exportable) { if (!$exportable) { continue; } $this->tpl->setCurrentBlock('user_data_row'); $this->tpl->setVariable('CHECK_EXPORT_USER_DATA', ilUtil::formCheckbox($this->exportSettings->enabled($field), 'export_members[' . $field . ']', 1)); $this->tpl->setVariable('TXT_EXPORT_USER_DATA', $this->lng->txt($field)); $this->tpl->parseCurrentBlock(); } $udf = ilUserDefinedFields::_getInstance(); foreach ($exp = $udf->getExportableFields($this->obj_id) as $field_id => $udf_data) { $this->tpl->setCurrentBlock('user_data_row'); $this->tpl->setVariable('CHECK_EXPORT_USER_DATA', ilUtil::formCheckbox($this->exportSettings->enabled('udf_' . $field_id), 'export_members[udf_' . $field_id . ']', 1)); $this->tpl->setVariable('TXT_EXPORT_USER_DATA', $udf_data['field_name']); $this->tpl->parseCurrentBlock(); } $cdf_fields = ilCourseDefinedFieldDefinition::_getFields($this->obj_id); foreach ($cdf_fields as $field_obj) { $this->tpl->setCurrentBlock('cdf_row'); $this->tpl->setVariable('CHECK_CDF_DATA', ilUtil::formCheckbox($this->exportSettings->enabled('cdf_' . $field_obj->getId()), 'export_members[cdf_' . $field_obj->getId() . ']', 1)); $this->tpl->setVariable('TXT_CDF_NAME', $field_obj->getName()); $this->tpl->parseCurrentBlock(); } if (count($cdf_fields)) { $this->tpl->setCurrentBlock('cdf_fields'); $this->tpl->setVariable('TXT_CDF_SELECTION', $this->lng->txt('ps_' . $this->type . '_user_fields')); $this->tpl->parseCurrentBlock(); } if ($a_deliver_file and 0) { $this->tpl->setCurrentBlock('iframe'); $this->tpl->setVariable('SOURCE', $this->ctrl->getLinkTarget($this, 'deliverData')); } }
/** * Set Agreement accepted * * @access private * @param bool */ protected function setAccepted($a_status) { global $ilUser; include_once 'Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php'; if (!$this->privacy->confirmationRequired($this->type) and !ilCourseDefinedFieldDefinition::_hasFields($this->container->getId())) { return true; } include_once 'Services/Membership/classes/class.ilMemberAgreement.php'; $this->agreement = new ilMemberAgreement($ilUser->getId(), $this->container->getId()); $this->agreement->setAccepted($a_status); $this->agreement->setAcceptanceTime(time()); $this->agreement->save(); }
/** * Save course defined fields * @param ilPropertyFormGUI $form */ public static function saveCourseDefinedFields(ilPropertyFormGUI $form, $a_obj_id, $a_usr_id = 0) { global $ilUser; if (!$a_usr_id) { $a_usr_id = $ilUser->getId(); } foreach (ilCourseDefinedFieldDefinition::_getFields($a_obj_id) as $field_obj) { switch ($field_obj->getType()) { case IL_CDF_TYPE_SELECT: // Split value id from post list($field_id, $option_id) = explode('_', $form->getInput('cdf_' . $field_obj->getId())); $open_answer_indexes = (array) $field_obj->getValueOptions(); if (in_array($option_id, $open_answer_indexes)) { $value = $form->getInput('cdf_oa_' . $field_obj->getId() . '_' . $option_id); } else { $value = $field_obj->getValueById($option_id); } break; case IL_CDF_TYPE_TEXT: $value = $form->getInput('cdf_' . $field_obj->getId()); break; } $course_user_data = new ilCourseUserData($a_usr_id, $field_obj->getId()); $course_user_data->setValue($value); $course_user_data->update(); } }
/** * fill course specific fields * * @access private * @param int usr_id * @param string field * @return bool * */ private function addCourseField($a_usr_id, $a_field, $row, $col) { if (substr($a_field, 0, 4) != 'cdf_') { return false; } if (!$this->privacy->courseConfirmationRequired() and ilCourseDefinedFieldDefinition::_getFields($this->obj_id) or $this->agreement[$a_usr_id]['accepted']) { $field_info = explode('_', $a_field); $field_id = $field_info[1]; $value = $this->user_course_fields[$a_usr_id][$field_id]; #$this->csv->addColumn($value); $this->addCol($value, $row, $col); return true; } #$this->csv->addColumn(''); $this->addCol('', $row, $col); return true; }
/** * Get selectable fields * @return */ public function getSelectableFieldsInfo($a_obj_id) { global $lng; $fields = array(); foreach ($this->getExportableFields() as $field) { switch ($field) { case 'lastname': case 'firstname': break; case 'username': $fields['login']['txt'] = $lng->txt('login'); $fields['login']['default'] = 1; break; default: $fields[$field]['txt'] = $lng->txt($field); $fields[$field]['default'] = 0; break; } } include_once './Services/Booking/classes/class.ilBookingEntry.php'; if (ilBookingEntry::hasObjectBookingEntries($a_obj_id, $GLOBALS['ilUser']->getId())) { $GLOBALS['lng']->loadLanguageModule('dateplaner'); $fields['consultation_hour']['txt'] = $GLOBALS['lng']->txt('cal_ch_field_ch'); $fields['consultation_hour']['default'] = 0; } include_once './Services/User/classes/class.ilUserDefinedFields.php'; if ($this->getType() == 'crs') { $udf = ilUserDefinedFields::_getInstance()->getCourseExportableFields(); } elseif ($this->getType() == 'grp') { $udf = ilUserDefinedFields::_getInstance()->getGroupExportableFields(); } if ($udf) { foreach ($udf as $field_id => $field) { $fields['udf_' . $field_id]['txt'] = $field['field_name']; $fields['udf_' . $field_id]['default'] = 0; } } include_once './Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php'; $cdf = ilCourseDefinedFieldDefinition::_getFields($a_obj_id); foreach ($cdf as $def) { $fields['odf_' . $def->getId()]['txt'] = $def->getName(); $fields['odf_' . $def->getId()]['default'] = 0; } if (count($cdf)) { // add last edit $fields['odf_last_update']['txt'] = $GLOBALS['lng']->txt($this->getType() . '_cdf_tbl_last_edit'); $fields['odf_last_update']['default'] = 0; } return $fields; }
/** * Check agreement and redirect if it is not accepted * * @access private * */ private function checkAgreement() { global $ilUser, $ilAccess; if ($ilAccess->checkAccess('write', '', $this->object->getRefId())) { return true; } // Disable aggrement if is not member of course if (!$this->object->getMemberObject()->isAssigned()) { return true; } include_once './Services/Container/classes/class.ilMemberViewSettings.php'; if (ilMemberViewSettings::getInstance()->isActive()) { return true; } include_once 'Services/PrivacySecurity/classes/class.ilPrivacySettings.php'; include_once 'Services/Membership/classes/class.ilMemberAgreement.php'; $privacy = ilPrivacySettings::_getInstance(); // Check agreement if (($privacy->courseConfirmationRequired() or ilCourseDefinedFieldDefinition::_hasFields($this->object->getId())) and !ilMemberAgreement::_hasAccepted($ilUser->getId(), $this->object->getId())) { $GLOBALS['ilLog']->write(__METHOD__ . ': Missing course confirmation.'); return false; } // Check required fields include_once 'Modules/Course/classes/Export/class.ilCourseUserData.php'; if (!ilCourseUserData::_checkRequired($ilUser->getId(), $this->object->getId())) { $GLOBALS['ilLog']->write(__METHOD__ . ': Missing required fields'); return false; } return true; }
/** * Get selectable fields * @return */ public function getSelectableFieldsInfo($a_obj_id) { global $lng; $fields = array(); foreach ($this->getExportableFields() as $field) { switch ($field) { case 'lastname': case 'firstname': break; case 'username': $fields['login']['txt'] = $lng->txt('username'); $fields['login']['default'] = 1; break; default: $fields[$field]['txt'] = $lng->txt($field); $fields[$field]['default'] = 0; break; } } include_once './Services/User/classes/class.ilUserDefinedFields.php'; if ($this->getType() == 'crs') { $udf = ilUserDefinedFields::_getInstance()->getCourseExportableFields(); } elseif ($this->getType() == 'grp') { $udf = ilUserDefinedFields::_getInstance()->getGroupExportableFields(); } if ($udf) { foreach ($udf as $field_id => $field) { $fields['udf_' . $field_id]['txt'] = $field['field_name']; $fields['udf_' . $field_id]['default'] = 0; } } include_once './Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php'; $cdf = ilCourseDefinedFieldDefinition::_getFields($a_obj_id); foreach ($cdf as $def) { $fields['odf_' . $def->getId()]['txt'] = $def->getName(); $fields['odf_' . $def->getId()]['default'] = 0; } return $fields; }
/** * Get all fields of a container * * @access public * @static * @param int container obj_id * @return array array of ilCourseDefinedFieldDefinitions objects */ public static function _getFields($a_container_id, $a_sort = IL_CDF_SORT_NAME) { foreach (ilCourseDefinedFieldDefinition::_getFieldIds($a_container_id, $a_sort) as $field_id) { $fields[] = new ilCourseDefinedFieldDefinition($a_container_id, $field_id); } return $fields ? $fields : array(); }
/** * Clone group (no member data) * * @access public * @param int target ref_id * @param int copy id * */ public function cloneObject($a_target_id, $a_copy_id = 0) { global $ilDB, $ilUser; $new_obj = parent::cloneObject($a_target_id, $a_copy_id); $new_obj->setGroupType($this->getGroupType()); $new_obj->initGroupStatus($this->getGroupType() ? $this->getGroupType() : $this->readGroupStatus()); $this->cloneAutoGeneratedRoles($new_obj); $new_obj->setRegistrationType($this->getRegistrationType()); $new_obj->setInformation($this->getInformation()); $new_obj->setRegistrationStart($this->getRegistrationStart()); $new_obj->setRegistrationEnd($this->getRegistrationEnd()); $new_obj->enableUnlimitedRegistration($this->isRegistrationUnlimited()); $new_obj->setPassword($this->getPassword()); $new_obj->enableMembershipLimitation($this->isMembershipLimited()); $new_obj->setMaxMembers($this->getMaxMembers()); $new_obj->enableWaitingList($this->isWaitingListEnabled()); // map $new_obj->setLatitude($this->getLatitude()); $new_obj->setLongitude($this->getLongitude()); $new_obj->setLocationZoom($this->getLocationZoom()); $new_obj->setEnableGroupMap($this->getEnableGroupMap()); $new_obj->enableRegistrationAccessCode($this->isRegistrationAccessCodeEnabled()); include_once './Services/Membership/classes/class.ilMembershipRegistrationCodeUtils.php'; $new_obj->setRegistrationAccessCode(ilMembershipRegistrationCodeUtils::generateCode()); $new_obj->setViewMode($this->getViewMode()); $new_obj->setMailToMembersType($this->getMailToMembersType()); $new_obj->update(); // #13008 - Group Defined Fields include_once 'Modules/Course/classes/Export/class.ilCourseDefinedFieldDefinition.php'; ilCourseDefinedFieldDefinition::_clone($this->getId(), $new_obj->getId()); global $ilLog; $ilLog->write(__METHOD__ . ': Starting add user'); // Assign user as admin include_once './Modules/Group/classes/class.ilGroupParticipants.php'; $part = ilGroupParticipants::_getInstanceByObjId($new_obj->getId()); $part->add($ilUser->getId(), IL_GRP_ADMIN); $part->updateNotification($ilUser->getId(), 1); // Copy learning progress settings include_once 'Services/Tracking/classes/class.ilLPObjSettings.php'; $obj_settings = new ilLPObjSettings($this->getId()); $obj_settings->cloneSettings($new_obj->getId()); unset($obj_settings); // clone icons $new_obj->saveIcons($this->getBigIconPath(), $this->getSmallIconPath(), $this->getTinyIconPath()); return $new_obj; }