#!/usr/local/bin/perl5 # # Requires: lib nrc # $spath_real: the path of the script on the server $spath_real = '/var/spool/www/W2/Lab/Rb97/Enq/'; # Obtain the subroutines needed require "${spath_real}lib"; require "${spath_real}nrc"; $spath = '/W2/Lab/Rb97/Enq/'; # Set the results database name # Initialise the options $resultsdb = "${spath_real}meevallerdb/resultaten"; @opties = ( '', 'Politie & justitie', 'Defensie (VN-taken)', 'Sociale zekerheid', 'Infrastructuur', 'Verlaging overheidstekort', 'Onderwijs', 'Gezondheidszorg', 'Ontwikkelingssamenwerking', 'Cultuur' ); # $topfile: file to be inserted at top of document # $bottomfile: file to be inserted at bottom of document $topfile = "${insertdir}meevaller.begin"; $bottomfile = "${insertdir}meevaller.eind"; # Print HTTP header &HTTPHeader; # Check if POST data available, return if not # Check if results need to be shown, return if not # Check if all fields are entered, return if not exit if &FirstTime; exit if &Results; exit if &Missing; # Open the results database for writing # Update number of votes # Increment number of votes depending on gender # Increment number of votes depending on location # Increment number of votes depending on poitical spectrum # Increment number of votes depending on voting behaviour &ErrorOpen( $resultsdb ) unless dbmopen( %wresults,$resultsdb,0664 ); $wresults{ 'total' }++; $wresults{ $in{'gender'} }++; $wresults{ $in{'where'} }++; $wresults{ $in{'spectrum'} }++; $wresults{ $in{'vote'} }++; # For each of the indicated choices # Set number of points to be added # Update the general counter for this place # Update the gender oriented counter for this place # Update the location oriented counter for this place # Update the political oriented counter for this place # Update the vote oriented counter for this place for( 1..9 ) { $points = 10-$_; $wresults{'',$in{$_}} += $points; $wresults{ $in{'gender'},$in{$_}} += $points; $wresults{ $in{'where'},$in{$_}} += $points; $wresults{ $in{'spectrum'},$in{$_}} += $points; $wresults{ $in{'vote'},$in{$_}} += $points; } # Make a local copy of the results # Close the database %results = %wresults; dbmclose( %wresults ); # Display top &Top; print <De uitslag Hieronder ziet u naast elkaar uw rangschikking naast de rangschikking van alle inzendingen bij elkaar opgeteld.

Het totaal aantal inzendingen is: $results{'total'}

EOD @table0 = ($in{'1'},$in{'2'},$in{'3'},$in{'4'},$in{'5'},$in{'6'},$in{'7'},$in{'8'},$in{'9'}); @table1 = &SortByType(''); &ShowOptions( 'Uw rangschikking','Totalen algemeen' ); &ShowOthers( '' ); &Bottom; #---------------------------------------------------------- sub FirstTime { return undef if &ReadParse; &Top; print <De meevaller In het regeringsakkoord hebben de ministers zich gebonden aan uitgavenplafonds voor hun departementen. Veel ruimte voor verschuivingen laat dat niet. Alleen bij een meevaller is er ruimte voor belangrijke beleidskeuzes. U bent het kabinet. En u heeft onverwachts een miljard gulden exta te besteden. Hoe verdeelt u het geld over de volgende beleidsterreinen?

EOD &Form(); &Bottom; return 1; } #---------------------------------------------------------- sub Results { return undef unless $in{'query'}; local( %title ) = { 'man','Mannelijke inzenders', 'vrouw','Vrouwelijke inzenders', 'binnenland','Binnenlandse inzenders', 'buitenland','Buitenlandse inzenders', 'link','Links', 'midden','Midden', 'rechts','Rechts', 'regering','Regeringspartijstemmers', 'oppositie','Oppositiepartijstemmers', 'niet','Niet-stemmers', }; # Open the results database for writing &ErrorOpen( $resultsdb ) unless dbmopen( %results,$resultsdb,0444 ); &Top; if( $in{'query'} eq 'manvrouw' ) { print <De uitslag: man/vrouw Hieronder ziet u naast elkaar de rangschikkingen van alle mannelijke en vrouwelijke inzenders.

Het totaal aantal mannelijke inzenders is: $results{'man'}
Het totaal aantal vrouwelijke inzenders is: $results{'vrouw'}

EOD @table0 = &SortByType('man'); @table1 = &SortByType('vrouw'); &ShowOptions( 'Mannelijke inzenders','Vrouwelijke inzenders' ); &ShowOthers( 'manvrouw' ); } elsif( $in{'query'} eq 'binbuit' ) { print <De uitslag: binnen-/buitenland Hieronder ziet u naast elkaar de rangschikkingen van alle binnenlandse en buitenlandse inzenders.

Het totaal aantal binnenlandse inzenders is: $results{'binnenland'}
Het totaal aantal buitenlandse inzenders is: $results{'buitenland'}

EOD @table0 = &SortByType('binnenland'); @table1 = &SortByType('buitenland'); &ShowOptions( 'Binnenlandse inzenders','Buitenlandse inzenders' ); &ShowOthers( 'binbuit' ); } elsif( $in{'query'} eq 'spectrum' ) { print <De uitslag: politieke spectrum Hieronder ziet u naast elkaar de rangschikkingen uitgesplitst naar de plaats in het politieke spectrum van de inzenders.

Links van het politieke spectrum: $results{'links'}
Midden in het politieke spectrum: $results{'midden'}
Rechts van het politieke spectrum: $results{'rechts'}

EOD @table0 = &SortByType('links'); @table1 = &SortByType('midden'); @table2 = &SortByType('rechts'); &ShowOptions( 'Links','Midden','Rechts' ); &ShowOthers( 'binbuit' ); } elsif( $in{'query'} eq 'stem' ) { print <De uitslag: regering/oppositie/niet Hieronder ziet u naast elkaar de rangschikkingen van alle regeringspartij-, oppositiepartij- en niet-stemmers.

Het totaal aantal regeringspartijstemmers is: $results{'regering'}
Het totaal aantal oppositiepartijstemmers is: $results{'oppositie'}
Het totaal aantal niet-stemmers is: $results{'niet'}

EOD @table0 = &SortByType('regering'); @table1 = &SortByType('oppositie'); @table2 = &SortByType('niet'); &ShowOptions( 'Regeringspartijstemmers','Oppositiepartijstemmers','Niet-stemmers' ); &ShowOthers( 'stem' ); } else { print <De uitslag: totaal Hieronder ziet u naast elkaar uw rangschikking naast de rangschikking van alle inzendingen bij elkaar opgeteld.

Het totaal aantal inzendingen is: $results{'total'}

EOD @table0 = &SortByType(''); &ShowOptions( 'Totalen algemeen' ); &ShowOthers( 'algemeen' ); } &Bottom; return 1; } #---------------------------------------------------------- sub Missing { local( $missing,$double,$notdone ); local( %musthave,%selected,%notselected ); %musthave = ( 'gender','Of u man of vrouw bent', 'where','Waar u woont', 'spectrum','Hoe u zichzelf positioneert', 'vote','Hoe u stemt', ); foreach( sort keys( %musthave ) ) { unless( $in{$_} ) { unless( $missing++ ) { &Top; print "

De meevaller

\n"; print "

U heeft de volgende velden niet ingevuld:
\n"; } print "| $musthave{$_} |\n"; } } for ( 1..9 ) { $notselected{$_} = 1; } for ( 1..9 ) { if( $selected{$in{$_}} ) { unless( $double++ ) { if( $missing ) { print "

\n"; } else { &Top; print "

De meevaller

\n"; print "
\n"; } print "
U heeft de volgende beleidsterreinen meer dan eens opgevoerd:
\n"; } print "| $opties[$in{$_}] |\n" if $selected{$in{$_}} == 1; } $selected{$in{$_}}++; $notselected{$in{$_}} = 0; } for ( 1..9 ) { next unless $notselected{$_}; unless( $notdone++ ) { if( $missing || $double ) { print "

\n"; } else { &Top; print "

De meevaller

\n"; print "
\n"; } print "
U heeft de volgende beleidsterreinen niet opgevoerd:
\n"; } print "| $opties[$_] |\n"; } return undef unless $missing || $double || $notdone; print < Vul ook deze velden (juist) in!
EOD &Form(); &Bottom; return 1; } #---------------------------------------------------------- sub Form { print <1 waaraan u het meeste geld zou besteden en op 9 wat u de minst belangrijke post vindt. U moet alle beleidsterreinen een plaats geven in de rangschikking.

EOD &StartForm; for( 1..9 ) { print < EOD } local( $man ) = ' Checked' if $in{'gender'} eq 'man'; local( $vrouw ) = ' Checked' if $in{'gender'} eq 'vrouw'; local( $binnenland ) = ' Checked' if $in{'where'} eq 'binnenland'; local( $buitenland ) = ' Checked' if $in{'where'} eq 'buitenland'; local( $links ) = ' Checked' if $in{'spectrum'} eq 'links'; local( $midden ) = ' Checked' if $in{'spectrum'} eq 'midden'; local( $rechts ) = ' Checked' if $in{'spectrum'} eq 'rechts'; local( $regering ) = ' Checked' if $in{'vote'} eq 'regering'; local( $oppositie ) = ' Checked' if $in{'vote'} eq 'oppositie'; local( $not ) = ' Checked' if $in{'vote'} eq 'niet'; print < Vul ook deze (anonieme) gegevens over u zelf in:
Ik ben:
man
vrouw

Ik woon:
in Nederland
buiten Nederland

Ik positioneer mezelf in het politieke spectrum:
links
midden
rechts

Ik stem op:
een van de regeringspartijen
een van de oppositiepartijen
niet

EOD } #---------------------------------------------------------------- # Select # Display options of a certain group of players # # IN: name of group of players # ordinal number of field (none if not specified) # type of player sub Select { local( $optie,$gekozen ) = @_; print < EOD for( 1..9 ) { $selected = $_ == $gekozen ? ' SELECTED' : ''; print <$opties[$_] EOD } print < EOD } #---------------------------------------------------------------- # SortByType # Return sorted array according to specification of area sub SortByType { $type = $_[0]; return sort ByType (1..9); } sub ByType { -($results{$type,$a} <=> $results{$type,$b}); } #---------------------------------------------------------------- # ShowOptions # Show all the options specfied sub ShowOptions{ local( @tables ) = @_; local( $place ); print < EOD for( 0..$#tables ) { print <$tables[$_] EOD } print < EOD for $place ( 1..9 ) { print <$place: EOD for( 0..$#tables ) { print <$opties[${"table$_"}[$place-1]] EOD } print < EOD } print < EOD } #---------------------------------------------------------------- # ShowOthers # Show other options sub ShowOthers { local( $except ) = $_[0]; local( %options ) = ( 'algemeen','totalen algemeen', 'manvrouw','mannelijke en vrouwelijke inzenders', 'binbuit','binnenlandse en buitenlandse inzenders', 'spectrum','de plaats in het politieke spectrum van de inzenders', 'stem','regerings-, oppositie- en niet-stemmers', ); print < De resultaten van de enquête zijn ook te bekijken, uitgesplitst naar:

    EOD foreach( keys %options ) { next if $_ eq $except; print <$options{$_} EOD } print < Uw commentaar op deze enquête en de rijksbegroting kunt u sturen naar begroting\@opinie.nrc.nl EOD }