Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/user/lib.php
Go to the documentation of this file.
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 }
 All Data Structures Namespaces Files Functions Variables Enumerations