mark: A photo of Mark kneeling on top of the Taal Volcano in the Philippines. It was a long hike. (Default)
Mark Smith ([staff profile] mark) wrote in [site community profile] changelog2009-03-21 11:52 pm

[dw-free] Updates to FAQ backend

[commit: http://hg.dwscoalition.org/dw-free/rev/6228d9286ad0]

http://bugs.dwscoalition.org/show_bug.cgi?id=113

More update to the FAQ system - combine faqedit_do.bml into faqedit.bml.

Patch by [personal profile] pauamma.

Files modified:
  • htdocs/admin/faq/faqedit.bml
  • htdocs/admin/faq/faqedit_do.bml
--------------------------------------------------------------------------------
diff -r d14ca95d95b0 -r 6228d9286ad0 htdocs/admin/faq/faqedit.bml
--- a/htdocs/admin/faq/faqedit.bml	Sat Mar 21 23:25:10 2009 +0000
+++ b/htdocs/admin/faq/faqedit.bml	Sat Mar 21 23:52:54 2009 +0000
@@ -7,10 +7,11 @@ body<=
 <a href="./"><b>(Back to FAQ Index)</b></a>
 </center>
 
-<form action="faqedit_do.bml" method="post">
 <?_code
 {
     use strict;
+
+    # FIXME: add crumb
 
     my $id = $FORM{id} + 0;
     my $ret = "";
@@ -21,13 +22,13 @@ body<=
     my %ac_edit;
     my %ac_add;
     LJ::remote_has_priv( $remote, "faqadd", \%ac_add );
+    LJ::remote_has_priv( $remote, "faqedit", \%ac_edit );
     my $faqd = LJ::Lang::get_dom( "faq" );
+    my $rlang = LJ::Lang::get_root_lang( $faqd );
     my ( $faqcat, $sortorder, $question, $summary, $answer );
 
     if ( $id != 0 ) {
-        my $lang = LJ::Lang::get_root_lang( $faqd );
-        LJ::remote_has_priv( $remote, "faqedit", \%ac_edit );
-        my $faq = LJ::Faq->load( $id, lang => $lang->{lncode} )
+        my $faq = LJ::Faq->load( $id, lang => $rlang->{lncode} )
             or return "<b>Error:</b> FAQ #$id does not exist.";
 
         $faqcat = $faq->faqcat;
@@ -50,6 +51,65 @@ body<=
     $sortorder += 0;
     $sortorder ||= 50;
 
+    if ( LJ::did_post() ) {
+        if ( $POST{'action:save'} ) { # Save FAQ
+            return "<b>$ML{'Error'}</b> $ML{'error.invalidform'}"
+                unless LJ::check_form_auth();
+
+            my $opts_question = { changeseverity => $FORM{sev_question}+0 };
+            my $opts_summary = { changeseverity => $FORM{sev_summary}+0 };
+            my $opts_answer = { changeseverity => $FORM{sev_answer}+0 };
+            my $do_trans = sub {
+                my $id = shift;
+                return unless $faqd;
+                LJ::Lang::set_text($dbh, $faqd->{dmid}, $rlang->{lncode},
+                                   "$id.1question", $FORM{q}, $opts_question);
+                LJ::Lang::set_text($dbh, $faqd->{dmid}, $rlang->{lncode},
+                                   "$id.3summary", $FORM{s}, $opts_summary);
+                LJ::Lang::set_text($dbh, $faqd->{dmid}, $rlang->{lncode},
+                                   "$id.2answer", $FORM{a}, $opts_answer);
+            };
+
+            if ( $id == 0 ) {
+                return "<b>Error:</b> You did not select a FAQ category."
+                    unless $FORM{faqcat};
+
+                $dbh->do( qq{ INSERT INTO faq
+                              ( faqid, question, summary, answer, faqcat,
+                                sortorder, lastmoduserid, lastmodtime)
+                              VALUES (NULL, ?, ?, ?, ?, ?, ?, NOW()) },
+                          undef, @FORM{qw( q s a faqcat )},
+                          $FORM{sortorder}+0 || 50, $remote->{userid} );
+                $id = $dbh->{mysql_insertid};
+                $ret .= $dbh->errstr || "Added FAQ item. All good. FAQ id is <b><a href='$LJ::SITEROOT/support/faqbrowse.bml?faqid=$id'>$id</a></b>";
+
+                $opts_question->{childrenlatest} = 1;
+                $opts_summary->{childrenlatest} = 1;
+                $opts_answer->{childrenlatest} = 1;
+                $do_trans->( $id ) if $id;
+            } elsif ( $FORM{q} =~ /\S/ ) {
+                my $sortorder = $FORM{sortorder}+0 || 50;
+                $dbh->do( qq{ UPDATE faq SET question=?, summary=?, answer=?,
+                                             faqcat=?, lastmoduserid=?,
+                                             lastmodtime=NOW(), sortorder=?
+                                         WHERE faqid=? },
+                          undef, @FORM{qw( q s a faqcat )}, $remote->{userid},
+                          $FORM{sortorder}+0 || 50, $id );
+                $ret .= "Updated FAQ item. All good. FAQ id is <b><a href='$LJ::SITEROOT/support/faqbrowse.bml?faqid=$id'>$id</a></b>";
+
+                $do_trans->( $id );
+            } else {
+                $dbh->do( "DELETE FROM faq WHERE faqid=?", undef, $id );
+                $ret .= "FAQ item deleted.";
+
+                # FIXME: delete translation from ml_* ?
+            }
+
+            return $ret;
+        }
+    }
+
+    $ret .= "<form action='faqedit.bml' method='post'>";
     $ret .= LJ::form_auth();
     $ret .= LJ::html_hidden( 'id', $id );
     $ret .= "<p>Category: ";
@@ -62,7 +122,7 @@ body<=
     while ( my ($fc, $fcname) = $sth->fetchrow_array ) {
         # $fc can't be NULL/undef
         push @cats, $fc, $fcname
-            if $ac_add{'*'} || $ac_add{$fc} || ($fc eq $faqcat);
+            if $ac_add{'*'} || $ac_add{$fc} || $fc eq $faqcat;
     }
 
     $ret .= LJ::html_select( { name => 'faqcat', selected => $faqcat }, @cats );
@@ -118,12 +178,11 @@ body<=
         $ret .= "</p>";
     }
 
-    $ret .= "<p>" . LJ::html_submit( '', 'Add/Edit FAQ Item' ) . "</p>";
+    $ret .= "<p>" . LJ::html_submit( 'action:save', 'Add/Edit FAQ Item' )
+            . "</p></form>";
     return $ret;
 }
 _code?>
-
-</form>
 
 <=body
 page?><?_c <LJDEP>
diff -r d14ca95d95b0 -r 6228d9286ad0 htdocs/admin/faq/faqedit_do.bml
--- a/htdocs/admin/faq/faqedit_do.bml	Sat Mar 21 23:25:10 2009 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-<?_info
-nocache=>1
-_info?><?page
-title=><?_code return $FORM{'id'} ? "Edit FAQ Item #$FORM{'id'}" : "Add to FAQ"; _code?>
-body<=
-
-<CENTER>
-<A HREF="./"><B>(Back to FAQ Index)</B></A>
-</CENTER>
-<P>
-
-<?_code
-
- my $dbh = LJ::get_db_writer();
-
- my $remote = LJ::get_remote();
- my %ac_edit;
- my %ac_add;
-
- $id = $FORM{'id'} + 0;
- $ret = "";
-  
- $qq = $dbh->quote($FORM{'q'});
- $qs = $dbh->quote($FORM{'s'});
- $qa = $dbh->quote($FORM{'a'});
- $qfaqcat = $dbh->quote($FORM{'faqcat'});
- 
- $sortorder = $FORM{'sortorder'}+0 || 50;
-
- return "<?requirepost?>" unless LJ::did_post();
- return "<b>$ML{'Error'}</b> $ML{'error.invalidform'}" unless LJ::check_form_auth();
- 
- if ($id)
- {
-     LJ::remote_has_priv($remote, "faqedit", \%ac_edit);
-     my $sth = $dbh->prepare("SELECT faqcat FROM faq WHERE faqid=$id");
-     $sth->execute;
-     my ($faqcat) = $sth->fetchrow_array;
-
-     unless ($ac_edit{'*'} || $ac_edit{$faqcat}) {
-         if (%ac_edit) {
-             return "<B>Error: </B> You do not have access to edit a FAQ question in the \"$faqcat\" category.";
-         } else {
-             return "<B>Error: </B> You do not have access to edit the FAQ.";
-         }
-     }
- }
- else 
- {
-     LJ::remote_has_priv($remote, "faqadd", \%ac_add);
-     unless ($ac_add{'*'} || $ac_add{$FORM{'faqcat'}}) {
-         return "<B>Error: </B> You do not have access to add FAQ questions in this category";
-     }     
- }
-
- my $faqd = LJ::Lang::get_dom("faq");
- my $rlang = LJ::Lang::get_root_lang($faqd);
- unless ($rlang) { undef $faqd; }
- my $opts_question = {
-     'changeseverity' => $FORM{'sev_question'}+0,
- };
- my $opts_summary = {
-     'changeseverity' => $FORM{'sev_summary'}+0,
- };
- my $opts_answer = {
-     'changeseverity' => $FORM{'sev_answer'}+0,
- };
- my $do_trans = sub {
-     my $id = shift;
-     return unless $faqd;
-     LJ::Lang::set_text($dbh, $faqd->{'dmid'}, $rlang->{'lncode'},
-                        "$id.1question", $FORM{'q'}, $opts_question);
-     LJ::Lang::set_text($dbh, $faqd->{'dmid'}, $rlang->{'lncode'},
-                        "$id.3summary", $FORM{'s'}, $opts_summary);
-     LJ::Lang::set_text($dbh, $faqd->{'dmid'}, $rlang->{'lncode'},
-                        "$id.2answer", $FORM{'a'}, $opts_answer);
- };
- 
- unless ($id)
- {
-     unless ($FORM{'faqcat'})
-     {
-         return "<B>Error: </B> You did not select a FAQ category.";
-     }
-     $dbh->do("INSERT INTO faq (faqid, question, summary, answer, faqcat, sortorder, lastmoduserid, lastmodtime) VALUES (NULL, $qq, $qs, $qa, $qfaqcat, $sortorder, $remote->{'userid'}, NOW())");
-     $id = $dbh->{'mysql_insertid'};
-     $ret .= $dbh->errstr || "Added FAQ item.  All good.  faqid is <b><a href='$LJ::SITEROOT/support/faqbrowse.bml?faqid=$id'>$id</a></b>";
-
-     $opts_question->{'childrenlatest'} = 1; 
-     $opts_summary->{'childrenlatest'} = 1; 
-     $opts_answer->{'childrenlatest'} = 1; 
-     $do_trans->($id) if $id;
- }
- else
- {
-
-     if ($FORM{'q'} =~ /\S/)
-     {
-         $dbh->do("UPDATE faq SET question=$qq, summary=$qs, answer=$qa, faqcat=$qfaqcat, lastmoduserid=$remote->{'userid'}, lastmodtime=NOW(), sortorder=$sortorder WHERE faqid=$id");
-         $ret .= "Updated FAQ item.  All good.  faqid is <b><a href='$LJ::SITEROOT/support/faqbrowse.bml?faqid=$id'>$id</a></b>";
-
-         $do_trans->($id);
-     }
-     else
-     {
-         $dbh->do("DELETE FROM faq WHERE faqid=$id");
-         $ret .= "FAQ item deleted.";
-
-         # TODO: delete translation from ml_* ?
-     }
- }
- 
- return $ret;
- 
-_code?>
-
-<=body
-page?><?_c <LJDEP>
-lib: cgi-bin/ljlib.pl
-link: htdocs/admin/faq/index.bml
-</LJDEP> _c?>
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org