Met de Webform module voor Drupal is het eenvoudig om zelf allerlei formulieren aan te maken op je website. De module bevat heel wat leuke opties maar het enige wat nog net ontbreekt is om het door jouw aangemaakte formulier te laten afsluiten na een bepaald aantal inzendingen. Wanneer je bv het formulier gebruikt voor inschrijvingen zou het wel leuk zijn dat het word afgesloten wanneer het maximum aantal deelnemers bereikt is.
Er zit een gelijkaardige optie ingebouwd in de module maar deze beperkt het aantal inzendingen voor een gebruiker binnen een voorafbepaalde tijd.
Gelukkig heeft men ook de optie voorzien om zelf extra validatie toe te voegen aan de webform formulieren.
Bij het aanmaken of bewerken van je formulier vind je onder "Geavanceerde webformulier instellingen" het veld "Additional Validation" terug. In dit veld kan je al je extra validatie plaatsen.
Door onderstaand stukje PHP toe te voegen kan je het webformulier laten afsluiten na een vooraf ingesteld aantal inzendingen, en hier een mail voor laten versturen om je op de hoogte te brengen.
Het afsluiten van het formulier zal gebeuren door alle rollen uit te schakelen voor dit formulier, zodat het niet meer ingevuld kan worden.
<?php
/*
* Extra validatie
* Maak de publicatie van het formulier ongedaan op een
* vooraf ingesteld aantal inzendingen
*/$aantalInzendingen = 20; // Geef het aantal inzendingen
// Tel het aantal inzendingen voor dit formulier
$count = db_result(db_query("SELECT count(*) FROM {webform_submissions} WHERE nid = %d", $node->nid));// Controleer of het aantal inzendingen bereikt is, indien ja -> sluit het formulier af door alle rollen uit te schakelen
if ($count >= $aantalInzendingen) {// Totaal inzendingen bereikt, schakel alle rollen uit
$node->webform['roles'] = array();// Sla het formulier terug op
node_save($node);// Verstuur mail
$message = array(
'to' => 'vul hier je e-mailadres in',
'subject' => t('Inzendingen afgesloten'),
'body' => t('Het aantal inzendingen is bereikt en het formulier is afgesloten.'),
'headers' => array('From' => 'vul hier het afzender e-mailadres in'),
);
drupal_mail_send($message);}
?>
3 comments
Handig, ga ik zeker een keer
Door Andrea (niet gecontroleerd) op di, 05/04/2011 - 07:22Handig, ga ik zeker een keer gebruiken.
Wat nog een probleem is, is dat ik een formulier met 6 opties heb, en nu mag elke optie maar 10 keer ingezonden worden. Het hele formulier moet dus niet op inactief als het 10 keer ingezonden is maar alleen de optie die 10 keer ingezonden is.
Heb je daar nog een oplossing voor? (ik ben geen php expert)
Webform PHP
Door Donny op di, 05/04/2011 - 07:54Dat is ook perfect mogelijk maar echter ook alleen maar door custom PHP toe te voegen aan de extra validatie. Je zal even in je database moeten opzoeken welke velden je juist wenst aan te spreken voor je query.
Voor mijn formulier net snel even bekeken, om te testen had ik even een selectie veld toegevoegd. Dit selectie veld kreeg als uniek nummer '5' mee, dit kan je terug vinden door naar de url te kijken als je het veld gaat bewerken (components/...)
Bij elk selectie veld dat je aanmaakt is het ook aangeraden (verplicht in laatste versie van de webform module) om een sleutel/key te geven aan een optie, deze gaan we hier ook gebruiken.
Als ik al deze waardes zou gebruiken zou ik het script als volgt moeten aanpassen om dezelfde werking te behouden: (Niet getest, maar het zou moeten werken)
Update webform
Door Donny op wo, 20/04/2011 - 18:18Blijkbaar is die functionaliteit verdwenen in de recentste versies van de webform module, waar door je nu zelf een module zal moeten schrijven.
Klein voorbeeldje van hoe je een Drupal webformulier kan laten afsluiten na een bepaald aantal bereikte waardes.
Reactie toevoegen