- 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