Take out debugging & merge branch 'w05_MDL-26198_20_completion' of git://github.com...
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 31 Jan 2011 16:43:22 +0000 (17:43 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Mon, 31 Jan 2011 16:43:22 +0000 (17:43 +0100)
1  2 
lib/accesslib.php

diff --combined lib/accesslib.php
@@@ -425,11 -425,12 +425,11 @@@ function get_role_access($roleid, $acce
  
          if (!isset($ACCESSLIB_PRIVATE->croncache[$roleid])) {
              $ACCESSLIB_PRIVATE->croncache[$roleid] = array();
 -            if ($rs = $DB->get_recordset_sql($sql, $params)) {
 -                foreach ($rs as $rd) {
 -                    $ACCESSLIB_PRIVATE->croncache[$roleid][] = $rd;
 -                }
 -                $rs->close();
 +            $rs = $DB->get_recordset_sql($sql, $params);
 +            foreach ($rs as $rd) {
 +                $ACCESSLIB_PRIVATE->croncache[$roleid][] = $rd;
              }
 +            $rs->close();
          }
  
          foreach ($ACCESSLIB_PRIVATE->croncache[$roleid] as $rd) {
          }
  
      } else {
 -        if ($rs = $DB->get_recordset_sql($sql, $params)) {
 +        $rs = $DB->get_recordset_sql($sql, $params);
 +        if ($rs->valid()) {
              foreach ($rs as $rd) {
                  $k = "{$rd->path}:{$roleid}";
                  $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
              }
              unset($rd);
 -            $rs->close();
          }
 +        $rs->close();
      }
  
      return $accessdata;
@@@ -480,15 -480,14 +480,15 @@@ function get_default_frontpage_role_acc
            ORDER BY ctx.depth, ctx.path";
      $params = array($roleid, "$base/%");
  
 -    if ($rs = $DB->get_recordset_sql($sql, $params)) {
 +    $rs = $DB->get_recordset_sql($sql, $params);
 +    if ($rs->valid()) {
          foreach ($rs as $rd) {
              $k = "{$rd->path}:{$roleid}";
              $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
          }
          unset($rd);
 -        $rs->close();
      }
 +    $rs->close();
  
      return $accessdata;
  }
@@@ -1316,15 -1315,18 +1316,15 @@@ function load_subcontext($userid, $cont
      $params = array($context->id, $context->path."/%");
  
      $newrdefs = array();
 -    if ($rs = $DB->get_recordset_sql($sql, $params)) {
 -        foreach ($rs as $rd) {
 -            $k = "{$rd->path}:{$rd->roleid}";
 -            if (!array_key_exists($k, $newrdefs)) {
 -                $newrdefs[$k] = array();
 -            }
 -            $newrdefs[$k][$rd->capability] = $rd->permission;
 +    $rs = $DB->get_recordset_sql($sql, $params);
 +    foreach ($rs as $rd) {
 +        $k = "{$rd->path}:{$rd->roleid}";
 +        if (!array_key_exists($k, $newrdefs)) {
 +            $newrdefs[$k] = array();
          }
 -        $rs->close();
 -    } else {
 -        debugging('Bad SQL encountered!');
 +        $newrdefs[$k][$rd->capability] = $rd->permission;
      }
 +    $rs->close();
  
      compact_rdefs($newrdefs);
      foreach ($newrdefs as $key=>$value) {
@@@ -1387,12 -1389,13 +1387,12 @@@ function get_role_access_bycontext($rol
            ORDER BY ctx.depth ASC, ctx.path DESC, rc.roleid ASC ";
      $params = array($roleid, $context->path."/%");
  
 -    if ($rs = $DB->get_recordset_sql($sql, $params)) {
 -        foreach ($rs as $rd) {
 -            $k = "{$rd->path}:{$roleid}";
 -            $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
 -        }
 -        $rs->close();
 +    $rs = $DB->get_recordset_sql($sql, $params);
 +    foreach ($rs as $rd) {
 +        $k = "{$rd->path}:{$roleid}";
 +        $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
      }
 +    $rs->close();
  
      return $accessdata;
  }
@@@ -1612,12 -1615,13 +1612,12 @@@ function load_temp_role($context, $role
                     AND rc.roleid = ?
            ORDER BY ctx.depth, ctx.path";
      $params = array($context->path."/%", $roleid);
 -    if ($rs = $DB->get_recordset_sql($sql, $params)) {
 -        foreach ($rs as $rd) {
 -            $k = "{$rd->path}:{$roleid}";
 -            $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
 -        }
 -        $rs->close();
 +    $rs = $DB->get_recordset_sql($sql, $params);
 +    foreach ($rs as $rd) {
 +        $k = "{$rd->path}:{$roleid}";
 +        $accessdata['rdef'][$k][$rd->capability] = $rd->permission;
      }
 +    $rs->close();
  
      //
      // Say we loaded everything for the course context
@@@ -2128,11 -2132,12 +2128,11 @@@ function cleanup_contexts() 
      // transactions used only for performance reasons here
      $transaction = $DB->start_delegated_transaction();
  
 -    if ($rs = $DB->get_recordset_sql($sql)) {
 -        foreach ($rs as $ctx) {
 -            delete_context($ctx->contextlevel, $ctx->instanceid);
 -        }
 -        $rs->close();
 +    $rs = $DB->get_recordset_sql($sql);
 +    foreach ($rs as $ctx) {
 +        delete_context($ctx->contextlevel, $ctx->instanceid);
      }
 +    $rs->close();
  
      $transaction->allow_commit();
      return true;
@@@ -5330,13 -5335,16 +5330,13 @@@ function get_user_capability_course($ca
      // Note the result can be used directly as a context (we are going to), the course
      // fields are just appended.
  
 -    if (!$rs = $DB->get_recordset_sql("SELECT x.*, c.id AS courseid $fieldlist
 -                                         FROM {course} c
 -                                        INNER JOIN {context} x
 -                                              ON (c.id=x.instanceid AND x.contextlevel=".CONTEXT_COURSE.")
 -                                     $orderby")) {
 -         return false;
 -    }
 -
 -    // Check capability for each course in turn
      $courses = array();
 +    $rs = $DB->get_recordset_sql("SELECT x.*, c.id AS courseid $fieldlist
 +                                    FROM {course} c
 +                                   INNER JOIN {context} x
 +                                         ON (c.id=x.instanceid AND x.contextlevel=".CONTEXT_COURSE.")
 +                                $orderby");
 +    // Check capability for each course in turn
      foreach ($rs as $coursecontext) {
          if (has_capability($capability, $coursecontext, $userid, $doanything)) {
              // We've got the capability. Make the record look like a course record
          }
      }
      $rs->close();
 -    return $courses;
 +    return empty($courses) ? false : $courses;
  }
  
  /**
@@@ -5518,18 -5526,34 +5518,33 @@@ function get_users_from_role_on_context
  }
  
  /**
-  * Simple function returning a boolean true if roles exist, otherwise false
+  * Simple function returning a boolean true if user has roles
+  * in context or parent contexts, otherwise false.
   *
   * @param int $userid
   * @param int $roleid
-  * @param int $contextid
+  * @param int $contextid empty means any context
   * @return bool
   */
  function user_has_role_assignment($userid, $roleid, $contextid = 0) {
      global $DB;
  
      if ($contextid) {
-         return $DB->record_exists('role_assignments', array('userid'=>$userid, 'roleid'=>$roleid, 'contextid'=>$contextid));
+         if (!$context = get_context_instance_by_id($contextid)) {
+             return false;
+         }
+         $parents = get_parent_contexts($context, true);
+         list($contexts, $params) = $DB->get_in_or_equal($parents, SQL_PARAMS_NAMED, 'r0000');
+         $params['userid'] = $userid;
+         $params['roleid'] = $roleid;
+         $sql = "SELECT COUNT(ra.id)
+                   FROM {role_assignments} ra
+                  WHERE ra.userid = :userid AND ra.roleid = :roleid AND ra.contextid $contexts";
+         $count = $DB->get_field_sql($sql, $params);
 -        var_dump($count);
+         return ($count > 0);
      } else {
          return $DB->record_exists('role_assignments', array('userid'=>$userid, 'roleid'=>$roleid));
      }