* ORDERS
******************/
-// {{{ class UserFilterOrder
-/** Base class for ordering results of a query.
- * Parameters for the ordering must be given to the constructor ($desc for a
- * descending order).
- * The getSortTokens function is used to get actual ordering part of the query.
- */
-abstract class UserFilterOrder extends PlFilterOrder
-{
- /** This function must return the tokens to use for ordering
- * @param &$uf The UserFilter whose results must be ordered
- * @return The name of the field to use for ordering results
- */
-// abstract protected function getSortTokens(UserFilter &$uf);
-}
-// }}}
-
// {{{ class UFO_Promo
/** Orders users by promotion
* @param $grade Formation whose promotion users should be sorted by (restricts results to users of that formation)
* @param $desc Whether sort is descending
*/
-class UFO_Promo extends UserFilterOrder
+class UFO_Promo extends PlFilterGroupableOrder
{
private $grade;
* @param $particle Set to true if particles should be included in the sorting order
* @param $desc If sort order should be descending
*/
-class UFO_Name extends UserFilterOrder
+class UFO_Name extends PlFilterOrder
{
private $type;
private $variant;
// }}}
// {{{ class UFO_Score
-class UFO_Score extends UserFilterOrder
+class UFO_Score extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
// {{{ class UFO_Registration
/** Sorts users based on registration date
*/
-class UFO_Registration extends UserFilterOrder
+class UFO_Registration extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
// {{{ class UFO_Birthday
/** Sorts users based on next birthday date
*/
-class UFO_Birthday extends UserFilterOrder
+class UFO_Birthday extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
// {{{ class UFO_ProfileUpdate
/** Sorts users based on last profile update
*/
-class UFO_ProfileUpdate extends UserFilterOrder
+class UFO_ProfileUpdate extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
// {{{ class UFO_Death
/** Sorts users based on death date
*/
-class UFO_Death extends UserFilterOrder
+class UFO_Death extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
// {{{ class UFO_Uid
/** Sorts users based on their uid
*/
-class UFO_Uid extends UserFilterOrder
+class UFO_Uid extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
// {{{ class UFO_Hruid
/** Sorts users based on their hruid
*/
-class UFO_Hruid extends UserFilterOrder
+class UFO_Hruid extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
// {{{ class UFO_Pid
/** Sorts users based on their pid
*/
-class UFO_Pid extends UserFilterOrder
+class UFO_Pid extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
// {{{ class UFO_Hrpid
/** Sorts users based on their hrpid
*/
-class UFO_Hrpid extends UserFilterOrder
+class UFO_Hrpid extends PlFilterOrder
{
protected function getSortTokens(PlFilter &$uf)
{
private $root;
private $sort = array();
+ private $grouper = null;
private $query = null;
private $orderby = null;
}
}
if (!is_null($sort)) {
- if ($sort instanceof UserFilterOrder) {
+ if ($sort instanceof PlFilterOrder) {
$this->addSort($sort);
} else if (is_array($sort)) {
foreach ($sort as $s) {
}
}
+ public function hasGroups()
+ {
+ return $this->grouper != null;
+ }
+
+ public function getGroups()
+ {
+ return $this->getUIDGroups();
+ }
+
+ public function getUIDGroups()
+ {
+ $this->requireAccounts();
+ $this->buildQuery();
+ $token = $this->grouper->getGroupToken($this);
+
+ $groups = XDB::fetchAllRow('SELECT ' . $token . ', COUNT(a.uid)
+ ' . $this->query . '
+ GROUP BY ' . $token,
+ 0);
+ return $groups;
+ }
+
+ public function getPIDGroups()
+ {
+ $this->requireProfiles();
+ $this->buildQuery();
+ $token = $this->grouper->getGroupToken($this);
+
+ $groups = XDB::fetchAllRow('SELECT ' . $token . ', COUNT(p.pid)
+ ' . $this->query . '
+ GROUP BY ' . $token,
+ 0);
+ return $groups;
+ }
+
private function getUIDList($uids = null, PlLimit &$limit)
{
$this->requireAccounts();
public function addSort(PlFilterOrder &$sort)
{
+ if (count($this->sort) == 0 && $sort instanceof PlFilterGroupableOrder)
+ {
+ $this->grouper = $sort;
+ }
$this->sort[] = $sort;
$this->orderby = null;
}
{
return $this->getTotalProfileCount();
}
+
+ public function getGroups()
+ {
+ return $this->getPIDGroups();
+ }
}
// }}}