X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FUtils%2FSort.php;h=828cf130d604ceda8a5675dc92d9a805a09e134c;hb=aa0b568b0563900aa6ddc792014cc17af2c3fc90;hp=be88f6c436470f319f3b7e64a7603b481557c21b;hpb=b1c21179dffc2cee95b1b39f0c6a5ce5b8574b8e;p=civicrm-core.git diff --git a/CRM/Utils/Sort.php b/CRM/Utils/Sort.php index be88f6c436..828cf130d6 100644 --- a/CRM/Utils/Sort.php +++ b/CRM/Utils/Sort.php @@ -48,7 +48,7 @@ class CRM_Utils_Sort { /** - * constants to determine what direction each variable + * Constants to determine what direction each variable * is to be sorted * * @var int @@ -56,27 +56,27 @@ class CRM_Utils_Sort { CONST ASCENDING = 1, DESCENDING = 2, DONTCARE = 4, /** - * the name for the sort GET/POST param + * The name for the sort GET/POST param * * @var string */ SORT_ID = 'crmSID', SORT_DIRECTION = 'crmSortDirection', SORT_ORDER = 'crmSortOrder'; /** - * name of the sort function. Used to isolate session variables + * Name of the sort function. Used to isolate session variables * @var string */ protected $_name; /** - * array of variables that influence the query + * Array of variables that influence the query * * @var array */ public $_vars; /** - * the newly formulated base url to be used as links + * The newly formulated base url to be used as links * for various table elements * * @var string @@ -84,7 +84,7 @@ class CRM_Utils_Sort { protected $_link; /** - * what's the name of the sort variable in a REQUEST + * What's the name of the sort variable in a REQUEST * * @var string */ @@ -139,7 +139,7 @@ class CRM_Utils_Sort { $this->_currentSortDirection = $this->_vars[$this->_currentSortID]['direction']; } $this->_urlVar = self::SORT_ID; - $this->_link = CRM_Utils_System::makeURL($this->_urlVar); + $this->_link = CRM_Utils_System::makeURL($this->_urlVar, TRUE); $this->initialize($defaultSortOrder); } @@ -168,7 +168,7 @@ class CRM_Utils_Sort { } /** - * create the sortID string to be used in the GET param + * Create the sortID string to be used in the GET param * * @param int $index the field index * @param int $dir the direction of the sort @@ -182,7 +182,7 @@ class CRM_Utils_Sort { } /** - * init the sort ID values in the object + * Init the sort ID values in the object * * @param string $defaultSortOrder the sort order to use by default * @@ -219,7 +219,7 @@ class CRM_Utils_Sort { } /** - * init the object + * Init the object * * @param string $defaultSortOrder the sort order to use by default * @@ -255,7 +255,7 @@ class CRM_Utils_Sort { } /** - * getter for currentSortID + * Getter for currentSortID * * @return int returns of the current sort id * @acccess public @@ -265,7 +265,7 @@ class CRM_Utils_Sort { } /** - * getter for currentSortDirection + * Getter for currentSortDirection * * @return int returns of the current sort direction * @acccess public @@ -275,16 +275,27 @@ class CRM_Utils_Sort { } /** - * Universal callback function for sorting by weight + * Universal callback function for sorting by weight, id, title or name * * @param $a * @param $b * - * @return array of items sorted by weight + * @return int (-1 or 1) * @access public */ static function cmpFunc($a, $b) { - return ($a['weight'] <= $b['weight']) ? -1 : 1; + $cmp_order = array('weight', 'id', 'title', 'name'); + foreach ($cmp_order as $attribute) { + if (isset($a[$attribute]) && isset($b[$attribute])) { + if ($a[$attribute] < $b[$attribute]) { + return -1; + } elseif ($a[$attribute] > $b[$attribute]) { + return 1; + } // else: $a and $b are equal wrt to this attribute, try next... + } + } + // if we get here, $a and $b es equal for all we know + // however, as I understand we don't want equality here: + return -1; } } -