Diff
Not logged in

Differences From:

File src/info.c part of check-in [cfc7984ede] - Styled the vinfo page by jnc on 2007-09-25 20:21:27. Also file src/info.c part of check-in [16551da2e3] - Merge the vinfo CSS patches. by drh on 2007-09-25 20:39:14. [view]

To:

File src/info.c part of check-in [dfea940da8] - Refinements to the timeline for giving better information about wiki pages. by drh on 2007-10-09 02:35:22. [view]

@@ -376,8 +376,68 @@
   style_footer();
 }
 
 /*
+** WEBPAGE: winfo
+**
+** Return information about a wiki page.  The version number is contained
+** in g.zExtra.
+*/
+void winfo_page(void){
+  Stmt q;
+  int rid;
+
+  login_check_credentials();
+  if( !g.okHistory ){ login_needed(); return; }
+  rid = name_to_rid(g.zExtra);
+  if( rid==0 ){
+    style_header("Wiki Page Information Error");
+    @ No such object: %h(g.argv[2])
+    style_footer();
+    return;
+  }
+  db_prepare(&q,
+     "SELECT substr(tagname, 6, 1000), uuid,"
+     "       datetime(event.mtime, 'localtime'), user"
+     "  FROM tagxref, tag, blob, event"
+     " WHERE tagxref.rid=%d"
+     "   AND tag.tagid=tagxref.tagid"
+     "   AND tag.tagname LIKE 'wiki-%%'"
+     "   AND blob.rid=%d"
+     "   AND event.objid=%d",
+     rid, rid, rid
+  );
+  if( db_step(&q)==SQLITE_ROW ){
+    const char *zName = db_column_text(&q, 0);
+    const char *zUuid = db_column_text(&q, 1);
+    char *zTitle = mprintf("Wiki Page %s", zName);
+    style_header(zTitle);
+    free(zTitle);
+    @ <div class="section-title">Overview</div>
+    @ <p><table class="label-value">
+    @ <tr><th>Version:</th><td>%s(zUuid)</td></tr>
+    @ <tr><th>Date:</th><td>%s(db_column_text(&q, 2))</td></tr>
+    if( g.okSetup ){
+      @ <tr><th>Record ID:</th><td>%d(rid)</td></tr>
+    }
+    @ <tr><th>Original&nbsp;User:</th><td>%s(db_column_text(&q, 3))</td></tr>
+    @ <tr><th>Commands:</th>
+    @   <td>
+/*    @     <a href="%s(g.zBaseURL)/wdiff/%d(rid)">diff</a> | */
+    @     <a href="%s(g.zBaseURL)/wlist/%t(zName)">history</a>
+    @     | <a href="%s(g.zBaseURL)/fview/%d(rid)">raw-text</a>
+    @   </td>
+    @ </tr>
+    @ </table></p>
+  }else{
+    style_header("Wiki Information");
+  }
+  db_finalize(&q);
+  showTags(rid);
+  style_footer();
+}
+
+/*
 ** WEBPAGE: finfo
 **
 ** Show the complete change history for a single file.  The name
 ** of the file is in g.zExtra
@@ -516,8 +576,9 @@
 */
 static void object_description(int rid, int linkToView){
   Stmt q;
   int cnt = 0;
+  int nWiki = 0;
   db_prepare(&q,
     "SELECT filename.name, datetime(event.mtime), substr(a.uuid,1,10),"
     "       coalesce(event.comment,event.ecomment),"
     "       coalesce(event.euser,event.user),"
@@ -544,25 +605,49 @@
     cnt++;
   }
   db_finalize(&q);
   db_prepare(&q,
-    "SELECT datetime(mtime), user, comment, uuid"
-    "  FROM event, blob"
-    " WHERE event.objid=%d"
-    "   AND blob.rid=%d",
-    rid, rid
+    "SELECT substr(tagname, 6, 10000), datetime(event.mtime),"
+    "       coalesce(event.euser, event.user), uuid"
+    "  FROM tagxref, tag, event, blob"
+    " WHERE tagxref.rid=%d"
+    "   AND tag.tagid=tagxref.tagid"
+    "   AND tag.tagname LIKE 'wiki-%%'"
+    "   AND event.objid=tagxref.rid"
+    "   AND blob.rid=tagxref.rid",
+    rid
   );
   while( db_step(&q)==SQLITE_ROW ){
-    const char *zDate = db_column_text(&q, 0);
+    const char *zPagename = db_column_text(&q, 0);
+    const char *zDate = db_column_text(&q, 1);
+    const char *zUser = db_column_text(&q, 2);
     const char *zUuid = db_column_text(&q, 3);
-    const char *zCom = db_column_text(&q, 2);
-    const char *zUser = db_column_text(&q, 1);
-    @ Manifest of version
-    hyperlink_to_uuid(zUuid);
-    @ %s(zCom) by %s(zUser) on %s(zDate).
+    @ Wiki page [<a href="%s(g.zBaseURL)/wiki/%t(zPagename)">%h(zPagename)</a>]
+    @ uuid %s(zUuid) by %h(zUser) on %s(zDate)
+    nWiki++;
     cnt++;
   }
   db_finalize(&q);
+  if( nWiki==0 ){
+    db_prepare(&q,
+      "SELECT datetime(mtime), user, comment, uuid"
+      "  FROM event, blob"
+      " WHERE event.objid=%d"
+      "   AND blob.rid=%d",
+      rid, rid
+    );
+    while( db_step(&q)==SQLITE_ROW ){
+      const char *zDate = db_column_text(&q, 0);
+      const char *zUuid = db_column_text(&q, 3);
+      const char *zCom = db_column_text(&q, 2);
+      const char *zUser = db_column_text(&q, 1);
+      @ Manifest of version
+      hyperlink_to_uuid(zUuid);
+      @ %s(zCom) by %s(zUser) on %s(zDate).
+      cnt++;
+    }
+    db_finalize(&q);
+  }
   if( cnt==0 ){
     char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
     @ Control file %s(zUuid).
   }else if( linkToView ){
@@ -620,12 +705,18 @@
 
   rid = name_to_rid(g.zExtra);
   login_check_credentials();
   if( !g.okHistory ){ login_needed(); return; }
-  if( g.zPath[0]=='i' &&
-      db_exists("SELECT 1 FROM plink WHERE cid=%d", rid) ){
-    vinfo_page();
-    return;
+  if( g.zPath[0]=='i' ){
+    if( db_exists("SELECT 1 FROM tagxref JOIN tag USING(tagid)"
+                  " WHERE rid=%d AND tagname LIKE 'wiki-%%'", rid) ){
+      winfo_page();
+      return;
+    }
+    if( db_exists("SELECT 1 FROM plink WHERE cid=%d", rid) ){
+      vinfo_page();
+      return;
+    }
   }
   style_header("File Content");
   @ <h2>Content Of:</h2>
   @ <blockquote>