---
title: "EERVOL E-20 | APR 2026"
date: 2026-04-01
author: "Nico"
intro_image: "https://kveo.nl/images/eervol/EERVOL20.jpg"
categories:
  - name: "EERVOL"
    url: "https://kveo.nl/eervol.md"
---

# EERVOL E-20 | APR 2026

![EERVOL E-20 | APR 2026](https://kveo.nl/images/eervol/EERVOL20.jpg)



## Custom Fields

**PDF Toegang:** $app     = \Joomla\CMS\Factory::getApplication();
$session = $app->getSession();
$input   = $app->getInput();

// Artikel-ID: probeer achtereenvolgens drie bronnen
$artikelId = (int) ($item->id ?? 0);
if ($artikelId === 0) {
    $artikelId = $input->getInt('id', 0);
}
if ($artikelId === 0) {
    $artikelId = $input->getInt('artikel_id', 0);
}
if ($artikelId === 0) return '';

$db = \Joomla\CMS\Factory::getDbo();

$leesVeld = function(string $naam) use ($db, $artikelId): string {
    $query = $db->getQuery(true)
        ->select($db->quoteName('fv.value'))
        ->from($db->quoteName('#__fields_values', 'fv'))
        ->join(
            'INNER',
            $db->quoteName('#__fields', 'f')
                . ' ON ' . $db->quoteName('f.id') . ' = ' . $db->quoteName('fv.field_id')
        )
        ->where($db->quoteName('f.name')     . ' = ' . $db->quote($naam))
        ->where($db->quoteName('f.context')  . ' = ' . $db->quote('com_content.article'))
        ->where($db->quoteName('fv.item_id') . ' = ' . $artikelId);
    return (string) ($db->setQuery($query)->loadResult() ?? '');
};

// Document-velden slaan JSON op: {"file":"images/eervol/...","linktext":"..."}
$parseerPad = function(string $waarde): string {
    if ($waarde === '') return '';
    $decoded = json_decode($waarde, true);
    if (is_array($decoded)) {
        return (string) ($decoded['file'] ?? $decoded['src'] ?? $decoded['value'] ?? $decoded['path'] ?? '');
    }
    return $waarde;
};

// Publicatiedatum ophalen voor de 6-maanden-regel (vervangt het is-openbaar veld)
$pubQuery  = $db->getQuery(true)
    ->select($db->quoteName('publish_up'))
    ->from($db->quoteName('#__content'))
    ->where($db->quoteName('id') . ' = ' . $artikelId);
$publishUp  = (string) ($db->setQuery($pubQuery)->loadResult() ?? '');
$isOpenbaar = $publishUp !== '' && strtotime($publishUp) < strtotime('-6 months');

$root        = \Joomla\CMS\Uri\Uri::root();
$urlVolledig = ($p = $parseerPad($leesVeld('leden')))              ? $root . $p : '';
$urlBeperkt  = ($p = $parseerPad($leesVeld('niet-leden-beperkt'))) ? $root . $p : '';

// -----------------------------------------------------------------------
// Historische editie (ouder dan 6 maanden) → volledige PDF altijd vrij
// -----------------------------------------------------------------------
if ($isOpenbaar) {
    if (empty($urlVolledig)) return '';
    return '
                 Volledige editie bekijken
            ';
}

// -----------------------------------------------------------------------
// Recente editie — juiste inlogcode al ingevoerd deze sessie
// -----------------------------------------------------------------------
if ($session->get('eervol_toegang', false)) {
    if (empty($urlVolledig)) return '';
    return '
                 Volledige editie bekijken
            ';
}

// -----------------------------------------------------------------------
// Recente editie — eerder leeg/fout ingevuld → beperkte PDF + retry-link
// -----------------------------------------------------------------------
if ($session->get('eervol_besloten', '') === 'beperkt') {
    $resetUri = clone \Joomla\CMS\Uri\Uri::getInstance();
    $resetUri->setVar('eervol_reset', '1');
    $html = '';

    if ($urlBeperkt) {
        $html .= '
                      Dit is de beperkte versie van deze editie.
                  
                  
                       Beperkte editie bekijken
                  ';
    }

    $html .= '
                  
                        Toch een inlogcode? Klik hier.
                  
              ';

    return $html;
}

// -----------------------------------------------------------------------
// Eerste bezoek — popup automatisch openen
// -----------------------------------------------------------------------
$modalId = 'eervol-slot-' . $artikelId;

return '

    

        EERVOL — Volledige editie

        Vul hier de inlogcode in om de volledige editie te bekijken.
           
               Heb je geen inlogcode? Laat het veld leeg en klik op OK.
               Je ziet dan de beperkte versie.
           
        

        
            

            
                
            

            
                
                    OK
                
                
                    Leeg laten = beperkte versie
                
            
        

    



    document.addEventListener("DOMContentLoaded", function () {
        UIkit.modal(document.getElementById(' . json_encode($modalId) . ')).show();
    });
';

**PDF Url:** $app     = \Joomla\CMS\Factory::getApplication();
$session = $app->getSession();
$input   = $app->getInput();

$artikelId = (int) ($item->id ?? 0);
if ($artikelId === 0) {
    $artikelId = $input->getInt('id', 0);
}
if ($artikelId === 0) {
    $artikelId = $input->getInt('artikel_id', 0);
}
if ($artikelId === 0) return '';

$db = \Joomla\CMS\Factory::getDbo();

$leesVeld = function(string $naam) use ($db, $artikelId): string {
    $query = $db->getQuery(true)
        ->select($db->quoteName('fv.value'))
        ->from($db->quoteName('#__fields_values', 'fv'))
        ->join(
            'INNER',
            $db->quoteName('#__fields', 'f')
                . ' ON ' . $db->quoteName('f.id') . ' = ' . $db->quoteName('fv.field_id')
        )
        ->where($db->quoteName('f.name')     . ' = ' . $db->quote($naam))
        ->where($db->quoteName('f.context')  . ' = ' . $db->quote('com_content.article'))
        ->where($db->quoteName('fv.item_id') . ' = ' . $artikelId);
    return (string) ($db->setQuery($query)->loadResult() ?? '');
};

$parseerPad = function(string $waarde): string {
    if ($waarde === '') return '';
    $decoded = json_decode($waarde, true);
    if (is_array($decoded)) {
        return (string) ($decoded['file'] ?? $decoded['src'] ?? $decoded['value'] ?? $decoded['path'] ?? '');
    }
    return $waarde;
};

$pubQuery   = $db->getQuery(true)
    ->select($db->quoteName('publish_up'))
    ->from($db->quoteName('#__content'))
    ->where($db->quoteName('id') . ' = ' . $artikelId);
$publishUp  = (string) ($db->setQuery($pubQuery)->loadResult() ?? '');
$isOpenbaar = $publishUp !== '' && strtotime($publishUp) < strtotime('-6 months');

$root        = \Joomla\CMS\Uri\Uri::root();
$urlVolledig = ($p = $parseerPad($leesVeld('leden')))              ? $root . $p : '';
$urlBeperkt  = ($p = $parseerPad($leesVeld('niet-leden-beperkt'))) ? $root . $p : '';

if ($isOpenbaar)                                        return $urlVolledig;
if ($session->get('eervol_toegang', false))             return $urlVolledig;
if ($session->get('eervol_besloten', '') === 'beperkt') return $urlBeperkt;

return ''; // Nog geen keuze → pdf-toegang toont de modal

**Jaar:** 2026

**Maand:** April

**Nummer:** 20

**Leden:** {"file":"images\/eervol\/volledig\/E20_FNkM06h09W.pdf","linktext":"Download {filename}"}

**NIET-leden (beperkt):** {"file":"images\/eervol\/beperkt\/E20_qpuNjZsfA8.pdf","linktext":"Download {filename}"}

**Audio:** {"file":""}

**Video:** {"file":"","poster":""}

**Code:** $secretKey = 'v3Ry$3cr3t!K3y-Ch4ng3-M3-1n-Pr0d'; // zelfde als in generate_code.php
$alphabet  = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$titel     = $item->title ?? '';

if (empty($titel)) return '';

$hash = hash_hmac('sha256', $titel, $secretKey, true);
$code = '';
for ($i = 0; $i < 10; $i++) {
    $code .= $alphabet[ord($hash[$i]) % strlen($alphabet)];
}
return $code;

**openbaar:** $db        = \Joomla\CMS\Factory::getDbo();
$artikelId = (int) $item->id;

// Nummer van dit artikel
$q1        = $db->getQuery(true)
    ->select('fv.value')
    ->from('#__fields_values AS fv')
    ->join('INNER', '#__fields AS f ON f.id = fv.field_id AND f.name = ' . $db->quote('nummer'))
    ->where('fv.item_id = ' . $artikelId);
$ditNummer = (int) $db->setQuery($q1)->loadResult();

// Hoogste editienummer in de hele EERVOL-categorie
$q2        = $db->getQuery(true)
    ->select('MAX(CONVERT(fv.value, UNSIGNED))')
    ->from('#__fields_values AS fv')
    ->join('INNER', '#__fields AS f ON f.id = fv.field_id AND f.name = ' . $db->quote('nummer'))
    ->join('INNER', '#__content AS a ON a.id = fv.item_id')
    ->join('INNER', '#__categories AS c ON c.id = a.catid AND c.alias = ' . $db->quote('eervol'));
$maxNummer = (int) $db->setQuery($q2)->loadResult();

return ($ditNummer > 0 && $ditNummer 

