Code

Fixed UTF-8 display problems
[gosa.git] / gosa-core / include / class_listingSortIterator.inc
index ddaf5c243818146a2cda7d5195affe11eb88d65f..af18544aa898fe213b04fee7442e292b6c1fdaaa 100644 (file)
@@ -23,7 +23,7 @@
 class listingSortIterator implements Iterator {
   private $data;
 
-  public function __construct($data, $attribute, $type= "string") {
+  public function __construct($data, $direction, $attribute, $type= "string") {
     global $_sortAttribute;
     global $_sortType;
     $_sortAttribute= $attribute; 
@@ -52,16 +52,41 @@ class listingSortIterator implements Iterator {
       // Take a look at the several types
       switch ($_sortType) {
         case 'string':
-          return strnatcmp($a, $b);
+          return strcoll($a, $b);
 
+        case 'integer':
+          return $b - $a;
+
+        case 'date':
+          if ($a == "") {
+            $a= "31.12.0000";
+          }
+          if ($b == "") {
+            $b= "31.12.0000";
+          }
+          list($d, $m, $y)= split('\.', $a);
+          $a= (int)sprintf("%04d%02d%02d", $y, $m, $d);
+          list($d, $m, $y)= split('\.', $b);
+          $b= (int)sprintf("%04d%02d%02d", $y, $m, $d);
+          return $b-$a;
+
+        // Sort for string by default
         default:
-          die(sprintf(_("Cannot sort entries: method '%s' is unknown!"), $_sortType));
+          return strcoll($a, $b);
       }
     }
 
     // Sort for attribute
-    usort($data, "attrSort"); 
-    $this->data= $data;
+    if ($attribute != "") {
+      uasort($data, "attrSort");
+    }
+
+    // Invert if direction is set
+    if ($direction) {
+      $this->data= array_reverse($data, true);
+    } else {
+      $this->data= $data;
+    }
   }
 
   function rewind() {