|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 00003 // This file is part of Moodle - http://moodle.org/ 00004 // 00005 // Moodle is free software: you can redistribute it and/or modify 00006 // it under the terms of the GNU General Public License as published by 00007 // the Free Software Foundation, either version 3 of the License, or 00008 // (at your option) any later version. 00009 // 00010 // Moodle is distributed in the hope that it will be useful, 00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 // GNU General Public License for more details. 00014 // 00015 // You should have received a copy of the GNU General Public License 00016 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00017 00033 function user_create_user($user) { 00034 global $DB; 00035 00037 if (!is_object($user)) { 00038 $user = (object)$user; 00039 } 00040 00042 $user->password = hash_internal_user_password($user->password); 00043 00044 $user->timecreated = time(); 00045 $user->timemodified = $user->timecreated; 00046 00048 $newuserid = $DB->insert_record('user', $user); 00049 00051 $newuser = $DB->get_record('user', array('id' => $newuserid)); 00052 events_trigger('user_created', $newuser); 00053 00055 get_context_instance(CONTEXT_USER, $newuserid); 00056 00057 return $newuserid; 00058 00059 } 00060 00065 function user_update_user($user) { 00066 global $DB; 00067 00069 if (!is_object($user)) { 00070 $user = (object)$user; 00071 } 00072 00074 $user->password = hash_internal_user_password($user->password); 00075 00076 $user->timemodified = time(); 00077 $DB->update_record('user', $user); 00078 00080 $updateduser = $DB->get_record('user', array('id' => $user->id)); 00081 events_trigger('user_updated', $updateduser); 00082 00083 } 00084 00085 00094 function user_delete_user($user) { 00095 return delete_user($user); 00096 } 00097 00103 function user_get_users_by_id($userids) { 00104 global $DB; 00105 return $DB->get_records_list('user', 'id', $userids); 00106 } 00107 00108 00119 function user_get_user_details($user, $course = null, array $userfields = array()) { 00120 global $USER, $DB, $CFG; 00121 require_once($CFG->dirroot . "/user/profile/lib.php"); //custom field library 00122 require_once($CFG->dirroot . "/lib/filelib.php"); // file handling on description and friends 00123 00124 $defaultfields = array( 'id', 'username', 'fullname', 'firstname', 'lastname', 'email', 00125 'address', 'phone1', 'phone2', 'icq', 'skype', 'yahoo', 'aim', 'msn', 'department', 00126 'institution', 'interests', 'firstaccess', 'lastaccess', 'auth', 'confirmed', 00127 'idnumber', 'lang', 'theme', 'timezone', 'mailformat', 'description', 'descriptionformat', 00128 'city', 'url', 'country', 'profileimageurlsmall', 'profileimageurl', 'customfields', 00129 'groups', 'roles', 'preferences', 'enrolledcourses' 00130 ); 00131 00132 if (empty($userfields)) { 00133 $userfields = $defaultfields; 00134 } 00135 00136 foreach ($userfields as $thefield) { 00137 if (!in_array($thefield, $defaultfields)) { 00138 throw new moodle_exception('invaliduserfield', 'error', '', $thefield); 00139 } 00140 } 00141 00142 00143 // Make sure id and fullname are included 00144 if (!in_array('id', $userfields)) { 00145 $userfields[] = 'id'; 00146 } 00147 00148 if (!in_array('fullname', $userfields)) { 00149 $userfields[] = 'fullname'; 00150 } 00151 00152 if (!empty($course)) { 00153 $context = get_context_instance(CONTEXT_COURSE, $course->id); 00154 $usercontext = get_context_instance(CONTEXT_USER, $user->id); 00155 $canviewdetailscap = (has_capability('moodle/user:viewdetails', $context) || has_capability('moodle/user:viewdetails', $usercontext)); 00156 } else { 00157 $context = get_context_instance(CONTEXT_USER, $user->id); 00158 $usercontext = $context; 00159 $canviewdetailscap = has_capability('moodle/user:viewdetails', $usercontext); 00160 } 00161 00162 $currentuser = ($user->id == $USER->id); 00163 $isadmin = is_siteadmin($USER); 00164 00165 if (!empty($course)) { 00166 $canviewhiddenuserfields = has_capability('moodle/course:viewhiddenuserfields', $context); 00167 } else { 00168 $canviewhiddenuserfields = has_capability('moodle/user:viewhiddendetails', $context); 00169 } 00170 $canviewfullnames = has_capability('moodle/site:viewfullnames', $context); 00171 if (!empty($course)) { 00172 $canviewuseremail = has_capability('moodle/course:useremail', $context); 00173 } else { 00174 $canviewuseremail = false; 00175 } 00176 $cannotviewdescription = !empty($CFG->profilesforenrolledusersonly) && !$currentuser && !$DB->record_exists('role_assignments', array('userid'=>$user->id)); 00177 if (!empty($course)) { 00178 $canaccessallgroups = has_capability('moodle/site:accessallgroups', $context); 00179 } else { 00180 $canaccessallgroups = false; 00181 } 00182 00183 if (!$currentuser && !$canviewdetailscap && !has_coursecontact_role($user->id)) { 00184 // skip this user details 00185 return null; 00186 } 00187 00188 $userdetails = array(); 00189 $userdetails['id'] = $user->id; 00190 00191 if (($isadmin or $currentuser) and in_array('username', $userfields)) { 00192 $userdetails['username'] = $user->username; 00193 } 00194 if ($isadmin or $canviewfullnames) { 00195 if (in_array('firstname', $userfields)) { 00196 $userdetails['firstname'] = $user->firstname; 00197 } 00198 if (in_array('lastname', $userfields)) { 00199 $userdetails['lastname'] = $user->lastname; 00200 } 00201 } 00202 $userdetails['fullname'] = fullname($user); 00203 00204 if (in_array('customfields', $userfields)) { 00205 $fields = $DB->get_recordset_sql("SELECT f.* 00206 FROM {user_info_field} f 00207 JOIN {user_info_category} c 00208 ON f.categoryid=c.id 00209 ORDER BY c.sortorder ASC, f.sortorder ASC"); 00210 $userdetails['customfields'] = array(); 00211 foreach ($fields as $field) { 00212 require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php'); 00213 $newfield = 'profile_field_'.$field->datatype; 00214 $formfield = new $newfield($field->id, $user->id); 00215 if ($formfield->is_visible() and !$formfield->is_empty()) { 00216 $userdetails['customfields'][] = 00217 array('name' => $formfield->field->name, 'value' => $formfield->data, 00218 'type' => $field->datatype, 'shortname' => $formfield->field->shortname); 00219 } 00220 } 00221 $fields->close(); 00222 // unset customfields if it's empty 00223 if (empty($userdetails['customfields'])) { 00224 unset($userdetails['customfields']); 00225 } 00226 } 00227 00228 // profile image 00229 if (in_array('profileimageurl', $userfields)) { 00230 $profileimageurl = moodle_url::make_pluginfile_url($usercontext->id, 'user', 'icon', NULL, '/', 'f1'); 00231 $userdetails['profileimageurl'] = $profileimageurl->out(false); 00232 } 00233 if (in_array('profileimageurlsmall', $userfields)) { 00234 $profileimageurlsmall = moodle_url::make_pluginfile_url($usercontext->id, 'user', 'icon', NULL, '/', 'f2'); 00235 $userdetails['profileimageurlsmall'] = $profileimageurlsmall->out(false); 00236 } 00237 00238 //hidden user field 00239 if ($canviewhiddenuserfields) { 00240 $hiddenfields = array(); 00241 // address, phone1 and phone2 not appears in hidden fields list 00242 // but require viewhiddenfields capability 00243 // according to user/profile.php 00244 if ($user->address && in_array('address', $userfields)) { 00245 $userdetails['address'] = $user->address; 00246 } 00247 if ($user->phone1 && in_array('phone1', $userfields)) { 00248 $userdetails['phone1'] = $user->phone1; 00249 } 00250 if ($user->phone2 && in_array('phone2', $userfields)) { 00251 $userdetails['phone2'] = $user->phone2; 00252 } 00253 } else { 00254 $hiddenfields = array_flip(explode(',', $CFG->hiddenuserfields)); 00255 } 00256 00257 if (isset($user->description) && (!isset($hiddenfields['description']) or $isadmin)) { 00258 if (!$cannotviewdescription) { 00259 00260 if (in_array('description', $userfields)) { 00261 $user->description = file_rewrite_pluginfile_urls($user->description, 'pluginfile.php', $usercontext->id, 'user', 'profile', null); 00262 $userdetails['description'] = $user->description; 00263 } 00264 if (in_array('descriptionformat', $userfields)) { 00265 $userdetails['descriptionformat'] = $user->descriptionformat; 00266 } 00267 } 00268 } 00269 00270 if (in_array('country', $userfields) && (!isset($hiddenfields['country']) or $isadmin) && $user->country) { 00271 $userdetails['country'] = $user->country; 00272 } 00273 00274 if (in_array('city', $userfields) && (!isset($hiddenfields['city']) or $isadmin) && $user->city) { 00275 $userdetails['city'] = $user->city; 00276 } 00277 00278 if (in_array('url', $userfields) && $user->url && (!isset($hiddenfields['webpage']) or $isadmin)) { 00279 $url = $user->url; 00280 if (strpos($user->url, '://') === false) { 00281 $url = 'http://'. $url; 00282 } 00283 $user->url = clean_param($user->url, PARAM_URL); 00284 $userdetails['url'] = $user->url; 00285 } 00286 00287 if (in_array('icq', $userfields) && $user->icq && (!isset($hiddenfields['icqnumber']) or $isadmin)) { 00288 $userdetails['icq'] = $user->icq; 00289 } 00290 00291 if (in_array('skype', $userfields) && $user->skype && (!isset($hiddenfields['skypeid']) or $isadmin)) { 00292 $userdetails['skype'] = $user->skype; 00293 } 00294 if (in_array('yahoo', $userfields) && $user->yahoo && (!isset($hiddenfields['yahooid']) or $isadmin)) { 00295 $userdetails['yahoo'] = $user->yahoo; 00296 } 00297 if (in_array('aim', $userfields) && $user->aim && (!isset($hiddenfields['aimid']) or $isadmin)) { 00298 $userdetails['aim'] = $user->aim; 00299 } 00300 if (in_array('msn', $userfields) && $user->msn && (!isset($hiddenfields['msnid']) or $isadmin)) { 00301 $userdetails['msn'] = $user->msn; 00302 } 00303 00304 if (in_array('firstaccess', $userfields) && (!isset($hiddenfields['firstaccess']) or $isadmin)) { 00305 if ($user->firstaccess) { 00306 $userdetails['firstaccess'] = $user->firstaccess; 00307 } else { 00308 $userdetails['firstaccess'] = 0; 00309 } 00310 } 00311 if (in_array('lastaccess', $userfields) && (!isset($hiddenfields['lastaccess']) or $isadmin)) { 00312 if ($user->lastaccess) { 00313 $userdetails['lastaccess'] = $user->lastaccess; 00314 } else { 00315 $userdetails['lastaccess'] = 0; 00316 } 00317 } 00318 00319 if (in_array('email', $userfields) && ($currentuser 00320 or $canviewuseremail // this is a capability in course context, it will be false in usercontext 00321 or $user->maildisplay == 1 00322 or ($user->maildisplay == 2 and enrol_sharing_course($user, $USER)))) { 00323 $userdetails['email'] = $user->email;; 00324 } 00325 00326 if (in_array('interests', $userfields) && !empty($CFG->usetags)) { 00327 require_once($CFG->dirroot . '/tag/lib.php'); 00328 if ($interests = tag_get_tags_csv('user', $user->id, TAG_RETURN_TEXT) ) { 00329 $userdetails['interests'] = $interests; 00330 } 00331 } 00332 00333 //Departement/Institution are not displayed on any profile, however you can get them from editing profile. 00334 if ($isadmin or $currentuser) { 00335 if (in_array('institution', $userfields) && $user->institution) { 00336 $userdetails['institution'] = $user->institution; 00337 } 00338 if (in_array('department', $userfields) && isset($user->department)) { //isset because it's ok to have department 0 00339 $userdetails['department'] = $user->department; 00340 } 00341 } 00342 00343 if (in_array('roles', $userfields) && !empty($course)) { 00344 // not a big secret 00345 $roles = get_user_roles($context, $user->id, false); 00346 $userdetails['roles'] = array(); 00347 foreach ($roles as $role) { 00348 $userdetails['roles'][] = array( 00349 'roleid' => $role->roleid, 00350 'name' => $role->name, 00351 'shortname' => $role->shortname, 00352 'sortorder' => $role->sortorder 00353 ); 00354 } 00355 } 00356 00357 // If groups are in use and enforced throughout the course, then make sure we can meet in at least one course level group 00358 if (in_array('groups', $userfields) && !empty($course) && $canaccessallgroups) { 00359 $usergroups = groups_get_all_groups($course->id, $user->id, $course->defaultgroupingid, 'g.id, g.name,g.description'); 00360 $userdetails['groups'] = array(); 00361 foreach ($usergroups as $group) { 00362 $group->description = file_rewrite_pluginfile_urls($group->description, 'pluginfile.php', $context->id, 'group', 'description', $group->id); 00363 $userdetails['groups'][] = array('id'=>$group->id, 'name'=>$group->name, 'description'=>$group->description); 00364 } 00365 } 00366 //list of courses where the user is enrolled 00367 if (in_array('enrolledcourses', $userfields) && !isset($hiddenfields['mycourses'])) { 00368 $enrolledcourses = array(); 00369 if ($mycourses = enrol_get_users_courses($user->id, true)) { 00370 foreach ($mycourses as $mycourse) { 00371 if ($mycourse->category) { 00372 $coursecontext = get_context_instance(CONTEXT_COURSE, $mycourse->id); 00373 $enrolledcourse = array(); 00374 $enrolledcourse['id'] = $mycourse->id; 00375 $enrolledcourse['fullname'] = format_string($mycourse->fullname, true, array('context' => get_context_instance(CONTEXT_COURSE, $mycourse->id))); 00376 $enrolledcourse['shortname'] = format_string($mycourse->shortname, true, array('context' => $coursecontext)); 00377 $enrolledcourses[] = $enrolledcourse; 00378 } 00379 } 00380 $userdetails['enrolledcourses'] = $enrolledcourses; 00381 } 00382 } 00383 00384 //user preferences 00385 if (in_array('preferences', $userfields) && $currentuser) { 00386 $preferences = array(); 00387 $userpreferences = get_user_preferences(); 00388 foreach($userpreferences as $prefname => $prefvalue) { 00389 $preferences[] = array('name' => $prefname, 'value' => $prefvalue); 00390 } 00391 $userdetails['preferences'] = $preferences; 00392 } 00393 00394 return $userdetails; 00395 } 00396 00403 function user_page_type_list($pagetype, $parentcontext, $currentcontext) { 00404 return array('user-profile'=>get_string('page-user-profile', 'pagetype')); 00405 }