original_string: public function find_users($search) {
          global $DB;
  
          $whereconditions = array();
          list($wherecondition, $params) = $this->search_sql($search, 'u');
          if ($wherecondition) {
              $whereconditions[] = $wherecondition;
          }
  
          if (!$this->forcesubscribed) {
              $existingids = array();
              foreach ($this->existingsubscribers as $group) {
                  foreach ($group as $user) {
                      $existingids[$user->id] = 1;
                  }
              }
              if ($existingids) {
                  list($usertest, $userparams) = $DB->get_in_or_equal(
                          array_keys($existingids), SQL_PARAMS_NAMED, 'existing', false);
                  $whereconditions[] = 'u.id ' . $usertest;
                  $params = array_merge($params, $userparams);
              }
          }
  
          if ($whereconditions) {
              $wherecondition = 'WHERE ' . implode(' AND ', $whereconditions);
          }
  
          list($esql, $eparams) = get_enrolled_sql($this->context, '', $this->currentgroup, true);
          $params = array_merge($params, $eparams);
  
          $fields      = 'SELECT ' . $this->required_fields_sql('u');
  
          $sql = " FROM {user} u
                   JOIN ($esql) je ON je.id = u.id
                        $wherecondition";
  
          list($sort, $sortparams) = users_order_by_sql('u', $search, $this->accesscontext);
          $order = ' ORDER BY ' . $sort;
  
          $availableusers = $DB->get_records_sql($fields . $sql . $order, array_merge($params, $sortparams));
  
          $cm = get_coursemodule_from_instance('forum', $this->forumid);
          $modinfo = get_fast_modinfo($cm->course);
          $info = new \core_availability\info_module($modinfo->get_cm($cm->id));
          $availableusers = $info->filter_user_list($availableusers);
  
          if (empty($availableusers)) {
              return array();
          }
  
          // Check to see if there are too many to show sensibly.
          if (!$this->is_validating()) {
              $potentialmemberscount = count($availableusers);
              if ($potentialmemberscount > $this->maxusersperpage) {
                  return $this->too_many_results($search, $potentialmemberscount);
              }
          }
  
          if ($this->forcesubscribed) {
              return array(get_string("existingsubscribers", 'forum') => $availableusers);
          } else {
              return array(get_string("potentialsubscribers", 'forum') => $availableusers);
          }
      }
code: public function find_users($search) {
          global $DB;
  
          $whereconditions = array();
          list($wherecondition, $params) = $this->search_sql($search, 'u');
          if ($wherecondition) {
              $whereconditions[] = $wherecondition;
          }
  
          if (!$this->forcesubscribed) {
              $existingids = array();
              foreach ($this->existingsubscribers as $group) {
                  foreach ($group as $user) {
                      $existingids[$user->id] = 1;
                  }
              }
              if ($existingids) {
                  list($usertest, $userparams) = $DB->get_in_or_equal(
                          array_keys($existingids), SQL_PARAMS_NAMED, 'existing', false);
                  $whereconditions[] = 'u.id ' . $usertest;
                  $params = array_merge($params, $userparams);
              }
          }
  
          if ($whereconditions) {
              $wherecondition = 'WHERE ' . implode(' AND ', $whereconditions);
          }
  
          list($esql, $eparams) = get_enrolled_sql($this->context, '', $this->currentgroup, true);
          $params = array_merge($params, $eparams);
  
          $fields      = 'SELECT ' . $this->required_fields_sql('u');
  
          $sql = " FROM {user} u
                   JOIN ($esql) je ON je.id = u.id
                        $wherecondition";
  
          list($sort, $sortparams) = users_order_by_sql('u', $search, $this->accesscontext);
          $order = ' ORDER BY ' . $sort;
  
          $availableusers = $DB->get_records_sql($fields . $sql . $order, array_merge($params, $sortparams));
  
          $cm = get_coursemodule_from_instance('forum', $this->forumid);
          $modinfo = get_fast_modinfo($cm->course);
          $info = new \core_availability\info_module($modinfo->get_cm($cm->id));
          $availableusers = $info->filter_user_list($availableusers);
  
          if (empty($availableusers)) {
              return array();
          }
  
          // Check to see if there are too many to show sensibly.
          if (!$this->is_validating()) {
              $potentialmemberscount = count($availableusers);
              if ($potentialmemberscount > $this->maxusersperpage) {
                  return $this->too_many_results($search, $potentialmemberscount);
              }
          }
  
          if ($this->forcesubscribed) {
              return array(get_string("existingsubscribers", 'forum') => $availableusers);
          } else {
              return array(get_string("potentialsubscribers", 'forum') => $availableusers);
          }
      }
code_tokens: public function find_users ( $ search ) { global $ DB ; $ whereconditions = array ( ) ; list ( $ wherecondition , $ params ) = $ this -> search_sql ( $ search , 'u' ) ; if ( $ wherecondition ) { $ whereconditions [ ] = $ wherecondition ; } if ( ! $ this -> forcesubscribed ) { $ existingids = array ( ) ; foreach ( $ this -> existingsubscribers as $ group ) { foreach ( $ group as $ user ) { $ existingids [ $ user -> id ] = 1 ; } } if ( $ existingids ) { list ( $ usertest , $ userparams ) = $ DB -> get_in_or_equal ( array_keys ( $ existingids ) , SQL_PARAMS_NAMED , 'existing' , false ) ; $ whereconditions [ ] = 'u.id ' . $ usertest ; $ params = array_merge ( $ params , $ userparams ) ; } } if ( $ whereconditions ) { $ wherecondition = 'WHERE ' . implode ( ' AND ' , $ whereconditions ) ; } list ( $ esql , $ eparams ) = get_enrolled_sql ( $ this -> context , '' , $ this -> currentgroup , true ) ; $ params = array_merge ( $ params , $ eparams ) ; $ fields = 'SELECT ' . $ this -> required_fields_sql ( 'u' ) ; $ sql = " FROM {user} u
                   JOIN ($esql) je ON je.id = u.id
                        $wherecondition" ; list ( $ sort , $ sortparams ) = users_order_by_sql ( 'u' , $ search , $ this -> accesscontext ) ; $ order = ' ORDER BY ' . $ sort ; $ availableusers = $ DB -> get_records_sql ( $ fields . $ sql . $ order , array_merge ( $ params , $ sortparams ) ) ; $ cm = get_coursemodule_from_instance ( 'forum' , $ this -> forumid ) ; $ modinfo = get_fast_modinfo ( $ cm -> course ) ; $ info = new \ core_availability \ info_module ( $ modinfo -> get_cm ( $ cm -> id ) ) ; $ availableusers = $ info -> filter_user_list ( $ availableusers ) ; if ( empty ( $ availableusers ) ) { return array ( ) ; } // Check to see if there are too many to show sensibly. if ( ! $ this -> is_validating ( ) ) { $ potentialmemberscount = count ( $ availableusers ) ; if ( $ potentialmemberscount > $ this -> maxusersperpage ) { return $ this -> too_many_results ( $ search , $ potentialmemberscount ) ; } } if ( $ this -> forcesubscribed ) { return array ( get_string ( "existingsubscribers" , 'forum' ) => $ availableusers ) ; } else { return array ( get_string ( "potentialsubscribers" , 'forum' ) => $ availableusers ) ; } }
docstring: Finds all potential users
  
  Potential subscribers are all enroled users who are not already subscribed.
  
  @param string $search
  @return array
docstring_tokens: Finds all potential users