diff --git a/app/extensions/app_defaults.php b/app/extensions/app_defaults.php index bd26061466..0a6fd163be 100644 --- a/app/extensions/app_defaults.php +++ b/app/extensions/app_defaults.php @@ -17,7 +17,7 @@ The Initial Developer of the Original Code is Mark J Crane - Portions created by the Initial Developer are Copyright (C) 2008-2017 + Portions created by the Initial Developer are Copyright (C) 2008-2019 the Initial Developer. All Rights Reserved. Contributor(s): @@ -78,6 +78,18 @@ $p->delete('default_setting_edit', 'temp'); + //create natural sort function (source: http://www.rhodiumtoad.org.uk/junk/naturalsort.sql) + if ($db_type == 'pgsql') { + $sql = "create or replace function natural_sort(text)\n"; + $sql .= " returns bytea language sql immutable strict as \$f\$\n"; + $sql .= " select string_agg(convert_to(coalesce(r[2], length(length(r[1])::text) || length(r[1])::text || r[1]), 'SQL_ASCII'),'\\x00')\n"; + $sql .= " from regexp_matches(\$1, '0*([0-9]+)|([^0-9]+)', 'g') r;\n"; + $sql .= "\$f\$;"; + $database = new database; + $database->execute($sql); + unset($sql); + } + } -?> +?> \ No newline at end of file diff --git a/app/extensions/extensions.php b/app/extensions/extensions.php index 0d7bac10f4..db006e1f95 100644 --- a/app/extensions/extensions.php +++ b/app/extensions/extensions.php @@ -97,7 +97,17 @@ $parameters['domain_uuid'] = $_SESSION['domain_uuid']; } $sql .= $sql_search; - $sql .= order_by($order_by, $order); + if ($order_by == '' || $order_by == 'extension') { + if ($db_type == 'pgsql') { + $sql .= 'order by natural_sort(extension) '.$order; //function in app_defaults.php + } + else { + $sql .= 'order by extension '.$order; + } + } + else { + $sql .= order_by($order_by, $order); + } $sql .= limit_offset($rows_per_page, $offset); $database = new database; $extensions = $database->select($sql, $parameters, 'all'); @@ -300,4 +310,4 @@ //show the footer require_once "resources/footer.php"; -?> +?> \ No newline at end of file