Add code to (optionally) list FAQs with no  cats.

        Patch by exor674. 

diffs (100 lines):

diff -r 28604b34f3cb -r 372629d590aa cgi-bin/LJ/Faq.pm
--- a/cgi-bin/LJ/Faq.pm Sat Aug 01 11:21:20 2009 +0000
+++ b/cgi-bin/LJ/Faq.pm Sat Aug 01 11:34:04 2009 +0000
@@ -108,9 +108,17 @@ sub load_all {
 
     my %opts = @_;
     my $lang = delete $opts{lang} || $LJ::DEFAULT_LANG;
-    my $faqcat = delete $opts{"cat"};
-    my $wherecat = "faqcat "
-        . (length $faqcat ? "= " . $dbr->quote($faqcat) : "!= ''");
+    my $faqcat = delete $opts{cat};
+    my $allow_no_cat = delete $opts{allow_no_cat} || 0;
+    
+    my $wherecat = "";
+    if ( $allow_no_cat ) {
+        $wherecat = "WHERE faqcat = " . $dbr->quote($faqcat) if defined 
$faqcat;
+    } else {
+        $wherecat = "WHERE faqcat "
+            . (length $faqcat ? "= " . $dbr->quote($faqcat) : "!= ''");
+    }
+
     croak("unknown parameters: " . join(", ", keys %opts))
         if %opts;
 
@@ -120,13 +128,13 @@ sub load_all {
             ("SELECT faqid, question, summary, answer, faqcat, lastmoduserid, 
".
              "DATE_FORMAT(lastmodtime, '%M %D, %Y') AS lastmodtime, ".
              "UNIX_TIMESTAMP(lastmodtime) AS unixmodtime, sortorder ".
-             "FROM faq WHERE $wherecat");
+             "FROM faq $wherecat");
 
     } else { # Don't load fields that lang_update_in_place will overwrite.
         $sth = $dbr->prepare
             ("SELECT faqid, faqcat, ".
              "UNIX_TIMESTAMP(lastmodtime) AS unixmodtime, sortorder ".
-             "FROM faq WHERE $wherecat");
+             "FROM faq $wherecat");
     }
     $sth->execute;
     die $sth->errstr if $sth->err;
diff -r 28604b34f3cb -r 372629d590aa htdocs/admin/faq/index.bml
--- a/htdocs/admin/faq/index.bml        Sat Aug 01 11:21:20 2009 +0000
+++ b/htdocs/admin/faq/index.bml        Sat Aug 01 11:34:04 2009 +0000
@@ -36,7 +36,7 @@ body<=
 
     my $dom = LJ::Lang::get_dom( "faq" );
     my $lang = LJ::Lang::get_root_lang( $dom );
-    my @faqs = LJ::Faq->load_all( lang => $lang->{lncode} );
+    my @faqs = LJ::Faq->load_all( lang => $lang->{lncode}, allow_no_cat => 1 );
     my $user;
     my $user_url;
 
@@ -54,7 +54,17 @@ body<=
     push @{ $faqq{$_->faqcat} }, $_
         foreach @faqs;
 
-    foreach my $faqcat ( sort { $faqcat{$a}->{catorder} <=> 
$faqcat{$b}->{catorder} } keys %faqcat ) {
+    # Ensure 'no category' is last.
+    my @sorted_cats = sort { $faqcat{$a}->{catorder} <=> 
$faqcat{$b}->{catorder} } keys %faqcat;
+    
+    $faqcat{''} = {
+        faqcat => '',
+        faqcatname => '<No Category>',
+    };
+    
+    push @sorted_cats, '';
+    
+    foreach my $faqcat ( @sorted_cats ) {
         $ret .= "<h2><a href='readcat.bml?faqcat=$faqcat'>"
             . LJ::ehtml( $faqcat{$faqcat}->{faqcatname} ) . "</a></h2>\n";
         next unless $faqq{$faqcat} && @{ $faqq{$faqcat} };
diff -r 28604b34f3cb -r 372629d590aa htdocs/admin/faq/readcat.bml
--- a/htdocs/admin/faq/readcat.bml      Sat Aug 01 11:21:20 2009 +0000
+++ b/htdocs/admin/faq/readcat.bml      Sat Aug 01 11:34:04 2009 +0000
@@ -16,16 +16,19 @@ body<=
 
     my $ret = "";
 
-    my $faqcat = $FORM{faqcat};
-    my $sth = $dbh->prepare( "SELECT faqcatname FROM faqcat WHERE faqcat=?" );
-    $sth->execute( $faqcat );
-    my ( $faqcatname ) = $sth->fetchrow_array;
-    return "Unknown FAQ cat $faqcat" unless defined $faqcatname;
+    my $faqcatname = "<No Category>";
+    my $faqcat = $FORM{faqcat} || '';
+    if ( $faqcat ne '' ) {
+        my $sth = $dbh->prepare( "SELECT faqcatname FROM faqcat WHERE 
faqcat=?" );
+        $sth->execute( $faqcat );
+        ( $faqcatname ) = $sth->fetchrow_array;
+        return "Unknown FAQ cat $faqcat" unless defined $faqcatname;
+    }
  
     my $remote = LJ::get_remote();
     my $dom = LJ::Lang::get_dom( "faq" );
     my $lang = LJ::Lang::get_root_lang( $dom );
-    my @faqs = LJ::Faq->load_all( lang => $lang->{lncode}, cat => $faqcat );
+    my @faqs = LJ::Faq->load_all( lang => $lang->{lncode}, cat => $faqcat, 
allow_no_cat => 1  );
     my $user;
     my $user_url;
 
_______________________________________________
dw-changelog mailing list
[email protected]
http://lists.dwscoalition.org/mailman/listinfo/dw-changelog

Reply via email to