original_string: protected function grouped_files_process_response($response, $limit = 0) {
          // If we can't find the grouping, or there are no matches in the grouping, return empty.
          if (!isset($response->grouped->solr_filegroupingid) || empty($response->grouped->solr_filegroupingid->matches)) {
              return array();
          }
  
          $numgranted = 0;
          $orderedids = array();
          $completedocs = array();
          $incompletedocs = array();
  
          $highlightingobj = $response->highlighting;
  
          // Each group represents a "master document".
          $groups = $response->grouped->solr_filegroupingid->groups;
          foreach ($groups as $group) {
              $groupid = $group->groupValue;
              $groupdocs = $group->doclist->docs;
              $firstdoc = reset($groupdocs);
  
              if (!$searcharea = $this->get_search_area($firstdoc->areaid)) {
                  // Well, this is a problem.
                  continue;
              }
  
              // Check for access.
              $access = $searcharea->check_access($firstdoc->itemid);
              switch ($access) {
                  case \core_search\manager::ACCESS_DELETED:
                      // If deleted from Moodle, delete from index and then continue.
                      $this->delete_by_id($firstdoc->id);
                      // Remove one from our processed and total counters, since we promptly deleted.
                      $this->processeddocs--;
                      $this->totalenginedocs--;
                      continue 2;
                      break;
                  case \core_search\manager::ACCESS_DENIED:
                      // This means we should just skip for the current user.
                      $this->skippeddocs++;
                      continue 2;
                      break;
              }
              $numgranted++;
  
              $maindoc = false;
              $fileids = array();
              // Seperate the main document and any files returned.
              foreach ($groupdocs as $groupdoc) {
                  if ($groupdoc->id == $groupid) {
                      $maindoc = $groupdoc;
                  } else if (isset($groupdoc->solr_fileid)) {
                      $fileids[] = $groupdoc->solr_fileid;
                  }
              }
  
              // Store the id of this group, in order, for later merging.
              $orderedids[] = $groupid;
  
              if (!$maindoc) {
                  // We don't have the main doc, store what we know for later building.
                  $incompletedocs[$groupid] = $fileids;
              } else {
                  if (isset($highlightingobj->$groupid)) {
                      // Merge the highlighting for this doc.
                      $this->merge_highlight_field_values($maindoc, $highlightingobj->$groupid);
                  }
                  $docdata = $this->standarize_solr_obj($maindoc);
                  $doc = $this->to_document($searcharea, $docdata);
                  // Now we need to attach the result files to the doc.
                  foreach ($fileids as $fileid) {
                      $doc->add_stored_file($fileid);
                  }
                  $completedocs[$groupid] = $doc;
              }
  
              if (!empty($limit) && $numgranted >= $limit) {
                  // We have hit the max results, we will just ignore the rest.
                  break;
              }
          }
  
          $incompletedocs = $this->get_missing_docs($incompletedocs);
  
          $out = array();
          // Now merge the complete and incomplete documents, in results order.
          foreach ($orderedids as $docid) {
              if (isset($completedocs[$docid])) {
                  $out[] = $completedocs[$docid];
              } else if (isset($incompletedocs[$docid])) {
                  $out[] = $incompletedocs[$docid];
              }
          }
  
          return $out;
      }
code: protected function grouped_files_process_response($response, $limit = 0) {
          // If we can't find the grouping, or there are no matches in the grouping, return empty.
          if (!isset($response->grouped->solr_filegroupingid) || empty($response->grouped->solr_filegroupingid->matches)) {
              return array();
          }
  
          $numgranted = 0;
          $orderedids = array();
          $completedocs = array();
          $incompletedocs = array();
  
          $highlightingobj = $response->highlighting;
  
          // Each group represents a "master document".
          $groups = $response->grouped->solr_filegroupingid->groups;
          foreach ($groups as $group) {
              $groupid = $group->groupValue;
              $groupdocs = $group->doclist->docs;
              $firstdoc = reset($groupdocs);
  
              if (!$searcharea = $this->get_search_area($firstdoc->areaid)) {
                  // Well, this is a problem.
                  continue;
              }
  
              // Check for access.
              $access = $searcharea->check_access($firstdoc->itemid);
              switch ($access) {
                  case \core_search\manager::ACCESS_DELETED:
                      // If deleted from Moodle, delete from index and then continue.
                      $this->delete_by_id($firstdoc->id);
                      // Remove one from our processed and total counters, since we promptly deleted.
                      $this->processeddocs--;
                      $this->totalenginedocs--;
                      continue 2;
                      break;
                  case \core_search\manager::ACCESS_DENIED:
                      // This means we should just skip for the current user.
                      $this->skippeddocs++;
                      continue 2;
                      break;
              }
              $numgranted++;
  
              $maindoc = false;
              $fileids = array();
              // Seperate the main document and any files returned.
              foreach ($groupdocs as $groupdoc) {
                  if ($groupdoc->id == $groupid) {
                      $maindoc = $groupdoc;
                  } else if (isset($groupdoc->solr_fileid)) {
                      $fileids[] = $groupdoc->solr_fileid;
                  }
              }
  
              // Store the id of this group, in order, for later merging.
              $orderedids[] = $groupid;
  
              if (!$maindoc) {
                  // We don't have the main doc, store what we know for later building.
                  $incompletedocs[$groupid] = $fileids;
              } else {
                  if (isset($highlightingobj->$groupid)) {
                      // Merge the highlighting for this doc.
                      $this->merge_highlight_field_values($maindoc, $highlightingobj->$groupid);
                  }
                  $docdata = $this->standarize_solr_obj($maindoc);
                  $doc = $this->to_document($searcharea, $docdata);
                  // Now we need to attach the result files to the doc.
                  foreach ($fileids as $fileid) {
                      $doc->add_stored_file($fileid);
                  }
                  $completedocs[$groupid] = $doc;
              }
  
              if (!empty($limit) && $numgranted >= $limit) {
                  // We have hit the max results, we will just ignore the rest.
                  break;
              }
          }
  
          $incompletedocs = $this->get_missing_docs($incompletedocs);
  
          $out = array();
          // Now merge the complete and incomplete documents, in results order.
          foreach ($orderedids as $docid) {
              if (isset($completedocs[$docid])) {
                  $out[] = $completedocs[$docid];
              } else if (isset($incompletedocs[$docid])) {
                  $out[] = $incompletedocs[$docid];
              }
          }
  
          return $out;
      }
code_tokens: protected function grouped_files_process_response ( $ response , $ limit = 0 ) { // If we can't find the grouping, or there are no matches in the grouping, return empty. if ( ! isset ( $ response -> grouped -> solr_filegroupingid ) || empty ( $ response -> grouped -> solr_filegroupingid -> matches ) ) { return array ( ) ; } $ numgranted = 0 ; $ orderedids = array ( ) ; $ completedocs = array ( ) ; $ incompletedocs = array ( ) ; $ highlightingobj = $ response -> highlighting ; // Each group represents a "master document". $ groups = $ response -> grouped -> solr_filegroupingid -> groups ; foreach ( $ groups as $ group ) { $ groupid = $ group -> groupValue ; $ groupdocs = $ group -> doclist -> docs ; $ firstdoc = reset ( $ groupdocs ) ; if ( ! $ searcharea = $ this -> get_search_area ( $ firstdoc -> areaid ) ) { // Well, this is a problem. continue ; } // Check for access. $ access = $ searcharea -> check_access ( $ firstdoc -> itemid ) ; switch ( $ access ) { case \ core_search \ manager :: ACCESS_DELETED : // If deleted from Moodle, delete from index and then continue. $ this -> delete_by_id ( $ firstdoc -> id ) ; // Remove one from our processed and total counters, since we promptly deleted. $ this -> processeddocs -- ; $ this -> totalenginedocs -- ; continue 2 ; break ; case \ core_search \ manager :: ACCESS_DENIED : // This means we should just skip for the current user. $ this -> skippeddocs ++ ; continue 2 ; break ; } $ numgranted ++ ; $ maindoc = false ; $ fileids = array ( ) ; // Seperate the main document and any files returned. foreach ( $ groupdocs as $ groupdoc ) { if ( $ groupdoc -> id == $ groupid ) { $ maindoc = $ groupdoc ; } else if ( isset ( $ groupdoc -> solr_fileid ) ) { $ fileids [ ] = $ groupdoc -> solr_fileid ; } } // Store the id of this group, in order, for later merging. $ orderedids [ ] = $ groupid ; if ( ! $ maindoc ) { // We don't have the main doc, store what we know for later building. $ incompletedocs [ $ groupid ] = $ fileids ; } else { if ( isset ( $ highlightingobj -> $ groupid ) ) { // Merge the highlighting for this doc. $ this -> merge_highlight_field_values ( $ maindoc , $ highlightingobj -> $ groupid ) ; } $ docdata = $ this -> standarize_solr_obj ( $ maindoc ) ; $ doc = $ this -> to_document ( $ searcharea , $ docdata ) ; // Now we need to attach the result files to the doc. foreach ( $ fileids as $ fileid ) { $ doc -> add_stored_file ( $ fileid ) ; } $ completedocs [ $ groupid ] = $ doc ; } if ( ! empty ( $ limit ) && $ numgranted >= $ limit ) { // We have hit the max results, we will just ignore the rest. break ; } } $ incompletedocs = $ this -> get_missing_docs ( $ incompletedocs ) ; $ out = array ( ) ; // Now merge the complete and incomplete documents, in results order. foreach ( $ orderedids as $ docid ) { if ( isset ( $ completedocs [ $ docid ] ) ) { $ out [ ] = $ completedocs [ $ docid ] ; } else if ( isset ( $ incompletedocs [ $ docid ] ) ) { $ out [ ] = $ incompletedocs [ $ docid ] ; } } return $ out ; }
docstring: Processes grouped file results into documents, with attached matching files.
  
  @param SolrObject $response The response returned from solr server
  @param int        $limit The maximum number of results to return. 0 for all.
  @return array Final results to be displayed.
docstring_tokens: Processes grouped file results into documents with attached matching files .