use viewspecific to transport params through the blogview_renderer
[citadel.git] / webcit / blogview_renderer.c
index 2254b9c0526c01f49c7b6cbb04e25200c371ec41..2e9d35e32a6280877567429711d02b25ed430ef6 100644 (file)
@@ -1,26 +1,27 @@
 /* 
  * Blog view renderer module for WebCit
  *
- * Copyright (c) 1996-2011 by the citadel.org team
+ * Copyright (c) 1996-2012 by the citadel.org team
  *
  * This program is open source software.  You can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation -- either version 3 of the
- * License, or (at your option) any later version.
+ * modify it under the terms of the GNU General Public License, version 3.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
 
 #include "webcit.h"
 #include "webserver.h"
-#include "groupdav.h"
+#include "dav.h"
+
+
+typedef struct __BLOG {
+       HashList *BLOG;
+       long p;
+       int gotonext;
+} BLOG;
 
 
 /*
@@ -60,12 +61,12 @@ void blogpost_render(struct blogpost *bp, int with_comments)
 
        if (with_comments) {
                /* Show any existing comments, then offer the comment box */
-               wc_printf("<a name=\"comments\"></a>\n");
+               wc_printf("<a class=\"blog_show_comments_link\" name=\"comments\"></a>\n");
                wc_printf(_("%d comments"), bp->num_msgs - 1);
-               wc_printf(" | <a href=\"");
+               wc_printf(" | <a class=\"blog_permalink_link\" href=\"");
                tmplput_blog_permalink(NULL, NULL);
                wc_printf("\">%s</a>", _("permalink"));
-               wc_printf("<br>\n");
+               wc_printf("</div>\n");
                for (i=1; i<bp->num_msgs; ++i) {
                        read_message(WC->WBuf, HKEY("view_blog_comment"), bp->msgs[i], NULL, &Mime);
                }
@@ -74,14 +75,14 @@ void blogpost_render(struct blogpost *bp, int with_comments)
 
        else {
                /* Show only the number of comments */
-               wc_printf("<a href=\"readfwd?p=%d?go=", bp->top_level_id);
+               wc_printf("<a class=\"blog_show_comments_link\" href=\"readfwd?p=%d?go=", bp->top_level_id);
                urlescputs(ChrPtr(WC->CurRoom.name));
                wc_printf("#comments\">");
                wc_printf(_("%d comments"), bp->num_msgs - 1);
-               wc_printf("</a> | <a href=\"");
+               wc_printf("</a> | <a class=\"blog_permalink_link\" href=\"");
                tmplput_blog_permalink(NULL, NULL);
                wc_printf("\">%s</a>", _("permalink"));
-               wc_printf("<br><br><br>\n");
+               wc_printf("<hr>\n</div>\n");
        }
 }
 
@@ -104,10 +105,17 @@ int blogview_GetParamsGetServerCall(SharedMessageStatus *Stat,
                                   void **ViewSpecific, 
                                   long oper, 
                                   char *cmd, 
-                                  long len)
+                                   long len,
+                                   char *filter,
+                                   long flen)
 {
-       HashList *BLOG = NewHash(1, NULL);
-       *ViewSpecific = BLOG;
+       BLOG *BL = (BLOG*) malloc(sizeof(BLOG)); 
+       BL->BLOG = NewHash(1, NULL);
+       
+       /* are we looking for a specific post? */
+       BL->p = lbstr("p");
+       BL->gotonext = havebstr("gotonext");
+       *ViewSpecific = BL;
 
        Stat->startmsg = (-1);                                  /* not used here */
        Stat->sortit = 1;                                       /* not used here */
@@ -116,7 +124,8 @@ int blogview_GetParamsGetServerCall(SharedMessageStatus *Stat,
        
        /* perform a "read all" call to fetch the message list -- we'll cut it down later */
        rlid[2].cmd(cmd, len);
-       
+       if (BL->gotonext)
+               Stat->load_seen = 1;
        return 200;
 }
 
@@ -166,18 +175,16 @@ int blogview_LoadMsgFromServer(SharedMessageStatus *Stat,
                              int is_new, 
                              int i)
 {
-       HashList *BLOG = (HashList *) *ViewSpecific;
+       BLOG *BL = (BLOG*) *ViewSpecific;
        struct bltr b;
        struct blogpost *bp = NULL;
-       int p = 0;
 
        b = blogview_learn_thread_references(Msg->msgnum);
 
        /* Stop processing if the viewer is only interested in a single post and
         * that message ID is neither the id nor the refs.
         */
-       p = atoi(BSTR("p"));    /* are we looking for a specific post? */
-       if ((p != 0) && (p != b.id) && (p != b.refs)) {
+       if ((BL->p != 0) && (BL->p != b.id) && (BL->p != b.refs)) {
                return 200;
        }
 
@@ -189,10 +196,10 @@ int blogview_LoadMsgFromServer(SharedMessageStatus *Stat,
                if (!bp) return(200);
                memset(bp, 0, sizeof (struct blogpost));
                bp->top_level_id = b.id;
-               Put(BLOG, (const char *)&b.id, sizeof(b.id), bp, (DeleteHashDataFunc)blogpost_destroy);
+               Put(BL->BLOG, (const char *)&b.id, sizeof(b.id), bp, (DeleteHashDataFunc)blogpost_destroy);
        }
        else {
-               GetHash(BLOG, (const char *)&b.refs , sizeof(b.refs), (void *)&bp);
+               GetHash(BL->BLOG, (const char *)&b.refs , sizeof(b.refs), (void *)&bp);
        }
 
        /*
@@ -214,6 +221,9 @@ int blogview_LoadMsgFromServer(SharedMessageStatus *Stat,
                }
                bp->msgs[bp->num_msgs++] = Msg->msgnum;
        }
+       else {
+               syslog(LOG_DEBUG, "** comment %ld is unparented", Msg->msgnum);
+       }
 
        return 200;
 }
@@ -239,7 +249,7 @@ static int blogview_sortfunc(const void *a, const void *b) {
  */
 int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper)
 {
-       HashList *BLOG = (HashList *) *ViewSpecific;
+       BLOG *BL = (BLOG*) *ViewSpecific;
        HashPos *it;
        const char *Key;
        void *Data;
@@ -260,8 +270,8 @@ int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper)
        if (maxp < 1) maxp = 5;         /* default; move somewhere else? */
 
        /* Iterate through the hash list and copy the data pointers into an array */
-       it = GetNewHashPos(BLOG, 0);
-       while (GetNextHashPos(BLOG, it, &len, &Key, &Data)) {
+       it = GetNewHashPos(BL->BLOG, 0);
+       while (GetNextHashPos(BL->BLOG, it, &len, &Key, &Data)) {
                if (num_blogposts >= num_blogposts_alloc) {
                        if (num_blogposts_alloc == 0) {
                                num_blogposts_alloc = 100;
@@ -279,11 +289,11 @@ int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper)
         * which they point are still owned by the hash list.
         */
        if (num_blogposts > 0) {
+               int start_here = 0;
                /* Sort newest-to-oldest */
                qsort(blogposts, num_blogposts, sizeof(void *), blogview_sortfunc);
 
                /* allow the user to select a starting point in the list */
-               int start_here = 0;
                for (i=0; i<num_blogposts; ++i) {
                        if (blogposts[i]->top_level_id == firstp) {
                                start_here = i;
@@ -325,10 +335,10 @@ int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper)
 
 int blogview_Cleanup(void **ViewSpecific)
 {
-       HashList *BLOG = (HashList *) *ViewSpecific;
-
-       DeleteHash(&BLOG);
+       BLOG *BL = (BLOG*) *ViewSpecific;
 
+       DeleteHash(&BL->BLOG);
+       free(BL);
        wDumpContent(1);
        return 0;
 }
@@ -342,6 +352,7 @@ InitModule_BLOGVIEWRENDERERS
                VIEW_BLOG,
                blogview_GetParamsGetServerCall,
                NULL,
+               NULL,
                NULL, 
                blogview_LoadMsgFromServer,
                blogview_render,