original_string: protected function do_context_membership_request(Context $context, ResourceLink $resourcelink = null,
                                                       $membershipsurltemplate = '') {
          $dataconnector = $this->dataconnector;
  
          // Flag to indicate whether to save the context later.
          $contextupdated = false;
  
          // If membership URL is not set, try to generate using the default membership URL from the consumer profile.
          if (!$context->hasMembershipService()) {
              if (empty($membershipsurltemplate)) {
                  mtrace("Skipping - No membership service available.\n");
                  return false;
              }
  
              if ($resourcelink === null) {
                  $resourcelink = $dataconnector->get_resourcelink_from_context($context);
              }
  
              if ($resourcelink !== null) {
                  // Try to perform a membership service request using this resource link.
                  $resourcelinkmembers = $this->do_resourcelink_membership_request($resourcelink);
                  if ($resourcelinkmembers) {
                      // If we're able to fetch members using this resource link, return these.
                      return $resourcelinkmembers;
                  }
              }
  
              // If fetching memberships through resource link failed and we don't have a memberships URL, build one from template.
              mtrace("'custom_context_memberships_url' not set. Fetching default template: $membershipsurltemplate");
              $membershipsurl = $membershipsurltemplate;
  
              // Check if we need to fetch tool code.
              $needstoolcode = strpos($membershipsurl, '{tool_code}') !== false;
              if ($needstoolcode) {
                  $toolcode = false;
  
                  // Fetch tool code from the resource link data.
                  $lisresultsourcedidjson = $resourcelink->getSetting('lis_result_sourcedid');
                  if ($lisresultsourcedidjson) {
                      $lisresultsourcedid = json_decode($lisresultsourcedidjson);
                      if (isset($lisresultsourcedid->data->typeid)) {
                          $toolcode = $lisresultsourcedid->data->typeid;
                      }
                  }
  
                  if ($toolcode) {
                      // Substitute fetched tool code value.
                      $membershipsurl = str_replace('{tool_code}', $toolcode, $membershipsurl);
                  } else {
                      // We're unable to determine the tool code. End this processing.
                      return false;
                  }
              }
  
              // Get context_id parameter and substitute, if applicable.
              $membershipsurl = str_replace('{context_id}', $context->getId(), $membershipsurl);
  
              // Get context_type and substitute, if applicable.
              if (strpos($membershipsurl, '{context_type}') !== false) {
                  $contexttype = $context->type !== null ? $context->type : 'CourseSection';
                  $membershipsurl = str_replace('{context_type}', $contexttype, $membershipsurl);
              }
  
              // Save this URL for the context's custom_context_memberships_url setting.
              $context->setSetting('custom_context_memberships_url', $membershipsurl);
              $contextupdated = true;
          }
  
          // Perform membership service request.
          $url = $context->getSetting('custom_context_memberships_url');
          mtrace("Performing membership service request from context with URL {$url}.");
          $members = $context->getMembership();
  
          // Save the context if membership request succeeded and if it has been updated.
          if ($members && $contextupdated) {
              $context->save();
          }
  
          return $members;
      }
code: protected function do_context_membership_request(Context $context, ResourceLink $resourcelink = null,
                                                       $membershipsurltemplate = '') {
          $dataconnector = $this->dataconnector;
  
          // Flag to indicate whether to save the context later.
          $contextupdated = false;
  
          // If membership URL is not set, try to generate using the default membership URL from the consumer profile.
          if (!$context->hasMembershipService()) {
              if (empty($membershipsurltemplate)) {
                  mtrace("Skipping - No membership service available.\n");
                  return false;
              }
  
              if ($resourcelink === null) {
                  $resourcelink = $dataconnector->get_resourcelink_from_context($context);
              }
  
              if ($resourcelink !== null) {
                  // Try to perform a membership service request using this resource link.
                  $resourcelinkmembers = $this->do_resourcelink_membership_request($resourcelink);
                  if ($resourcelinkmembers) {
                      // If we're able to fetch members using this resource link, return these.
                      return $resourcelinkmembers;
                  }
              }
  
              // If fetching memberships through resource link failed and we don't have a memberships URL, build one from template.
              mtrace("'custom_context_memberships_url' not set. Fetching default template: $membershipsurltemplate");
              $membershipsurl = $membershipsurltemplate;
  
              // Check if we need to fetch tool code.
              $needstoolcode = strpos($membershipsurl, '{tool_code}') !== false;
              if ($needstoolcode) {
                  $toolcode = false;
  
                  // Fetch tool code from the resource link data.
                  $lisresultsourcedidjson = $resourcelink->getSetting('lis_result_sourcedid');
                  if ($lisresultsourcedidjson) {
                      $lisresultsourcedid = json_decode($lisresultsourcedidjson);
                      if (isset($lisresultsourcedid->data->typeid)) {
                          $toolcode = $lisresultsourcedid->data->typeid;
                      }
                  }
  
                  if ($toolcode) {
                      // Substitute fetched tool code value.
                      $membershipsurl = str_replace('{tool_code}', $toolcode, $membershipsurl);
                  } else {
                      // We're unable to determine the tool code. End this processing.
                      return false;
                  }
              }
  
              // Get context_id parameter and substitute, if applicable.
              $membershipsurl = str_replace('{context_id}', $context->getId(), $membershipsurl);
  
              // Get context_type and substitute, if applicable.
              if (strpos($membershipsurl, '{context_type}') !== false) {
                  $contexttype = $context->type !== null ? $context->type : 'CourseSection';
                  $membershipsurl = str_replace('{context_type}', $contexttype, $membershipsurl);
              }
  
              // Save this URL for the context's custom_context_memberships_url setting.
              $context->setSetting('custom_context_memberships_url', $membershipsurl);
              $contextupdated = true;
          }
  
          // Perform membership service request.
          $url = $context->getSetting('custom_context_memberships_url');
          mtrace("Performing membership service request from context with URL {$url}.");
          $members = $context->getMembership();
  
          // Save the context if membership request succeeded and if it has been updated.
          if ($members && $contextupdated) {
              $context->save();
          }
  
          return $members;
      }
code_tokens: protected function do_context_membership_request ( Context $ context , ResourceLink $ resourcelink = null , $ membershipsurltemplate = '' ) { $ dataconnector = $ this -> dataconnector ; // Flag to indicate whether to save the context later. $ contextupdated = false ; // If membership URL is not set, try to generate using the default membership URL from the consumer profile. if ( ! $ context -> hasMembershipService ( ) ) { if ( empty ( $ membershipsurltemplate ) ) { mtrace ( "Skipping - No membership service available.\n" ) ; return false ; } if ( $ resourcelink === null ) { $ resourcelink = $ dataconnector -> get_resourcelink_from_context ( $ context ) ; } if ( $ resourcelink !== null ) { // Try to perform a membership service request using this resource link. $ resourcelinkmembers = $ this -> do_resourcelink_membership_request ( $ resourcelink ) ; if ( $ resourcelinkmembers ) { // If we're able to fetch members using this resource link, return these. return $ resourcelinkmembers ; } } // If fetching memberships through resource link failed and we don't have a memberships URL, build one from template. mtrace ( "'custom_context_memberships_url' not set. Fetching default template: $membershipsurltemplate" ) ; $ membershipsurl = $ membershipsurltemplate ; // Check if we need to fetch tool code. $ needstoolcode = strpos ( $ membershipsurl , '{tool_code}' ) !== false ; if ( $ needstoolcode ) { $ toolcode = false ; // Fetch tool code from the resource link data. $ lisresultsourcedidjson = $ resourcelink -> getSetting ( 'lis_result_sourcedid' ) ; if ( $ lisresultsourcedidjson ) { $ lisresultsourcedid = json_decode ( $ lisresultsourcedidjson ) ; if ( isset ( $ lisresultsourcedid -> data -> typeid ) ) { $ toolcode = $ lisresultsourcedid -> data -> typeid ; } } if ( $ toolcode ) { // Substitute fetched tool code value. $ membershipsurl = str_replace ( '{tool_code}' , $ toolcode , $ membershipsurl ) ; } else { // We're unable to determine the tool code. End this processing. return false ; } } // Get context_id parameter and substitute, if applicable. $ membershipsurl = str_replace ( '{context_id}' , $ context -> getId ( ) , $ membershipsurl ) ; // Get context_type and substitute, if applicable. if ( strpos ( $ membershipsurl , '{context_type}' ) !== false ) { $ contexttype = $ context -> type !== null ? $ context -> type : 'CourseSection' ; $ membershipsurl = str_replace ( '{context_type}' , $ contexttype , $ membershipsurl ) ; } // Save this URL for the context's custom_context_memberships_url setting. $ context -> setSetting ( 'custom_context_memberships_url' , $ membershipsurl ) ; $ contextupdated = true ; } // Perform membership service request. $ url = $ context -> getSetting ( 'custom_context_memberships_url' ) ; mtrace ( "Performing membership service request from context with URL {$url}." ) ; $ members = $ context -> getMembership ( ) ; // Save the context if membership request succeeded and if it has been updated. if ( $ members && $ contextupdated ) { $ context -> save ( ) ; } return $ members ; }
docstring: Performs membership service request using an LTI Context object.
  
  If the context has a 'custom_context_memberships_url' setting, we use this to perform the membership service request.
  Otherwise, if a context is associated with resource link, we try first to get the members using the
  ResourceLink::doMembershipsService() method.
  If we're still unable to fetch members from the resource link, we try to build a memberships URL from the memberships URL
  endpoint template that is defined in the ToolConsumer profile and substitute the parameters accordingly.
  
  @param Context $context The context object.
  @param ResourceLink $resourcelink The resource link object.
  @param string $membershipsurltemplate The memberships endpoint URL template.
  @return bool|User[] Array of User objects upon successful membership service request. False, otherwise.
docstring_tokens: Performs membership service request using an LTI Context object .