original_string: protected static function add_observers(array $observers, $file, $plugintype = null, $plugin = null) {
          global $CFG;
  
          foreach ($observers as $observer) {
              if (empty($observer['eventname']) or !is_string($observer['eventname'])) {
                  debugging("Invalid 'eventname' detected in $file observer definition", DEBUG_DEVELOPER);
                  continue;
              }
              if ($observer['eventname'] === '*') {
                  $observer['eventname'] = '\core\event\base';
              }
              if (strpos($observer['eventname'], '\\') !== 0) {
                  $observer['eventname'] = '\\'.$observer['eventname'];
              }
              if (empty($observer['callback'])) {
                  debugging("Invalid 'callback' detected in $file observer definition", DEBUG_DEVELOPER);
                  continue;
              }
              $o = new \stdClass();
              $o->callable = $observer['callback'];
              if (!isset($observer['priority'])) {
                  $o->priority = 0;
              } else {
                  $o->priority = (int)$observer['priority'];
              }
              if (!isset($observer['internal'])) {
                  $o->internal = true;
              } else {
                  $o->internal = (bool)$observer['internal'];
              }
              if (empty($observer['includefile'])) {
                  $o->includefile = null;
              } else {
                  if ($CFG->admin !== 'admin' and strpos($observer['includefile'], '/admin/') === 0) {
                      $observer['includefile'] = preg_replace('|^/admin/|', '/'.$CFG->admin.'/', $observer['includefile']);
                  }
                  $observer['includefile'] = $CFG->dirroot . '/' . ltrim($observer['includefile'], '/');
                  if (!file_exists($observer['includefile'])) {
                      debugging("Invalid 'includefile' detected in $file observer definition", DEBUG_DEVELOPER);
                      continue;
                  }
                  $o->includefile = $observer['includefile'];
              }
              $o->plugintype = $plugintype;
              $o->plugin = $plugin;
              self::$allobservers[$observer['eventname']][] = $o;
          }
      }
code: protected static function add_observers(array $observers, $file, $plugintype = null, $plugin = null) {
          global $CFG;
  
          foreach ($observers as $observer) {
              if (empty($observer['eventname']) or !is_string($observer['eventname'])) {
                  debugging("Invalid 'eventname' detected in $file observer definition", DEBUG_DEVELOPER);
                  continue;
              }
              if ($observer['eventname'] === '*') {
                  $observer['eventname'] = '\core\event\base';
              }
              if (strpos($observer['eventname'], '\\') !== 0) {
                  $observer['eventname'] = '\\'.$observer['eventname'];
              }
              if (empty($observer['callback'])) {
                  debugging("Invalid 'callback' detected in $file observer definition", DEBUG_DEVELOPER);
                  continue;
              }
              $o = new \stdClass();
              $o->callable = $observer['callback'];
              if (!isset($observer['priority'])) {
                  $o->priority = 0;
              } else {
                  $o->priority = (int)$observer['priority'];
              }
              if (!isset($observer['internal'])) {
                  $o->internal = true;
              } else {
                  $o->internal = (bool)$observer['internal'];
              }
              if (empty($observer['includefile'])) {
                  $o->includefile = null;
              } else {
                  if ($CFG->admin !== 'admin' and strpos($observer['includefile'], '/admin/') === 0) {
                      $observer['includefile'] = preg_replace('|^/admin/|', '/'.$CFG->admin.'/', $observer['includefile']);
                  }
                  $observer['includefile'] = $CFG->dirroot . '/' . ltrim($observer['includefile'], '/');
                  if (!file_exists($observer['includefile'])) {
                      debugging("Invalid 'includefile' detected in $file observer definition", DEBUG_DEVELOPER);
                      continue;
                  }
                  $o->includefile = $observer['includefile'];
              }
              $o->plugintype = $plugintype;
              $o->plugin = $plugin;
              self::$allobservers[$observer['eventname']][] = $o;
          }
      }
code_tokens: protected static function add_observers ( array $ observers , $ file , $ plugintype = null , $ plugin = null ) { global $ CFG ; foreach ( $ observers as $ observer ) { if ( empty ( $ observer [ 'eventname' ] ) or ! is_string ( $ observer [ 'eventname' ] ) ) { debugging ( "Invalid 'eventname' detected in $file observer definition" , DEBUG_DEVELOPER ) ; continue ; } if ( $ observer [ 'eventname' ] === '*' ) { $ observer [ 'eventname' ] = '\core\event\base' ; } if ( strpos ( $ observer [ 'eventname' ] , '\\' ) !== 0 ) { $ observer [ 'eventname' ] = '\\' . $ observer [ 'eventname' ] ; } if ( empty ( $ observer [ 'callback' ] ) ) { debugging ( "Invalid 'callback' detected in $file observer definition" , DEBUG_DEVELOPER ) ; continue ; } $ o = new \ stdClass ( ) ; $ o -> callable = $ observer [ 'callback' ] ; if ( ! isset ( $ observer [ 'priority' ] ) ) { $ o -> priority = 0 ; } else { $ o -> priority = ( int ) $ observer [ 'priority' ] ; } if ( ! isset ( $ observer [ 'internal' ] ) ) { $ o -> internal = true ; } else { $ o -> internal = ( bool ) $ observer [ 'internal' ] ; } if ( empty ( $ observer [ 'includefile' ] ) ) { $ o -> includefile = null ; } else { if ( $ CFG -> admin !== 'admin' and strpos ( $ observer [ 'includefile' ] , '/admin/' ) === 0 ) { $ observer [ 'includefile' ] = preg_replace ( '|^/admin/|' , '/' . $ CFG -> admin . '/' , $ observer [ 'includefile' ] ) ; } $ observer [ 'includefile' ] = $ CFG -> dirroot . '/' . ltrim ( $ observer [ 'includefile' ] , '/' ) ; if ( ! file_exists ( $ observer [ 'includefile' ] ) ) { debugging ( "Invalid 'includefile' detected in $file observer definition" , DEBUG_DEVELOPER ) ; continue ; } $ o -> includefile = $ observer [ 'includefile' ] ; } $ o -> plugintype = $ plugintype ; $ o -> plugin = $ plugin ; self :: $ allobservers [ $ observer [ 'eventname' ] ] [ ] = $ o ; } }
docstring: Add observers.
  @param array $observers
  @param string $file
  @param string $plugintype Plugin type of the observer.
  @param string $plugin Plugin of the observer.
docstring_tokens: Add observers .