00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 require_once './Services/Registration/classes/class.ilRegistrationSettings.php';
00025
00036 class ilRegistrationSettingsGUI
00037 {
00038 var $ctrl;
00039 var $tpl;
00040 var $ref_id;
00041
00042 function ilRegistrationSettingsGUI()
00043 {
00044 global $ilCtrl,$tpl,$lng;
00045
00046 $this->tpl =& $tpl;
00047 $this->ctrl =& $ilCtrl;
00048
00049 $this->lng =& $lng;
00050 $this->lng->loadLanguageModule('administration');
00051 $this->lng->loadLanguageModule('registration');
00052
00053 $this->ref_id = (int) $_GET['ref_id'];
00054
00055 $this->registration_settings = new ilRegistrationSettings();
00056 }
00057
00058 function executeCommand()
00059 {
00060 $next_class = $this->ctrl->getNextClass($this);
00061 $cmd = $this->ctrl->getCmd();
00062 switch($next_class)
00063 {
00064 default:
00065 if(!$cmd)
00066 {
00067 $cmd = 'diplayForm';
00068 }
00069 $this->$cmd();
00070 break;
00071 }
00072 return true;
00073 }
00074
00075 function view()
00076 {
00077 global $ilAccess,$ilErr;
00078
00079 if(!$ilAccess->checkAccess('read','',$this->ref_id))
00080 {
00081 $ilErr->raiseError($this->lng->txt("msg_no_perm_read"),$ilErr->MESSAGE);
00082 }
00083
00084 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.registration_settings.html','Services/Registration');
00085
00086 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00087 $this->tpl->setVariable("TXT_REGISTRATION_SETTINGS",$this->lng->txt('reg_settings_header'));
00088 $this->tpl->setVariable("TXT_REG_TYPE",$this->lng->txt('reg_type'));
00089 $this->tpl->setVariable("TXT_REG_DEACTIVATED",$this->lng->txt('reg_disabled'));
00090 $this->tpl->setVariable("REG_DEACTIVATED_DESC",$this->lng->txt('reg_disabled_info'));
00091 $this->tpl->setVariable("TXT_DIRECT",$this->lng->txt('reg_direct'));
00092 $this->tpl->setVariable("REG_DIRECT_DESC",$this->lng->txt('reg_direct_info'));
00093 $this->tpl->setVariable("TXT_APPROVE",$this->lng->txt('reg_approve'));
00094 $this->tpl->setVariable("REG_APPROVE_DESC",$this->lng->txt('reg_approve_info'));
00095 $this->tpl->setVariable("TXT_ROLE_ASSIGNMENT",$this->lng->txt('reg_role_assignment'));
00096 $this->tpl->setVariable("TXT_REG_FIXED",$this->lng->txt('reg_fixed'));
00097 $this->tpl->setVariable("TXT_AVAILABLE",$this->lng->txt('reg_available_roles'));
00098 $this->tpl->setVariable("TXT_APPROVE_REC",$this->lng->txt('approve_recipient'));
00099 $this->tpl->setVariable("TXT_REG_NOTIFICATION",$this->lng->txt('reg_notification'));
00100 $this->tpl->setVariable("REG_NOTIFICATION_DESC",$this->lng->txt('reg_notification_info'));
00101
00102 $this->tpl->setVariable("TXT_REG_EMAIL",$this->lng->txt('reg_email'));
00103
00104
00105 $this->tpl->setVariable("EDIT",$this->lng->txt('edit'));
00106 $this->tpl->setVariable("LINK_EDIT_FIXED",$this->ctrl->getLinkTarget($this,'editRoles'));
00107 $this->tpl->setVariable("LINK_EDIT_EMAIL",$this->ctrl->getLinkTarget($this,'editEmailAssignments'));
00108
00109 $this->__prepareRoleList();
00110 $this->__prepareAutomaticRoleList();
00111
00112
00113 $this->tpl->setVariable("TXT_REG_PWD_FORWARD",$this->lng->txt('passwd_generation'));
00114 $this->tpl->setVariable("REG_INFO_PWD",$this->lng->txt('reg_info_pwd'));
00115
00116 $this->tpl->setVariable("RADIO_DEACTIVATE",ilUtil::formRadioButton(!$this->registration_settings->enabled(),
00117 'reg_type',
00118 IL_REG_DISABLED));
00119
00120 $this->tpl->setVariable("RADIO_DIRECT",ilUtil::formRadioButton($this->registration_settings->directEnabled(),
00121 'reg_type',
00122 IL_REG_DIRECT));
00123
00124 $this->tpl->setVariable("RADIO_APPROVE",ilUtil::formRadioButton($this->registration_settings->approveEnabled(),
00125 'reg_type',
00126 IL_REG_APPROVE));
00127
00128 $this->tpl->setVariable("APPROVER",ilUtil::prepareFormOutput($this->registration_settings->getApproveRecipientLogins()));
00129
00130
00131 $this->tpl->setVariable("CHECK_PWD",ilUtil::formCheckbox($this->registration_settings->passwordGenerationEnabled(),
00132 'reg_pwd',
00133 1));
00134
00135 $this->tpl->setVariable("RADIO_FIXED",ilUtil::formRadioButton($this->registration_settings->roleSelectionEnabled(),
00136 'reg_role_type',
00137 IL_REG_ROLES_FIXED));
00138
00139 $this->tpl->setVariable("RADIO_EMAIL",ilUtil::formRadioButton($this->registration_settings->automaticRoleAssignmentEnabled(),
00140 'reg_role_type',
00141 IL_REG_ROLES_EMAIL));
00142 $this->tpl->setVariable("TXT_SAVE",$this->lng->txt('save'));
00143 }
00144
00145 function save()
00146 {
00147 global $ilAccess,$ilErr;
00148
00149 if(!$ilAccess->checkAccess('write','',$this->ref_id))
00150 {
00151 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
00152 }
00153
00154 $this->registration_settings->setRegistrationType((int) $_POST['reg_type']);
00155 $this->registration_settings->setPasswordGenerationStatus((int) $_POST['reg_pwd']);
00156 $this->registration_settings->setApproveRecipientLogins(ilUtil::stripSlashes($_POST['reg_approver']));
00157 $this->registration_settings->setRoleType((int) $_POST['reg_role_type']);
00158
00159 if($error_code = $this->registration_settings->validate())
00160 {
00161 sendInfo($this->lng->txt('reg_unknown_recipients').' '.$this->registration_settings->getUnknown());
00162 $this->view();
00163 return false;
00164 }
00165
00166 $this->registration_settings->save();
00167 sendInfo($this->lng->txt('saved_successfully'));
00168 $this->view();
00169
00170 return true;
00171 }
00172
00173 function editRoles()
00174 {
00175 include_once './classes/class.ilObjRole.php';
00176
00177 global $ilAccess,$ilErr,$rbacreview;
00178
00179 if(!$ilAccess->checkAccess('write','',$this->ref_id))
00180 {
00181 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
00182 }
00183
00184 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.edit_roles.html','Services/Registration');
00185
00186 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00187 $this->tpl->setVariable("TXT_SELECTABLE_ROLES",$this->lng->txt('reg_selectable_roles'));
00188 $this->tpl->setVariable("ARR_DOWNRIGHT",ilUtil::getImagePath('arrow_downright.gif'));
00189 $this->tpl->setVariable("ACTIONS",$this->lng->txt('actions'));
00190 $this->tpl->setVariable("UPDATE",$this->lng->txt('save'));
00191 $this->tpl->setVariable("CANCEL",$this->lng->txt('cancel'));
00192
00193 $counter = 0;
00194 foreach($rbacreview->getGlobalRoles() as $role)
00195 {
00196 if($role == SYSTEM_ROLE_ID or
00197 $role == ANONYMOUS_ROLE_ID)
00198 {
00199 continue;
00200 }
00201 $this->tpl->setCurrentBlock("roles");
00202 $this->tpl->setVariable("CSSROW",ilUtil::switchColor(++$counter,'tblrow1','tblrow2'));
00203 $this->tpl->setVariable("CHECK_ROLE",ilUtil::formCheckbox(ilObjRole::_lookupAllowRegister($role),
00204 "roles[$role]",
00205 1));
00206 $this->tpl->setVariable("ROLE",ilObjRole::_lookupTitle($role));
00207 $this->tpl->parseCurrentBlock();
00208
00209 }
00210 }
00211
00212 function updateRoles()
00213 {
00214 global $ilAccess,$ilErr,$rbacreview;
00215
00216 if(!$ilAccess->checkAccess('write','',$this->ref_id))
00217 {
00218 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
00219 }
00220
00221 if(count($_POST['roles']) < 1)
00222 {
00223 sendInfo($this->lng->txt('msg_last_role_for_registration'));
00224 $this->editRoles();
00225 return false;
00226 }
00227
00228 foreach($rbacreview->getGlobalRoles() as $role)
00229 {
00230 if($role_obj = ilObjectFactory::getInstanceByObjId($role,false))
00231 {
00232 $role_obj->setAllowRegister($_POST['roles'][$role] ? 1 : 0);
00233 $role_obj->update();
00234 }
00235 }
00236
00237 sendInfo($this->lng->txt('saved_successfully'));
00238 $this->view();
00239
00240 return true;
00241 }
00242
00243 function editEmailAssignments()
00244 {
00245 global $ilAccess,$ilErr,$rbacreview;
00246
00247 if(!$ilAccess->checkAccess('write','',$this->ref_id))
00248 {
00249 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
00250 }
00251
00252 $this->__initRoleAssignments();
00253
00254 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.reg_email_role_assignments.html','Services/Registration');
00255 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00256 $this->tpl->setVariable("TXT_EMAIL_ROLE_ASSIGN",$this->lng->txt('reg_email_role_assignment'));
00257 $this->tpl->setVariable("TXT_MAIL",$this->lng->txt('reg_email'));
00258 $this->tpl->setVariable("TXT_ROLE",$this->lng->txt('obj_role'));
00259 $this->tpl->setVariable("TXT_DEFAULT",$this->lng->txt('reg_default'));
00260 $this->tpl->setVariable("ARR_DOWNRIGHT",ilUtil::getImagePath('arrow_downright.gif'));
00261 $this->tpl->setVariable("TXT_DOMAIN",$this->lng->txt('reg_domain'));
00262
00263
00264 $this->tpl->setVariable("BTN_DELETE",$this->lng->txt('delete'));
00265 $this->tpl->setVariable("BTN_SAVE",$this->lng->txt('save'));
00266 $this->tpl->setVariable("BTN_ADD",$this->lng->txt('reg_add_assignment'));
00267 $this->tpl->setVariable("BTN_CANCEL",$this->lng->txt('cancel'));
00268
00269 $counter = 0;
00270 foreach($this->assignments_obj->getAssignments() as $assignment)
00271 {
00272 $this->tpl->setCurrentBlock("roles");
00273 $this->tpl->setVariable("CSSROW",ilUtil::switchColor(++$counter,'tblrow1','tblrow1'));
00274 $this->tpl->setVariable("ASSIGN_ID",$assignment['id']);
00275 $this->tpl->setVariable("DOMAIN",$assignment['domain']);
00276 $this->tpl->setVariable("CHECK_ROLE",ilUtil::formCheckbox(0,'del_assign[]',$assignment['id']));
00277 $this->tpl->setVariable("ROLE_SEL",$this->__buildRoleSelection($assignment['id']));
00278 $this->tpl->parseCurrentBlock();
00279 }
00280
00281 $this->tpl->setVariable("DEF_CSSROW",ilUtil::switchColor(++$counter,'tblrow1','tblrow1'));
00282 $this->tpl->setVariable("TXT_DEFAULT",$this->lng->txt('default'));
00283 $this->tpl->setVariable("DEF_ROLE",$this->__buildRoleSelection(-1));
00284
00285
00286 }
00287
00288 function addAssignment()
00289 {
00290 global $ilAccess,$ilErr,$rbacreview;
00291
00292 if(!$ilAccess->checkAccess('write','',$this->ref_id))
00293 {
00294 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
00295 }
00296
00297 $this->__initRoleAssignments();
00298 $this->assignments_obj->add();
00299
00300 sendInfo($this->lng->txt('reg_added_assignment'));
00301 $this->editEmailAssignments();
00302
00303 return true;
00304 }
00305
00306 function deleteAssignment()
00307 {
00308 global $ilAccess,$ilErr,$rbacreview;
00309
00310 if(!$ilAccess->checkAccess('write','',$this->ref_id))
00311 {
00312 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
00313 }
00314
00315 if(!count($_POST['del_assign']))
00316 {
00317 sendInfo($this->lng->txt('reg_select_one'));
00318 $this->editEmailAssignments();
00319 return false;
00320 }
00321
00322 $this->__initRoleAssignments();
00323
00324 foreach($_POST['del_assign'] as $assignment_id)
00325 {
00326 $this->assignments_obj->delete($assignment_id);
00327 }
00328
00329 sendInfo($this->lng->txt('reg_deleted_assignment'));
00330 $this->editEmailAssignments();
00331
00332 return true;
00333 }
00334
00335 function saveAssignment()
00336 {
00337 global $ilAccess,$ilErr,$rbacreview;
00338
00339 if(!$ilAccess->checkAccess('write','',$this->ref_id))
00340 {
00341 $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
00342 }
00343
00344 $this->__initRoleAssignments();
00345
00346 if (!is_array($_POST['domain']))
00347 {
00348 $_POST['domain'] = array();
00349 }
00350
00351 foreach($_POST['domain'] as $id => $data)
00352 {
00353 $this->assignments_obj->setDomain($id,ilUtil::stripSlashes($_POST['domain'][$id]['domain']));
00354 $this->assignments_obj->setRole($id,ilUtil::stripSlashes($_POST['role'][$id]['role']));
00355 }
00356 $this->assignments_obj->setDefaultRole((int) $_POST['default_role']);
00357
00358 if($err = $this->assignments_obj->validate())
00359 {
00360 switch($err)
00361 {
00362 case IL_REG_MISSING_DOMAIN:
00363 sendInfo($this->lng->txt('reg_missing_domain'));
00364 break;
00365
00366 case IL_REG_MISSING_ROLE:
00367 sendInfo($this->lng->txt('reg_missing_role'));
00368 break;
00369 }
00370 $this->editEmailAssignments();
00371 return false;
00372 }
00373
00374
00375 $this->assignments_obj->save();
00376 sendInfo($this->lng->txt('settings_saved'));
00377 $this->view();
00378 return true;
00379 }
00380
00381
00382 function __prepareRoleList()
00383 {
00384 include_once './classes/class.ilObjRole.php';
00385
00386 foreach(ilObjRole::_lookupRegisterAllowed() as $role)
00387 {
00388 $this->tpl->setCurrentBlock("fixed_item");
00389 $this->tpl->setVariable("FIXED_ITEM_TITLE",$role['title']);
00390 $this->tpl->parseCurrentBlock();
00391 }
00392 }
00393
00394 function __prepareAutomaticRoleList()
00395 {
00396 include_once './classes/class.ilObjRole.php';
00397 $this->__initRoleAssignments();
00398
00399 foreach($this->assignments_obj->getAssignments() as $assignment)
00400 {
00401 if(strlen($assignment['domain']) and $assignment['role'])
00402 {
00403 $this->tpl->setCurrentBlock("auto_item");
00404 $this->tpl->setVariable("AUTO_ITEM_TITLE",$assignment['domain']);
00405 $this->tpl->setVariable("AUTO_ROLE",ilObjRole::_lookupTitle($assignment['role']));
00406 $this->tpl->parseCurrentBlock();
00407 }
00408 }
00409 if(strlen($this->assignments_obj->getDefaultRole()))
00410 {
00411 $this->tpl->setCurrentBlock("auto_item");
00412 $this->tpl->setVariable("AUTO_ITEM_TITLE",$this->lng->txt('reg_default'));
00413 $this->tpl->setVariable("AUTO_ROLE",ilObjRole::_lookupTitle($this->assignments_obj->getDefaultRole()));
00414 $this->tpl->parseCurrentBlock();
00415 }
00416
00417 $this->tpl->setCurrentBlock("auto");
00418 $this->tpl->parseCurrentBlock();
00419
00420 }
00421
00422
00423 function __initRoleAssignments()
00424 {
00425 if(is_object($this->assignments_obj))
00426 {
00427 return true;
00428 }
00429
00430 include_once 'Services/Registration/classes/class.ilRegistrationEmailRoleAssignments.php';
00431
00432 $this->assignments_obj = new ilRegistrationRoleAssignments();
00433 }
00434
00435 function __buildRoleSelection($assignment_id)
00436 {
00437 include_once 'classes/class.ilObjRole.php';
00438
00439 global $rbacreview;
00440
00441 $assignments = $this->assignments_obj->getAssignments();
00442 $selected = ($assignment_id > 0) ?
00443 $assignments[$assignment_id]['role'] :
00444 $this->assignments_obj->getDefaultRole();
00445
00446 if(!$selected)
00447 {
00448 $roles[0] = $this->lng->txt('please_choose');
00449 }
00450
00451 foreach($rbacreview->getGlobalRoles() as $role_id)
00452 {
00453 if($role_id == SYSTEM_ROLE_ID or
00454 $role_id == ANONYMOUS_ROLE_ID)
00455 {
00456 continue;
00457 }
00458 $roles[$role_id] = ilObjRole::_lookupTitle($role_id);
00459 }
00460
00461 if($assignment_id > 0)
00462 {
00463 return ilUtil::formSelect($selected,
00464 "role[$assignment_id][role]",
00465 $roles,false,true);
00466 }
00467 else
00468 {
00469 return ilUtil::formSelect($selected,
00470 "default_role",
00471 $roles,false,true);
00472 }
00473 }
00474 }
00475 ?>