/[wopi2]/trunk/lib/WOPI.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/WOPI.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 4 by dpavlin, Fri Jun 25 11:46:24 2004 UTC revision 5 by dpavlin, Fri Jun 25 16:16:08 2004 UTC
# Line 19  sub new { Line 19  sub new {
19          bless($self, $class);          bless($self, $class);
20    
21          $self->{'cgi'} = new CGI;          $self->{'cgi'} = new CGI;
22          $self->{'db'} = new DBM::Deep $self->{'db_file'} || die "can't open '",$self->{'db_file'},"'";          $self->{'poll'} = new DBM::Deep $self->{'db_file'} || die "can't open '",$self->{'db_file'},"'";
23          die "can't find database file ",$self->{'db_file'} if (! -e $self->{'db_file'});          die "can't find database file ",$self->{'db_file'} if (! -e $self->{'db_file'});
24          die "database file ",$self->{'db_file'}," not writable!" if (! -w $self->{'db_file'});          die "database file ",$self->{'db_file'}," not writable!" if (! -w $self->{'db_file'});
25          $self->{'tt'} = new Template({          $self->{'tt'} = new Template({
# Line 27  sub new { Line 27  sub new {
27                  EVAL_PERL => 1,                  EVAL_PERL => 1,
28          });          });
29          $self->{'sess'} = new CGI::Session("driver:File", undef, {Directory=>'/tmp'});          $self->{'sess'} = new CGI::Session("driver:File", undef, {Directory=>'/tmp'});
         $self->{'poll'} = $self->{'db'}->get($self->{'poll_name'});  
           
30          # create new database if it doesn't exist          # create new database if it doesn't exist
31          if (! $self->{'poll'}) {          if (! $self->{'poll'}) {
32                  $self->{'db'}->put($self->{'poll_name'}, { 'questions' => [] });                  $self->{'poll'}->{'poll_name'}  { 'questions' => [] };
                 $self->{'poll'} = $self->{'db'}->get($self->{'poll_name'});  
33          }          }
34    
35  #print $self->{'cgi'}->header, Dumper($self->{'db'});  #print $self->{'cgi'}->header, Dumper($self->{'poll'});
   
         if ($self->{'poll'} && defined($self->{'poll'}->{'questions'})) {  
                 $self->{'order'} = (scalar @{$self->{'poll'}->{'questions'}})+1;  
         } else {  
                 $self->{'order'} = 1;  
         }  
36    
37          return $self;          return $self;
38  }  }
39    
40    sub last_order {
41            my $self = shift;
42    
43            return scalar @{$self->{'poll'}->{'questions'}} || 0;
44    }
45    
46  sub get_html {  sub get_html {
47          my $self = shift;          my $self = shift;
48    
# Line 82  sub unbless { Line 79  sub unbless {
79  sub editor {  sub editor {
80          my $self = shift;          my $self = shift;
81    
82          $self->{'param'}->{'var'} = "v".$self->{'order'};          # question order or current
83            my $order = shift;
84    
85            $self->status("edit called without a number!") if (! defined($order));
86    
87            $self->load_question($order) ||
88            $self->add_question;
89    
90          $self->{'param'}->{'poll_name'} = $self->{'poll_name'};          $self->{'param'}->{'poll_name'} = $self->{'poll_name'};
         $self->{'param'}->{'order'} = $self->{'order'};  
91    
92          $self->{'param'}->{'poll'} = $self->unbless($self->{'poll'});          $self->{'param'}->{'poll'} = $self->unbless($self->{'poll'});
93    
94    print qq{<!--},Dumper($self->{'param'}),qq{-->};
95    
96          return $self->get_html('editor.html', $self->{'param'});          return $self->get_html('editor.html', $self->{'param'});
97  }  }
98    
99    
100    sub add_question {
101            my $self = shift;
102    
103            $self->{'param'}->{'order'} = $self->last_order;
104            $self->{'param'}->{'var'} = "v".($self->last_order+1);
105    
106            $self->{'param'}->{'buttons'} = [
107                    { 'save' => ' Add ' },
108                    { 'cancel' => ' Cancel and Add another ' },
109            ];
110    
111            $self->status("Adding question ",$self->last_order);
112    }
113    
114  sub list_questions {  sub list_questions {
115          my $self = shift;          my $self = shift;
116    
117  }  }
118    
119    sub load_question {
120            my $self = shift;
121    
122            my $order = shift;
123            
124            return if (! defined($order));
125    
126            my $q = $self->{'poll'}->{'questions'}->[$order];
127    
128            if (! $q) {
129                    $self->status("Can't load question $order");
130                    return;
131            }
132    
133            foreach my $key (qw(q a time order var)) {
134                    $self->{'param'}->{$key} = $q->{$key};
135            }
136    
137            $self->status("Loaded question $order");
138    }
139    
140    sub question_exist {
141            my $self = shift;
142    
143            my $order = shift || confess "need order";
144            return $self->{'poll'}->{'questions'}->[$order];
145    }
146    
147    
148    
149  sub save_question {  sub save_question {
150          my $self = shift;          my $self = shift;
151    
# Line 103  sub save_question { Line 153  sub save_question {
153    
154  #       print "v = ",Dumper(\%v);  #       print "v = ",Dumper(\%v);
155    
156          my $o = $self->{'cgi'}->param('order') || die "no order?";          my $o = $self->{'cgi'}->param('order');
157            die "no order?" if (! defined($o));
158    
159            if (! $self->{'cgi'}->param('save')) {
160                    $self->status("No save button, won't save question $o");
161                    return;
162            }
163    
164            $self->status("Saving question $o");
165    
166          my $question = {          my $question = {
167                  'q' => $self->{'cgi'}->param('q'),                  'q' => $self->{'cgi'}->param('q'),
168                  'a' => $self->{'cgi'}->param('a'),                  'a' => $self->{'cgi'}->param('a'),
169                  'var' => $self->{'cgi'}->param('var') || die,                  'var' => $self->{'cgi'}->param('var') || die,
170                  'time' => time(),                  'time' => time(),
171                  'order' => $o || die,                  'order' => $o,
172          };          };
173    
174  #print "question = ",Dumper($question);  #print "question = ",Dumper($question);
175    
176          push @{$self->{'poll'}->{'questions'}}, $question;          $self->{'poll'}->{'questions'}->[$o] = $question;
177    
178          $self->{'db'}->put($self->{'poll_name'}, $self->{'poll'});          $self->editor();
179    }
180    
181          $self->{'order'}++;  sub delete_question {
182            my $self = shift;
183    
184          $self->editor();          my $nr = $self->{'cgi'}->param('order');
185            if (! defined($nr)) {
186                    $self->status("Can't delete question without a number!");
187                    $self->editor();
188            }
189    
190            if (defined($self->{'poll'}->{'questions'}->[$nr])) {
191                    delete $self->{'poll'}->{'questions'}->[$nr];
192                    $self->status("Question $nr deleted");
193                    $self->editor();
194            } else {
195                    $self->status("Can't delete question $nr which doesn't exist!");
196                    $self->editor();
197            }
198    
199    }
200    
201    sub edit_question {
202            my $self = shift;
203    
204            my $nr = $self->{'cgi'}->param('order');
205            if (! defined($nr)) {
206                    $self->status("Edit question called without a number!");
207                    $self->editor();
208            }
209    
210            $self->status("Editing question $nr");
211    
212            $self->{'param'}->{'buttons'} = [
213                    { 'save'        => ' Save changes ' },
214                    { 'cancel'      => ' Cancel and Add new ' },
215            ];
216    
217            $self->editor($nr);
218    }
219            
220    
221    sub status {
222            my $self = shift;
223    
224            my $text = join(" ",@_);
225    
226            $self->{'param'}->{'status'} .= $text.'<br/>';
227            $self->{'param'}->{'title'} = $text;
228  }  }

Legend:
Removed from v.4  
changed lines
  Added in v.5

  ViewVC Help
Powered by ViewVC 1.1.26