=== Ansico Ansøgninger ===
Contributors: andreasandersen
Requires at least: 6.0
Requires PHP: 7.4
Stable tag: 1.1.0
License: GPL-2.0-or-later

Vurder ansøgninger til jobsamtaler med ansættelsesrunder, forløb, prioriteringer og visuel scoring.

== Sikkerhed – PDF-beskyttelse ==

Fra denne udgave gemmes Ansico-bilag i en separat mappe:

    wp-content/uploads/ansico-protected-pdfs/

Alle Ansico-PDF'er åbnes via pluginets WordPress-proxy med:

* aktivt WordPress-login
* capability-tjek
* nonce bundet til den konkrete fil
* kontrol af at filen er et Ansico-tilknyttet PDF-bilag

Eksisterende Ansico-PDF'er flyttes automatisk til den beskyttede mappe ved
næste admin-besøg efter opdatering. Filnavne på disken gøres samtidig
sværere at gætte. Originalt filnavn gemmes kun som metadata og bruges ved
visning/download.

--- Apache/LiteSpeed (automatisk) ---
Pluginet opretter en .htaccess i den beskyttede PDF-mappe og en fallback-regel
i uploads-mappens .htaccess, som blokerer direkte HTTP-adgang til
ansico-protected-pdfs.

--- IIS (automatisk) ---
Pluginet opretter en web.config i den beskyttede PDF-mappe, som nægter direkte
adgang.

--- Nginx (manuel konfiguration anbefales) ---
.htaccess/web.config virker ikke på Nginx. Tilføj følgende regel i din
server-blok, tilpasset din faktiske uploads-sti:

    location ^~ /wp-content/uploads/ansico-protected-pdfs/ {
        deny all;
        return 403;
    }

Placér reglen FØR din generelle WordPress location-blok.

--- Login på hele sitet ---
For at sikre at ingen sider er tilgængelige uden login, tilføj dette
i wp-config.php eller et must-use plugin (mu-plugins/):

    define('ANSICO_FORCE_LOGIN', true);

Og i functions.php eller et mu-plugin:

    add_action('init', function() {
        if (!is_user_logged_in() && !is_login()) {
            auth_redirect();
        }
    });

== Changelog ==

= 1.0.8.1 =
* Tilføjet: Automatisk mailnotifikation på selve dagen for ansøgningsfristen.
* Tilføjet: Særskilt mailskabelon til ansøgningsfrist-notifikation med understøttelse af {application_deadline} og {deadline_date}.
* Opdateret: Mailskabelonsiden gemmer nu både opslagsdato-påmindelse og ansøgningsfrist-påmindelse.

= 1.0.3 =
* Mere kompakt scoreskema-tabel under indstillinger.
* Beskrivelse til scoreskema redigeres i modalvinduet.


= 1.0.3 =
* Ændret: Resume-PDF sorterer nu ansøgere efter faldende samlet screeningsscore.
* Tilføjet: PDF-overblik pr. scoringsskema i indstillinger med parametre, makspoint og noter.
* Ændret: Knapper på ansættelsesrunder er nu kompakte ikonknapper med tooltip, så tabellen ikke bliver for bred.

= 1.0.3 =
* Ændret: Knapper på ansættelsesrunder er nu kompakte ikonknapper med tooltip, så tabellen ikke bliver for bred.

= 1.0.2.9 =
* Tilføjet: Download resume som PDF på ansættelsesrunder med totalscore, screeningparametre, kommentarer og quick note.

= 1.0.2.8 =
* Tauri data.json-import bevarer nu altid eksisterende WordPress-PDF-tilknytninger og ignorerer pdf1_name/pdf2_name som importkilde.
* Fortsat synkronisering af selection_note og threshold samt import-statusbar.

= 1.0.0.6 =
* Tilføjet: PDF-proxy – alle PDF-links går nu igennem admin-ajax.php med
  nonce-validering og manage_options-check. Den reelle fil-URL eksponeres aldrig.
* Tilføjet: Automatisk .htaccess-beskyttelse af uploads-mappen ved aktivering.
* Tilføjet: .htaccess fjernes automatisk ved deaktivering (register_deactivation_hook).
* Tilføjet: Sikkerhedsstatusside under Indstillinger viser om beskyttelsen er aktiv.
* Tilføjet: Manuel "Opdater .htaccess"-knap i indstillinger hvis automatisk skrivning fejlede.

= 1.0.0.5 =
* Tilføjet: Sortering i ansøgerlisten på nr., navn, status og screeing-/samtalescorer.

= 1.0.0.4 =
* Tilføjet: Eksport til CSV med alle scoringer og rangeringer.
* Tilføjet: Bulk "Klar til samtale" med checkbokse.
* Tilføjet: Hurtig note per ansøger direkte i listen.
* Tilføjet: Søg og filtrer ansøgere på navn, status og forløb.
* Tilføjet: "↩ Screening"-knap til at nulstille status.
* Tilføjet: Slet hel ansættelsesrunde fra rundelisten.
* Rettet: Undefined variable $round_id i save_committee_scores().

= 1.0.0.3 =
* Rettet: Undefined variable $round_id i save_committee_scores().
* Tilføjet: Farvekodede statusbadges, flash-beskeder, tomme tilstande.
* Forbedret: Kodestruktur og indrykning.


= 1.0.1.1 =
* Rundeoprettelse, import, forløb og ny ansøger flyttet til modalvinduer.
* Handlinger på ansættelsesrunde samlet over ansøgerlisten.


= 1.0.1.1 =
* Se scoring viser nu kun ansøgere, der er indkaldt til samtale.


= 1.0.1.1 =
* Blind screening kan slås til/fra under Indstillinger.
* Samtaletidspunkt kan angives ved flytning til samtale og redigeres på samtaleansøgere.
* Ansøgere i samtale sorteres som standard efter samtaletidspunkt.


= 1.0.1.1 =
* Tomme PDF-felter viser ikke længere teksten “Ingen PDF”.


= 1.0.1.11 =
* Hurtignote kan nu også redigeres direkte fra Læs/score-siden.


= 1.0.1.11 =
* Rettet gem af hurtignote fra Læs/score-siden.


= 1.0.1.11 =
* Scoring understøtter nu halve point med halve stjerner og 0,5-trin på slideren.


= 1.0.1.11 =
* Halve point vises nu som halve farvede stjerner.
* Hvert scoringskriterium kan markeres med et grønt '+' uden at give point.


= 1.0.1.11 =
* Rettet visning af halve stjerner.
* Rettet synlighed af '+'-ikon ved scoring.


= 1.0.1.11 =
* Stjerner kan igen klikkes ved scoring, inkl. halve point.
* Læs/score-siden har nu felt til kontakt til reference.


= 1.0.1.11 =
* '+'-ikonet er flyttet til højre side over slideren for mere luft omkring stjernerne.


= 1.0.1.11 =
* '+'-ikonet er rykket lidt op, så det ikke rører fritekstfeltet.
* Ansøgerlisten viser nu antal plusmarkeringer i scorekolonnerne, fx 8 / 17 (1+).



= 1.0.2.9 =
* Tilføjet: Download resume som PDF på ansættelsesrunder med totalscore, screeningparametre, kommentarer og quick note.

= 1.0.2.8 =
* Tauri-import synkroniserer nu også rundens grænselinje/threshold til WordPress-indstillingen.
* Afklaret feltmapping: selection_note og threshold gemmes som WordPress-options; PDF-navne bruges til at genskabe eksisterende PDF-tilknytninger.
* Tilføjet synlig statusbar ved import af Tauri data.json / WordPress JSON.

= 1.0.2.4 =
* Rettet import af Tauri-appens flade data.json-format.
* Import viser nu tydelig succesbesked med antal importerede rækker eller konkret fejlbesked.
* Tauri-import bevarer eksisterende WordPress-PDF'er og kobler dem igen via filnavn, hvis muligt.
= 1.0.2.1 =
* Rettet manglende nonce-output ved gemning af hurtignote fra ansøgerlisten.


= 1.0.2.1 =
* Rettet gemning af grænselinje på Samtaleurval. Værdien gemmes nu pr. ansættelsesrunde.


= 1.0.2.1 =
* Tilføjet notatfelt til samtaleurval pr. ansættelsesrunde.


= 1.0.2.1 =
* Rettet visning af grænselinje på Samtaleurval.


= 1.0.2.1 =
* Rettet off-by-one fejl i grænselinje på Samtaleurval.


= 1.0.2.1 =
* Fjernet ekstra rød grænselinje på Samtaleurval. Kun den oprindelige blå linje vises nu.


= 1.0.2.1 =
* Rettet placering af den blå grænselinje på Samtaleurval.


= 1.0.2.1 =
* Rettet placering af den blå grænselinje, så den vises under det antal ansøgere der er angivet.


= 1.0.2.1 =
* Versionsløft uden funktionsændringer.


= 1.0.2.1 =
* Tilføjet eksport/import af alle data i fælles Ansico JSON-format, inkl. PDF-filer.


= 1.0.2.1 =
* Rettet mulig admin-post navnekollision med andre Ansico-plugins ved eksport/import af alle data.
* Eksportfilen navngives nu tydeligt som ansico-ansoegninger-export-*.json.

= 1.0.6.12 =
* Tilføjet: Topnavigation – mørk appbar øverst på alle plugin-sider med direkte links til Ansættelsesrunder, Indstillinger, Mailskabeloner og Statistik. Breadcrumb viser aktuel placering.
* Tilføjet: Score-siden bruger nu fanebaseret stepper med Screening- og Samtale-tabs. Hvert faneblad viser pointfremgang og progress-bar i realtid. Beslutningsknapper (Til samtale / Afslag) er samlet i en sticky bar nederst på siden.
* Tilføjet: "Rediger ansøger"-knappen i ansøgerlisten åbner nu et modalvindue i stedet for at navigere til en ny side.


* Rettet: Fjern arkivering sætter nu runden tilbage til afsluttet/lukket i stedet for fortsat arkiveret.

== Changelog ==

= 1.1.0 =
* Versionsnummer opdateret til 1.1.0.

= 1.0.8.3 =
* Ydeevne: Elimineret N+1 database-queries i ansøgerlisten. Prefs og scoreoversigt hentes nu i 2 bulk-queries i stedet for op til 200+ enkelt-queries per side.
* Ydeevne: Nyt `status`-index på applicants-tabellen reducerer forespørgselstid ved filtrering.
* Sikkerhed: Nye hjælpefunktioner `prefs_bulk()` og `score_summary_bulk()` bruger korrekt forberedte statements med `$wpdb->prepare()`.
* Kode: `points_matrix()` returnerer nu points og positive_flag samlet, eliminerer separat flag-opslag.
* Design: Loading-state på alle submit-knapper (disabled + spinner-tekst under indsendelse).
* Design: Inline validering ved fil-upload erstatter `alert()`.
* UX: Paginering nulstilles til side 1 ved filtreskift via flow-stepper.
* UX: `autocomplete="off"` på søgefeltet i ansøgerlisten.
* Vedligeholdelse: `readme.txt` er opdateret med komplet changelog.
* Vedligeholdelse: Inline `style`-attributter reduceret – de hyppigste rykket til CSS-klasser.

= 1.0.8.2 =
* Kategori-filer: Upload og vis filer tilknyttet kategorier per fase (screening/samtale).
* Flow-stepper: Klikbar – filtrerer ansøgerlisten og viser/skjuler stage-kort.
* Samtaleurval: Viser alle ansøgere inkl. afgjorte til reference.
* Stemmer: "Anbefalingspoint" omdøbt til "stemmer" i samtaleurval.

= 1.0.8.1 =
* PDF-beskyttelse via dedikeret mappe og .htaccess-proxy.
* Paginering af ansøgerliste (50 pr. side).
* Autosave med debounce på scoreformularer.
* Næste/forrige-navigation på læs/score-siden.
* Scoring-progress-bar på rundesiden.
* Automatisk anonymisering via cron.
