original_string: protected static function get_calendar_event_details_by_contextlist(approved_contextlist $contextlist) {
          global $DB;
  
          $userid = $contextlist->get_user()->id;
  
          list($contextsql1, $contextparams1) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
          list($contextsql2, $contextparams2) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
  
          // Calendar Events can exist at Site, Course Category, Course, Course Group, User, or Course Modules contexts.
          $params = [
              'sitecontext'       => CONTEXT_SYSTEM,
              'categorycontext'   => CONTEXT_COURSECAT,
              'coursecontext'     => CONTEXT_COURSE,
              'groupcontext'      => CONTEXT_COURSE,
              'usercontext'       => CONTEXT_USER,
              'cuserid'           => $userid,
              'modulecontext'     => CONTEXT_MODULE,
              'muserid'           => $userid
          ];
          $params += $contextparams1;
          $params += $contextparams2;
  
          // Get Calendar Events details for the approved contexts and the owner.
          $sql = "SELECT ctxid as contextid,
                         details.id as eventid,
                         details.name as name,
                         details.description as description,
                         details.location as location,
                         details.eventtype as eventtype,
                         details.timestart as timestart,
                         details.timeduration as timeduration
                    FROM (
                            SELECT e.id AS id,
                                   ctx.id AS ctxid
                              FROM {context} ctx
                        INNER JOIN {event} e ON
                                   (e.eventtype = 'site' AND ctx.contextlevel = :sitecontext) OR
                                   (e.categoryid = ctx.instanceid AND e.eventtype = 'category' AND ctx.contextlevel = :categorycontext) OR
                                   (e.courseid = ctx.instanceid AND e.eventtype = 'course' AND ctx.contextlevel = :coursecontext) OR
                                   (e.courseid = ctx.instanceid AND e.eventtype = 'group' AND ctx.contextlevel = :groupcontext) OR
                                   (e.userid = ctx.instanceid AND e.eventtype = 'user' AND ctx.contextlevel = :usercontext)
                             WHERE e.userid = :cuserid
                               AND ctx.id {$contextsql1}
                             UNION
                            SELECT e.id AS id,
                                   ctx.id AS ctxid
                              FROM {context} ctx
                        INNER JOIN {course_modules} cm ON cm.id = ctx.instanceid AND ctx.contextlevel = :modulecontext
                        INNER JOIN {modules} m ON m.id = cm.module
                        INNER JOIN {event} e ON e.modulename = m.name AND e.courseid = cm.course AND e.instance = cm.instance
                             WHERE e.userid = :muserid
                               AND ctx.id {$contextsql2}
                    ) ids
                    JOIN {event} details ON details.id = ids.id
                ORDER BY ids.id";
  
          return $DB->get_recordset_sql($sql, $params);
      }
code: protected static function get_calendar_event_details_by_contextlist(approved_contextlist $contextlist) {
          global $DB;
  
          $userid = $contextlist->get_user()->id;
  
          list($contextsql1, $contextparams1) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
          list($contextsql2, $contextparams2) = $DB->get_in_or_equal($contextlist->get_contextids(), SQL_PARAMS_NAMED);
  
          // Calendar Events can exist at Site, Course Category, Course, Course Group, User, or Course Modules contexts.
          $params = [
              'sitecontext'       => CONTEXT_SYSTEM,
              'categorycontext'   => CONTEXT_COURSECAT,
              'coursecontext'     => CONTEXT_COURSE,
              'groupcontext'      => CONTEXT_COURSE,
              'usercontext'       => CONTEXT_USER,
              'cuserid'           => $userid,
              'modulecontext'     => CONTEXT_MODULE,
              'muserid'           => $userid
          ];
          $params += $contextparams1;
          $params += $contextparams2;
  
          // Get Calendar Events details for the approved contexts and the owner.
          $sql = "SELECT ctxid as contextid,
                         details.id as eventid,
                         details.name as name,
                         details.description as description,
                         details.location as location,
                         details.eventtype as eventtype,
                         details.timestart as timestart,
                         details.timeduration as timeduration
                    FROM (
                            SELECT e.id AS id,
                                   ctx.id AS ctxid
                              FROM {context} ctx
                        INNER JOIN {event} e ON
                                   (e.eventtype = 'site' AND ctx.contextlevel = :sitecontext) OR
                                   (e.categoryid = ctx.instanceid AND e.eventtype = 'category' AND ctx.contextlevel = :categorycontext) OR
                                   (e.courseid = ctx.instanceid AND e.eventtype = 'course' AND ctx.contextlevel = :coursecontext) OR
                                   (e.courseid = ctx.instanceid AND e.eventtype = 'group' AND ctx.contextlevel = :groupcontext) OR
                                   (e.userid = ctx.instanceid AND e.eventtype = 'user' AND ctx.contextlevel = :usercontext)
                             WHERE e.userid = :cuserid
                               AND ctx.id {$contextsql1}
                             UNION
                            SELECT e.id AS id,
                                   ctx.id AS ctxid
                              FROM {context} ctx
                        INNER JOIN {course_modules} cm ON cm.id = ctx.instanceid AND ctx.contextlevel = :modulecontext
                        INNER JOIN {modules} m ON m.id = cm.module
                        INNER JOIN {event} e ON e.modulename = m.name AND e.courseid = cm.course AND e.instance = cm.instance
                             WHERE e.userid = :muserid
                               AND ctx.id {$contextsql2}
                    ) ids
                    JOIN {event} details ON details.id = ids.id
                ORDER BY ids.id";
  
          return $DB->get_recordset_sql($sql, $params);
      }
code_tokens: protected static function get_calendar_event_details_by_contextlist ( approved_contextlist $ contextlist ) { global $ DB ; $ userid = $ contextlist -> get_user ( ) -> id ; list ( $ contextsql1 , $ contextparams1 ) = $ DB -> get_in_or_equal ( $ contextlist -> get_contextids ( ) , SQL_PARAMS_NAMED ) ; list ( $ contextsql2 , $ contextparams2 ) = $ DB -> get_in_or_equal ( $ contextlist -> get_contextids ( ) , SQL_PARAMS_NAMED ) ; // Calendar Events can exist at Site, Course Category, Course, Course Group, User, or Course Modules contexts. $ params = [ 'sitecontext' => CONTEXT_SYSTEM , 'categorycontext' => CONTEXT_COURSECAT , 'coursecontext' => CONTEXT_COURSE , 'groupcontext' => CONTEXT_COURSE , 'usercontext' => CONTEXT_USER , 'cuserid' => $ userid , 'modulecontext' => CONTEXT_MODULE , 'muserid' => $ userid ] ; $ params += $ contextparams1 ; $ params += $ contextparams2 ; // Get Calendar Events details for the approved contexts and the owner. $ sql = "SELECT ctxid as contextid,
                         details.id as eventid,
                         details.name as name,
                         details.description as description,
                         details.location as location,
                         details.eventtype as eventtype,
                         details.timestart as timestart,
                         details.timeduration as timeduration
                    FROM (
                            SELECT e.id AS id,
                                   ctx.id AS ctxid
                              FROM {context} ctx
                        INNER JOIN {event} e ON
                                   (e.eventtype = 'site' AND ctx.contextlevel = :sitecontext) OR
                                   (e.categoryid = ctx.instanceid AND e.eventtype = 'category' AND ctx.contextlevel = :categorycontext) OR
                                   (e.courseid = ctx.instanceid AND e.eventtype = 'course' AND ctx.contextlevel = :coursecontext) OR
                                   (e.courseid = ctx.instanceid AND e.eventtype = 'group' AND ctx.contextlevel = :groupcontext) OR
                                   (e.userid = ctx.instanceid AND e.eventtype = 'user' AND ctx.contextlevel = :usercontext)
                             WHERE e.userid = :cuserid
                               AND ctx.id {$contextsql1}
                             UNION
                            SELECT e.id AS id,
                                   ctx.id AS ctxid
                              FROM {context} ctx
                        INNER JOIN {course_modules} cm ON cm.id = ctx.instanceid AND ctx.contextlevel = :modulecontext
                        INNER JOIN {modules} m ON m.id = cm.module
                        INNER JOIN {event} e ON e.modulename = m.name AND e.courseid = cm.course AND e.instance = cm.instance
                             WHERE e.userid = :muserid
                               AND ctx.id {$contextsql2}
                    ) ids
                    JOIN {event} details ON details.id = ids.id
                ORDER BY ids.id" ; return $ DB -> get_recordset_sql ( $ sql , $ params ) ; }
docstring: Helper function to return the Calendar Events for a given user and context list.
  
  @param approved_contextlist $contextlist
  @return array
  @throws \coding_exception
  @throws \dml_exception
docstring_tokens: Helper function to return the Calendar Events for a given user and context list .