Changeset 199 for trunk


Ignore:
Timestamp:
04/15/09 04:59:53 (15 years ago)
Author:
nanardon
Message:
  • add an uid to the vote, currently poll are identified by an id generated by the database (sequence), in the case poll is dump/restore, this id may change, we hope uuid will never
Location:
trunk/lib/Vote
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/Vote/DB.pm

    r198 r199  
    9292sub poll { 
    9393    my ($self, $pollid) = @_; 
    94     Vote::DB::Poll->new($self->{dbstring}, $pollid); 
     94    Vote::DB::Poll->new($self->{dbstring}, $self->poll_id_from_uid($pollid)); 
    9595} 
    9696 
    9797sub results { 
    9898    my ($self, $pollid) = @_; 
    99     Vote::DB::Poll::Results->new($self->{dbstring}, $pollid); 
     99    Vote::DB::Poll::Results->new($self->{dbstring}, $self->poll_id_from_uid($pollid)); 
    100100} 
    101101 
  • trunk/lib/Vote/DB/Poll.pm

    r198 r199  
    3838sub voteid { $_[0]->{voteid} } 
    3939 
     40sub uid { 
     41    my ($self) = @_; 
     42    # UID will come only with epoll 2.0, if no uid, using key 
     43    return $self->info('uid') || $self->voteid; 
     44} 
     45 
    4046sub setup { 
    4147    my ($self) = @_; 
     
    4349        free_choice => 0, 
    4450        choice_count => 1, 
    45     ); 
    46 } 
     51        uid => Vote::DB::common::gen_uid(), 
     52    ); 
     53} 
     54 
     55sub _online_f { qw(label start end owner password) } 
    4756 
    4857sub param { 
     
    5059 
    5160    keys %attr or return; 
    52     my @online_f = qw(label start end owner password); 
     61    my @online_f = _online_f(); 
    5362 
    5463    if (grep { exists($attr{$_}) } @online_f) { 
     
    97106} 
    98107 
    99 sub info { 
     108sub _info { 
    100109    my ($self) = @_; 
    101110 
     
    114123    my $res = $sth->fetchrow_hashref; 
    115124    $sth->finish; 
    116     if ($res) { 
     125    $res 
     126} 
     127 
     128sub info { 
     129    my ($self, $var) = @_; 
     130 
     131    my $default = { 
     132        free_choice => 0, # avoid undef in some case 
     133    }; 
     134 
     135    if ($var) { 
     136        if (grep { $var eq $_ } (_online_f(), qw(dstart hstart dend hend))) { 
     137            return $self->_info->{$var}; 
     138        } else { 
     139            my $sth = $self->db->prepare_cached( 
     140                q{select val from settings where poll = ? and var = ?} 
     141            ); 
     142            $sth->execute($self->voteid, $var); 
     143            my $res = $sth->fetchrow_hashref; 
     144            $sth->finish; 
     145            return defined($res->{$var}) 
     146                ? $res->{$var} 
     147                : $default->{$var}; 
     148        } 
     149    } 
     150 
     151    if (my $res = $self->_info) { 
    117152        my $get = $self->db->prepare_cached( 
    118153            q{select var, val from settings where poll = ?} 
     
    122157            $res->{$set->{var}} = $set->{val}; 
    123158        } 
    124     } 
    125     $res->{free_choice} ||= 0; # avoiding undef 
    126     $res 
     159        foreach (keys %$default) { 
     160            $res->{$_} = $default->{$_} if (!defined($res->{$_})); 
     161        } 
     162        return $res 
     163    } 
    127164} 
    128165 
  • trunk/lib/Vote/DB/common.pm

    r198 r199  
    119119} 
    120120 
     121sub poll_id_from_uid { 
     122    my ($self, $uid) = @_; 
     123    if (length($uid) == 32) { 
     124        my $sth = $self->db->prepare_cached( 
     125            q{ select poll from settings where var = 'uid' and val = ? 
     126                order by poll } 
     127        ); 
     128        $sth->execute($uid); 
     129        my $res = $sth->fetchrow_hasref; 
     130        $sth->finish; 
     131        return $res->{poll} || $uid; 
     132    } 
     133    $uid 
     134} 
     135 
    121136sub gen_uid { 
    122137    unpack("H*", join("", map { chr(rand(256)) } (0..15))) 
Note: See TracChangeset for help on using the changeset viewer.