- 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>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<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>
|
||||||
</section>
|
</section>
|
||||||
<script>
|
<script>
|
||||||
|
@ -119,6 +119,24 @@ function search_in_names(array $records, string $needle, string $group = "", boo
|
|||||||
return $filter_res;
|
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("DATA_DIR", "data");
|
||||||
define("LOGIN_ID_FILE_NAME", "electors_masked.md");
|
define("LOGIN_ID_FILE_NAME", "electors_masked.md");
|
||||||
define("VOTE_FILENAME", "votes.dat");
|
define("VOTE_FILENAME", "votes.dat");
|
||||||
@ -160,14 +178,14 @@ function submit_name(string $name, string $group, string $elector_id)
|
|||||||
if (count($hits) === 1) {
|
if (count($hits) === 1) {
|
||||||
// felhasználó azonosítójának beírása a felhasznált hash-ek jegyzékébe
|
// 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");
|
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
|
// szavazat mentése
|
||||||
$name = $hits[0]["name"];
|
$name = $hits[0]["name"];
|
||||||
$group = $hits[0]["group"];
|
$group = $hits[0]["group"];
|
||||||
$record = "$name//$group\n";
|
$record = "$name//$group\n";
|
||||||
copy($votes_filename, "$votes_filename.prev");
|
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
|
// időbélyeg mentése
|
||||||
copy($timestamp_filename, "$timestamp_filename.prev");
|
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 = "rgb(" . random_int(0, 255) . "," . random_int(0, 255) . "," . random_int(0, 255) . ")";
|
||||||
$color = $palette[$idx];
|
$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}'>";
|
$svg .= "<g class='datagroup' style='animation-delay: ${anim_delay}s' id='datagroup${idx}'>";
|
||||||
$sector_id = "sector$idx";
|
$sector_id = "sector$idx";
|
||||||
$svg .= $svg_path($svg_curve($percent), $color, "$sector_id"); // körcikk
|
$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
|
// szavazat-eredmények mentése
|
||||||
$records_without_group = [];
|
$records_without_group = [];
|
||||||
foreach ($report["records"] as $record) { // csoport törlése (privacy and like that)
|
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));
|
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;
|
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["open_for_submit"] = $state["open_for_submit"];
|
||||||
$res["results_public"] = $state["results_public"];
|
$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["valid"] = true;
|
||||||
$res["used"] = false;
|
$res["used"] = false;
|
||||||
$state = load_state();
|
$state = load_state();
|
||||||
@ -799,6 +859,20 @@ if (cp_verify_id($elector_id)) {
|
|||||||
$res = generate_svg_plot(generate_report(false));
|
$res = generate_svg_plot(generate_report(false));
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
$processed = false;
|
$processed = false;
|
||||||
break;
|
break;
|
||||||
|
@ -111,4 +111,38 @@ function cp_internal_totaling(filename) {
|
|||||||
plotTab.document.write(svg);
|
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