/** * 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']; } }