]> git.mjollnir.org Git - moodle.git/commitdiff
changing sql calls from user_students table to role_assignments table
authortoyomoyo <toyomoyo>
Thu, 14 Sep 2006 09:08:07 +0000 (09:08 +0000)
committertoyomoyo <toyomoyo>
Thu, 14 Sep 2006 09:08:07 +0000 (09:08 +0000)
admin/register.php
blog/lib.php
course/report/stats/report.php
file.php
lib/accesslib.php
lib/datalib.php
lib/moodlelib.php
mod/assignment/lib.php
mod/hotpot/report.php

index bf9ffc834d1bdfdcbfb1206f1d6b54f8afc62828..33bf0837eed63588cf2434334b9c8742f7c55420 100644 (file)
     echo "<input type=\"hidden\" name=\"users\" value=\"$count\">\n";
     echo '<br />';
 
-    $count = count_records('user_students');
-    echo get_string("enrolments").": ".$count;
-    echo "<input type=\"hidden\" name=\"enrolments\" value=\"$count\">\n";
+    // total number of role assignments
+    $count = count_records('role_assignments'); 
+    echo get_string("roleassignments").": ".$count;
+    echo "<input type=\"hidden\" name=\"roleassignments\" value=\"$count\">\n";
     echo '<br />';
 
-    $count = count_records('user_teachers');
-    echo get_string("teachers").": ".$count;
-    echo "<input type=\"hidden\" name=\"teachers\" value=\"$count\">\n";
+    // first find all distinct roles with mod/course:update
+    // please change the name and strings to something appropriate to reflect the new data collected
+    $sql = "SLECT COUNT(DISTINCT u.id)
+            FROM {$CFG->prefix}role_capabilities rc, 
+                 {$CFG->prefix}role_assignments ra,
+                 {$CFG->prefix}user u
+            WHERE (rc.capability = 'mod/course:update' or rc.capability='moodle/site:doanything')
+                   AND rc.roleid = ra.roleid
+                   AND u.id = ra.userid";
+    
+    $count = count_records_sql($sql);
+    echo get_string("courseupdates").": ".$count;
+    echo "<input type=\"hidden\" name=\"courseupdates\" value=\"$count\">\n";
     echo '<br />';
 
     $count = count_records('forum_posts');
index d49f3fe02c0ae0d9108729348bdcb7b44e50e04c..58e2bf5e4de33bc8b0375cfa0ecbaa6b15584162 100755 (executable)
                     
                     // all users with a role assigned
                     $context = get_context_instance(CONTEXT_COURSE, $filterselect);
-                    if ($parents = get_parent_contexts($context)) {
-                        $contextlists = 'OR ra.contextid IN ('.implode(',', $parents).'))';  
-                    } else {
-                        $contextlists = ')';
-                    }      
                     
                     $SQL = '(SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql
                             .$CFG->prefix.'role_assignments ra, '.$CFG->prefix.'user u
                             WHERE p.userid = ra.userid '.$tagquerysql.'
-                            AND (ra.contextid = '.$context->id.' '.$contextlists.'
+                            AND ra.contextid '.get_related_contexts_string($context).'
                             AND u.id = p.userid
                             AND (p.publishstate = \'site\' OR p.publishstate = \'public\' OR p.userid = '.$USER->id.'))';
                 } else {
index cfbc8122900324604028965518084028cb6a91cd..4e9ed321aaa7ee57e8e7f0fd6c09c8b284330d55 100644 (file)
             }
             $sql .= " ORDER BY s.roleid ";
         } else {
-            $sql = 'SELECT s.userid,u.firstname,u.lastname,u.idnumber,1 AS roleid FROM '.$CFG->prefix.'user_students s JOIN '.$CFG->prefix.'user u ON u.id = s.userid WHERE course = '.$course->id;
+            $context = get_context_instance(CONTEXT_COURSE, $course->id);
+            
+            $sql = 'SELECT ra.userid,u.firstname,u.lastname,u.idnumber,1 AS roleid 
+                    FROM '.$CFG->prefix.'role_assignments ra, 
+                         '.$CFG->prefix.'user u
+                    WHERE u.id = ra.userid 
+                          AND ra.contextid '.get_related_contexts_string($context);
         }
 
         if (!$us = get_records_sql($sql)) {
index e9e073c6250903afc7353cbbb6dba290431485f1..ee170b83fb170e2c8b8b13d1341355c9e67e4179 100644 (file)
--- a/file.php
+++ b/file.php
@@ -13,8 +13,7 @@
         $lifetime = 86400;     // Seconds for files to remain in caches
     } else {
         $lifetime = $CFG->filelifetime;
-    }
-    
+    } 
 
     $relativepath = get_file_argument('file.php');
     $forcedownload = optional_param('forcedownload', 0, PARAM_BOOL);
index 5371569c411e4fddb85f2f6a9ae99b6f558754f6..bdccb57cd2e82ca4c9c1d25fe66999f990ccc8ae 100755 (executable)
@@ -1834,7 +1834,6 @@ function role_context_capabilities($roleid, $context, $cap='') {
     return $capabilities;
 }
 
-
 /**
  * Recursive function which, given a context, find all parent context ids, 
  * and return the array in reverse order, i.e. parent first, then grand
@@ -1930,7 +1929,18 @@ function get_parent_contexts($context) {
     }
 }
 
-
+/** gets a string for sql calls, searching for stuff
+ * in this context or above
+ * @param object $context
+ * @return string
+ */
+function get_related_contexts_string($context) {
+    if ($parents = get_parent_contexts($context)) {
+        return (' IN ('.$context->id.','.implode(',', $parents).')');    
+    } else {
+        return (' ='.$context->id);
+    }
+}
 /**
  * This function gets the capability of a role in a given context.
  * It is needed when printing override forms.
index ce1932b0b222361856c3006cfb9010c31e876031..c1425b8a73912a3ddf45c7e5cbbe81cfcc8dae63 100644 (file)
@@ -111,7 +111,6 @@ function get_courses_notin_metacourse($metacourseid,$count=false) {
  * @param string $sort ?
  * @param string $exceptions ? 
  * @return object
- * @todo XXX Convert to Roles
  */
 function search_users($courseid, $groupid, $searchtext, $sort='', $exceptions='') {
     global $CFG;
@@ -149,24 +148,16 @@ function search_users($courseid, $groupid, $searchtext, $sort='', $exceptions=''
                               AND ($fullname $LIKE '%$searchtext%' OR u.email $LIKE '%$searchtext%')
                               $except $order");
         } else {
-            if (!$teachers = get_records_sql("SELECT u.id, u.firstname, u.lastname, u.email
-                          FROM {$CFG->prefix}user u,
-                               {$CFG->prefix}user_teachers s
-                          WHERE $select AND s.course = '$courseid' AND s.userid = u.id
-                              AND ($fullname $LIKE '%$searchtext%' OR u.email $LIKE '%$searchtext%')
-                              $except $order")) {
-                $teachers = array();
-            }
-            if (!$students = get_records_sql("SELECT u.id, u.firstname, u.lastname, u.email
+            $context = get_context_instance(CONTEXT_COURSE, $courseid);
+            $contextlists = get_related_contexts_string($context);
+            $users = get_records_sql("SELECT u.id, u.firstname, u.lastname, u.email
                           FROM {$CFG->prefix}user u,
-                               {$CFG->prefix}user_students s
-                          WHERE $select AND s.course = '$courseid' AND s.userid = u.id
+                               {$CFG->prefix}role_assignments ra
+                          WHERE $select AND ra.contextid $contextlists AND ra.userid = u.id
                               AND ($fullname $LIKE '%$searchtext%' OR u.email $LIKE '%$searchtext%')
-                              $except $order")) {
-                $students = array();
-            }
-            return $teachers + $students;
+                              $except $order");
         }
+        return $users;
     }
 }
 
index 5d4c947bad1c61fc9d6b3968c0d6ad8baa564b64..137b8934dead114b784b49b2fb011268411bdd43 100644 (file)
@@ -2750,6 +2750,11 @@ function remove_course_contents($courseid, $showfeedback=true) {
     include_once($CFG->libdir.'/questionlib.php');
     question_delete_course($course, $showfeedback);
 
+    // deletes all role assignments, and local override, these have no courseid in table and needs separate process
+    $context = get_context_instance(CONTEXT_COUSE, $course->id);
+    delect_records('role_assignments', 'contextid', $context->id);
+    delect_records('role_role_capabilities', 'contextid', $context->id);
+
     return $result;
 
 }
@@ -2863,6 +2868,11 @@ function reset_course_userdata($data, $showfeedback=true) {
         }
     }
 
+    // deletes all role assignments, and local override, these have no courseid in table and needs separate process
+    $context = get_context_instance(CONTEXT_COUSE, $data->courseid);
+    delect_records('role_assignments', 'contextid', $context->id);
+    delect_records('role_role_capabilities', 'contextid', $context->id);
+   
     return $result;
 }
 
index 64d863936839f42c73c74a0997850be9c3a9b4bf..b27fcbae3d7cc7c6fd342eee1db014026f795c95 100644 (file)
@@ -2129,7 +2129,17 @@ function assignment_log_info($log) {
 function assignment_get_unmailed_submissions($starttime, $endtime) {
 
     global $CFG;
+    
     return get_records_sql("SELECT s.*, a.course, a.name
+                              FROM {$CFG->prefix}assignment_submissions s, 
+                                   {$CFG->prefix}assignment a,
+                             WHERE s.mailed = 0 
+                               AND s.timemarked <= $endtime 
+                               AND s.timemarked >= $starttime
+                               AND s.assignment = a.id
+                               AND s.userid = us.userid");
+
+    /* return get_records_sql("SELECT s.*, a.course, a.name
                               FROM {$CFG->prefix}assignment_submissions s, 
                                    {$CFG->prefix}assignment a,
                                    {$CFG->prefix}user_students us
@@ -2139,6 +2149,7 @@ function assignment_get_unmailed_submissions($starttime, $endtime) {
                                AND s.assignment = a.id
                                AND s.userid = us.userid
                                AND a.course = us.course");
+    */
 }
 
 /**
@@ -2202,11 +2213,20 @@ function assignment_get_all_submissions($assignment, $sort="", $dir="DESC") {
         $sort = "a.$sort $dir";
     }
 
+    /* not sure this is needed at all since assignmenet already has a course define, so this join?
     $select = "s.course = '$assignment->course' AND";
     if ($assignment->course == SITEID) {
         $select = '';
-    }
+    }*/
+    
     return get_records_sql("SELECT a.* 
+                              FROM {$CFG->prefix}assignment_submissions a, 
+                                   {$CFG->prefix}user u
+                             WHERE u.id = a.userid
+                               AND a.assignment = '$assignment->id' 
+                          ORDER BY $sort");
+    
+    /* return get_records_sql("SELECT a.* 
                               FROM {$CFG->prefix}assignment_submissions a, 
                                    {$CFG->prefix}user_students s,
                                    {$CFG->prefix}user u
@@ -2214,6 +2234,7 @@ function assignment_get_all_submissions($assignment, $sort="", $dir="DESC") {
                                AND u.id = a.userid
                                AND $select a.assignment = '$assignment->id' 
                           ORDER BY $sort");
+    */
 }
 
 
@@ -2367,16 +2388,16 @@ function assignment_print_overview($courses, &$htmlarray) {
 
         $context = get_context_instance(CONTEXT_MODULE,$this->cm->id);
         if (has_capability('mod/assignment:grade', $context)) {
-            $submissions = count_records_sql("SELECT COUNT(*)
-                              FROM {$CFG->prefix}assignment_submissions a, 
-                                   {$CFG->prefix}user_students s,
-                                   {$CFG->prefix}user u
-                             WHERE a.userid = s.userid
-                               AND u.id = a.userid
-                               AND s.course = '{$assignment->course}'
-                               AND a.assignment = '{$assignment->id}'
-                               AND a.teacher = 0
-                               AND a.timemarked = 0");
+            
+            // count how many people can submit
+            $submissions = 0; // init
+            $students = get_users_by_capability($context, 'mod/assignment:submit');
+            foreach ($student as $student) {
+                if (get_record('assignment_submissions', 'assignment', $assignment->id, 'userid', $student->id)) {
+                    $submissions++;  
+                }
+            }
+            
             if ($submissions) {
                 $str .= get_string('submissionsnotgraded', 'assignment', $submissions);
             }
index ee97ff1fdc0956326189170aba02647cb0b38332..22f1ff682b73ed53ddaa9adf58e8aa0ab7615bc0 100644 (file)
             // add students next
 
         case 'students':
-            $student_ids = get_records_select_menu('user_students', "course IN ($course_ids)", 'course', 'id, userid');
+        
+            $contexts = array();
+            // first find all applicable contextids, put them in a bit array
+            foreach ($course_ids as $course_id) {
+                
+                $context = get_context_instance(CONTEXT_COURSE, $course_id);
+                
+                // first add self to list
+                if (!in_array($context->id, $contexts)) {
+                    $contexts[] = $context->id;
+                }
+               
+                // then add all parent contexts               
+                if ($parents = get_parent_contexts($context)) {
+                    foreach ($parents as $parent) {
+                        if (!in_array($parent->id, $contexts)) {
+                            $contexts[] = $parent->id;
+                        }
+                    }
+                }
+            }
+            
+            $contextlists = implode(',', $contexts);
+            
+            // this sort order might not make sense
+            $student_ids = get_records_select_menu('role_assignments', "contextid IN ($contextlists)", 'contextid', 'id, userid');
             if (is_array($student_ids)) {
                 $users = array_merge($users, $student_ids);
             }
@@ -439,17 +464,10 @@ function hotpot_print_report_selector(&$course, &$hotpot, &$formdata) {
         'all' => get_string('allparticipants'),
         'students' => get_string('students')
     );
-    $users = get_records_sql("
-        SELECT 
-            u.*
-        FROM 
-            {$CFG->prefix}user AS u,
-            {$CFG->prefix}user_students AS us
-        WHERE
-            u.id = us.userid AND us.course=$course->id
-        ORDER BY
-            u.lastname
-    ");
+    
+    $context = get_context_instance(CONTEXT_COURSE, $course->id);
+    $users = get_users_by_capability($context, 'mod/hotpot:attempt', 'u.*', $sort='u.lastname');
+
     if ($users) {
         $menus['reportusers'][''] = '------'; // separator
         foreach ($users as $id=>$user) {