Uploaded image for project: 'Moodle'
  1. Moodle
  2. MDL-56053

accesslib.php get_user_access_sitewide refactoring

XMLWordPrintable

    • Icon: Improvement Improvement
    • Resolution: Fixed
    • Icon: Minor Minor
    • None
    • 2.9.6
    • Accessibility
    • None
    • MOODLE_29_STABLE

      Hello

      My English ability is very poor. I am sorry.

      I use moodle 2.9.4. My students take 5 seconds to login.

      I think it is " get_user_access_sitewide() " funtion on accesslib.php

      I change mysql query.

      it is origin source (866 line, get_user_access_sitewide, accesslib.php, moodle 2.9.4)

      foreach ($raparents as $roleid=>$ras) {

      $cp++;

      list($sqlcids, $cids) = $DB->get_in_or_equal($ras, SQL_PARAMS_NAMED, 'c'.$cp.'_');

      $params = array_merge($params, $cids);

      $params['r'.$cp] = $roleid;

      $sqls[] = "(SELECT ctx.path, rc.roleid, rc.capability, rc.permission

      FROM

      {role_capabilities} rc

      JOIN {context} ctx

      ON (ctx.id = rc.contextid)

      JOIN {context} pctx

      ON (pctx.id $sqlcids

      AND (ctx.id = pctx.id

      OR ctx.path LIKE ".$DB->sql_concat('pctx.path',"'/%'")."

      OR pctx.path LIKE ".$DB->sql_concat('ctx.path',"'/%'")."))

      LEFT JOIN {block_instances} bi

      ON (ctx.contextlevel = ".CONTEXT_BLOCK." AND bi.id = ctx.instanceid)

      LEFT JOIN {context} bpctx

      ON (bpctx.id = bi.parentcontextid)

      WHERE rc.roleid = :r{$cp}

      AND (ctx.contextlevel <= ".CONTEXT_COURSE." OR bpctx.contextlevel < ".CONTEXT_COURSE.")

      )";

      }



      I change.

      foreach ($raparents as $roleid=>$ras) {

      $cp++;

      list($sqlcids, $cids) = $DB->get_in_or_equal($ras, SQL_PARAMS_NAMED, 'c'.$cp.'_');

      $params = array_merge($params, $cids);



      $params['r1'.$cp] = $roleid;

      $params['r2'.$cp] = $roleid;

      $params['r3'.$cp] = $roleid;

      $sqls[] = "(SELECT ctx.path, rc.roleid, rc.capability, rc.permission

      FROM (SELECT contextid FROM mdl_role_capabilities rc2

      WHERE rc2.roleid = :r1{$cp}

      GROUP BY contextid) rc2

      JOIN {context} ctx

      ON (ctx.id = rc2.contextid)

      JOIN {context} pctx

      ON (pctx.id $sqlcids

      AND (ctx.id = pctx.id

      OR ctx.path LIKE ".$DB->sql_concat('pctx.path',"'/%'")."

      OR pctx.path LIKE ".$DB->sql_concat('ctx.path',"'/%'")."))

      JOIN {role_capabilities}

      rc

      ON (rc2.contextid = rc.contextid AND rc.roleid = :r2{$cp})

      LEFT JOIN

      {block_instances}

      bi

      ON (ctx.contextlevel = ".CONTEXT_BLOCK." AND bi.id = ctx.instanceid)

      LEFT JOIN

      {context}

      bpctx

      ON (bpctx.id = bi.parentcontextid)

      WHERE rc.roleid = :r3{$cp}

      AND (ctx.contextlevel <= ".CONTEXT_COURSE." OR bpctx.contextlevel < ".CONTEXT_COURSE.")

      )";

      }

      I want to know It is OK?

      please verify my source code

            timhunt Tim Hunt
            elearnearpark Ki-won Park
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:

                Error rendering 'clockify-timesheets-time-tracking-reports:timer-sidebar'. Please contact your Jira administrators.