/**
  * Search for users which fit to the search values.
  */
 protected function search()
 {
     $this->matches = array();
     $sql = "SELECT\t\tuser_table.userID\n\t\t\tFROM\t\twcf" . WCF_N . "_user user_table\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_user_option_value option_value\n\t\t\tON\t\t(option_value.userID = user_table.userID)";
     // build search condition
     $this->conditions = new PreparedStatementConditionBuilder();
     // static fields
     $this->buildStaticConditions();
     // dynamic fields
     $this->buildDynamicConditions();
     // if no conditions exists, no need to send query
     if (!$this->conditions->__toString()) {
         return;
     }
     // do search
     $statement = WCF::getDB()->prepareStatement($sql . $this->conditions, $this->maxResults);
     $statement->execute($this->conditions->getParameters());
     while ($row = $statement->fetchArray()) {
         $this->matches[] = $row['userID'];
     }
 }
 /**
  * Fetches a list of users.
  * 
  * @param	mixed		$loopFunction
  * @return	array<integer>
  */
 public function fetchUsers($loopFunction = null)
 {
     // select users
     $sql = "SELECT\t\tuser_table.*\n\t\t\tFROM\t\twcf" . WCF_N . "_user user_table\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_user_option_value option_value\n\t\t\tON\t\t(option_value.userID = user_table.userID)\n\t\t\t" . $this->conditions;
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute($this->conditions->getParameters());
     $users = array();
     while ($row = $statement->fetchArray()) {
         $users[$row['userID']] = $row;
     }
     if (empty($users)) {
         return array();
     }
     // select group ids
     $conditions = new PreparedStatementConditionBuilder();
     $conditions->add("userID IN (?)", array(array_keys($users)));
     $sql = "SELECT\tuserID, groupID\n\t\t\tFROM\twcf" . WCF_N . "_user_to_group\n\t\t\t" . $conditions;
     $statement = WCF::getDB()->prepareStatement($sql);
     $statement->execute($conditions->getParameters());
     $groupIDs = array();
     while ($row = $statement->fetchArray()) {
         if (!isset($groupIDs[$row['userID']])) {
             $groupIDs[$row['userID']] = array();
         }
         $groupIDs[$row['userID']][] = $row['groupID'];
     }
     foreach ($users as $userID => $userData) {
         if (!empty($groupIDs[$userID]) && !UserGroup::isAccessibleGroup($groupIDs[$userID])) {
             throw new PermissionDeniedException();
         }
         if ($loopFunction !== null) {
             $loopFunction($userID, $userData);
         }
         $userIDs[] = $userID;
         $this->affectedUsers++;
     }
     return $userIDs;
 }
 /**
  * Search for users which fit to the search values.
  */
 protected function search()
 {
     $this->matches = array();
     $sql = "SELECT\t\tuser_table.userID\n\t\t\tFROM\t\twcf" . WCF_N . "_user user_table\n\t\t\tLEFT JOIN\twcf" . WCF_N . "_user_option_value option_value\n\t\t\tON\t\t(option_value.userID = user_table.userID)";
     // build search condition
     $this->conditions = new PreparedStatementConditionBuilder();
     // static fields
     $this->buildStaticConditions();
     // dynamic fields
     $this->buildDynamicConditions();
     // call buildConditions event
     EventHandler::getInstance()->fireAction($this, 'buildConditions');
     // do search
     $statement = WCF::getDB()->prepareStatement($sql . $this->conditions, $this->maxResults);
     $statement->execute($this->conditions->getParameters());
     while ($row = $statement->fetchArray()) {
         $this->matches[] = $row['userID'];
     }
 }