Ejemplo n.º 1
0
 /**
  * @return array|array[]
  */
 public function antraegeSortiert()
 {
     $antraege = $this->antraege;
     $antraege_sorted = array();
     $unsichtbar = $this->getAntragUnsichtbarStati();
     $unsichtbar[] = IAntrag::$STATUS_MODIFIZIERT;
     foreach ($antraege as $ant) {
         if (!in_array($ant->status, $unsichtbar)) {
             if (!isset($antraege_sorted[$ant->typ])) {
                 $antraege_sorted[$ant->typ] = array();
             }
             $key = $ant->revision_name;
             if (!$this->getEinstellungen()->zeilen_nummerierung_global) {
                 if ($this->getEinstellungen()->ae_nummerierung_nach_zeile || veranstaltungsspezifisch_ae_sortierung_zeilennummer($this)) {
                     $ant->aenderungsantraege = Aenderungsantrag::sortiereSichtbareNachZeilennummer($ant->aenderungsantraege);
                 }
             }
             $antraege_sorted[$ant->typ][$key] = $ant;
         }
     }
     if (veranstaltungsspezifisch_hat_tags_startseite($this) && isset($_REQUEST["test"])) {
         $tags = array();
         foreach ($antraege as $antrag) {
             if (count($antrag->tags) == 0) {
                 if (!isset($tags[0])) {
                     $tags[0] = array("name" => "Keines", "antraege" => array());
                 }
                 $tags[0]["antraege"][] = $antrag;
             } else {
                 foreach ($antrag->tags as $tag) {
                     if (!isset($tags[$tag->id])) {
                         $tags[$tag->id] = array("name" => $tag->name, "antraege" => array());
                     }
                     $tags[$tag->id]["antraege"][] = $antrag;
                 }
             }
         }
         $sortedTags = $this->getSortedTags();
         $out = array();
         foreach ($sortedTags as $tag) {
             if (isset($tags[$tag->id])) {
                 foreach ($tags[$tag->id]["antraege"] as $antrag) {
                     $out[] = $antrag;
                 }
             }
         }
         if (isset($tags[0])) {
             foreach ($tags[0]["antraege"] as $antrag) {
                 $out[] = $antrag;
             }
         }
         return array("Tag" => $out);
     }
     $cmp = veranstaltungsspezifisch_antrag_sort($this);
     if (!is_callable($cmp)) {
         $cmp = function ($str1, $str2, $num1, $num2) {
             if ($str1 == $str2) {
                 if ($num1 < $num2) {
                     return -1;
                 }
                 if ($num1 > $num2) {
                     return 1;
                 }
                 return 0;
             } else {
                 if ($str1 < $str2) {
                     return -1;
                 }
                 if ($str1 > $str2) {
                     return 1;
                 }
                 return 0;
             }
         };
     }
     foreach ($antraege_sorted as $key => $val) {
         uksort($antraege_sorted[$key], function ($k1, $k2) use($cmp) {
             if ($k1 == "" && $k2 == "") {
                 return 0;
             }
             if ($k1 == "") {
                 return -1;
             }
             if ($k2 == "") {
                 return 1;
             }
             $k1 = preg_replace("/neu\$/siu", "neu1", $k1);
             $k2 = preg_replace("/neu\$/siu", "neu1", $k2);
             $pat1 = "/^(?<str1>[^0-9]*)(?<num1>[0-9]*)/siu";
             $pat2 = "/^(?<str1>[^0-9]*)(?<num1>[0-9]+)(?<str2>[^0-9]+)(?<num2>[0-9]+)\$/siu";
             if (preg_match($pat2, $k1, $matches1) && preg_match($pat2, $k2, $matches2)) {
                 if ($matches1["str1"] == $matches2["str1"] && $matches1["num1"] == $matches2["num1"]) {
                     return $cmp($matches1["str2"], $matches2["str2"], $matches1["num2"], $matches2["num2"]);
                 } else {
                     return $cmp($matches1["str1"], $matches2["str1"], $matches1["num1"], $matches2["num1"]);
                 }
             } elseif (preg_match($pat2, $k1, $matches1) && preg_match($pat1, $k2, $matches2)) {
                 if ($matches1["str1"] == $matches2["str1"] && $matches1["num1"] == $matches2["num1"]) {
                     return 1;
                 } else {
                     return $cmp($matches1["str1"], $matches2["str1"], $matches1["num1"], $matches2["num1"]);
                 }
             } elseif (preg_match($pat1, $k1, $matches1) && preg_match($pat2, $k2, $matches2)) {
                 if ($matches1["str1"] == $matches2["str1"] && $matches1["num1"] == $matches2["num1"]) {
                     return -1;
                 } else {
                     return $cmp($matches1["str1"], $matches2["str1"], $matches1["num1"], $matches2["num1"]);
                 }
             } else {
                 preg_match($pat1, $k1, $matches1);
                 preg_match($pat1, $k2, $matches2);
                 $str1 = isset($matches1["str1"]) ? $matches1["str1"] : "";
                 $str2 = isset($matches2["str1"]) ? $matches2["str1"] : "";
                 $num1 = isset($matches1["num1"]) ? $matches1["num1"] : "";
                 $num2 = isset($matches2["num1"]) ? $matches2["num1"] : "";
                 return $cmp($str1, $str2, $num1, $num2);
             }
         });
     }
     $antraege_sorted_by_name = array();
     foreach (Antrag::$TYPEN_SORTED as $typ_id) {
         if (isset($antraege_sorted[$typ_id])) {
             $antraege_sorted_by_name[Antrag::$TYPEN[$typ_id]] = $antraege_sorted[$typ_id];
         }
     }
     return $antraege_sorted_by_name;
 }