echo $return;
}
+/**
+ * Reverses the ordering in an ORDER BY clause. This is achived by replacing
+ * asc with desc, or appending desc to the end of the clause.
+ *
+ * This is used mostly for elgg_get_entities() and other similar functions.
+ *
+ * @access private
+ * @param string $order_by An order by clause
+ */
+function elgg_sql_reverse_order_by_clause($order_by) {
+ $order_by = strtolower($order_by);
+
+ if (strpos($order_by, ' asc') !== false) {
+ $return = str_replace(' asc', ' desc', $order_by);
+ } elseif (strpos($order_by, ' desc') !== false) {
+ $return = str_replace(' desc', ' asc', $order_by);
+ } else {
+ // no order specified, so default to desc since mysql defaults to asc
+ $return = $order_by . ' desc';
+ }
+
+ return $return;
+}
+
/**
* Intercepts the index page when Walled Garden mode is enabled.
*
*
* order_by => NULL (time_created desc)|STR SQL order by clause
*
+ * reverse_order_by => BOOL Reverse the default order by clause
+ *
* limit => NULL (10)|INT SQL limit clause
*
* offset => NULL (0)|INT SQL offset clause
'created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
'created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+ 'reverse_order_by' => false,
'order_by' => 'e.time_created desc',
'group_by' => ELGG_ENTITIES_ANY_VALUE,
'limit' => 10,
// Add access controls
$query .= get_access_sql_suffix('e');
+
+ // reverse order by
+ if ($options['reverse_order_by']) {
+ $options['order_by'] = elgg_sql_reverse_order_by_clause($options['order_by']);
+ }
+
if (!$options['count']) {
if ($options['group_by'] = sanitise_string($options['group_by'])) {
$query .= " GROUP BY {$options['group_by']}";