Diff
Not logged in

Differences From:

File src/manifest.c part of check-in [ac3f1f2ba7] - Improvements to how ticket changes are displayed in the UI. The hyperlink is show with strick-through if the ticket is closed. The title is shown after the ticket hyperlink. SQL to determine the closed condition and the title can be set in the ticket setup screens. by drh on 2008-10-18 02:27:13. [view]

To:

File src/manifest.c part of check-in [f0c8693845] - More improvements to the timeline display of ticket changes. by drh on 2008-10-20 06:41:12. [view]

@@ -893,16 +893,24 @@
     );
     free(zComment);
   }
   if( m.type==CFTYPE_TICKET ){
+    int i;
+    char *zTitle;
     char *zTag;
     Blob comment;
+    char *zNewStatus = 0;
+    static char *zTitleExpr = 0;
+    static char *zStatusColumn = 0;
+    static int once = 1;
+    int isNew;
 
-    ticket_insert(&m, 1, 1);
+    isNew = ticket_insert(&m, 1, 1);
     zTag = mprintf("tkt-%s", m.zTicketUuid);
     tag_insert(zTag, 1, 0, rid, m.rDate, rid);
     free(zTag);
     blob_zero(&comment);
+#if 0
     if( m.nField==1 ){
       if( m.aField[0].zName[0]=='+' ){
         blob_appendf(&comment,
           "Appended to %h in ticket [%.10s]",
@@ -919,9 +927,8 @@
           m.aField[0].zName, m.zTicketUuid
         );
       }
     }else{
-#if 0
       int i;
       const char *z;
       const char *zSep = " ";
       blob_appendf(&comment, "%d changes to ticket [%.10s]:",
@@ -931,11 +938,60 @@
         if( z[0]=='+' ) z++;
         blob_appendf(&comment, "%s%h", zSep, z);
         zSep = ", ";
       }
-#endif
+      int i;
+      const char *zStatus = 0;
+      const char *zTitle;
+      for(i=0; i<m.nField; i++){
+        z = m.aField[i].zName;
+        if( strcmp(z, "status") ) zStatus = m.aField[i].zValue;
+      }
+      if( zField
       blob_appendf(&comment, "Edits to ticket [%.10s]", m.zTicketUuid);
     }
+#endif
+    if( once ){
+      once = 0;
+      zTitleExpr = db_get("ticket-title-expr", "title");
+      zStatusColumn = db_get("ticket-status-column", "status");
+    }
+    zTitle = db_text("unknown",
+      "SELECT %s FROM ticket WHERE tkt_uuid='%s'",
+      zTitleExpr, m.zTicketUuid
+    );
+    if( !isNew ){
+      for(i=0; i<m.nField; i++){
+        if( strcmp(m.aField[i].zName, zStatusColumn)==0 ){
+          zNewStatus = m.aField[i].zValue;
+        }
+      }
+      if( zNewStatus ){
+        blob_appendf(&comment, "%h ticket [%.10s]: <i>%h</i>",
+           zNewStatus, m.zTicketUuid, zTitle
+        );
+        if( m.nField>1 ){
+          blob_appendf(&comment, " plus %d other change%s",
+            m.nField-1, m.nField==2 ? "" : "s");
+        }
+      }else{
+        zNewStatus = db_text("unknown",
+           "SELECT %s FROM ticket WHERE tkt_uuid='%s'",
+           zStatusColumn, m.zTicketUuid
+        );
+        blob_appendf(&comment, "Ticket [%.10s] <i>%h</i> status still %h with "
+             "%d other change%s",
+             m.zTicketUuid, zTitle, zNewStatus, m.nField,
+             m.nField==1 ? "" : "s"
+        );
+        free(zNewStatus);
+      }
+    }else{
+      blob_appendf(&comment, "New ticket [%.10s] <i>%h</i>.",
+        m.zTicketUuid, zTitle
+      );
+    }
+    free(zTitle);
     db_multi_exec(
       "REPLACE INTO event(type,mtime,objid,user,comment)"
       "VALUES('t',%.17g,%d,%Q,%Q)",
       m.rDate, rid, m.zUser, blob_str(&comment)