- sorfelcserélés (keverés) implementálva
- CSV-be mentés hozzáadva - Új azonosító hozzáadása menet közben implementálva
This commit is contained in:
parent
cbcdb7115a
commit
bb66a40f3f
@ -48,7 +48,9 @@
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<div class="btn" onclick="cp_internal_totaling()">Zárt összesítés és megjelenítés</div>
|
||||
<div class="btn" onclick="cp_add_access_code()">Kód hozzáadása</div><br>
|
||||
<div class="btn" onclick="cp_internal_totaling()">Zárt összesítés és megjelenítés</div><br>
|
||||
<div class="btn" onclick="cp_download_resport_as_csv()">Eredmények letöltése CSV-ben</div>
|
||||
</section>
|
||||
</section>
|
||||
<script>
|
||||
|
@ -119,6 +119,24 @@ function search_in_names(array $records, string $needle, string $group = "", boo
|
||||
return $filter_res;
|
||||
}
|
||||
|
||||
// hozzáillesztés és sorok felcserélése
|
||||
function append_and_shuffle(string $filename, string $str)
|
||||
{
|
||||
$file_contents = file_get_contents($filename, $str); // betöltés
|
||||
$file_contents = ($file_contents === false) ? $str : ($file_contents . $str); // új adat hozzáadása
|
||||
$lines = explode("\n", $file_contents); // szétszedés soronként
|
||||
$lines_trimmed = []; // üres sorok kihagyása
|
||||
foreach ($lines as $line) {
|
||||
$lt = trim($line);
|
||||
if ($lt !== "") {
|
||||
$lines_trimmed[] = $lt;
|
||||
}
|
||||
}
|
||||
shuffle($lines_trimmed); // sorok felcserélése
|
||||
$file_contents = implode("\n", $lines_trimmed) . "\n"; // összeállítás egy stringbe
|
||||
return file_put_contents($filename, $file_contents); // mentés
|
||||
}
|
||||
|
||||
define("DATA_DIR", "data");
|
||||
define("LOGIN_ID_FILE_NAME", "electors_masked.md");
|
||||
define("VOTE_FILENAME", "votes.dat");
|
||||
@ -160,14 +178,14 @@ function submit_name(string $name, string $group, string $elector_id)
|
||||
if (count($hits) === 1) {
|
||||
// felhasználó azonosítójának beírása a felhasznált hash-ek jegyzékébe
|
||||
copy($used_hash_filename, "$used_hash_filename.prev");
|
||||
$hash_save_successful = file_put_contents($used_hash_filename, "$elector_hash\n", FILE_APPEND) !== false;
|
||||
$hash_save_successful = append_and_shuffle($used_hash_filename, "$elector_hash\n") !== false;
|
||||
|
||||
// szavazat mentése
|
||||
$name = $hits[0]["name"];
|
||||
$group = $hits[0]["group"];
|
||||
$record = "$name//$group\n";
|
||||
copy($votes_filename, "$votes_filename.prev");
|
||||
$vote_save_successful = file_put_contents($votes_filename, $record, FILE_APPEND) !== false;
|
||||
$vote_save_successful = append_and_shuffle($votes_filename, $record) !== false;
|
||||
|
||||
// időbélyeg mentése
|
||||
copy($timestamp_filename, "$timestamp_filename.prev");
|
||||
@ -524,7 +542,7 @@ function generate_svg_plot($report, $mobile = false): string
|
||||
//$color = "rgb(" . random_int(0, 255) . "," . random_int(0, 255) . "," . random_int(0, 255) . ")";
|
||||
$color = $palette[$idx];
|
||||
|
||||
$anim_delay = SVG_REPORT_ANIMATION_DUR * 2/3 * ($sector_count - $idx - 1);
|
||||
$anim_delay = SVG_REPORT_ANIMATION_DUR * 2 / 3 * ($sector_count - $idx - 1);
|
||||
$svg .= "<g class='datagroup' style='animation-delay: ${anim_delay}s' id='datagroup${idx}'>";
|
||||
$sector_id = "sector$idx";
|
||||
$svg .= $svg_path($svg_curve($percent), $color, "$sector_id"); // körcikk
|
||||
@ -652,7 +670,7 @@ function cp_modify_state($command)
|
||||
// szavazat-eredmények mentése
|
||||
$records_without_group = [];
|
||||
foreach ($report["records"] as $record) { // csoport törlése (privacy and like that)
|
||||
$records_without_group[] = [ "name" => $record["name"], "count" => $record["count"], "ratio" => $record["ratio"] ];
|
||||
$records_without_group[] = ["name" => $record["name"], "count" => $record["count"], "ratio" => $record["ratio"]];
|
||||
}
|
||||
file_put_contents(PUBLIC_DIR . DIRECTORY_SEPARATOR . FULL_RESULT_RECORDS_FILENAME, json_encode($records_without_group));
|
||||
}
|
||||
@ -672,6 +690,48 @@ function cp_modify_state($command)
|
||||
return $state;
|
||||
}
|
||||
|
||||
define("TEMPDIR", "temp");
|
||||
|
||||
// jelentés előállítása csv-ként
|
||||
function generate_csv_report($report)
|
||||
{
|
||||
$csv_report_filename = TEMPDIR . DIRECTORY_SEPARATOR . uniqid("report_") . ".csv";
|
||||
|
||||
$csvfp = fopen($csv_report_filename, "w");
|
||||
if ($csvfp === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// fejléc mentése
|
||||
$header = ["Név", "Csoport", "Szavazatok", "Arány", "Össz_szavazat", "Össz_szavazó", "Részv_arány"];
|
||||
fputcsv($csvfp, $header);
|
||||
|
||||
// első sor mentése
|
||||
$records = $report["records"];
|
||||
if (count($records) === 0) { // egy sort legalább hozzáadunk
|
||||
$records[0] = ["name" => "", "group" => "", "count" => "", "ratio" => ""];
|
||||
}
|
||||
$total_votes = $report["total_votes"];
|
||||
$total_electors = $report["total_electors"];
|
||||
$firstLine = [$records[0]["name"], $records[0]["group"], $records[0]["count"], number_format($records[0]["ratio"] * 100, 2) . "%",
|
||||
$total_votes, $total_electors, number_format($total_votes / $total_electors * 100, 2) . "%"];
|
||||
fputcsv($csvfp, $firstLine);
|
||||
|
||||
// többi sor mentése
|
||||
for ($i = 1; $i < count($records); $i++) {
|
||||
$records[$i]["ratio"] = number_format($records[$i]["ratio"] * 100, 2) . "%";
|
||||
fputcsv($csvfp, $records[$i]);
|
||||
}
|
||||
|
||||
fclose($csvfp);
|
||||
|
||||
return $csv_report_filename;
|
||||
}
|
||||
|
||||
function cp_add_access_code(string $ac) {
|
||||
$hash = sha1($ac);
|
||||
file_put_contents(DATA_DIR . DIRECTORY_SEPARATOR . LOGIN_ID_FILE_NAME, "$hash\n", FILE_APPEND);
|
||||
}
|
||||
|
||||
// --------------------------------
|
||||
|
||||
@ -697,7 +757,7 @@ switch ($action) {
|
||||
$res["open_for_submit"] = $state["open_for_submit"];
|
||||
$res["results_public"] = $state["results_public"];
|
||||
}
|
||||
} else if(cp_verify_id($elector_id)) { // megnézzük, hogy admin-e, ha igen, akkor a szavazás indítása előtt beléphet
|
||||
} else if (cp_verify_id($elector_id)) { // megnézzük, hogy admin-e, ha igen, akkor a szavazás indítása előtt beléphet
|
||||
$res["valid"] = true;
|
||||
$res["used"] = false;
|
||||
$state = load_state();
|
||||
@ -799,6 +859,20 @@ if (cp_verify_id($elector_id)) {
|
||||
$res = generate_svg_plot(generate_report(false));
|
||||
}
|
||||
break;
|
||||
case "cp_csv_report":
|
||||
{
|
||||
$report = generate_report(false); // teljes jelentés generálása
|
||||
$res = generate_csv_report($report); // csv generálása
|
||||
}
|
||||
break;
|
||||
case "cp_add_access_code":
|
||||
{
|
||||
$ac = $req_data["access_code"] ?? "";
|
||||
if ($ac !== "") {
|
||||
cp_add_access_code($ac);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$processed = false;
|
||||
break;
|
||||
|
@ -111,4 +111,38 @@ function cp_internal_totaling(filename) {
|
||||
plotTab.document.write(svg);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function cp_download_resport_as_csv() {
|
||||
let request_data = {
|
||||
action: "cp_csv_report",
|
||||
cp_id: CP_ID
|
||||
};
|
||||
|
||||
request(request_data).then(resp_str => {
|
||||
let csv_url = JSON.parse(resp_str);
|
||||
if (csv_url !== "") {
|
||||
let link = document.createElement("a");
|
||||
link.download = "report.csv";
|
||||
link.href = csv_url;
|
||||
link.click();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function cp_add_access_code() {
|
||||
let ac = window.prompt("Új azonosító hozzáadása", "");
|
||||
if (ac == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
let request_data = {
|
||||
action: "cp_add_access_code",
|
||||
cp_id: CP_ID,
|
||||
data: {
|
||||
access_code: ac
|
||||
}
|
||||
};
|
||||
|
||||
request(request_data);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user