mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-06-25 16:19:19 +02:00
centralise repertoire filter column rendering
- shared repFilterEntry() and config array - shared repFilterEntry() and $filterColumns config array - fix single-valued FK fading via full intersection
This commit is contained in:
@@ -653,29 +653,26 @@ class Database
|
||||
[$wAll, $bAll] = $buildWhere('__none__');
|
||||
$matchedIds = array_column($exec("SELECT t.id $baseJoins WHERE $wAll", $bAll), 'id');
|
||||
|
||||
// Years
|
||||
[$w, $b] = $buildWhere('years');
|
||||
$matchedYears = array_column($exec("SELECT DISTINCT t.year $baseJoins WHERE $w ORDER BY t.year DESC", $b), 'year');
|
||||
// Years — single-valued FK: use full intersection (including own filter).
|
||||
// Clicking one year should fade years that have zero theses in the current result.
|
||||
$matchedYearsIds = array_column($exec("SELECT DISTINCT t.year $baseJoins WHERE $wAll", $bAll), 'year');
|
||||
$allYears = array_column($exec('SELECT DISTINCT year FROM theses WHERE is_published=1 ORDER BY year DESC', []), 'year');
|
||||
$yearsOut = array_map(fn ($y) => ['value' => $y, 'matched' => in_array($y, $matchedYears, true)], $allYears);
|
||||
$yearsOut = array_map(fn ($y) => ['value' => $y, 'matched' => in_array($y, $matchedYearsIds, true)], $allYears);
|
||||
|
||||
// AP programs
|
||||
[$w, $b] = $buildWhere('ap');
|
||||
$matchedAp = array_column($exec("SELECT DISTINCT ap.name $baseJoins WHERE $w AND ap.name IS NOT NULL ORDER BY ap.name", $b), 'name');
|
||||
// AP programs — single-valued FK: use full intersection.
|
||||
$matchedApIds = array_column($exec("SELECT DISTINCT ap.name $baseJoins WHERE $wAll AND ap.name IS NOT NULL", $bAll), 'name');
|
||||
$allAp = array_column($exec('SELECT name FROM ap_programs ORDER BY name', []), 'name');
|
||||
$apOut = array_map(fn ($n) => ['value' => $n, 'matched' => in_array($n, $matchedAp, true)], $allAp);
|
||||
$apOut = array_map(fn ($n) => ['value' => $n, 'matched' => in_array($n, $matchedApIds, true)], $allAp);
|
||||
|
||||
// Orientations
|
||||
[$w, $b] = $buildWhere('or');
|
||||
$matchedOr = array_column($exec("SELECT DISTINCT o.name $baseJoins WHERE $w AND o.name IS NOT NULL ORDER BY o.name", $b), 'name');
|
||||
// Orientations — single-valued FK: use full intersection.
|
||||
$matchedOrIds = array_column($exec("SELECT DISTINCT o.name $baseJoins WHERE $wAll AND o.name IS NOT NULL", $bAll), 'name');
|
||||
$allOr = array_column($exec('SELECT name FROM orientations ORDER BY name', []), 'name');
|
||||
$orOut = array_map(fn ($n) => ['value' => $n, 'matched' => in_array($n, $matchedOr, true)], $allOr);
|
||||
$orOut = array_map(fn ($n) => ['value' => $n, 'matched' => in_array($n, $matchedOrIds, true)], $allOr);
|
||||
|
||||
// Finality types
|
||||
[$w, $b] = $buildWhere('fi');
|
||||
$matchedFi = array_column($exec("SELECT DISTINCT ft.name $baseJoins WHERE $w AND ft.name IS NOT NULL ORDER BY ft.name", $b), 'name');
|
||||
// Finality types — single-valued FK: use full intersection.
|
||||
$matchedFiIds = array_column($exec("SELECT DISTINCT ft.name $baseJoins WHERE $wAll AND ft.name IS NOT NULL", $bAll), 'name');
|
||||
$allFi = array_column($exec('SELECT name FROM finality_types ORDER BY name', []), 'name');
|
||||
$fiOut = array_map(fn ($n) => ['value' => $n, 'matched' => in_array($n, $matchedFi, true)], $allFi);
|
||||
$fiOut = array_map(fn ($n) => ['value' => $n, 'matched' => in_array($n, $matchedFiIds, true)], $allFi);
|
||||
|
||||
// Keywords
|
||||
[$w, $b] = $buildWhere('kw');
|
||||
|
||||
Reference in New Issue
Block a user