--- make_poll.pl 2003/04/08 17:53:46 1.1.1.1 +++ make_poll.pl 2003/04/24 17:55:17 1.5 @@ -1,35 +1,26 @@ #!/usr/bin/perl -w # - -use XML::Parser; +# Dobrica Pavlinusic +# +# Originally made for proof. during April 2001; later released under GPL v2 +# +# 2003-04-dd general cleanup in preparation of release use strict; +use XML::Parser; +use common; + $|=1; my $Usage =<<'End_of_Usage;'; -slides [-h] [-d dir] [-mode mode] slide-doc - -Convert a slideshow document into html, with a separate html document -for each slide and an index to all of them. - - -h Print this message and exit - - -w warn about unrecognized tags - - -d Use dir as directory into which to write html pages. Defaults - to basename of supplied doc file. - - -mode Output mode. Choices are html, html-style. Default is - html-style. - +I will write usage information here. I promise! End_of_Usage; my @Modes = qw(object pass skip); my $dir; my $dowarn = 1; -my $dostyle = 0; my $pitanje_nr = 0; # curr. pitanje my $pitanje_tag = ""; # originalni oblik broja pitanja @@ -64,67 +55,26 @@ #------------------------------------------------------------------ -my $html_header.=<<'End_of_header;'; - - - - proof.anketa - - - - - - - - - - - - - - - - - - - - - - -End_of_separator; - -#------------------------------------------------------------------ +sub suck_file { + my $file = shift @_; + open(H,$file) || die "can't open '$file': $!"; + my $content; + while () { $content .= $_; } ; + close(H); + return $content; +} -my $html_footer=<<'End_of_footer;'; - - - - - - - -



-

-End_of_header; - -#------------------------------------------------------------------ - -my $html_separator=<<'End_of_separator;'; -


-   -


-
- - - -End_of_footer; +my $html_header=suck_file("header.html"); +my $html_separator=suck_file("separator.html"); +my $html_next=suck_file("next.html"); +my $html_footer=suck_file("footer.html"); #------------------------------------------------------------------ sub php_header { my ($page_nr,@sql_update) = @_; -my $out=' 0) { - $row=pg_fetch_row($result,0); - if (isset($row[0]) && $row[0] != "") { - $GLOBALS[$p]=$row[0]; - return $row[0]; - } - } - $GLOBALS[$p]=0; - return 0; -} - -function get_answers($p) { - global $conn,$id,$db; - $result = pg_Exec ($conn,"select $p from $db where id=$id"); - if ($result && pg_numrows($result) > 0) { - $row=pg_fetch_array($result,0); - $pit=split(",",$p); - while(list($key,$val) = each($row)) { - $GLOBALS[$key]=$val; - } - } -} -function get_member($pitanja,$uvjet) { - global $member_id; - $p_conn = pg_connect("dbname=$MEMBERS_DB user=$DB_USER"); - if ($uvjet == "") $uvjet="true"; - $result=pg_Exec($p_conn,"select id,$pitanja from member - where $uvjet and id = $member_id"); - $numrows=pg_numrows($result); - if ($numrows) { - $row=pg_fetch_array($result,0); - $pit=split(",",$pitanja); - while(list($key,$val) = each($row)) { - $GLOBALS["member_".$key]=$val; - } - } -} - -if (isset($a) && !isset($id) && !isset($pid)) { - global $conn,$db,$do_stranice; - $pid=id_decode($a); - $result = pg_Exec ($conn,"select id,do_stranice from $db where member_id=$pid"); - if ($result && pg_numrows($result) > 0) { - $row=pg_fetch_array($result,0); - $id=$row[id]; - $do_stranice=$row[do_stranice]; - $do_uri="http://".$SERVER_NAME.":".$SERVER_PORT.$row[do_stranice]; - } -} - -End_of_common; +my $common_php = suck_file("common.php"); #------------------------------------------------------------------ -my $head_php.=<<'End_of_head;'; - - Header("Content-type: image/gif"); - header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past - header ("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); // always modified - header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 - header ("Pragma: no-cache"); // HTTP/1.0 - $string=implode($argv," "); - $im = imagecreatefromgif("head.gif"); - $red = ImageColorAllocate($im, 255, 0, 0); - $black = ImageColorAllocate($im, 0, 0, 0); - $px = (imagesx($im)-7.5*strlen($string))/2; - if (! isset($pcnt)) { - $pcnt=floor(substr(basename($HTTP_REFERER),0,2)/$max_page*100); - } - ImageTTFText($im, 6, 0, 10, 65, $black, dirname($PATH_TRANSLATED)."/head.ttf", "Ispunili ste ".sprintf("%02d",$pcnt)."% ankete"); - $w=80; - ImageRectangle($im,149,60,151+$w,66,$black); - ImageFilledRectangle($im,150,61,150+floor($pcnt*$w/100),65,$red); - ImageGif($im); - ImageDestroy($im); - -End_of_head; +my $head_php=suck_file("head.php"); #------------------------------------------------------------------ -my $html_kraj=<<'End_of_kraj;'; - - - - wopi.poll - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



-


-


-

-Hvala vam na sudjelovanju u anketi! -

-

-Zahvaljujemo se na vašem vremenu. Nadamo se da ćete i vi biti -među sretnim dobitnicima. -
-
-Do slijedeće ankete i nagradne igre srdačno vas pozdravljamo. -
-
Hvala. -
-
-proof. -


-
-
- - - -End_of_kraj; +my $html_kraj=suck_file("thanks.html"); #------------------------------------------------------------------ @@ -353,37 +115,19 @@ print $Usage; exit; } - elsif ($opt eq '-d') { - $dir = shift; - } - elsif ($opt eq '-w') { - $dowarn = 1; - } - elsif ($opt eq '-mode') { - my $marg = shift; - if ($marg eq 'html') { - $dostyle = 0; - } - else { - die "Unrecognized mode: $marg\n$Usage"; - } - } - else { - die "Unrecognized option: $opt\n$Usage"; - } } # End of option processing -my $docfile = shift; +my $xmlfile = shift; -die "No docfile provided:\n$Usage" unless defined $docfile; +die "No poll xml file provided!\n$Usage" unless defined $xmlfile; -die "Can't read $docfile" unless -r $docfile; +die "Can't read $xmlfile" unless -r $xmlfile; if (defined $dir) { die "$dir isn't a directory" unless -d $dir; } else { - $docfile =~ m!([^/.]+)(?:\.[^/.]*)?$!; + $xmlfile =~ m!([^/.]+)(?:\.[^/.]*)?$!; $dir = $1; if (-e $dir) { die "$dir exists but isn't a directory" @@ -394,7 +138,7 @@ } } -my $in_slideshow = 0; +my $in_poll = 0; my $after_head = 0; my $Mode = 0; @@ -405,31 +149,28 @@ my $Object; my @Ostack = (); -my $intext = 0; +#my $intext = 0; my $closure; my @closure_stack = (); -my $style_link = ''; +#my $style_link = ''; -my $index = 'index.html'; -my @slidetitle; +#my $index = 'index.html'; +#my @slidetitle; my $body; -my $inlist = 0; +#my $inlist = 0; -my @Titles; +#my @Titles; my $header; -my $prolog = "\n"; -$prolog .= "\n"; - my $page_number = 0; my $p = new XML::Parser(ErrorContext => 3, Handlers => {Start => \&starthndl, End => \&endhndl, Char => \&text}); -$p->parsefile($docfile); +$p->parsefile($xmlfile); #---------------------------------------------------------- @@ -447,7 +188,7 @@ $page_nr++; open(PAGE, ">$dir/$next_fn") or die "Couldn't open $next_fn for writing:\n$!"; print PAGE php_header($page_nr,@last_sql_update); -print PAGE $html_kraj; +print PAGE "$html_header $html_kraj $html_footer"; close(PAGE); # dump sql structure @@ -457,20 +198,31 @@ print SQL "create table $dir (do_stranice text default null, ",join(",\n",@sql_create),");\n"; close(SQL); -# dump common.inc +# dump common.php -open(PHP,">$dir/common.inc") || die "common.inc: $!"; -print PHP ''; +open(PHP,">$dir/common.php") || die "common.php: $!"; +$common_php =~ s/##DB##/$dir/g; +my $db_name = $prefix.$dir; +$common_php =~ s/##DB_NAME##/$db_name/g; +$common_php =~ s/##PREFIX##/$prefix/g; +$common_php =~ s/##DB_USER##/$db_user/g; +$common_php =~ s/##PREFIX##/$prefix/g; +my $members_db = $prefix."members"; +$common_php =~ s/##MEMBERS_DB##/$members_db/g; + +print PHP $common_php; close(PHP); open(PHP,">$dir/head.php") || die "head.php: $!"; -print PHP ''; close(PHP); +# 01.php -> index.php +rename "$dir/01.php","$dir/index.php" || die "can't rename '$dir/01.php' to index.php"; + ################ ## End of main ################ @@ -488,13 +240,15 @@ return "p".$pitanje_nr.$curr_suffix; } +#---------------------------------------------------------- + sub starthndl { my ($xp, $el, %atts) = @_; -# return unless ($in_slideshow or $el eq 'slideshow'); +# return unless ($in_poll or $el eq 'slideshow'); - unless ($in_slideshow) { - $in_slideshow = $xp->depth + 1; + unless ($in_poll) { + $in_poll = $xp->depth + 1; return; } @@ -541,7 +295,7 @@ my $new_closure; - my $subname = "Slideshow::$el"; + my $subname = "Poll::$el"; if (defined &$subname) { no strict 'refs'; @@ -570,12 +324,12 @@ sub endhndl { my ($xp, $el) = @_; - return unless $in_slideshow; + return unless $in_poll; my $lev = $xp->depth; - if ($lev == $in_slideshow - 1) { - $in_slideshow = 0; + if ($lev == $in_poll - 1) { + $in_poll = 0; $xp->finish; return; } @@ -625,10 +379,12 @@ $closure = pop(@closure_stack); } # End endhndl +#---------------------------------------------------------- + sub text { my ($xp, $data) = @_; - return unless $in_slideshow; + return unless $in_poll; if ($Mode ) { @@ -678,15 +434,9 @@ $str; } # End sgml_escape -sub slidename { - my ($num) = @_; - - sprintf("slide%03d.html", $num); -} # End slidename - ################################################################ -package Slideshow; +package Poll; sub page { package main; @@ -701,12 +451,10 @@ print "p[$page_nr] "; if (defined $last_fn) { - # 01.php -> index.php - $last_fn="index.php" if ($last_fn eq "01.php"); open(PAGE, ">$dir/$last_fn") or die "Couldn't open $last_fn for writing:\n$!"; if ($page_nr == 2) { - print PAGE '"; } @@ -805,7 +553,7 @@ my ($xp, $text) = @_; if (defined $text) { - $body.=$text; + $body.=x($text); } else { $body.=""; } @@ -824,7 +572,7 @@ my ($xp, $text) = @_; if (defined $text) { - $body .= $text; + $body .= x($text); } else { $body .= "

"; } @@ -845,7 +593,7 @@ $text=~s/ le / <= /g; $text=~s/ gt / > /g; $text=~s/ ge / >= /g; - $body.=$text; + $body.=x($text); } else { $body.="\n?>\n"; } @@ -867,7 +615,7 @@ $text=~s/^\s*//g; $text=~s/^[\d\.\s]+//g; $text=~s/\s*$//g; - push @dropdown_data,$text if ($text ne ""); + push @dropdown_data,x($text) if ($text ne ""); } else { my $opt; my $id=1; @@ -897,7 +645,7 @@ my $size=$attref->{size}; $size = 25 if (! defined $size || $size == 0); # default my $p=new_pit(); - $body.="\n"; + $body.="\n"; push @sql_create,"$p text"; push @sql_update,"$p='\$$p'"; } @@ -935,7 +683,7 @@ $text=~s/^\s*//g; $text=~s/^[\d\.\s]+//g; $text=~s/\s*$//g; - push @radiobuttons_data,$text if ($text ne ""); + push @radiobuttons_data,x($text) if ($text ne ""); } else { my $opt; my $p=new_pit(); @@ -980,7 +728,7 @@ $text=~s/^\s*//g; $text=~s/^[\d\.\s]+//g; $text=~s/\s*$//g; - push @checkboxes_data,$text if ($text ne ""); + push @checkboxes_data,x($text) if ($text ne ""); } else { my $opt; my $base_p=new_pit(); @@ -999,11 +747,11 @@ if (defined($opt) && $opt ne "") { $p=$base_p."_".$id; $id++; - $body .= $before if ($before); + $body .= x($before) if ($before); $body.=""; - $body .= $middle if ($middle); + $body .= x($middle) if ($middle); $body .= "$opt" if (! $hide_description); - $body .= $after if ($after); + $body .= x($after) if ($after); $body.="\n"; push @sql_create,"$p boolean"; @@ -1016,483 +764,18 @@ } } -#--------------------------------------------------------------- - -sub slide { - package main; - - my ($xp, $el, $attref, $ncref) = @_; - - my $prev = $page_number ? slidename($page_number) : $index; - $page_number++; - my $fn = slidename($page_number); - my $next = slidename($page_number + 1); - - open(SLIDE, ">$dir/$fn") or die "Couldn't open $fn for writing:\n$!"; - - print SLIDE $prolog; - - undef @slidetitle; - $body = ''; - $inlist = 0; - - $$ncref = - sub { - my ($xp, $text) = @_; - - if (defined $text) { - #ignore text at slide toplevel - } - else { - $Titles[$page_number] = $slidetitle[0]; - - print SLIDE "$slidetitle[0]\n"; - print SLIDE $style_link; - print SLIDE "\n"; - - if ($dostyle) { - print SLIDE "\n"; - } - else { - print SLIDE "\n"; - } - - my $navbar = "\n"; - $navbar .= "\n"; - $navbar .= "\n"; - $navbar .= "\n"; - $navbar .= "
PreviousIndexNext
\n"; - - print SLIDE "$navbar
\n"; - if ($dostyle) { - print SLIDE "\n"; - print SLIDE "

$slidetitle[1]

\n"; - } - else { - print SLIDE "
\n"; - print SLIDE "\n"; - print SLIDE ""; - print SLIDE "

"; - print SLIDE "$slidetitle[1]"; - print SLIDE "

\n"; - print SLIDE "
\n"; - print SLIDE "
\n"; - print SLIDE "\n"; - } - print SLIDE $body; - - if ($inlist) { - print SLIDE "\n\n"; - } - - unless ($dostyle) { - print SLIDE "\n\n"; - print SLIDE "\n
\n"; - } - - print SLIDE "\n
\n$navbar"; - print SLIDE "\n\n"; - close(SLIDE); - } - }; -} # End slide - -sub title { - package main; - - my ($xp, $el, $attref, $ncref) = @_; - - if ($xp->current_element eq 'slide') { - start_mode($xp, 'pass'); - - $$ncref = - sub { - $slidetitle[0] = $Text; - $slidetitle[1] = $Markedup_Text; - }; - } -} # End title - -sub point { - package main; - - my ($xp, $el, $attref, $ncref) = @_; - - if ($inlist and $inlist ne 'ul') { - $body .= "\n\n"; - $inlist = 0; - } - - unless ($inlist) { - $body .= "\n