]> git.mjollnir.org Git - moodle.git/commitdiff
Editing teacher can now subscribe users to a forum, see http://moodle.org/mod/forum...
authorgustav_delius <gustav_delius>
Sun, 15 Aug 2004 12:38:29 +0000 (12:38 +0000)
committergustav_delius <gustav_delius>
Sun, 15 Aug 2004 12:38:29 +0000 (12:38 +0000)
lang/en/forum.php
mod/forum/lib.php
mod/forum/subscriber.html [new file with mode: 0644]
mod/forum/subscribers.php

index 828a5387155b893ccd0a8aed0c7618b48e8935a4..8ef3c0420066656a6658706426c0fae085072272 100644 (file)
@@ -43,6 +43,7 @@ $string['editing'] = 'Editing';
 $string['emptymessage'] = 'Something was wrong with your post.  Perhaps you left it blank, or the attachment was too big.  Your changes have NOT been saved.';
 $string['everyonecanchoose'] = 'Everyone can choose to be subscribed';
 $string['everyoneissubscribed'] = 'Everyone is subscribed to this forum';
+$string['existingsubscribers'] = 'Existing subscribers';
 $string['forcesubscribe'] = 'Force everyone to be subscribed';
 $string['forcesubscribeq'] = 'Force everyone to be subscribed?';
 $string['forum'] = 'Forum';
@@ -101,6 +102,7 @@ $string['postrating3'] = 'Mostly Connected Knowing';
 $string['posts'] = 'Posts';
 $string['posttoforum'] = 'Post to forum';
 $string['postupdated'] = 'Your post was updated';
+$string['potentialsubscribers'] = 'Potential subscribers';
 $string['processingpost'] = 'Processing post $a';
 $string['processingdigest'] = 'Processing email digest for user $a';
 $string['prune'] = 'Split';
index c11d7dc92e4493f0979a1142dcd4af3ffc2a346f..dd3fa71958a5a8506e78c1f2a206cff1488ae1fa 100644 (file)
@@ -2809,4 +2809,23 @@ function forum_change_discussionid($postid, $discussionid) {
     return true;
 }
 
+function forum_update_subscriptions_button($courseid, $forumid) {
+// Prints the editing button on subscribers page
+    global $CFG, $USER;
+
+    if (isteacheredit($courseid)) {
+        if (!empty($USER->subscriptionsediting)) {
+            $string = get_string("turneditingoff");
+            $edit = "off";
+        } else {
+            $string = get_string("turneditingon");
+            $edit = "on";
+        }
+        return "<form target=\"$CFG->framename\" method=\"get\" action=\"$CFG->wwwroot/mod/forum/subscribers.php\">".
+               "<input type=\"hidden\" name=\"id\" value=\"$forumid\" />".
+               "<input type=\"hidden\" name=\"edit\" value=\"$edit\" />".
+               "<input type=\"submit\" value=\"$string\" /></form>";
+    }
+}
+
 ?>
diff --git a/mod/forum/subscriber.html b/mod/forum/subscriber.html
new file mode 100644 (file)
index 0000000..1a67a85
--- /dev/null
@@ -0,0 +1,80 @@
+
+<form name="subscriberform" id="subscriberform" method="post" action="subscribers.php">
+<input type="hidden" name="previoussearch" value="<?php echo $previoussearch ?>">
+<input type="hidden" name="id" value="<?php echo $id?>">
+  <table align="center" border="0" cellpadding="5" cellspacing="0">
+    <tr>
+      <td valign="top">
+          <?php echo count($subscribers) . " ". $strexistingsubscribers ?>
+      </td>
+      <td></td>
+      <td valign="top">
+          <?php echo $usercount . " " . $strpotentialsubscribers ?>
+      </td>
+    </tr>
+    <tr>
+      <td valign="top">
+          <select name="removeselect[]" size="20" id="removeselect" multiple
+                  onFocus="document.subscriberform.add.disabled=true;
+                           document.subscriberform.remove.disabled=false;
+                           document.subscriberform.addselect.selectedIndex=-1;">
+          <?php 
+              foreach ($subscribers as $subscriber) {
+                  $fullname = fullname($subscriber, true);
+                  echo "<option value=\"$subscriber->id\">".$fullname.", ".$subscriber->email."</option>\n";
+              }
+          ?>
+          
+          </select></td>
+      <td valign="top">
+        <br />
+        <input name="add" type="submit" id="add" value="&larr;" />
+        <br />
+        <input name="remove" type="submit" id="remove" value="&rarr;" />
+        <br />
+      </td>
+      <td valign="top">
+          <select name="addselect[]" size="20" id="addselect" multiple
+                  onFocus="document.subscriberform.add.disabled=false;
+                           document.subscriberform.remove.disabled=true;
+                           document.subscriberform.removeselect.selectedIndex=-1;">
+          <?php
+              if (!empty($searchusers)) {
+                  echo "<optgroup label=\"$strsearchresults (" . count($searchusers) . ")\">\n";
+                  foreach ($searchusers as $user) {
+                      $fullname = fullname($user, true);
+                      echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
+                  }
+                  echo "</optgroup>\n";
+              }
+              if (!empty($users)) {
+                  foreach ($users as $user) {
+                      $fullname = fullname($user, true);
+                      echo "<option value=\"$user->id\">".$fullname.", ".$user->email."</option>\n";
+                  }
+              }
+          ?>
+         </select>
+         <br />
+         <input type="text" name="searchtext" size="30" value="<?php echo $searchtext ?>" 
+                  onFocus ="document.subscriberform.add.disabled=true;
+                            document.subscriberform.remove.disabled=true;
+                            document.subscriberform.removeselect.selectedIndex=-1;
+                            document.subscriberform.addselect.selectedIndex=-1;"
+                  onkeydown = "var keyCode = event.which ? event.which : event.keyCode;
+                               if (keyCode == 13) {
+                                    document.subscriberform.previoussearch.value=1;
+                                    document.subscriberform.submit();
+                               } " />
+         <input name="search" id="search" type="submit" value="<?php p($strsearch) ?>" />
+         <?php
+              if (!empty($searchusers)) {
+                  echo '<input name="showall" id="showall" type="submit" value="'.$strshowall.'" />'."\n";
+              }
+         ?>
+       </td>
+    </tr>
+  </table>
+</form>
+
+
index 6f1c8cb3472aac23a91de7b3c62d069dfaf37d7a..a398dfc9ad3818a265c3edbe0e72f0c0d0b3873a 100644 (file)
@@ -7,6 +7,8 @@
     optional_variable($subscribe, '');    // 'all' or 'none'
     optional_variable($unsubscribe, '');  // a single user id
     optional_variable($group);            // change of group
+    
+    optional_variable($edit);     // Turn editing on and off
 
     if (! $forum = get_record("forum", "id", $id)) {
         error("Forum ID is incorrect");
     unset($SESSION->fromdiscussion);
 
     add_to_log($course->id, "forum", "view subscribers", "subscribers.php?id=$forum->id", $forum->id, $cm->id);
+    
+    if (isteacheredit($course->id)) {
+        if (isset($_GET['edit'])) {
+            if($edit == "on") {
+                $USER->subscriptionsediting = true;
+            } else {
+                $USER->subscriptionsediting = false;
+            }
+        }
+    } else {
+        $USER->subscriptionsediting = false;
+    }
 
     $strunsubscribeshort = get_string("unsubscribeshort", "forum");
     $strsubscribeall = get_string("subscribeall", "forum");
 
     if ($course->category) {
         $navigation = "<a href=\"../../course/view.php?id=$course->id\">$course->shortname</a> ->
-          <a href=\"index.php?id=$course->id\">$strforums</a> -> 
-          <a href=\"view.php?f=$forum->id\">$forum->name</a> -> $strsubscribers";
+       <a href=\"index.php?id=$course->id\">$strforums</a> -> 
+       <a href=\"view.php?f=$forum->id\">$forum->name</a> -> $strsubscribers";
     } else {
         $navigation = "<a href=\"index.php?id=$course->id\">$strforums</a> -> 
-          <a href=\"view.php?f=$forum->id\">$forum->name</a> -> $strsubscribers";
+       <a href=\"view.php?f=$forum->id\">$forum->name</a> -> $strsubscribers";
     }
 
-    print_header("$course->shortname: $strsubscribers", "$course->fullname", "$navigation");
-
+    print_header("$course->shortname: $strsubscribers", "$course->fullname", "$navigation"
+        "", "", true, forum_update_subscriptions_button($course->id, $id));
 
+    if (empty($USER->subscriptionsediting)) {         /// Display an overview of subscribers
+    
 /// Check to see if groups are being used in this forum
-    if ($groupmode = groupmode($course, $cm)) {   // Groups are being used
-        $currentgroup = setup_and_print_groups($course, $groupmode, "subscribers.php?id=$forum->id");
-    } else {
-        $currentgroup = false;
-    }
-
-    if ($subscribe == 'all') {
-        if ($forum->type == 'teacher') {
-            $users = get_course_teachers($course->id);
-        } elseif ($currentgroup) {
-            $users = get_group_users($currentgroup);
+        if ($groupmode = groupmode($course, $cm)) {   // Groups are being used
+            $currentgroup = setup_and_print_groups($course, $groupmode, "subscribers.php?id=$forum->id");
         } else {
-            $users = get_course_users($course->id);
+            $currentgroup = false;
         }
-        if ($users) {
-            foreach ($users as $user) {
-                forum_subscribe($user->id, $forum->id);
+    
+        if ($subscribe == 'all') {
+            if ($forum->type == 'teacher') {
+                $users = get_course_teachers($course->id);
+            } elseif ($currentgroup) {
+                $users = get_group_users($currentgroup);
+            } else {
+                $users = get_course_users($course->id);
             }
-        }
-    } else if ($subscribe == 'none') {
-        if ($currentgroup) {
-            if ($users = get_group_users($currentgroup)) {
+            if ($users) {
                 foreach ($users as $user) {
-       forum_unsubscribe($user->id, $forum->id);
+                    forum_subscribe($user->id, $forum->id);
+                }
+            }
+        } else if ($subscribe == 'none') {
+            if ($currentgroup) {
+                if ($users = get_group_users($currentgroup)) {
+                    foreach ($users as $user) {
+                        forum_unsubscribe($user->id, $forum->id);
+                    }
                 }
+            } else {
+                delete_records("forum_subscriptions", "forum", $forum->id);
             }
+        }
+    
+        if ($unsubscribe) {
+            if ($user = get_record('user', 'id', $unsubscribe)) {
+                forum_unsubscribe($user->id, $forum->id);
+                $info->name  = fullname($user);
+                $info->forum = $forum->name;
+                notify(get_string("nownotsubscribed", "forum", $info));
+            }
+        }
+    
+        if (! $users = forum_subscribed_users($course, $forum, $currentgroup) ) {
+    
+            if (!$forum->forcesubscribe) {
+                echo '<center>';
+                $options['id'] = $forum->id;
+                $options['subscribe'] = 'all';
+                print_single_button('subscribers.php', $options, $strsubscribeall);
+                echo '</center>';
+            }
+    
+            print_heading(get_string("nosubscribers", "forum"));
+    
         } else {
-            delete_records("forum_subscriptions", "forum", $forum->id);
+    
+            if (!$forum->forcesubscribe) {
+                echo '<table align="center"><tr>';
+                echo '<td>';
+                $options['id'] = $forum->id;
+                $options['subscribe'] = 'all';
+                print_single_button('subscribers.php', $options, $strsubscribeall);
+                echo '</td>';
+                echo '<td>';
+                $options['subscribe'] = 'none';
+                print_single_button('subscribers.php', $options, $strsubscribenone);
+                echo '</td>';
+                echo '</tr></table>';
+            }
+    
+            print_heading(get_string("subscribersto","forum", "'$forum->name'"));
+    
+            echo '<table align="center" cellpadding="5" cellspacing="5">';
+            foreach ($users as $user) {
+                echo "<tr><td>";
+                print_user_picture($user->id, $course->id, $user->picture);
+                echo "</td><td bgcolor=\"$THEME->cellcontent\">";
+                echo "$user->firstname $user->lastname";
+                echo "</td><td bgcolor=\"$THEME->cellcontent\">";
+                echo "$user->email";
+                echo "</td><td>";
+                echo "<font size=1><a href=\"subscribers.php?id=$forum->id&unsubscribe=$user->id\">$strunsubscribeshort</a></font>";
+                echo "</td></tr>";
+            }
+            echo "</table>";
         }
+    
+        print_footer($course);
+        exit;
     }
 
-    if ($unsubscribe) {
-        if ($user = get_record('user', 'id', $unsubscribe)) {
-            forum_unsubscribe($user->id, $forum->id);
-            $info->name  = fullname($user);
-            $info->forum = $forum->name;
-            notify(get_string("nownotsubscribed", "forum", $info));
-        }
+/// We are in editing mode.
+
+    if (!isteacheredit($course->id)) {
+        error("You must be an editing teacher in this course, or an admin");
     }
 
-    if (! $users = forum_subscribed_users($course, $forum, $currentgroup) ) {
+    $strexistingsubscribers   = get_string("existingsubscribers", 'forum');
+    $strpotentialsubscribers  = get_string("potentialsubscribers", 'forum');
+    $straddsubscriber    = get_string("addsubscriber", 'forum');
+    $strremovesubscriber = get_string("removesubscriber", 'forum');
+    $strsearch        = get_string("search");
+    $strsearchresults  = get_string("searchresults");
+    $strshowall = get_string("showall");
+    $strsubscribers = get_string("subscribers", "forum");
+    $strforums      = get_string("forums", "forum");
 
-        if (!$forum->forcesubscribe) {
-            echo '<center>';
-            $options['id'] = $forum->id;
-            $options['subscribe'] = 'all';
-            print_single_button('subscribers.php', $options, $strsubscribeall);
-            echo '</center>';
-        }
+    if ($frm = data_submitted()) {
 
-        print_heading(get_string("nosubscribers", "forum"));
+/// A form was submitted so process the input
 
-    } else {
+        if (!empty($frm->add) and !empty($frm->addselect)) {
 
-        if (!$forum->forcesubscribe) {
-            echo '<table align="center"><tr>';
-            echo '<td>';
-            $options['id'] = $forum->id;
-            $options['subscribe'] = 'all';
-            print_single_button('subscribers.php', $options, $strsubscribeall);
-            echo '</td>';
-            echo '<td>';
-            $options['subscribe'] = 'none';
-            print_single_button('subscribers.php', $options, $strsubscribenone);
-            echo '</td>';
-            echo '</tr></table>';
+            foreach ($frm->addselect as $addsubscriber) {
+                if (! forum_subscribe($addsubscriber, $id)) {
+                    error("Could not add subscriber with id $addsubscriber to this forum!");
+                }
+            }
+        } else if (!empty($frm->remove) and !empty($frm->removeselect)) {
+            foreach ($frm->removeselect as $removesubscriber) {
+                if (! forum_unsubscribe($removesubscriber, $id)) {
+                    error("Could not remove subscriber with id $removesubscriber from this forum!");
+                }
+            }
+        } else if (!empty($frm->showall)) {
+            unset($frm->searchtext);
+            $frm->previoussearch = 0;
         }
+    }
+
+    $previoussearch = (!empty($frm->search) or ($frm->previoussearch == 1)) ;
+
+/// Get all existing subscribers for this forum.
+    if (!$subscribers = forum_subscribed_users($course, $forum)) {
+        $subscribers = array();
+    }
+    
+    $subscriberarray = array();
+    foreach ($subscribers as $subscriber) {
+        $subscriberarray[] = $subscriber->id;
+    }
+    $subscriberlist = implode(',', $subscriberarray);
+    
+    unset($subscriberarray);
 
-        print_heading(get_string("subscribersto","forum", "'$forum->name'"));
-
-        echo '<table align="center" cellpadding="5" cellspacing="5">';
-        foreach ($users as $user) {
-            echo "<tr><td>";
-            print_user_picture($user->id, $course->id, $user->picture);
-            echo "</td><td bgcolor=\"$THEME->cellcontent\">";
-            echo "$user->firstname $user->lastname";
-            echo "</td><td bgcolor=\"$THEME->cellcontent\">";
-            echo "$user->email";
-            echo "</td><td>";
-            echo "<font size=1><a href=\"subscribers.php?id=$forum->id&unsubscribe=$user->id\">$strunsubscribeshort</a></font>";
-            echo "</td></tr>";
+/// Get search results excluding any users already subscribed
+    switch ($CFG->dbtype) {
+        case "mysql":
+             $fullname = " CONCAT(u.firstname,\" \",u.lastname) ";
+             $LIKE = "LIKE";
+             break;
+        case "postgres7":
+             $fullname = " u.firstname||' '||u.lastname ";
+             $LIKE = "ILIKE";
+             break;
+        default: 
+             $fullname = " u.firstname||\" \"||u.lastname ";
+             $LIKE = "ILIKE";
+    }
+    if (!empty($subscriberlist)) {
+        $except = " AND u.id NOT IN ($subscriberlist) ";
+    } else {
+        $except = '';
+    }
+    if (!empty($frm->searchtext) and $previoussearch) {
+        $searchusers = get_records_sql("SELECT u.id, u.firstname, u.lastname, u.email
+                              FROM {$CFG->prefix}user u, 
+                                   {$CFG->prefix}user_students s
+                              WHERE s.course = '$course->id' AND s.userid = u.id AND u.deleted = '0'
+                                  AND ($fullname $LIKE '%$frm->searchtext%' OR u.email $LIKE '%$frm->searchtext%')
+                                  $except
+                              UNION
+                              SELECT u.id, u.firstname, u.lastname, u.email
+                              FROM {$CFG->prefix}user u, 
+                                   {$CFG->prefix}user_teachers s
+                              WHERE s.course = '$course->id' AND s.userid = u.id AND u.deleted = '0'
+                                  AND ($fullname $LIKE '%$frm->searchtext%' OR u.email $LIKE '%$frm->searchtext%')
+                                  $except
+                              ORDER BY u.firstname ASC, u.lastname ASC");
+
+        $usercount = count_records_sql("SELECT COUNT(*)
+                              FROM {$CFG->prefix}user u, 
+                                   {$CFG->prefix}user_students s
+                              WHERE s.course = '$course->id' AND s.userid = u.id AND u.deleted = '0'
+                                  $except") +
+                     count_records_sql("SELECT COUNT(*)
+                              FROM {$CFG->prefix}user u, 
+                                   {$CFG->prefix}user_teachers s
+                              WHERE s.course = '$course->id' AND s.userid = u.id AND u.deleted = '0'
+                                  $except");
+    }
+    
+/// If no search results then get potential subscribers for this forum excluding users already subscribed
+    if (empty($searchusers)) {
+        if (!$users = get_records_sql("SELECT u.id, u.firstname, u.lastname, u.email
+                              FROM {$CFG->prefix}user u, 
+                                   {$CFG->prefix}user_students s
+                              WHERE s.course = '$course->id' AND s.userid = u.id AND u.deleted = '0'
+                                  $except
+                              UNION
+                              SELECT u.id, u.firstname, u.lastname, u.email
+                              FROM {$CFG->prefix}user u, 
+                                   {$CFG->prefix}user_teachers s
+                              WHERE s.course = '$course->id' AND s.userid = u.id AND u.deleted = '0'
+                                  $except
+                              ORDER BY u.firstname ASC, u.lastname ASC")) {
+            $users = array();
         }
-        echo "</table>";
+        $usercount = count($users);
     }
 
-    print_footer($course);
+
+    
+
+    $searchtext = (isset($frm->searchtext)) ? $frm->searchtext : "";
+    $previoussearch = ($previoussearch) ? '1' : '0';
+
+    print_simple_box_start("center", "", "$THEME->cellheading");
+
+    include('subscriber.html');
+
+    print_simple_box_end();
+
+    print_footer();
 
 ?>