original_string: private static function init() {
          if (empty(self::$eventfactory)) {
              self::$actionfactory = new action_factory();
              self::$eventmapper = new event_mapper(
                  // The event mapper we return from here needs to know how to
                  // make events, so it needs an event factory. However we can't
                  // give it the same one as we store and return in the container
                  // as that one uses all our plumbing to control event visibility.
                  //
                  // So we make a new even factory that doesn't do anyting other than
                  // return the instance.
                  new event_factory(
                      // Never apply actions, simply return.
                      function(event_interface $event) {
                          return $event;
                      },
                      // Never hide an event.
                      function() {
                          return true;
                      },
                      // Never bail out early when instantiating an event.
                      function() {
                          return false;
                      },
                      self::$coursecache,
                      self::$modulecache
                  )
              );
  
              self::$eventfactory = new event_factory(
                  [self::class, 'apply_component_provide_event_action'],
                  [self::class, 'apply_component_is_event_visible'],
                  function ($dbrow) {
                      $requestinguserid = self::get_requesting_user();
  
                      if (!empty($dbrow->categoryid)) {
                          // This is a category event. Check that the category is visible to this user.
                          $category = \core_course_category::get($dbrow->categoryid, IGNORE_MISSING, true, $requestinguserid);
  
                          if (empty($category) || !$category->is_uservisible($requestinguserid)) {
                              return true;
                          }
                      }
  
                      // At present we only have a bail-out check for events in course modules.
                      if (empty($dbrow->modulename)) {
                          return false;
                      }
  
                      $instances = get_fast_modinfo($dbrow->courseid, $requestinguserid)->instances;
  
                      // If modinfo doesn't know about the module, we should ignore it.
                      if (!isset($instances[$dbrow->modulename]) || !isset($instances[$dbrow->modulename][$dbrow->instance])) {
                          return true;
                      }
  
                      $cm = $instances[$dbrow->modulename][$dbrow->instance];
  
                      // If the module is not visible to the current user, we should ignore it.
                      // We have to check enrolment here as well because the uservisible check
                      // looks for the "view" capability however some activities (such as Lesson)
                      // have that capability set on the "Authenticated User" role rather than
                      // on "Student" role, which means uservisible returns true even when the user
                      // is no longer enrolled in the course.
                      // So, with the following we are checking -
                      // 1) Only process modules if $cm->uservisible is true.
                      // 2) Only process modules for courses a user has the capability to view OR they are enrolled in.
                      // 3) Only process modules for courses that are visible OR if the course is not visible, the user
                      //    has the capability to view hidden courses.
                      if (!$cm->uservisible) {
                          return true;
                      }
  
                      $coursecontext = \context_course::instance($dbrow->courseid);
                      if (!$cm->get_course()->visible &&
                              !has_capability('moodle/course:viewhiddencourses', $coursecontext, $requestinguserid)) {
                          return true;
                      }
  
                      if (!has_capability('moodle/course:view', $coursecontext, $requestinguserid) &&
                              !is_enrolled($coursecontext, $requestinguserid)) {
                          return true;
                      }
  
                      // Ok, now check if we are looking at a completion event.
                      if ($dbrow->eventtype === \core_completion\api::COMPLETION_EVENT_TYPE_DATE_COMPLETION_EXPECTED) {
                          // Need to have completion enabled before displaying these events.
                          $course = new \stdClass();
                          $course->id = $dbrow->courseid;
                          $completion = new \completion_info($course);
  
                          return (bool) !$completion->is_enabled($cm);
                      }
  
                      return false;
                  },
                  self::$coursecache,
                  self::$modulecache
              );
          }
  
          if (empty(self::$eventvault)) {
              self::$eventretrievalstrategy = new raw_event_retrieval_strategy();
              self::$eventvault = new event_vault(self::$eventfactory, self::$eventretrievalstrategy);
          }
      }
code: private static function init() {
          if (empty(self::$eventfactory)) {
              self::$actionfactory = new action_factory();
              self::$eventmapper = new event_mapper(
                  // The event mapper we return from here needs to know how to
                  // make events, so it needs an event factory. However we can't
                  // give it the same one as we store and return in the container
                  // as that one uses all our plumbing to control event visibility.
                  //
                  // So we make a new even factory that doesn't do anyting other than
                  // return the instance.
                  new event_factory(
                      // Never apply actions, simply return.
                      function(event_interface $event) {
                          return $event;
                      },
                      // Never hide an event.
                      function() {
                          return true;
                      },
                      // Never bail out early when instantiating an event.
                      function() {
                          return false;
                      },
                      self::$coursecache,
                      self::$modulecache
                  )
              );
  
              self::$eventfactory = new event_factory(
                  [self::class, 'apply_component_provide_event_action'],
                  [self::class, 'apply_component_is_event_visible'],
                  function ($dbrow) {
                      $requestinguserid = self::get_requesting_user();
  
                      if (!empty($dbrow->categoryid)) {
                          // This is a category event. Check that the category is visible to this user.
                          $category = \core_course_category::get($dbrow->categoryid, IGNORE_MISSING, true, $requestinguserid);
  
                          if (empty($category) || !$category->is_uservisible($requestinguserid)) {
                              return true;
                          }
                      }
  
                      // At present we only have a bail-out check for events in course modules.
                      if (empty($dbrow->modulename)) {
                          return false;
                      }
  
                      $instances = get_fast_modinfo($dbrow->courseid, $requestinguserid)->instances;
  
                      // If modinfo doesn't know about the module, we should ignore it.
                      if (!isset($instances[$dbrow->modulename]) || !isset($instances[$dbrow->modulename][$dbrow->instance])) {
                          return true;
                      }
  
                      $cm = $instances[$dbrow->modulename][$dbrow->instance];
  
                      // If the module is not visible to the current user, we should ignore it.
                      // We have to check enrolment here as well because the uservisible check
                      // looks for the "view" capability however some activities (such as Lesson)
                      // have that capability set on the "Authenticated User" role rather than
                      // on "Student" role, which means uservisible returns true even when the user
                      // is no longer enrolled in the course.
                      // So, with the following we are checking -
                      // 1) Only process modules if $cm->uservisible is true.
                      // 2) Only process modules for courses a user has the capability to view OR they are enrolled in.
                      // 3) Only process modules for courses that are visible OR if the course is not visible, the user
                      //    has the capability to view hidden courses.
                      if (!$cm->uservisible) {
                          return true;
                      }
  
                      $coursecontext = \context_course::instance($dbrow->courseid);
                      if (!$cm->get_course()->visible &&
                              !has_capability('moodle/course:viewhiddencourses', $coursecontext, $requestinguserid)) {
                          return true;
                      }
  
                      if (!has_capability('moodle/course:view', $coursecontext, $requestinguserid) &&
                              !is_enrolled($coursecontext, $requestinguserid)) {
                          return true;
                      }
  
                      // Ok, now check if we are looking at a completion event.
                      if ($dbrow->eventtype === \core_completion\api::COMPLETION_EVENT_TYPE_DATE_COMPLETION_EXPECTED) {
                          // Need to have completion enabled before displaying these events.
                          $course = new \stdClass();
                          $course->id = $dbrow->courseid;
                          $completion = new \completion_info($course);
  
                          return (bool) !$completion->is_enabled($cm);
                      }
  
                      return false;
                  },
                  self::$coursecache,
                  self::$modulecache
              );
          }
  
          if (empty(self::$eventvault)) {
              self::$eventretrievalstrategy = new raw_event_retrieval_strategy();
              self::$eventvault = new event_vault(self::$eventfactory, self::$eventretrievalstrategy);
          }
      }
code_tokens: private static function init ( ) { if ( empty ( self :: $ eventfactory ) ) { self :: $ actionfactory = new action_factory ( ) ; self :: $ eventmapper = new event_mapper ( // The event mapper we return from here needs to know how to // make events, so it needs an event factory. However we can't // give it the same one as we store and return in the container // as that one uses all our plumbing to control event visibility. // // So we make a new even factory that doesn't do anyting other than // return the instance. new event_factory ( // Never apply actions, simply return. function ( event_interface $ event ) { return $ event ; } , // Never hide an event. function ( ) { return true ; } , // Never bail out early when instantiating an event. function ( ) { return false ; } , self :: $ coursecache , self :: $ modulecache ) ) ; self :: $ eventfactory = new event_factory ( [ self :: class , 'apply_component_provide_event_action' ] , [ self :: class , 'apply_component_is_event_visible' ] , function ( $ dbrow ) { $ requestinguserid = self :: get_requesting_user ( ) ; if ( ! empty ( $ dbrow -> categoryid ) ) { // This is a category event. Check that the category is visible to this user. $ category = \ core_course_category :: get ( $ dbrow -> categoryid , IGNORE_MISSING , true , $ requestinguserid ) ; if ( empty ( $ category ) || ! $ category -> is_uservisible ( $ requestinguserid ) ) { return true ; } } // At present we only have a bail-out check for events in course modules. if ( empty ( $ dbrow -> modulename ) ) { return false ; } $ instances = get_fast_modinfo ( $ dbrow -> courseid , $ requestinguserid ) -> instances ; // If modinfo doesn't know about the module, we should ignore it. if ( ! isset ( $ instances [ $ dbrow -> modulename ] ) || ! isset ( $ instances [ $ dbrow -> modulename ] [ $ dbrow -> instance ] ) ) { return true ; } $ cm = $ instances [ $ dbrow -> modulename ] [ $ dbrow -> instance ] ; // If the module is not visible to the current user, we should ignore it. // We have to check enrolment here as well because the uservisible check // looks for the "view" capability however some activities (such as Lesson) // have that capability set on the "Authenticated User" role rather than // on "Student" role, which means uservisible returns true even when the user // is no longer enrolled in the course. // So, with the following we are checking - // 1) Only process modules if $cm->uservisible is true. // 2) Only process modules for courses a user has the capability to view OR they are enrolled in. // 3) Only process modules for courses that are visible OR if the course is not visible, the user //    has the capability to view hidden courses. if ( ! $ cm -> uservisible ) { return true ; } $ coursecontext = \ context_course :: instance ( $ dbrow -> courseid ) ; if ( ! $ cm -> get_course ( ) -> visible && ! has_capability ( 'moodle/course:viewhiddencourses' , $ coursecontext , $ requestinguserid ) ) { return true ; } if ( ! has_capability ( 'moodle/course:view' , $ coursecontext , $ requestinguserid ) && ! is_enrolled ( $ coursecontext , $ requestinguserid ) ) { return true ; } // Ok, now check if we are looking at a completion event. if ( $ dbrow -> eventtype === \ core_completion \ api :: COMPLETION_EVENT_TYPE_DATE_COMPLETION_EXPECTED ) { // Need to have completion enabled before displaying these events. $ course = new \ stdClass ( ) ; $ course -> id = $ dbrow -> courseid ; $ completion = new \ completion_info ( $ course ) ; return ( bool ) ! $ completion -> is_enabled ( $ cm ) ; } return false ; } , self :: $ coursecache , self :: $ modulecache ) ; } if ( empty ( self :: $ eventvault ) ) { self :: $ eventretrievalstrategy = new raw_event_retrieval_strategy ( ) ; self :: $ eventvault = new event_vault ( self :: $ eventfactory , self :: $ eventretrievalstrategy ) ; } }
docstring: Initialises the dependency graph if it hasn't yet been.
docstring_tokens: Initialises the dependency graph if it hasn t yet been .