92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
define("DUPLICATE_NAME_IN_SAME_GROUP", true);
 | 
						|
 | 
						|
// kiolvassa a választható emberek listáját
 | 
						|
function read_electable_people(string $fname): array
 | 
						|
{
 | 
						|
    $s = file_get_contents($fname);
 | 
						|
 | 
						|
    // szétszedés csoportnév-csoporttag sorozatra
 | 
						|
    $group_name_seq = preg_split("/(\*\*)|(__)/", trim($s), -1, PREG_SPLIT_NO_EMPTY);
 | 
						|
 | 
						|
    // csoportok feldolgozása egyenként
 | 
						|
    $ep = [];
 | 
						|
    for ($i = 0; $i < count($group_name_seq); $i += 2) {
 | 
						|
        $group = trim($group_name_seq[$i]); // csoport kiolvasása
 | 
						|
        $names = preg_split("/(\n)|(\r\n)/", trim($group_name_seq[$i + 1]), -1, PREG_SPLIT_NO_EMPTY); // nevek a csoportból
 | 
						|
 | 
						|
        foreach ($names as $name) {
 | 
						|
            if (trim($name) === "") { // üres sorokat átugorja
 | 
						|
                continue;
 | 
						|
            }
 | 
						|
            $new_rec = ["name" => $name, "group" => $group];
 | 
						|
            if (DUPLICATE_NAME_IN_SAME_GROUP || !in_array($new_rec, $ep)) {
 | 
						|
                $ep[] = $new_rec;
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    return $ep;
 | 
						|
}
 | 
						|
 | 
						|
define("MINIMUM_NEEDLE_LENGTH", 3);
 | 
						|
 | 
						|
// keresés a nevek között
 | 
						|
function search_in_names(array $records, string $needle): array
 | 
						|
{
 | 
						|
    $needle = trim($needle);
 | 
						|
 | 
						|
    if (strlen($needle) < MINIMUM_NEEDLE_LENGTH) {
 | 
						|
        return [];
 | 
						|
    }
 | 
						|
 | 
						|
    $hitpos_array = [];
 | 
						|
 | 
						|
    $filter = function(array $var) use (&$hitpos_array, $needle) : bool {
 | 
						|
        $hitpos = stripos($var["name"], $needle);
 | 
						|
 | 
						|
        if ($hitpos != false) {
 | 
						|
            $hitpos_array[] = $hitpos;
 | 
						|
        }
 | 
						|
 | 
						|
        return $hitpos !== false;
 | 
						|
    };
 | 
						|
 | 
						|
    $filter_res = array_values(array_filter($records, $filter));
 | 
						|
 | 
						|
    if (count($filter_res) > 0) {
 | 
						|
        for ($i = 0; $i < count($filter_res); $i++) {
 | 
						|
            $filter_res[$i]["hitpos"] = $hitpos_array[$i];
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    return $filter_res;
 | 
						|
}
 | 
						|
 | 
						|
// --------------------------------
 | 
						|
 | 
						|
define("ELECTABLE_PEOPLE_DATABASE", "data/electable_people_test.md");
 | 
						|
 | 
						|
$action = json_decode($_POST["action"]) ?? "none";
 | 
						|
 | 
						|
$res = "";
 | 
						|
 | 
						|
switch ($action) {
 | 
						|
    case "search":
 | 
						|
        {
 | 
						|
            $needle = json_decode($_POST["needle"]);
 | 
						|
            $p = read_electable_people(ELECTABLE_PEOPLE_DATABASE);
 | 
						|
            $hits = search_in_names($p, $needle);
 | 
						|
            $res = $hits;
 | 
						|
        }
 | 
						|
        break;
 | 
						|
    case "none":
 | 
						|
        break;
 | 
						|
}
 | 
						|
 | 
						|
echo json_encode($res);
 | 
						|
 | 
						|
//$p = read_electable_people("data/electable_people_test.md");
 | 
						|
 | 
						|
return; |