From 93b89cae76ce36831f9bc95ccf8f335e9d231b84 Mon Sep 17 00:00:00 2001 From: "Eloy Lafuente (stronk7)" Date: Thu, 23 Dec 2010 00:23:18 +0100 Subject: [PATCH] MDL-25755 enrol ldap - avoid reserved keyword. (k) goes to Chris Myers --- enrol/ldap/enrol.php | 178 +++++++++++++++++++++++++-------------------------- 1 file changed, 89 insertions(+), 89 deletions(-) diff --git a/enrol/ldap/enrol.php b/enrol/ldap/enrol.php index b18a03b0f10..e6e9daf64b6 100755 --- a/enrol/ldap/enrol.php +++ b/enrol/ldap/enrol.php @@ -4,8 +4,8 @@ require_once("$CFG->dirroot/enrol/enrol.class.php"); class enrolment_plugin_ldap { - var $log; - + var $log; + var $enrol_localcoursefield = 'idnumber'; /** @@ -23,7 +23,7 @@ function setup_enrolments(&$user) { notify("[ENROL_LDAP] LDAP-module cannot connect to server: {$CFG->enrol_ldap_host_url}"); return false; } - + // we are connected OK, continue... // Get all the possible roles @@ -37,7 +37,7 @@ function setup_enrolments(&$user) { if (!$roleassignments) { $roleassignments = array(); } - + // Get the ones that came from LDAP $ldap_assignments = array_filter($roleassignments, create_function('$x', 'return $x->enrol == \'ldap\';')); @@ -46,20 +46,20 @@ function setup_enrolments(&$user) { // Get enrolments for each type of role from LDAP. foreach($roles as $role) { $enrolments = $this->find_ext_enrolments( - $ldap_connection, - $user->idnumber , + $ldap_connection, + $user->idnumber , $role); //error_log('[ENROL_LDAP] LDAP reports ' . count($enrolments) . ' enrolments of type ' . $role->shortname . '.'); foreach ($enrolments as $enrol){ - + $course_ext_id = $enrol[$CFG->enrol_ldap_course_idnumber][0]; if(empty($course_ext_id)){ error_log("[ENROL_LDAP] The course external id is invalid!\n"); continue; // next; skip this one! } - + // create the course ir required $course_obj = get_record( 'course', $this->enrol_localcoursefield, @@ -74,18 +74,18 @@ function setup_enrolments(&$user) { error_log("[ENROL_LDAP] User $user->username enrolled to a nonexistant course $course_ext_id \n"); } } - + // deal with enrolment in the moodle db - if (!empty($course_obj)) { // does course exist now? - + if (!empty($course_obj)) { // does course exist now? + $context = get_context_instance(CONTEXT_COURSE, $course_obj->id); //$courseroles = get_user_roles($context, $user->id); - + if (!get_record('role_assignments', 'roleid', $role->id, 'userid', $user->id, 'contextid', $context->id)) { //error_log("[ENROL_LDAP] Assigning role '{$role->name}' to {$user->id} ({$user->username}) in course {$course_obj->id} ({$course_obj->shortname})"); if (!role_assign($role->id, $user->id, 0, $context->id, 0, 0, 0, 'ldap')){ error_log("[ENROL_LDAP] Failed to assign role '{$role->name}' to $user->id ($user->username) into course $course_obj->id ($course_obj->shortname)"); - } + } } else { //error_log("[ENROL_LDAP] Role '{$role->name}' already assigned to {$user->id} ({$user->username}) in course {$course_obj->id} ({$course_obj->shortname})"); } @@ -115,7 +115,7 @@ function setup_enrolments(&$user) { @ldap_close($ldap_connection); //error_log('[ENROL_LDAP] finished with setup_enrolments'); - + return true; } @@ -137,7 +137,7 @@ function sync_enrolments($type, $enrol = false) { notify("LDAP-module cannot connect to server: $CFG->ldap_host_url"); return false; } - + // we are connected OK, continue... $this->enrol_ldap_bind($ldap_connection); @@ -145,7 +145,7 @@ function sync_enrolments($type, $enrol = false) { $ldap_contexts = explode(";",$CFG->{'enrol_ldap_contexts_role'.$role->id}); // get all the fields we will want for the potential course creation - // as they are light. don't get membership -- potentially a lot of data. + // as they are light. don't get membership -- potentially a lot of data. $ldap_fields_wanted = array( 'dn', $CFG->enrol_ldap_course_idnumber); if (!empty($CFG->enrol_ldap_course_fullname)){ array_push($ldap_fields_wanted, $CFG->enrol_ldap_course_fullname); @@ -161,11 +161,11 @@ function sync_enrolments($type, $enrol = false) { } // define the search pattern - if (!empty($CFG->enrol_ldap_objectclass)){ + if (!empty($CFG->enrol_ldap_objectclass)){ $ldap_search_pattern='(objectclass='.$CFG->enrol_ldap_objectclass.')'; } else { $ldap_search_pattern="(objectclass=*)"; - + } // first, pack the sortorder... @@ -176,19 +176,19 @@ function sync_enrolments($type, $enrol = false) { $context = trim($context); if ($CFG->enrol_ldap_search_sub){ //use ldap_search to find first user from subtree - $ldap_result = @ldap_search($ldap_connection, - $context, + $ldap_result = @ldap_search($ldap_connection, + $context, $ldap_search_pattern, $ldap_fields_wanted); } else { //search only in this context - $ldap_result = @ldap_list($ldap_connection, - $context, + $ldap_result = @ldap_list($ldap_connection, + $context, $ldap_search_pattern, $ldap_fields_wanted,0,0); } - + // check and push results $records = $ldap_result ? ldap_get_entries($ldap_connection,$ldap_result) @@ -197,9 +197,9 @@ function sync_enrolments($type, $enrol = false) { // ldap libraries return an odd array, really. fix it: $flat_records=array(); for ($c=0;$c<$records['count'];$c++) { - array_push($flat_records, $records["$c"]); + array_push($flat_records, $records["$c"]); } - // free mem -- is there a leak? + // free mem -- is there a leak? $records=0; $ldap_result=0; if (count($flat_records)) { @@ -208,7 +208,7 @@ function sync_enrolments($type, $enrol = false) { 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, @@ -237,22 +237,22 @@ function sync_enrolments($type, $enrol = false) { $context = get_context_instance(CONTEXT_COURSE, $course_obj->id); // pull the ldap membership into a nice array - // this is an odd array -- mix of hash and array -- + // this is an odd array -- mix of hash and array -- $ldapmembers=array(); if(array_key_exists('enrol_ldap_memberattribute_role'.$role->id, $CFG) && !empty($CFG->{'enrol_ldap_memberattribute_role'.$role->id}) && !empty($course[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id} ) ])){ // may have no membership! - $ldapmembers = $course[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id} )]; + $ldapmembers = $course[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id} )]; unset($ldapmembers['count']); // remove oddity ;) $ldapmembers = addslashes_recursive($ldapmembers); } - + // prune old ldap enrolments // hopefully they'll fit in the max buffer size for the RDBMS $sql = ' - SELECT enr.userid AS user, 1 + SELECT enr.userid FROM '.$CFG->prefix.'role_assignments enr JOIN '.$CFG->prefix.'user usr ON usr.id=enr.userid WHERE enr.roleid = '.$role->id.' @@ -266,7 +266,7 @@ function sync_enrolments($type, $enrol = false) { $todelete = get_records_sql($sql); if(!empty($todelete)){ foreach ($todelete as $member) { - $member = $member->user; + $member = $member->userid; if (role_unassign($role->id, $member, 0, $context->id, 'ldap')) { print "Unassigned $type from $member for course $course_obj->id ($course_obj->shortname)\n"; @@ -275,21 +275,21 @@ function sync_enrolments($type, $enrol = false) { } } } - - // insert current enrolments + + // insert current enrolments // bad we can't do INSERT IGNORE with postgres... foreach ($ldapmembers as $ldapmember) { $sql = 'SELECT id,1 FROM '.$CFG->prefix.'user ' ." WHERE idnumber='$ldapmember'"; - $member = get_record_sql($sql); -// print "sql: $sql \nidnumber = ".stripslashes($ldapmember)." \n".var_dump($member); + $member = get_record_sql($sql); +// print "sql: $sql \nidnumber = ".stripslashes($ldapmember)." \n".var_dump($member); if(empty($member) || empty($member->id)){ print "Could not find user ".stripslashes($ldapmember).", skipping\n"; continue; } $member = $member->id; - if (!get_record('role_assignments', 'roleid', $role->id, - 'contextid', $context->id, + if (!get_record('role_assignments', 'roleid', $role->id, + 'contextid', $context->id, 'userid', $member, 'enrol', 'ldap')){ if (role_assign($role->id, $member, 0, $context->id, 0, 0, 0, 'ldap')){ print "Assigned role $type to $member (".stripslashes($ldapmember).") for course $course_obj->id ($course_obj->shortname)\n"; @@ -302,10 +302,10 @@ function sync_enrolments($type, $enrol = false) { } } } - + // we are done now, a bit of housekeeping fix_course_sortorder(); - + @ldap_close($ldap_connection); return true; } @@ -321,7 +321,7 @@ function config_form($frm) { global $CFG; $this->check_legacy_config(); - + include("$CFG->dirroot/enrol/ldap/config.html"); } @@ -339,7 +339,7 @@ function process_config($config) { $config->enrol_ldap_version = ''; } set_config('enrol_ldap_version', $config->enrol_ldap_version); - + if (!isset ($config->enrol_ldap_bind_dn)) { $config->enrol_ldap_bind_dn = ''; } @@ -348,58 +348,58 @@ function process_config($config) { if (!isset ($config->enrol_ldap_bind_pw)) { $config->enrol_ldap_bind_pw = ''; } - set_config('enrol_ldap_bind_pw', $config->enrol_ldap_bind_pw); - + set_config('enrol_ldap_bind_pw', $config->enrol_ldap_bind_pw); + if (!isset ($config->enrol_ldap_objectclass)) { $config->enrol_ldap_objectclass = ''; } - set_config('enrol_ldap_objectclass', $config->enrol_ldap_objectclass); - + set_config('enrol_ldap_objectclass', $config->enrol_ldap_objectclass); + if (!isset ($config->enrol_ldap_category)) { $config->enrol_ldap_category = ''; } - set_config('enrol_ldap_category', $config->enrol_ldap_category); - + set_config('enrol_ldap_category', $config->enrol_ldap_category); + if (!isset ($config->enrol_ldap_template)) { $config->enrol_ldap_template = ''; } - set_config('enrol_ldap_template', $config->enrol_ldap_template); - + set_config('enrol_ldap_template', $config->enrol_ldap_template); + if (!isset ($config->enrol_ldap_course_fullname)) { $config->enrol_ldap_course_fullname = ''; } - set_config('enrol_ldap_course_fullname', $config->enrol_ldap_course_fullname); + set_config('enrol_ldap_course_fullname', $config->enrol_ldap_course_fullname); if (!isset ($config->enrol_ldap_course_shortname)) { $config->enrol_ldap_course_shortname = ''; } - set_config('enrol_ldap_course_shortname', $config->enrol_ldap_course_shortname); - + set_config('enrol_ldap_course_shortname', $config->enrol_ldap_course_shortname); + if (!isset ($config->enrol_ldap_course_summary)) { $config->enrol_ldap_course_summary = ''; } - set_config('enrol_ldap_course_summary', $config->enrol_ldap_course_summary); - + set_config('enrol_ldap_course_summary', $config->enrol_ldap_course_summary); + if (!isset ($config->enrol_ldap_course_idnumber)) { $config->enrol_ldap_course_idnumber = ''; } - set_config('enrol_ldap_course_idnumber', $config->enrol_ldap_course_idnumber); - + set_config('enrol_ldap_course_idnumber', $config->enrol_ldap_course_idnumber); + if (!isset ($config->enrol_localcoursefield)) { $config->enrol_localcoursefield = ''; } set_config('enrol_localcoursefield', $config->enrol_localcoursefield); - + if (!isset ($config->enrol_ldap_user_memberfield)) { $config->enrol_ldap_user_memberfield = ''; } - set_config('enrol_ldap_user_memberfield', $config->enrol_ldap_user_memberfield); - + set_config('enrol_ldap_user_memberfield', $config->enrol_ldap_user_memberfield); + if (!isset ($config->enrol_ldap_search_sub)) { $config->enrol_ldap_search_sub = '0'; } - set_config('enrol_ldap_search_sub', $config->enrol_ldap_search_sub); - + set_config('enrol_ldap_search_sub', $config->enrol_ldap_search_sub); + if (!isset ($config->enrol_ldap_autocreate)) { $config->enrol_ldap_autocreate = '0'; } @@ -410,11 +410,11 @@ function process_config($config) { if (!isset($config->{'enrol_ldap_contexts_role'.$role->id})) { $config->{'enrol_ldap_contexts_role'.$role->id} = ''; } - + if (!isset($config->{'enrol_ldap_memberattribute_role'.$role->id})) { $config->{'enrol_ldap_memberattribute_role'.$role->id} = ''; } - + 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}); } @@ -435,7 +435,7 @@ function enrol_ldap_connect(){ if (!empty($CFG->enrol_ldap_bind_dn)) { $bind = ldap_bind( $result, - $CFG->enrol_ldap_bind_dn, + $CFG->enrol_ldap_bind_dn, $CFG->enrol_ldap_bind_pw ); if (!$bind) { notify("Error in binding to LDAP server"); @@ -464,11 +464,11 @@ function enrol_ldap_bind($ldap_connection){ } } else { - //bind anonymously + //bind anonymously if ( !ldap_bind($ldap_connection)){ notify("Error: could not bind ldap anonymously"); return false; - } + } } return true; @@ -477,13 +477,13 @@ function enrol_ldap_bind($ldap_connection){ function find_ext_enrolments ($ldap_connection, $memberuid, $role){ /// role is a record from the mdl_role table /// return multidimentional array array with of courses (at least dn and idnumber) -/// +/// global $CFG; if(empty($memberuid)) { // No "idnumber" stored for this user, so no LDAP enrolments return array(); - } + } //default return value $courses = array(); @@ -493,7 +493,7 @@ function find_ext_enrolments ($ldap_connection, $memberuid, $role){ $ldap_contexts = explode(";",$CFG->{'enrol_ldap_contexts_role'.$role->id}); // get all the fields we will want for the potential course creation - // as they are light. don't get membership -- potentially a lot of data. + // as they are light. don't get membership -- potentially a lot of data. $ldap_fields_wanted = array( 'dn', $CFG->enrol_ldap_course_idnumber); if (!empty($CFG->enrol_ldap_course_fullname)){ array_push($ldap_fields_wanted, $CFG->enrol_ldap_course_fullname); @@ -507,7 +507,7 @@ function find_ext_enrolments ($ldap_connection, $memberuid, $role){ // define the search pattern $ldap_search_pattern = "(".$CFG->{'enrol_ldap_memberattribute_role'.$role->id}."=".$this->filter_addslashes($memberuid).")"; - if (!empty($CFG->enrol_ldap_objectclass)){ + if (!empty($CFG->enrol_ldap_objectclass)){ $ldap_search_pattern='(&(objectclass='.$CFG->enrol_ldap_objectclass.')'.$ldap_search_pattern.')'; } @@ -516,31 +516,31 @@ function find_ext_enrolments ($ldap_connection, $memberuid, $role){ if (empty($context)) { continue; // next; } - + if ($CFG->enrol_ldap_search_sub){ //use ldap_search to find first user from subtree - $ldap_result = ldap_search($ldap_connection, - $context, + $ldap_result = ldap_search($ldap_connection, + $context, $ldap_search_pattern, $ldap_fields_wanted); } else { //search only in this context - $ldap_result = ldap_list($ldap_connection, - $context, + $ldap_result = ldap_list($ldap_connection, + $context, $ldap_search_pattern, $ldap_fields_wanted); } - + // check and push results - $records = ldap_get_entries($ldap_connection,$ldap_result); + $records = ldap_get_entries($ldap_connection,$ldap_result); // ldap libraries return an odd array, really. fix it: $flat_records=array(); for ($c=0;$c<$records['count'];$c++) { - array_push($flat_records, $records["$c"]); + array_push($flat_records, $records["$c"]); } - + if (count($flat_records)) { $courses = array_merge($courses, $flat_records); } @@ -551,7 +551,7 @@ function find_ext_enrolments ($ldap_connection, $memberuid, $role){ // will create the moodle course from the template // course_ext is an array as obtained from ldap -- flattened somewhat -// NOTE: if you pass true for $skip_fix_course_sortorder +// NOTE: if you pass true for $skip_fix_course_sortorder // you will want to call fix_course_sortorder() after your are done // with course creation function create_course ($course_ext,$skip_fix_course_sortorder=0){ @@ -578,7 +578,7 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){ $course->shortname = $course_ext[$CFG->enrol_ldap_course_shortname][0]; if ( empty($course->idnumber) || empty($course->fullname) - || empty($course->shortname) ) { + || empty($course->shortname) ) { // we are in trouble! error_log("Cannot create course: missing required data from the LDAP record!"); error_log(var_export($course, true)); @@ -588,10 +588,10 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){ $course->summary = empty($CFG->enrol_ldap_course_summary) || empty($course_ext[$CFG->enrol_ldap_course_summary][0]) ? '' : $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; - } + } if ($course->category == 0){ // must be avoided as it'll break moodle $course->category = 1; // the misc 'catch-all' category } @@ -600,13 +600,13 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){ $sort = get_record_sql('SELECT MAX(sortorder) AS max, 1 FROM ' . $CFG->prefix . 'course WHERE category=' . $course->category); $sort = $sort->max; $sort++; - $course->sortorder = $sort; + $course->sortorder = $sort; // override with local data $course->startdate = time(); $course->timecreated = time(); $course->visible = 1; - + $course = addslashes_recursive($course); // store it and log @@ -619,8 +619,8 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){ blocks_repopulate_page($page); // Return value no - if(!$skip_fix_course_sortorder){ - fix_course_sortorder(); + if(!$skip_fix_course_sortorder){ + fix_course_sortorder(); } add_to_log($newcourseid, "course", "new", "view.php?id=$newcourseid", "enrol/ldap auto-creation"); } else { @@ -628,7 +628,7 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){ notify("Serious Error! Could not create the new course!"); return false; } - + return $newcourseid; } @@ -665,7 +665,7 @@ function check_legacy_config () { unset_config('enrol_ldap_teacher_contexts'); } - + if (isset($CFG->enrol_ldap_teacher_memberattribute)) { if (isset($teacher_role) or $teacher_role = get_record('role', 'shortname', 'teacher')) { -- 2.11.4.GIT