### Eclipse Workspace Patch 1.0 #P moodle197 Index: enrol/ldap/config.html =================================================================== RCS file: /cvsroot/moodle/moodle/enrol/ldap/config.html,v retrieving revision 1.15.2.1 diff -u -r1.15.2.1 config.html --- enrol/ldap/config.html 2 Jan 2008 22:54:25 -0000 1.15.2.1 +++ enrol/ldap/config.html 10 Jul 2010 20:47:43 -0000 @@ -76,13 +76,25 @@ if (!isset($frm->enrol_ldap_autocreate)) { $frm->enrol_ldap_autocreate = false; } -if (!isset($frm->enrol_ldap_category)) { - $frm->enrol_ldap_category = 1; -} if (!isset($frm->enrol_ldap_template)) { $frm->enrol_ldap_template = ''; } +//course category + +if (!isset($frm->enrol_ldap_category_source)) { //source course category 2 - fixed category, 1 - ldap field + $frm->enrol_ldap_category_source = 2; +} + +if (!isset($frm->enrol_ldap_category_field)) { //category ldap field (category_source == 1) + $frm->enrol_ldap_category_field = ''; +} + +if (!isset($frm->enrol_ldap_fixed_category)) { //category ldap field (category_source == 0) + $frm->enrol_ldap_fixed_category = 1; +} + + ?>
| enrol_ldap_category: | +enrol_ldap_category_source: | ++ 'fixed','1'=>'ldap field'), "enrol_ldap_category_source", $frm->enrol_ldap_category_source, ""); + + ?> + + | + + | + + +
| enrol_ldap_fixed_category: | enrol_ldap_category, ""); + choose_from_menu($displaylist, "enrol_ldap_fixed_category", $frm->enrol_ldap_fixed_category, ""); ?> - + | - + | |
| enrol_ldap_category_field: | ++ + + | ++ + | + +|
| enrol_ldap_template: | Index: enrol/ldap/enrol.php =================================================================== RCS file: /cvsroot/moodle/moodle/enrol/ldap/enrol.php,v retrieving revision 1.21.2.4 diff -u -r1.21.2.4 enrol.php --- enrol/ldap/enrol.php 7 Jun 2008 21:19:45 -0000 1.21.2.4 +++ enrol/ldap/enrol.php 10 Jul 2010 20:47:45 -0000 @@ -7,7 +7,75 @@ var $log; var $enrol_localcoursefield = 'idnumber'; + + var $categories = array(); + +// retrieve cateory id from moodle db with specified name. +// if category does not exist - create it +// save the category id for later use in $categories +function get_category_id($category_name){ + + print "Looking up category $category_name\n"; + + // Return catgory from array first + if (!empty($this->categories[$category_name])){ + + return $this->categories[$category_name]; + } + // First time we see this catergiry, retreive it's id (or create if needed) + else{ + + print "First time seeing this category, looking up in db\n"; + + + // find category id + $category = get_record("course_categories","name",addslashes($category_name)); + + + + // if category does not yet exist, create it + if (!$category){ + + print "Category does not exist, creating\n"; + + $category = new stdClass(); + $category->name = addslashes($category_name); + $category->description = ''; + $category->parent = 0; + $category->sortorder = 999; + $category->visible = 1; + + $newid = insert_record("course_categories",$category); + + $category->id = $newid; + + if ($newid > 0){ + $category->context = get_context_instance(CONTEXT_COURSECAT, $category->id); + mark_context_dirty($category->context->path); + fix_course_sortorder(); // Required to build course_categories.depth and .path. + } + + print "Category created, id: $category->id\n"; + + + + } + + if (!$category->id){ + $category->id = 1; // could not find / create categroy... put in default category + } + + // remeber category id for next time + $this->categories[$category_name] = $category->id; + + return $this->categories[$category_name]; + + } + + +} + /** * This function syncs a user's enrolments with those on the LDAP server. */ @@ -159,7 +227,15 @@ if($enrol){ array_push($ldap_fields_wanted, $CFG->{'enrol_ldap_memberattribute_role'.$role->id}); } - + if (!empty($CFG->enrol_ldap_category_source) && //get category field + $CFG->enrol_ldap_category_source == 1){ + + if (!empty($CFG->enrol_ldap_category_field)){ + array_push($ldap_fields_wanted, $CFG->enrol_ldap_category_field); + } + } + + // define the search pattern if (!empty($CFG->enrol_ldap_objectclass)){ $ldap_search_pattern='(objectclass='.$CFG->enrol_ldap_objectclass.')'; @@ -208,7 +284,8 @@ foreach($flat_records as $course){ $idnumber = $course{$CFG->enrol_ldap_course_idnumber}[0]; print "== Synching $idnumber\n"; - // does the course exist in moodle already? + + // does the course exist in moodle already? $course_obj = false; $course_obj = get_record( 'course', $this->enrol_localcoursefield, @@ -224,6 +301,57 @@ print "failed\n"; } } + else{ //update course (full name, short name, category) + + print "Checking if course needs update $idnumber...\n"; + + $new_full_name = str_replace("'","",$course{$CFG->enrol_ldap_course_fullname}[0]); + $new_short_name = str_replace("'","",$course{$CFG->enrol_ldap_course_shortname}[0]); + + $new_cat_id = 1; //default category, in case of problems + + //detrimine new category + if (!empty($CFG->enrol_ldap_category_source)){ + + if ($CFG->enrol_ldap_category_source == 2 && //fixed category + !empty($CFG->enrol_ldap_fixed_category) && + $CFG->enrol_ldap_fixed_category != 0){ //avoid '0' category + + $new_cat_id = $CFG->enrol_ldap_fixed_category; + } + + else if ($CFG->enrol_ldap_category_source == 1 && //ldap feild based category + !empty($CFG->enrol_ldap_category_field)){ + + $new_cat_id = $this->get_category_id($course{$CFG->enrol_ldap_category_field}[0]); + + if ($new_cat_id == 0){ //avoid '0' category + $new_cat_id == 1; + } + + } + } + + + //determine if course requires update + if ($new_full_name != $course_obj->fullname || + $new_short_name != $course_obj->shortname || + $new_cat_id != $course_obj->category){ + + $course_obj->fullname = $new_full_name; + $course_obj->shortname = $new_short_name; + $course_obj->category = $new_cat_id; + + $course_obj->summary = addslashes($course_obj->summary); //fix summary + + if (! update_record ('course', $course_obj)){ + print "Error updating course\n"; + } + } + + + } + // enrol&unenrol if required if($enrol && is_object($course_obj)){ @@ -350,10 +478,20 @@ } set_config('enrol_ldap_objectclass', $config->enrol_ldap_objectclass); - if (!isset ($config->enrol_ldap_category)) { - $config->enrol_ldap_category = ''; + if (!isset ($config->enrol_ldap_category_source)) { + $config->enrol_ldap_category_source = '2'; + } + set_config('enrol_ldap_category_source', $config->enrol_ldap_category_source); + + if (!isset ($config->enrol_ldap_category_field)) { + $config->enrol_ldap_category_field = ''; + } + set_config('enrol_ldap_category_field', $config->enrol_ldap_category_field); + + if (!isset ($config->enrol_ldap_fixed_category)) { + $config->enrol_ldap_fixed_category = '1'; } - set_config('enrol_ldap_category', $config->enrol_ldap_category); + set_config('enrol_ldap_fixed_category', $config->enrol_ldap_fixed_category); if (!isset ($config->enrol_ldap_template)) { $config->enrol_ldap_template = ''; @@ -412,11 +550,13 @@ set_config('enrol_ldap_contexts_role'.$role->id, $config->{'enrol_ldap_contexts_role'.$role->id}); set_config('enrol_ldap_memberattribute_role'.$role->id, $config->{'enrol_ldap_memberattribute_role'.$role->id}); + } - return true; + } + function enrol_ldap_connect(){ /// connects to ldap-server global $CFG; @@ -445,6 +585,7 @@ } } + function enrol_ldap_bind($ldap_connection){ /// makes bind to ldap for searching users /// uses ldap_bind_dn or anonymous bind @@ -552,6 +693,7 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){ global $CFG; + // override defaults with template course if(!empty($CFG->enrol_ldap_template)){ $course = get_record("course", 'shortname', $CFG->enrol_ldap_template); @@ -571,6 +713,8 @@ $course->idnumber = $course_ext[$CFG->enrol_ldap_course_idnumber][0]; $course->fullname = $course_ext[$CFG->enrol_ldap_course_fullname][0]; $course->shortname = $course_ext[$CFG->enrol_ldap_course_shortname][0]; + + if ( empty($course->idnumber) || empty($course->fullname) || empty($course->shortname) ) { @@ -584,9 +728,31 @@ ? '' : $course_ext[$CFG->enrol_ldap_course_summary][0]; - if(!empty($CFG->enrol_ldap_category)){ // optional ... but ensure it is set! - $course->category = $CFG->enrol_ldap_category; - } + + //course categroy management + $course->category = 1; //set default category in case of a problem + + if(!empty($CFG->enrol_ldap_category_source)){ + + if ($CFG->enrol_ldap_category_source == 2 && + !empty($CFG->enrol_ldap_fixed_category)){ //fixed categroy + + $course->category = $CFG->enrol_ldap_fixed_category; + + } + else if ($CFG->enrol_ldap_category_source == 1 && + !empty($CFG->enrol_ldap_category_field)){ //ldap field based category + + //get category id based on ldap field + $cat_id = $this->get_category_id($course_ext[$CFG->enrol_ldap_category_field][0]); + + if (!empty($cat_id)){ + $course->category = $cat_id; + } + + } + } + if ($course->category == 0){ // must be avoided as it'll break moodle $course->category = 1; // the misc 'catch-all' category } @@ -624,7 +790,11 @@ return false; } + + return $newcourseid; + + } /** @@ -669,8 +839,15 @@ unset_config('enrol_ldap_teacher_memberattribute'); } + + if (isset($CFG->enrol_ldap_category)){ + unset_config('enrol_ldap_category'); + } } + + + } // end of class ?> Index: lang/en_utf8/enrol_ldap.php =================================================================== RCS file: /cvsroot/moodle/moodle/lang/en_utf8/Attic/enrol_ldap.php,v retrieving revision 1.3 diff -u -r1.3 enrol_ldap.php --- lang/en_utf8/enrol_ldap.php 23 Feb 2007 06:58:43 -0000 1.3 +++ lang/en_utf8/enrol_ldap.php 10 Jul 2010 20:47:45 -0000 @@ -29,7 +29,12 @@ specify it here. Someting like \'cn=ldapuser,ou=public,o=org\''; $string['enrol_ldap_bind_pw'] = 'Password for bind-user.'; -$string['enrol_ldap_category'] = 'The category for auto-created courses.'; +$string['enrol_ldap_category_source'] = 'Source category for courses. Fixed -> All courses will + be created under fixed_category. Ldap field -> Courses + will be created under the category in the specified ldap field + category_field.'; +$string['enrol_ldap_category_field'] = 'LDAP field to get category from. When category_source is Ldap field.'; +$string['enrol_ldap_fixed_category'] = 'The category to place ALL courses in when category_source is fixed.'; $string['enrol_ldap_contexts'] = 'LDAP contexts'; $string['enrol_ldap_course_fullname'] = 'Optional: LDAP field to get the full name from.'; $string['enrol_ldap_course_idnumber'] = 'Map to the unique identifier in LDAP, usually |