Changeset 315 for trunk


Ignore:
Timestamp:
05/23/10 19:51:07 (14 years ago)
Author:
nanardon
Message:
  • create a plugin system to get voters from externals base
Location:
trunk
Files:
9 added
9 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/lib/Epoll/Controller/Admin.pm

    r301 r315  
    100100    }; 
    101101 
    102     /^(BEFORE|RUNNING)$/ and do { 
    103         if (my ($upload) = $c->req->upload('votinglist')) { 
    104             $poll->voting_from_file( 
    105                 $upload->fh, 
    106                 $c->req->param('delete'), 
    107             ) and $poll->commit; 
    108         } elsif($c->req->param('delvoting')) { 
    109             $poll->delete_voting($c->req->param('delvoting')) 
    110                 and $poll->commit; 
    111         } elsif ($c->req->param('mail')) { 
    112             $poll->addupd_voting($c->req->param('mail'), $c->req->param('id')) 
    113                 and $poll->commit; 
    114         } elsif($c->req->param('mailpasswd')) { 
    115             # TODO 
    116             foreach my $vkey ($poll->list_voting_no_passwd) { 
    117                 my $voting = $poll->voting($vkey); 
    118                 my $pass = $voting->gen_passwd; 
    119                 $c->forward( 
    120                     q'Epoll::View::Mail', 'render', 
    121                     [ 'voting_passwd.tt', { 
    122                         From => $poll->info->{owner}, 
    123                         To => $voting->info->{mail}, 
    124                         Subject => "Invitation à voter", 
    125                         mail => { 
    126                             voteid => $id, 
    127                             mail => $voting->info->{mail}, 
    128                             passwd => $pass, 
    129                         } 
    130                     } ] 
    131                 ); 
    132             } 
    133         } 
    134     }; 
    135  
    136102    /^AFTER$/ and do { 
    137103        if ($c->req->param('mapfrom')) { 
     
    224190    my ($self, $c) = @_; 
    225191    ($c->stash->{voteid}) = @{ $c->req->snippets || [] }; 
    226     my $poll = $c->model('Vote')->poll($c->stash->{voteid}); 
    227  
    228     $poll->info or do { 
    229         $c->res->redirect($c->uri_for('/')); 
    230         return; 
    231     }; 
    232  
    233     $c->forward('auth') or return; 
    234     $c->forward('modify_poll'); 
     192    my $id = $c->stash->{voteid}; 
     193    my $poll = $c->model('Vote')->poll($c->stash->{voteid}); 
     194 
     195    $poll->info or do { 
     196        $c->res->redirect($c->uri_for('/')); 
     197        return; 
     198    }; 
     199 
     200    $c->forward('auth') or return; 
     201     
     202    for ($poll->status || '') { 
     203        /^(BEFORE|RUNNING)$/ and do { 
     204            if($c->req->param('delvoting')) { 
     205                $poll->delete_voting($c->req->param('delvoting')) 
     206                    and $poll->commit; 
     207            } elsif ($c->req->param('mail')) { 
     208                $poll->addupd_voting($c->req->param('mail'), $c->req->param('id')) 
     209                    and $poll->commit; 
     210            } elsif($c->req->param('mailpasswd')) { 
     211                # TODO 
     212                foreach my $vkey ($poll->list_voting_no_passwd) { 
     213                    my $voting = $poll->voting($vkey); 
     214                    my $pass = $voting->gen_passwd; 
     215                    $c->forward( 
     216                        q'Epoll::View::Mail', 'render', 
     217                        [ 'voting_passwd.tt', { 
     218                            From => $poll->info->{owner}, 
     219                            To => $voting->info->{mail}, 
     220                            Subject => "Invitation à voter", 
     221                            mail => { 
     222                                voteid => $id, 
     223                                mail => $voting->info->{mail}, 
     224                                passwd => $pass, 
     225                            } 
     226                        } ] 
     227                    ); 
     228                } 
     229            } 
     230        }; 
     231    } 
     232 
    235233    $c->stash->{page}{title} = $poll->info('label') . ': Administration, liste des electeurs'; 
     234} 
     235 
     236sub votersimport: LocalRegex('^(\w+)/voters/import$') { 
     237    my ($self, $c) = @_; 
     238    ($c->stash->{voteid}) = @{ $c->req->snippets || [] }; 
     239    my $poll = $c->model('Vote')->poll($c->stash->{voteid}); 
     240 
     241    if ($c->req->param('importtype')) { 
     242        if (my $handle = $poll->import_handle($c->req->param('importtype'))) { 
     243            $c->stash->{import_handle} = $handle; 
     244            if ($c->req->param('add_import')) { 
     245                warn $c->session->{import_param}; 
     246                $handle->load_xml_params($c->session->{import_param}); 
     247                if ($poll->voting_from_import($handle, 
     248                        ext_auth => $c->req->param('ext_auth') || undef, 
     249                        desc => $c->req->param('desc') || undef, 
     250                    )) { 
     251                    $poll->commit; 
     252                    $c->res->redirect($c->uri_for($c->stash->{voteid}, 
     253                            'voters')); 
     254                    return; 
     255                } 
     256            } else { 
     257                $handle->load_web_params($c); 
     258            } 
     259            $c->stash->{voters} = [ $handle->fetch_voters() ]; 
     260            $c->{stash}->{importtt} = 'importv/' . 
     261                lc($c->req->param('importtype')) . '.tt'; 
     262            warn $handle->xml_params; 
     263            $c->session->{import_param} = $handle->xml_params; 
     264        } else { 
     265            warn "Fail to load input handle"; 
     266        } 
     267    } 
     268 
    236269} 
    237270 
  • trunk/lib/Epoll/DB/Poll.pm

    r302 r315  
    514514sub auth_voting { 
    515515    my ($self, $mail, $password) = @_; 
    516     my $userinfo = $self->voting_info_id($mail) or return; 
    517  
    518     $userinfo->{passwd} or return; 
    519     if (crypt($password, $userinfo->{passwd} || '') eq $userinfo->{passwd}) { 
    520         return 1; 
    521     } else { 
    522         return 0; 
    523     } 
     516    $self->voting_from_mail($mail)->auth($password); 
    524517} 
    525518 
     
    804797 
    805798sub addupd_voting { 
    806     my ($self, $mail, $id) = @_; 
     799    my ($self, $mail, $id, $extern_auth, $extern_uid) = @_; 
    807800 
    808801    $mail =~ s/\s*$//; 
     
    814807    my $upd = $self->db->prepare_cached( 
    815808        q{ 
    816         update voting set label = ? where mail = ? and poll = ? 
    817         } 
    818     ); 
    819  
    820     if ($upd->execute($id, $mail, $self->voteid) == 0) { 
     809        update voting set label = ?, extern_auth = ?, extern_uid = ? where mail = ? and poll = ? 
     810        } 
     811    ); 
     812 
     813    if ($upd->execute($id, $extern_auth, $extern_uid, $mail, $self->voteid) == 0) { 
    821814        my $add = $self->db->prepare_cached(q{ 
    822             insert into voting (poll, label, mail) values (?,?,?) 
     815            insert into voting (poll, label, mail, extern_auth, extern_uid) 
     816            values (?,?,?,?,?) 
    823817        }); 
    824818 
    825         $add->execute($self->voteid, $id || '', $mail); 
     819        $add->execute($self->voteid, $id || '', $mail, $extern_auth, $extern_uid); 
    826820    } 
    827821} 
     
    835829    } 
    836830 
    837     while (my $line = <$fh>) { 
    838         chomp($line); 
    839         my ($mail, $name) = split(';', $line); 
    840         $mail or do { 
     831    my $handle = $self->import_handle('csv'); # std import 
     832    $handle->{handle} = $fh; 
     833    my @list = $handle->fetch_voters or do { 
    841834            $self->rollback; 
    842835            return; 
     836    }; 
     837    foreach (@list) { 
     838        $self->addupd_voting($_->[0], $_->[1] || ''); 
     839    } 
     840    1; 
     841} 
     842 
     843sub voting_from_import { 
     844    my ($self, $handle, %options) = @_; 
     845 
     846    my $ext_auth = $options{ext_auth} && $handle->can_authenticate; 
     847    my $authid; 
     848    if ($ext_auth) { # register authentication 
     849        my $find_next_id = $self->db->prepare_cached( 
     850            q{select nextval('extern_auth_id_seq'::regclass)} 
     851        ); 
     852        $find_next_id->execute(); 
     853        $authid = $find_next_id->fetchrow_hashref->{nextval}; 
     854        $find_next_id->finish; 
     855 
     856        my $add_auth = $self->db->prepare_cached( 
     857            q{insert into extern_auth (id, params, owner, auth_type, desc) values 
     858            (?,?,?,?,?)} 
     859        ); 
     860        $add_auth->execute($authid, $handle->xml_params, $self->info('owner'), 
     861            $handle->auth_type, $options{desc}); 
     862    } 
     863 
     864    my @list = $handle->fetch_voters or do { 
     865        $self->rollback; 
     866        return; 
     867    }; 
     868    foreach (@list) { 
     869        $self->addupd_voting($_->[0], $_->[1] || '', $authid, $_->[2]) or do { 
     870            $self->db->rollback; 
     871            return; 
    843872        }; 
    844         $self->addupd_voting($self->voteid, $mail, $name || ''); 
    845     } 
    846     1; 
     873    } 
     874 
     875    return 1; 
    847876} 
    848877 
  • trunk/lib/Epoll/DB/Voting.pm

    r242 r315  
    4242        select *, voting.key as vkey from voting left join signing 
    4343        on signing.key = voting.key 
     44        left join extern_auth on voting.extern_auth = extern_auth.id 
    4445        where voting.key = ? 
    4546        } 
     
    5657    my $userinfo = $self->info or return; 
    5758 
    58     $userinfo->{passwd} or return; 
    59     if (crypt($password, $userinfo->{passwd} || '') eq $userinfo->{passwd}) { 
    60         return 1; 
     59        warn "ee"; 
     60    if ($userinfo->{extern_auth}) { 
     61        warn "rr"; 
     62        my $handle = $self->stored_import_handle($userinfo->{extern_auth}) 
     63            or return; 
     64        return $handle->authenticate($userinfo->{mail}, $userinfo->{extern_uid}, $password); 
    6165    } else { 
    62         return 0; 
     66        $userinfo->{passwd} or return; 
     67        if (crypt($password, $userinfo->{passwd} || '') eq $userinfo->{passwd}) { 
     68            return 1; 
     69        } else { 
     70            return 0; 
     71        } 
    6372    } 
    6473} 
     
    8392sub gen_passwd { 
    8493    my ($self) = @_; 
    85     my $passwd = Epoll::DB::common::random_string(8); 
    86     my $encpasswd = $self->gen_enc_passwd($passwd); 
     94    warn "gotcha"; 
     95    my $info = $self->info; 
     96    my $passwd; 
    8797    my $upd_voting = $self->db->prepare_cached( 
    8898        q{update voting set passwd = ? where key = ?} 
    8999    ); 
     100    if ($info->{extern_auth}) { 
     101        $upd_voting->execute('EXTERN_AUTH', $self->votingkey); 
     102        $passwd = $info->{desc} || $info->{auth_type}; 
     103    } else { 
     104        $passwd = Epoll::DB::common::random_string(8); 
     105        my $encpasswd = $self->gen_enc_passwd($passwd); 
    90106 
    91     $upd_voting->execute($encpasswd, $self->votingkey); 
     107        $upd_voting->execute($encpasswd, $self->votingkey); 
     108    } 
    92109    $self->commit; 
    93110    $passwd 
  • trunk/lib/Epoll/DB/common.pm

    r258 r315  
    99use base 'Exporter'; 
    1010@EXPORT = qw(gen_uid); 
     11use Epoll::DB::ImportV; 
    1112 
    1213=head1 NAME 
     
    138139} 
    139140 
     141sub import_handle { 
     142    my  ($self, $type) = @_; 
     143    return Epoll::DB::ImportV->new($type); 
     144} 
     145 
     146sub stored_import_handle { 
     147    my ($self, $id) = @_; 
     148    my $fetch = $self->db->prepare_cached( 
     149        q{select * from extern_auth where id = ?} 
     150    ); 
     151    $fetch->execute($id); 
     152    my $res = $fetch->fetchrow_hashref; 
     153    $fetch->finish; 
     154    $res or return; 
     155    my $handle = $self->import_handle($res->{auth_type}) or return; 
     156    $handle->load_xml_params($res->{params}); 
     157    $handle; 
     158} 
     159 
    140160=head1 AUTHOR 
    141161 
  • trunk/lib/Epoll/I18N/fr.po

    r307 r315  
    5353 
    5454#: root/templates/admin/ballot.tt:53 root/templates/admin/voters.tt:12 
    55 #: root/templates/admin/voters.tt:22 
     55#: root/templates/admin/voters.tt:25 
    5656msgid "Add" 
    5757msgstr "Ajouter" 
     
    204204msgid "Friday" 
    205205msgstr "Vendredi" 
    206  
    207 #: root/templates/admin/voters.tt:15 
    208 msgid "From a csv file" 
    209 msgstr "Depuis un fichier CSV" 
    210206 
    211207#: root/templates/includes/ballot_form.tt:28 
     
    291287msgstr "Aucun choix n'est configuré" 
    292288 
    293 #: root/templates/admin/voters.tt:36 
     289#: root/templates/admin/voters.tt:39 
    294290msgid "No subscribed voter" 
    295291msgstr "Pas de votants inscrits" 
     
    407403msgstr "Samedi" 
    408404 
    409 #: root/templates/admin/voters.tt:25 
    410 msgid "Send password to voting people" 
     405#: root/templates/admin/voters.tt:28 
     406#, fuzzy 
     407msgid "Send password to voters" 
    411408msgstr "Envoyer les mots de passe aux votants" 
    412409 
     
    596593msgstr "date:" 
    597594 
    598 #: root/templates/admin/ballot.tt:45 root/templates/admin/voters.tt:61 
     595#: root/templates/admin/ballot.tt:45 root/templates/admin/voters.tt:64 
    599596msgid "delete" 
    600597msgstr "effacer" 
    601598 
    602 #: root/templates/admin/voters.tt:20 
    603 msgid "delete voting list" 
     599#: root/templates/admin/voters.tt:23 
     600#, fuzzy 
     601msgid "delete voters list" 
    604602msgstr "SystÚme de vote en ligne" 
    605603 
     
    609607msgstr "pour %1 à élire" 
    610608 
    611 #: root/templates/admin/voters.tt:16 
    612 msgid "format:" 
    613 msgstr "format:" 
    614  
    615609#: root/templates/includes/signing_list.tt:23 
    616610msgid "has vote" 
     
    662656msgstr "necessitant une validation" 
    663657 
    664 #: root/templates/admin/voters.tt:56 
     658#: root/templates/admin/voters.tt:59 
    665659msgid "password sent" 
    666660msgstr "mot de passe envoyé" 
     661 
     662#: root/mail/poll_reminder_voting.tt:26 
     663msgid "running" 
     664msgstr "" 
    667665 
    668666#: root/templates/admin/ballot.tt:32 
     
    670668msgstr "enregistrer" 
    671669 
    672 #: root/templates/admin/voters.tt:27 
     670#: root/templates/admin/voters.tt:30 
    673671msgid "send password" 
    674672msgstr "envoyer les mots de passe" 
     
    678676msgstr "émargement" 
    679677 
     678#: root/mail/poll_reminder_voting.tt:27 
     679msgid "terminated" 
     680msgstr "" 
     681 
    680682#: root/templates/admin/date.tt:122 root/templates/admin/date.tt:131 
    681683msgid "time:" 
    682684msgstr "heure:" 
    683685 
     686#: root/mail/poll_reminder_voting.tt:25 
     687msgid "to come" 
     688msgstr "" 
     689 
    684690#: root/templates/admin/validate.tt:16 
    685691msgid "valid" 
     
    698704msgstr "L'identifiant de vote bulletin est:" 
    699705 
     706#~ msgid "From a csv file" 
     707#~ msgstr "Depuis un fichier CSV" 
     708 
     709#~ msgid "format:" 
     710#~ msgstr "format:" 
     711 
    700712#~ msgid "Voting" 
    701713#~ msgstr "Votant" 
  • trunk/lib/Epoll/I18N/messages.pot

    r307 r315  
    5151msgstr "" 
    5252 
    53 #: root/templates/admin/ballot.tt:53 root/templates/admin/voters.tt:12 root/templates/admin/voters.tt:22 
     53#: root/templates/admin/ballot.tt:53 root/templates/admin/voters.tt:12 root/templates/admin/voters.tt:25 
    5454msgid "Add" 
    5555msgstr "" 
     
    201201#: root/templates/admin/date.tt:49 
    202202msgid "Friday" 
    203 msgstr "" 
    204  
    205 #: root/templates/admin/voters.tt:15 
    206 msgid "From a csv file" 
    207203msgstr "" 
    208204 
     
    285281msgstr "" 
    286282 
    287 #: root/templates/admin/voters.tt:36 
     283#: root/templates/admin/voters.tt:39 
    288284msgid "No subscribed voter" 
    289285msgstr "" 
     
    400396msgstr "" 
    401397 
    402 #: root/templates/admin/voters.tt:25 
    403 msgid "Send password to voting people" 
     398#: root/templates/admin/voters.tt:28 
     399msgid "Send password to voters" 
    404400msgstr "" 
    405401 
     
    576572msgstr "" 
    577573 
    578 #: root/templates/admin/ballot.tt:45 root/templates/admin/voters.tt:61 
     574#: root/templates/admin/ballot.tt:45 root/templates/admin/voters.tt:64 
    579575msgid "delete" 
    580576msgstr "" 
    581577 
    582 #: root/templates/admin/voters.tt:20 
    583 msgid "delete voting list" 
     578#: root/templates/admin/voters.tt:23 
     579msgid "delete voters list" 
    584580msgstr "" 
    585581 
     
    589585msgstr "" 
    590586 
    591 #: root/templates/admin/voters.tt:16 
    592 msgid "format:" 
    593 msgstr "" 
    594  
    595587#: root/templates/includes/signing_list.tt:23 
    596588msgid "has vote" 
     
    641633msgstr "" 
    642634 
    643 #: root/templates/admin/voters.tt:56 
     635#: root/templates/admin/voters.tt:59 
    644636msgid "password sent" 
     637msgstr "" 
     638 
     639#: root/mail/poll_reminder_voting.tt:26 
     640msgid "running" 
    645641msgstr "" 
    646642 
     
    649645msgstr "" 
    650646 
    651 #: root/templates/admin/voters.tt:27 
     647#: root/templates/admin/voters.tt:30 
    652648msgid "send password" 
    653649msgstr "" 
     
    657653msgstr "" 
    658654 
     655#: root/mail/poll_reminder_voting.tt:27 
     656msgid "terminated" 
     657msgstr "" 
     658 
    659659#: root/templates/admin/date.tt:122 root/templates/admin/date.tt:131 
    660660msgid "time:" 
    661661msgstr "" 
    662662 
     663#: root/mail/poll_reminder_voting.tt:25 
     664msgid "to come" 
     665msgstr "" 
     666 
    663667#: root/templates/admin/validate.tt:16 
    664668msgid "valid" 
  • trunk/root/templates/admin/voters.tt

    r301 r315  
    77<div style="float: left; width: 30%;" class="box"> 
    88<p>[% l('add a voting') %]</p> 
    9 <form action="[% c.uri_for(poll.uid, 'voting') %]" method="POST"> 
     9<form action="[% c.uri_for(poll.uid, 'voters') %]" method="POST"> 
    1010[% l('Name:') _ ' ' %]<input type="text" name="id"><br> 
    1111[% l('Mail:') _ ' ' %]<input type="text" name="mail"><br> 
    1212<input type="submit" value="[% l('Add') %]"> 
    1313</form> 
     14 
    1415<hr> 
    15 <p>[% l('From a csv file') %]</p> 
    16 <p>[% l('format:') _ ' ' %]<i>Mail@domain;Nom</i></p> 
    17 <form method="POST" ENCTYPE="multipart/form-data" action="[% c.uri_for(poll.uid, 'voting') %]"> 
    18 <input type="file" name="votinglist"><br> 
     16<p> 
     17    <a href="[% c.uri_for(poll.uid, 'voters', 'import') %]"> 
     18        Import voters list... 
     19    </a> 
     20</p> 
     21 
    1922[% IF poll.status == 'BEFORE' %] 
    20 <input type="checkbox" name="delete">[% l('delete voting list') %]<br> 
     23<input type="checkbox" name="delete">[% l('delete voters list') %]<br> 
    2124[% END %] 
    2225<input type="submit" value="[% l('Add') %]"> 
    2326</form> 
    2427<hr> 
    25 <p>[% l('Send password to voting people') %]</p> 
    26 <form action="[% c.uri_for(poll.uid, 'voting') %]" method="POST"> 
     28<p>[% l('Send password to voters') %]</p> 
     29<form action="[% c.uri_for(poll.uid, 'voters') %]" method="POST"> 
    2730<input type="submit" name="mailpasswd" value="[% l('send password') %]"> 
    2831</form> 
     
    4851[% IF NOT voting.info.date %] 
    4952[% IF poll.status != 'AFTER' %] 
    50 <form action="[% c.uri_for(poll.uid, 'voting') %]" method="POST"> 
     53<form action="[% c.uri_for(poll.uid, 'voters') %]" method="POST"> 
    5154<input type="hidden" name="delvoting" value="[% voting.votingkey %]"> 
    5255[% END %] 
  • trunk/root/templates/admin/votersimport.tt

    r310 r315  
    66[% IF poll.status() != 'AFTER' %] 
    77<div style="float: left; width: 30%;" class="box"> 
    8 <p>[% l('add a voting') %]</p> 
    9 <form action="[% c.uri_for(poll.uid, 'voting') %]" method="POST"> 
    10 [% l('Name:') _ ' ' %]<input type="text" name="id"><br> 
    11 [% l('Mail:') _ ' ' %]<input type="text" name="mail"><br> 
    12 <input type="submit" value="[% l('Add') %]"> 
     8<form action="[% c.uri_for(poll.uid, 'voters', 'import') %]" method="POST"> 
     9<select name="importtype"> 
     10  <option label="[% l('Dummy') | html %]" value="dummy" [% " selected" IF c.req.param('importtype') == 'dummy' %]"> 
     11        [% l('Dummy') | html %] 
     12  </option> 
     13  <option label="[% l('CSV file') | html %]" value="csv" [% " selected" IF c.req.param('importtype') == 'csv' %]"> 
     14        [% l('CSV file') | html %] 
     15  </option> 
     16  <option label="[% l('LDAP') | html %]" value="ldap" [% " selected" IF c.req.param('importtype') == 'ldap' %]"> 
     17        [% l('LDAP') | html %] 
     18  </option> 
     19</select> 
     20<input type="submit" value="[% l('select') %]"> 
    1321</form> 
     22 
    1423<hr> 
    15 <p>[% l('From a csv file') %]</p> 
    16 <p>[% l('format:') _ ' ' %]<i>Mail@domain;Nom</i></p> 
    17 <form method="POST" ENCTYPE="multipart/form-data" action="[% c.uri_for(poll.uid, 'voting') %]"> 
    18 <input type="file" name="votinglist"><br> 
    19 [% IF poll.status == 'BEFORE' %] 
    20 <input type="checkbox" name="delete">[% l('delete voting list') %]<br> 
     24 
     25[% IF c.req.param('importtype') %] 
     26<form action="[% c.uri_for(poll.uid, 'voters', 'import') %]" ENCTYPE="multipart/form-data" method="POST"> 
     27<input type="hidden" value="[% c.req.param('importtype') | html %]" name="importtype"><br> 
     28 
     29[% IF importtt %] 
     30[% INCLUDE $importtt %] 
    2131[% END %] 
    22 <input type="submit" value="[% l('Add') %]"> 
     32 
     33<p><input type="submit" value="[% l('search...') %]"></p> 
    2334</form> 
    24 <hr> 
    25 <p>[% l('Send password to voting people') %]</p> 
    26 <form action="[% c.uri_for(poll.uid, 'voting') %]" method="POST"> 
    27 <input type="submit" name="mailpasswd" value="[% l('send password') %]"> 
    28 </form> 
     35[% END %][% # if importtype %] 
    2936</div> 
    3037 
     
    3239 
    3340<div class="box" style="float: right; width: 60%;"> 
    34  
    35 [% IF NOT poll.voting_count %] 
    36 <p class="alert">[% l('No subscribed voter') %]</p> 
    37 [% ELSE %] 
    38  
    39 [% FOREACH votingkey = poll.voting_keys %] 
    40 [% voting = poll.voting(votingkey) %] 
    41  
     41[% FOREACH voter = voters %] 
    4242[% IF loop.first %] 
    43 <table border="1"> 
     43<div class="box"> 
     44<form action="[% c.uri_for(poll.uid, 'voters', 'import') %]" method="POST"> 
     45<input type="hidden" value="[% c.req.param('importtype') | html %]" name="importtype"> 
     46[% IF import_handle.can_authenticate %] 
     47[% l('Use external authentication') %]<input type="checkbox" name="ext_auth"><br> 
     48[% l('Enter here a comment to explain the password to use') %]<br> 
     49<textarea rows="3" cols="50" name="desc"></textarea><br> 
    4450[% END %] 
    45  
    46 <tr> 
    47  
    48 [% IF NOT voting.info.date %] 
    49 [% IF poll.status != 'AFTER' %] 
    50 <form action="[% c.uri_for(poll.uid, 'voting') %]" method="POST"> 
    51 <input type="hidden" name="delvoting" value="[% voting.votingkey %]"> 
     51<input type="submit" name="add_import" value="[% l('Import this list') %]"><br> 
     52</form> 
     53</div> 
    5254[% END %] 
     55<p>[% voter.0 | html %]</p> 
    5356[% END %] 
    54  
    55 <td>[% voting.label | html %] [% voting.info.mail | html %]</td> 
    56 <td>[% IF voting.info.passwd %]<i>[% l('password sent') %]</i>[% END %]</td> 
    57  
    58 [% IF NOT voting.info.date %] 
    59 <td> 
    60 [% IF poll.status != 'AFTER' %] 
    61 <input type="submit" name="delete" value="[% l('delete') %]"> 
    62 [% END %] 
    63 </td> 
    64 </form> 
    65 [% ELSE %] 
    66 <td>[% voting.info.date %]</td> 
    67 [% END %] 
    68  
    69 </tr> 
    70 [% IF loop.last %]</table>[% END %] 
    71  
    72 [% END %][% # FOREACH %] 
    73  
    74 [% END %][% # IF NOT voting %] 
    7557</div> 
    7658<div style="clear: both"></div> 
  • trunk/root/templates/includes/poll_results.tt

    r284 r315  
    1818 
    1919<table border="1"> 
    20 <tr><td>[% l('Participation' %]</td><td>[% poll.signing_count %]</td><td>[% poll.signing_count / poll.voting_count * 100 | format('%.2f %%') IF poll.voting_count %]</td></tr> 
     20<tr><td>[% l('Participation') %]</td><td>[% poll.signing_count %]</td><td>[% poll.signing_count / poll.voting_count * 100 | format('%.2f %%') IF poll.voting_count %]</td></tr> 
    2121<tr><td>[% l('Ballot Number') %]</td><td>[% poll.ballot_count %]</td><td></td></tr> 
    2222<tr><td>[% l('Number of empty ballot') %]</td><td>[% poll.empty_ballot_count %]</td><td>[% poll.empty_ballot_count / poll.ballot_count * 100 | format('%.2f %%') IF poll.ballot_count %]</td></tr> 
Note: See TracChangeset for help on using the changeset viewer.