original_string: protected function load_function_info() {
          global $DB, $USER, $CFG;
  
          if (empty($this->functionname)) {
              throw new invalid_parameter_exception('Missing function name');
          }
  
          // function must exist
          $function = external_api::external_function_info($this->functionname);
  
          if ($this->restricted_serviceid) {
              $params = array('sid1'=>$this->restricted_serviceid, 'sid2'=>$this->restricted_serviceid);
              $wscond1 = 'AND s.id = :sid1';
              $wscond2 = 'AND s.id = :sid2';
          } else {
              $params = array();
              $wscond1 = '';
              $wscond2 = '';
          }
  
          // now let's verify access control
  
          // now make sure the function is listed in at least one service user is allowed to use
          // allow access only if:
          //  1/ entry in the external_services_users table if required
          //  2/ validuntil not reached
          //  3/ has capability if specified in service desc
          //  4/ iprestriction
  
          $sql = "SELECT s.*, NULL AS iprestriction
                    FROM {external_services} s
                    JOIN {external_services_functions} sf ON (sf.externalserviceid = s.id AND s.restrictedusers = 0 AND sf.functionname = :name1)
                   WHERE s.enabled = 1 $wscond1
  
                   UNION
  
                  SELECT s.*, su.iprestriction
                    FROM {external_services} s
                    JOIN {external_services_functions} sf ON (sf.externalserviceid = s.id AND s.restrictedusers = 1 AND sf.functionname = :name2)
                    JOIN {external_services_users} su ON (su.externalserviceid = s.id AND su.userid = :userid)
                   WHERE s.enabled = 1 AND (su.validuntil IS NULL OR su.validuntil < :now) $wscond2";
          $params = array_merge($params, array('userid'=>$USER->id, 'name1'=>$function->name, 'name2'=>$function->name, 'now'=>time()));
  
          $rs = $DB->get_recordset_sql($sql, $params);
          // now make sure user may access at least one service
          $remoteaddr = getremoteaddr();
          $allowed = false;
          foreach ($rs as $service) {
              if ($service->requiredcapability and !has_capability($service->requiredcapability, $this->restricted_context)) {
                  continue; // cap required, sorry
              }
              if ($service->iprestriction and !address_in_subnet($remoteaddr, $service->iprestriction)) {
                  continue; // wrong request source ip, sorry
              }
              $allowed = true;
              break; // one service is enough, no need to continue
          }
          $rs->close();
          if (!$allowed) {
              throw new webservice_access_exception(
                      'Access to the function '.$this->functionname.'() is not allowed.
                       There could be multiple reasons for this:
                       1. The service linked to the user token does not contain the function.
                       2. The service is user-restricted and the user is not listed.
                       3. The service is IP-restricted and the user IP is not listed.
                       4. The service is time-restricted and the time has expired.
                       5. The token is time-restricted and the time has expired.
                       6. The service requires a specific capability which the user does not have.
                       7. The function is called with username/password (no user token is sent)
                       and none of the services has the function to allow the user.
                       These settings can be found in Administration > Site administration
                       > Plugins > Web services > External services and Manage tokens.');
          }
  
          // we have all we need now
          $this->function = $function;
      }
code: protected function load_function_info() {
          global $DB, $USER, $CFG;
  
          if (empty($this->functionname)) {
              throw new invalid_parameter_exception('Missing function name');
          }
  
          // function must exist
          $function = external_api::external_function_info($this->functionname);
  
          if ($this->restricted_serviceid) {
              $params = array('sid1'=>$this->restricted_serviceid, 'sid2'=>$this->restricted_serviceid);
              $wscond1 = 'AND s.id = :sid1';
              $wscond2 = 'AND s.id = :sid2';
          } else {
              $params = array();
              $wscond1 = '';
              $wscond2 = '';
          }
  
          // now let's verify access control
  
          // now make sure the function is listed in at least one service user is allowed to use
          // allow access only if:
          //  1/ entry in the external_services_users table if required
          //  2/ validuntil not reached
          //  3/ has capability if specified in service desc
          //  4/ iprestriction
  
          $sql = "SELECT s.*, NULL AS iprestriction
                    FROM {external_services} s
                    JOIN {external_services_functions} sf ON (sf.externalserviceid = s.id AND s.restrictedusers = 0 AND sf.functionname = :name1)
                   WHERE s.enabled = 1 $wscond1
  
                   UNION
  
                  SELECT s.*, su.iprestriction
                    FROM {external_services} s
                    JOIN {external_services_functions} sf ON (sf.externalserviceid = s.id AND s.restrictedusers = 1 AND sf.functionname = :name2)
                    JOIN {external_services_users} su ON (su.externalserviceid = s.id AND su.userid = :userid)
                   WHERE s.enabled = 1 AND (su.validuntil IS NULL OR su.validuntil < :now) $wscond2";
          $params = array_merge($params, array('userid'=>$USER->id, 'name1'=>$function->name, 'name2'=>$function->name, 'now'=>time()));
  
          $rs = $DB->get_recordset_sql($sql, $params);
          // now make sure user may access at least one service
          $remoteaddr = getremoteaddr();
          $allowed = false;
          foreach ($rs as $service) {
              if ($service->requiredcapability and !has_capability($service->requiredcapability, $this->restricted_context)) {
                  continue; // cap required, sorry
              }
              if ($service->iprestriction and !address_in_subnet($remoteaddr, $service->iprestriction)) {
                  continue; // wrong request source ip, sorry
              }
              $allowed = true;
              break; // one service is enough, no need to continue
          }
          $rs->close();
          if (!$allowed) {
              throw new webservice_access_exception(
                      'Access to the function '.$this->functionname.'() is not allowed.
                       There could be multiple reasons for this:
                       1. The service linked to the user token does not contain the function.
                       2. The service is user-restricted and the user is not listed.
                       3. The service is IP-restricted and the user IP is not listed.
                       4. The service is time-restricted and the time has expired.
                       5. The token is time-restricted and the time has expired.
                       6. The service requires a specific capability which the user does not have.
                       7. The function is called with username/password (no user token is sent)
                       and none of the services has the function to allow the user.
                       These settings can be found in Administration > Site administration
                       > Plugins > Web services > External services and Manage tokens.');
          }
  
          // we have all we need now
          $this->function = $function;
      }
code_tokens: protected function load_function_info ( ) { global $ DB , $ USER , $ CFG ; if ( empty ( $ this -> functionname ) ) { throw new invalid_parameter_exception ( 'Missing function name' ) ; } // function must exist $ function = external_api :: external_function_info ( $ this -> functionname ) ; if ( $ this -> restricted_serviceid ) { $ params = array ( 'sid1' => $ this -> restricted_serviceid , 'sid2' => $ this -> restricted_serviceid ) ; $ wscond1 = 'AND s.id = :sid1' ; $ wscond2 = 'AND s.id = :sid2' ; } else { $ params = array ( ) ; $ wscond1 = '' ; $ wscond2 = '' ; } // now let's verify access control // now make sure the function is listed in at least one service user is allowed to use // allow access only if: //  1/ entry in the external_services_users table if required //  2/ validuntil not reached //  3/ has capability if specified in service desc //  4/ iprestriction $ sql = "SELECT s.*, NULL AS iprestriction
                    FROM {external_services} s
                    JOIN {external_services_functions} sf ON (sf.externalserviceid = s.id AND s.restrictedusers = 0 AND sf.functionname = :name1)
                   WHERE s.enabled = 1 $wscond1
  
                   UNION
  
                  SELECT s.*, su.iprestriction
                    FROM {external_services} s
                    JOIN {external_services_functions} sf ON (sf.externalserviceid = s.id AND s.restrictedusers = 1 AND sf.functionname = :name2)
                    JOIN {external_services_users} su ON (su.externalserviceid = s.id AND su.userid = :userid)
                   WHERE s.enabled = 1 AND (su.validuntil IS NULL OR su.validuntil < :now) $wscond2" ; $ params = array_merge ( $ params , array ( 'userid' => $ USER -> id , 'name1' => $ function -> name , 'name2' => $ function -> name , 'now' => time ( ) ) ) ; $ rs = $ DB -> get_recordset_sql ( $ sql , $ params ) ; // now make sure user may access at least one service $ remoteaddr = getremoteaddr ( ) ; $ allowed = false ; foreach ( $ rs as $ service ) { if ( $ service -> requiredcapability and ! has_capability ( $ service -> requiredcapability , $ this -> restricted_context ) ) { continue ; // cap required, sorry } if ( $ service -> iprestriction and ! address_in_subnet ( $ remoteaddr , $ service -> iprestriction ) ) { continue ; // wrong request source ip, sorry } $ allowed = true ; break ; // one service is enough, no need to continue } $ rs -> close ( ) ; if ( ! $ allowed ) { throw new webservice_access_exception ( 'Access to the function ' . $ this -> functionname . '() is not allowed.
                       There could be multiple reasons for this:
                       1. The service linked to the user token does not contain the function.
                       2. The service is user-restricted and the user is not listed.
                       3. The service is IP-restricted and the user IP is not listed.
                       4. The service is time-restricted and the time has expired.
                       5. The token is time-restricted and the time has expired.
                       6. The service requires a specific capability which the user does not have.
                       7. The function is called with username/password (no user token is sent)
                       and none of the services has the function to allow the user.
                       These settings can be found in Administration > Site administration
                       > Plugins > Web services > External services and Manage tokens.' ) ; } // we have all we need now $ this -> function = $ function ; }
docstring: Fetches the function description from database,
  verifies user is allowed to use this function and
  loads all paremeters and return descriptions.
docstring_tokens: Fetches the function description from database verifies user is allowed to use this function and loads all paremeters and return descriptions .