Changes to support guest user across any course (guest/guest)
authormartin <martin>
Sun, 9 Jun 2002 14:14:07 +0000 (14:14 +0000)
committermartin <martin>
Sun, 9 Jun 2002 14:14:07 +0000 (14:14 +0000)
admin/user.php
course/edit.html
course/enrol.php
course/index.php
course/lib.php
lib/db/mysql.sql
lib/moodlelib.php
mod/journal/edit.php
mod/journal/view.php
mod/survey/save.php
pix/i/key.gif [new file with mode: 0755]

index 4132173..de77af4 100644 (file)
         $USER->loggedin = true;
         $USER->admin = true;
         $USER->teacher["$course->id"] = true;
+
+        // This is also a good time to make the Guest User
+
+        $user = NULL;
+        $user->firstname = "Guest";
+        $user->lastname  = "User";
+        $user->username  = "guest";          // This user is identified by this
+        $user->password  = md5("guest");
+        $user->email     = "root@localhost";
+        $user->confirmed = 1;
+        $user->timemodified = time();
+
+        if (! $guest->user = insert_record("user", $user)) {
+            notify("Could not create guest user record !!!");
+        }
     }
 
     require_login();
index d528f3b..f0991ed 100644 (file)
        </td>
 </tr>
 <tr valign=top>
-       <td><P>Password:</td>
+       <td><P>Summary:</td>
+       <td><TEXTAREA NAME=summary COLS=50 ROWS=10 WRAP=virtual><? p($form->summary) ?></TEXTAREA>
+       <? formerr($err["summary"]) ?>
+       </td>
+</tr>
+<tr valign=top>
+       <td><P>Entry Key:</td>
        <td><input type="text" name="password" size=25 value="<? p($form->password) ?>">
        <? formerr($err["password"]) ?>
        </td>
 </tr>
 <tr valign=top>
-       <td><P>Summary:</td>
-       <td><TEXTAREA NAME=summary COLS=50 ROWS=10 WRAP=virtual><? p($form->summary) ?></TEXTAREA>
-       <? formerr($err["summary"]) ?>
+       <td><P>Open to guests?:</td>
+       <td><?
+    $choices["0"] = "No, only students are allowed";
+    $choices["1"] = "Yes, allow \"guest\" student in";
+    choose_from_menu ($choices, "guest", $form->guest, "") ?>
        </td>
 </tr>
 <tr valign=top>
index f816cc1..349338e 100644 (file)
 
         if ($password == $course->password) {
 
-            if (! enrol_student_in_course($USER->id, $course->id)) {
-                error("An error occurred while trying to enrol you.");
+            if (isguest()) {
+                add_to_log($course->id, "course", "guest", "view.php?id=$course->id", "$USER->id");
+            } else {
+                if (! enrol_student_in_course($USER->id, $course->id)) {
+                    error("An error occurred while trying to enrol you.");
+                }
+                add_to_log($course->id, "course", "enrol", "view.php?id=$course->id", "$USER->id");
             }
-            add_to_log($course->id, "course", "enrol", "view.php?id=$course->id", "$USER->id");
 
             $USER->student["$id"] = true;
             
     }
 
     if ($course->password == "") {   // no password, so enrol
-        if (! enrol_student_in_course($USER->id, $course->id)) {
-            error("An error occurred while trying to enrol you.");
+        
+        if (isguest()) {
+            add_to_log($course->id, "course", "guest", "view.php?id=$course->id", "$USER->id");
+        } else {
+            if (! enrol_student_in_course($USER->id, $course->id)) {
+                error("An error occurred while trying to enrol you.");
+            }
+            add_to_log($course->id, "course", "enrol", "view.php?id=$course->id", "$USER->id");
         }
 
-        add_to_log($course->id, "course", "enrol", "view.php?id=$course->id", "$USER->id");
-
         $USER->student["$id"] = true;
         
         if ($SESSION->wantsurl) {
index 21a6679..e45944a 100644 (file)
@@ -9,7 +9,7 @@
 
     if ($courses = get_records("course", "category", $cat, "fullname ASC")) {
    
-        foreach ($courses as $key => $course) {
+        foreach ($courses as $course) {
             print_course($course);
             echo "<BR>\n";
         }
index 109f76a..0494795 100644 (file)
@@ -124,7 +124,8 @@ function print_course($course) {
     print_simple_box_start("CENTER", "80%");
 
     echo "<TABLE WIDTH=100%>";
-    echo "<TR VALIGN=top><TD VALIGN=top WIDTH=50%>";
+    echo "<TR VALIGN=top>";
+    echo "<TD VALIGN=top WIDTH=50%>";
     echo "<P><FONT SIZE=3><B><A HREF=\"view.php?id=$course->id\">$course->fullname</A></B></FONT></P>";
     if ($teachers = get_records_sql("SELECT u.* FROM user u, user_teachers t 
                                      WHERE u.id = t.user AND t.course = '$course->id' 
@@ -135,13 +136,23 @@ function print_course($course) {
             echo "$course->teacher: <A HREF=\"../user/view.php?id=$teacher->id&course=$site->id\">$teacher->firstname $teacher->lastname</A><BR>";
         }
         echo "</FONT></P>";
-     }
-     echo "</TD><TD VALIGN=top WIDTH=50%>";
-     echo "<P><FONT SIZE=2>".text_to_html($course->summary)."</FONT></P>";
-     echo "</TD></TR>";
-     echo "</TABLE>";
+    }
+    if ($course->guest or ($course->password == "")) {
+        echo "<A TITLE=\"Guest user allowed\" HREF=\"view.php?id=$course->id\">";
+        echo "<IMG VSPACE=4 ALT=\"\" HEIGHT=16 WIDTH=16 BORDER=0 SRC=\"../user/user.gif\"></A>&nbsp;&nbsp;";
+    }
+    if ($course->password) {
+        echo "<A TITLE=\"Requires a Course entry key\" HREF=\"view.php?id=$course->id\">";
+        echo "<IMG VSPACE=4 ALT=\"\" HEIGHT=16 WIDTH=16 BORDER=0 SRC=\"../pix/i/key.gif\"></A>";
+    }
+
+
+    echo "</TD><TD VALIGN=top WIDTH=50%>";
+    echo "<P><FONT SIZE=2>".text_to_html($course->summary)."</FONT></P>";
+    echo "</TD></TR>";
+    echo "</TABLE>";
 
-     print_simple_box_end();
+    print_simple_box_end();
 }
 
 function print_headline($text, $size=2) {
index ead6483..efb3aa4 100644 (file)
 # Table structure for table `course`
 #
 
-CREATE TABLE course (
-  id int(10) unsigned NOT NULL auto_increment,
-  category int(10) unsigned NOT NULL default '0',
-  password varchar(50) NOT NULL default '',
-  fullname varchar(254) NOT NULL default '',
-  shortname varchar(15) NOT NULL default '',
-  summary text NOT NULL,
-  format tinyint(4) NOT NULL default '1',
-  teacher varchar(100) NOT NULL default 'Teacher',
-  student varchar(100) NOT NULL default 'Student',
-  startdate int(10) unsigned NOT NULL default '0',
-  enddate int(10) unsigned NOT NULL default '0',
-  timemodified int(10) unsigned NOT NULL default '0',
-  PRIMARY KEY  (id)
+CREATE TABLE `course` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `category` int(10) unsigned NOT NULL default '0',
+  `password` varchar(50) NOT NULL default '',
+  `fullname` varchar(254) NOT NULL default '',
+  `shortname` varchar(15) NOT NULL default '',
+  `summary` text NOT NULL,
+  `format` tinyint(4) NOT NULL default '1',
+  `teacher` varchar(100) NOT NULL default 'Teacher',
+  `student` varchar(100) NOT NULL default 'Student',
+  `guest` tinyint(1) unsigned NOT NULL default '0',
+  `startdate` int(10) unsigned NOT NULL default '0',
+  `enddate` int(10) unsigned NOT NULL default '0',
+  `timemodified` int(10) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`id`)
 ) TYPE=MyISAM;
 # --------------------------------------------------------
 
@@ -165,11 +166,11 @@ CREATE TABLE user (
 # Table structure for table `user_admins`
 #
 
-CREATE TABLE user_admins (
-  id int(10) unsigned NOT NULL auto_increment,
-  user int(10) unsigned NOT NULL default '0',
-  PRIMARY KEY  (id),
-  UNIQUE KEY id (id)
+CREATE TABLE `user_admins` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `user` int(10) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `id` (`id`)
 ) TYPE=MyISAM COMMENT='One record per administrator user';
 # --------------------------------------------------------
 
index 52a8673..6cd2e0d 100644 (file)
@@ -705,13 +705,14 @@ function update_user_in_db() {
    }
 }
 
-function require_login($course=0) {
-// if they aren't already logged in, then send them off to login
-// $course is optional - if left out then it just requires that 
-// that they have an account on the system.
+function require_login($courseid=0) {
+// This function checks that the current user is logged in, and optionally
+// whether they are "logged in" or allowed to be in a particular course.
+// If not, then it redirects them to the site login or course enrolment.
 
     global $CFG, $SESSION, $USER, $FULLME, $HTTP_REFERER, $PHPSESSID;
       
+    // First check that the user is logged in to the site.
     if (! (isset( $USER->loggedin ) && $USER->confirmed) ) { 
         $SESSION->wantsurl = $FULLME;
         $SESSION->fromurl = $HTTP_REFERER;
@@ -721,20 +722,28 @@ function require_login($course=0) {
             redirect("$CFG->wwwroot/login/");
         }
         die;
-    } else if ($course) {
-        if (! ($USER->student[$course] || $USER->teacher[$course] || $USER->admin ) ) {
-            if (!record_exists("course", "id", $course)) {
-                error("That course doesn't exist");
-            }
-
-            $SESSION->wantsurl = $FULLME;
-            redirect("$CFG->wwwroot/course/enrol.php?id=$course");
-            die;
-        }
     }
+    
+    // Next, check if the user can be in a particular course
+    if ($courseid) {
+        if ($USER->student[$courseid] || $USER->teacher[$courseid] || $USER->admin) {
+            update_user_in_db();
+            return;   // user is a member of this course.
+        }
+        if (! $course = get_record("course", "id", $courseid)) {
+            error("That course doesn't exist");
+        }
+        if ($course->guest && ($USER->username == "guest")) {
+            update_user_in_db();
+            return;   // user is a guest and this course allows guests
+        }
 
-    update_user_in_db();
+        // Not allowed in the course, so see if they want to enrol
+
+        $SESSION->wantsurl = $FULLME;
+        redirect("$CFG->wwwroot/course/enrol.php?id=$courseid");
+        die;
+    }
 }
 
 
@@ -794,6 +803,16 @@ function isstudent($course, $userid=0) {
     return record_exists_sql("SELECT * FROM user_students WHERE user='$userid' AND course='$course'");
 }
 
+function isguest($userid=0) {
+    global $USER;
+
+    if (!$userid) {
+        return ($USER->username == "guest");
+    }
+
+    return record_exists_sql("SELECT * FROM user WHERE user='$userid' AND username = 'guest' ");
+}
+
 
 function reset_login_count() {
     global $SESSION;
index fdd575b..d129fd6 100644 (file)
 
     require_login($course->id);
 
+    if (isguest()) {
+        error("Guests are not allowed to edit journals", $HTTP_REFERER);
+    }
+
     if (! $journal = get_record("journal", "id", $cm->instance)) {
         error("Course module is incorrect");
     }
index b5f9406..62fe719 100644 (file)
@@ -15,7 +15,6 @@
 
     require_login($course->id);
 
-
     if (! $journal = get_record("journal", "id", $cm->instance)) {
         error("Course module is incorrect");
     }
@@ -51,7 +50,6 @@
 
     if ($timenow > $timestart) {
 
-
         print_simple_box_start("center");
 
         if ($timenow < $timefinish) {
index 665389b..ab59327 100644 (file)
         error("You are not supposed to use this script like that.");
     }
 
+    if (isguest()) {
+        error("Guests are not allowed to answer surveys", $HTTP_REFERER);
+    }
+
     require_variable($id);    // Course Module ID
 
     if (! $cm = get_record("course_modules", "id", $id)) {
diff --git a/pix/i/key.gif b/pix/i/key.gif
new file mode 100755 (executable)
index 0000000..b45a1db
Binary files /dev/null and b/pix/i/key.gif differ