- 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");
|
||||||
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------
|
// --------------------------------
|
||||||
|
|
||||||
@ -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;
|
||||||
|
@ -112,3 +112,37 @@ function cp_internal_totaling(filename) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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