2 && !isset($_POST["strict"])) { $selstrict = ""; $dostrict = ""; } if (isset($_POST["mode"]) && $_POST["mode"] == "schulze") { $sels = ' checked="checked"'; $i = 0; $candidates = explode("\r\n",$candidates_data); foreach ($candidates as $candidate) { $i++; if (preg_match("/^[A-Z0-9 _-]+$/i",$candidate) != 1) { $result = "FEHLER: Der Name des $i. Kandidaten ist ungültig.\nKandidatennamen dürfen nur aus Buchstaben, Zahlen, Leerzeichen und folgenden weiteren Zeichen bestehen: _ -"; goto end; } } file_put_contents("$path/files/candidates.txt",$candidates_data); $i = 0; $ballots = explode("\r\n",$ballots_data); foreach ($ballots as $ballot) { $i++; if (preg_match("/^([A-Z0-9 _-]+| |\\/|;|,)*$/i",$ballot) != 1) { $result = "FEHLER: Der $i. Stimmzettel enthält ungültige Zeichen."; goto end; } } file_put_contents("$path/files/ballots.txt",$ballots_data); $result = str_replace($path,"",shell_exec("lua $path/schulze -c $path/files/candidates.txt -b $path/files/ballots.txt -q $numerator/$denumerator".$dostrict." 2>&1")); } elseif (isset($_POST["mode"]) && $_POST["mode"] == "schulze2") { $sels2 = ' checked="checked"'; $i = 0; $candidates = explode("\r\n",$candidates_data); foreach ($candidates as $candidate) { $i++; if (preg_match("/^[A-Z0-9 _-]+$/i",$candidate) != 1) { $result = "FEHLER: Der Name des $i. Kandidaten ist ungültig.\nKandidatennamen dürfen nur aus Buchstaben, Zahlen, Leerzeichen und folgenden weiteren Zeichen bestehen: _ -"; goto end; } } file_put_contents("$path/files/candidates.txt",$candidates_data); $i = 0; $pb = array(); $ballots = explode("\r\n",$ballots_data); foreach ($ballots as $ballot) { $i++; if (preg_match("/^[0-9,]+$/i",$ballot) != 1) { $result = "FEHLER: Der $i. Stimmzettel enthält ungültige Zeichen."; goto end; } if (strlen($ballot) > 1) { $ballots_numbers[] = explode(",",$ballot); } } for ($j = 0; $j < count($ballots_numbers); $j++) { for ($i = 0; $i < count($ballots_numbers[$j]); $i++) { if (!is_numeric($ballots_numbers[$j][$i])) { $ballots_numbers[$j][$i] = PHP_INT_MAX; } else { $ballots_numbers[$j][$i] = intval($ballots_numbers[$j][$i]); } } } $ballots_generated = ""; foreach ($ballots_numbers as $ballot_numbers) { $ballot_names = $candidates; if (count($ballot_numbers) != count($ballot_names)) { $result = "FEHLER: Der $i. Stimmzettel enthält nicht die richtige Anzahl von Kandidaten."; goto end; } $ballot_names_copy = $ballot_names; array_multisort($ballot_numbers, $ballot_names_copy, SORT_ASC); $ballots_generated .= $ballot_names_copy[0]; for ($i = 1; $i < count($ballot_names_copy); $i++) { if ($ballot_numbers[$i-1] === $ballot_numbers[$i]) { $ballots_generated .= ","; } else { $ballots_generated .= ";"; } $ballots_generated .= $ballot_names_copy[$i]; } $ballots_generated .= "\n"; } $result = "Berechnete Stimmzettel:\n\n"; $result .= $ballots_generated . "\n"; file_put_contents("$path/files/ballots.txt",$ballots_generated); $result .= str_replace($path,"",shell_exec("lua $path/schulze -c $path/files/candidates.txt -b $path/files/ballots.txt -q $numerator/$denumerator".$dostrict." 2>&1")); } elseif (isset($_POST["mode"])) { $sela = ' checked="checked"'; $i = 0; $candidates = explode("\r\n",$candidates_data); foreach ($candidates as $candidate) { $votes[$i]['j'] = 0; $votes[$i]['e'] = 0; $votes[$i]['n'] = 0; $votes[$i]['name'] = $candidate; $votes[$i]['perc'] = -1.0; $i++; if (preg_match("/^[A-Z0-9 _-]+$/i",$candidate) != 1) { $result = "FEHLER: Der Name des $i. Kandidaten ist ungültig.\nKandidatennamen dürfen nur aus Buchstaben, Zahlen, Leerzeichen und folgenden weiteren Zeichen bestehen: _ -"; goto end; } } $ncandidates = count($candidates); $i = 0; $ballots = explode("\r\n",$ballots_data); foreach ($ballots as $ballot) { $i++; if (preg_match("/^(j|e|n)+$/i",$ballot) != 1) { $result = "FEHLER: Der $i. Stimmzettel enthält ungültige Zeichen."; goto end; } if (strlen($ballot) > $ncandidates) { $result = "FEHLER: Der $i. Stimmzettel enthält mehr Stimmen als es Kandidaten gibt."; goto end; } if (strlen($ballot) < $ncandidates) { $result = "FEHLER: Der $i. Stimmzettel enthält weniger Stimmen als es Kandidaten gibt."; goto end; } } $nballots = count($ballots); foreach ($ballots as $ballot) { $letters = str_split(strtolower($ballot)); $i = 0; foreach ($letters as $letter) { $votes[$i][$letter]++; $i++; } } $result = "$ncandidates Kandidat" . ($ncandidates != 1?"en":"") . ". "; $result .= "$nballots abgegebene Stimme" . ($nballots != 1?"n":"") . ".\n"; foreach ($votes as $i => $vote) { if ($vote['j'] + $vote['n'] > 0) $votes[$i]['perc'] = 100.0 * $vote['j'] / ($vote['j'] + $vote['n']); } function cmp_by_perc($a, $b) { return ($b['perc'] - $a['perc']) * 1000000.0; } usort($votes, "cmp_by_perc"); $i = 1; foreach ($votes as $vote) { $result .= "$i. {$vote['name']}   "; if ($vote['perc'] < 0) { $result .= "NaN "; $accepted = "undefiniert"; } else if (($vote['perc'] > 100.0 * $numerator / $denumerator) || (strlen($dostrict) == 0 && $vote['perc'] >= 100.0 * $numerator / $denumerator)) { $result .= round($vote['perc'],3) . "% "; $accepted = "akzeptiert"; } else { $result .= round($vote['perc'],3) . "% "; $accepted = "nicht akzeptiert"; } $result .= "({$vote['j']} Ja-Stimme" . ($vote['j'] != 1?"n":"") . ", {$vote['e']} Enthaltung" . ($vote['e'] != 1?"en":"") . ", {$vote['n']} Nein-Stimme" . ($vote['n'] != 1?"n":"") . "), also $accepted\n"; $i++; } } else { $sels2 = ' checked="checked"'; } end: ?> schulze-online

schulze-online

Online-Auszählungstool für Abstimmungen und Wahlen nach Schulze.

Modus

onclick="javascript:document.getElementById('schulze').style.display = 'none';javascript:document.getElementById('acceptance_sel').style.display = 'inline';document.getElementById('schulze2').style.display = 'none';document.getElementById('acceptance').style.display = 'block'">   onclick="javascript:document.getElementById('acceptance').style.display = 'none';javascript:document.getElementById('acceptance_sel').style.display = 'inline';document.getElementById('schulze2').style.display = 'none';document.getElementById('schulze').style.display = 'block'">   onclick="javascript:document.getElementById('acceptance').style.display = 'none';javascript:document.getElementById('acceptance_sel').style.display = 'none';document.getElementById('schulze').style.display = 'none';document.getElementById('schulze2').style.display = 'block'">

Kandidaten

Jeder Kandidat muss in eine eigene Zeile geschrieben werden.

Stimmzettel

>Jeder Stimmzettel wird in einer eigenen Zeile eingetragen. Ganz links steht der höchst-gereihte Kandidat. Sind mehrere Kandidaten gleich-gereiht werden diese mit , voneinander getrennt. Sind Kandidaten nicht gleich-gereiht so wird mit ; getrennt. Falls Akzeptanz im gleichen Wahlgang durchgeführt wird, so sind die Blöcke Ja, Enthaltung, Nein je durch ein / getrennt.
Erlaubte Zeichen: Kandidaten, ;, , und /

>Jeder Stimmzettel wird in einer eigenen Zeile eingetragen. Entsprechend der Reihenfolge der Kandidaten wird von links nach rechts für jeden Kandidaten, Komma-getrennt die Zahl vom Stimmzettel übertragen.
Erlaubte Zeichen: Ziffern und ,

>Jeder Stimmzettel wird in einer eigenen Zeile eingetragen. Entsprechend der Reihenfolge der Kandidaten wird von links nach rechts für jeden Kandidaten eingetragen j für Ja, e für Enthaltung oder n für Nein.
Erlaubte Zeichen: j, e und n

Ergebnis