]> git.mjollnir.org Git - moodle.git/commitdiff
New version of the uploaduser script from Zbigniew Fiedorowicz and Steve Zeidner
authormoodler <moodler>
Sun, 4 Jan 2004 02:07:59 +0000 (02:07 +0000)
committermoodler <moodler>
Sun, 4 Jan 2004 02:07:59 +0000 (02:07 +0000)
  http://moodle.org/mod/forum/discuss.php?d=2367#19283

admin/uploaduser.php [new file with mode: 0755]

diff --git a/admin/uploaduser.php b/admin/uploaduser.php
new file mode 100755 (executable)
index 0000000..8ae0d51
--- /dev/null
@@ -0,0 +1,164 @@
+<?PHP // $Id$\r
+\r
+//Bulk user registration script from a comma separated file\r
+//Returns list of users with their user ids\r
+\r
+require_once("../config.php");\r
+require_once("../lib/countries.php");\r
+require_once("lib.php");\r
+\r
+\r
+require_login();\r
+\r
+if (!isadmin()) {\r
+  error("You must be an administrator to edit users this way.");\r
+}\r
+\r
+$notify = FALSE;\r
+\r
+// import users\r
+if ($filename = valid_uploaded_file($_FILES['userfile'])) {\r
+  optional_variable($numusers, 0);\r
+  \r
+  //Fix mac/dos newlines\r
+  $text = my_file_get_contents($filename);\r
+  $text = preg_replace('!\r\n?!',"\n",$text);\r
+  $fp = fopen($filename, "w");\r
+  fwrite($fp,$text);\r
+  fclose($fp);\r
+\r
+  $fp = fopen($filename, "r");\r
+\r
+  // make arrays of valid fields for error checking\r
+  $required = array("username" => 1, "password" => 1, \r
+                   "firstname" => 1, "lastname" => 1,\r
+                   "email" => 1);\r
+  $optionalDefaults = array("institution" => 1, "department" => 1, \r
+                           "city" => 1, "country" => 1,\r
+                           "lang" => 1, "timezone" => 1);\r
+  $optional = array("idnumber" => 1, "icq" => 1, \r
+                   "phone1" => 1, "phone2" => 1,\r
+                   "address" => 1, "url" => 1,\r
+                   "description" => 1, "mailformat" => 1, \r
+                   "htmleditor" => 1, "autosubscribe" => 1,\r
+                   "idnumber" => 1, "icq" => 1, \r
+                   "course1" => 1, "course2" => 1,\r
+                   "course3" => 1, "course4" => 1, \r
+                   "course5" => 1);\r
+\r
+  // --- get header (field names) ---\r
+  $header = split("\,", fgets($fp));\r
+  // check for valid field names\r
+  foreach ($header as $i => $h) {\r
+    $h = trim($h); $header[$i] = $h; // remove whitespace\r
+    if (!($required[$h] or $optionalDefaults[$h] or $optional[$h])) {\r
+      error("\"$h\" is not a valid field name.");\r
+    }\r
+    if ($required[$h]) {\r
+      $required[$h] = 2;\r
+    }\r
+  }\r
+  // check for required fields\r
+  foreach ($required as $key => $value) {\r
+    if ($value < 2) {\r
+      error("\"$key\" is a required field.");\r
+    }\r
+  }\r
+  $linenum = 2; // since header is line 1\r
+\r
+  while (!feof ($fp)) {\r
+    //Note: commas within a field should be encoded as &#44\r
+    //Last field, courseid, is optional. If present it should be the Moodle\r
+    //course id number for the course in which student should be initially enroled\r
+    $line = split("\,", fgets($fp));\r
+    foreach ($line as $key => $value) {\r
+      $record[$header[$key]] = trim($value);\r
+    }\r
+    if ($record[$header[0]]) {\r
+      // add a new user to the database\r
+      optional_variable($newuser, ""); \r
+\r
+      // add fields to object $user\r
+      foreach ($record as $name => $value) {\r
+       // check for required values\r
+       if ($required[$name] and !$value) {\r
+         error("Missing \"$name\" on line $linenum.");\r
+       }\r
+       // password needs to be encrypted\r
+       else if ($name == "password") {\r
+         $user->password = md5($value);\r
+       }\r
+       // normal entry\r
+       else {\r
+         $user->{$name} = $value;\r
+       }\r
+      }\r
+      $user->confirmed = 1;\r
+      $user->timemodified = time();\r
+      $linenum++;\r
+\r
+      if (! $user->id = insert_record("user", $user)) {\r
+        if (!$user = get_record("user", "username", "changeme")) {   // half finished user from another time\r
+          //Record not added - probably because user is already registered\r
+          //In this case, output userid from previous registration\r
+          //This can be used to obtain a list of userids for existing users\r
+          $error_uid = -1;\r
+          if ($user = get_record("user","username",$username)) {\r
+            $error_uid = $user->id;\r
+          }\r
+          $notifytext .= $error_uid . "," . $username . ",FAILED";\r
+        }\r
+      } elseif ($user->username != "changeme") {\r
+        $notifytext .= $user->id . "," . $user->username . ",";\r
+        $numusers++;\r
+      }\r
+      if ($courseid) {\r
+        if (enrol_student($user->id, $courseid)) {\r
+         $notifytext .= ",enroled in course $courseid<br>\n";\r
+       } else {\r
+         $notifytext .= ",error: enrolment in course $courseid failed<br>\n";\r
+       }\r
+      } else {$notifytext .= "<br>\n";}\r
+      unset ($user);\r
+    }\r
+  }\r
+  $notify = true;\r
+  fclose($fp);\r
+}\r
+\r
+// print page\r
+if (! $site = get_site()) {\r
+  error("Could not find site-level course");\r
+}\r
+$streditmyprofile = get_string("editmyprofile");\r
+$strnewuser = get_string("newuser");\r
+$userfullname = $strnewuser;\r
+$straddnewuser = get_string("importuser");\r
+$stradministration = get_string("administration");\r
+\r
+print_header("$site->shortname: $straddnewuser", "$site->fullname",\r
+             "<A HREF=\"$CFG->wwwroot/admin\">$stradministration</A> ->\r
+                      $straddnewuser", "");\r
+if ($notify) {\r
+  notify("$notifytext <br>Added $numusers New Users");\r
+}\r
+// output form\r
+echo "<form METHOD=\"post\" ENCTYPE=\"multipart/form-data\" action=\"uploaduser.php\">\n".\r
+"<br><input type=\"submit\" value=\"Import Users\">".\r
+"<INPUT type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"get_max_upload_file_size()\">\n".\r
+"<input type=\"file\" name=\"userfile\" size=30>\n".\r
+"</form></br>";\r
+\r
+print_footer($course);\r
+\r
+function my_file_get_contents($filename, $use_include_path = 0) {\r
+  $data = ""; // just to be safe. Dunno, if this is really needed\r
+  $file = @fopen($filename, "rb", $use_include_path);\r
+  if ($file) {\r
+    while (!feof($file)) $data .= fread($file, 1024);\r
+    fclose($file);\r
+  }\r
+  return $data;\r
+}\r
+\r
+?>\r