I have added some additional features to ticket assignment. Administrators may
assign on ticket creation/editing. Normal developers may now assign and
unassign themselves without any special privileges. Viewing who has what
ticket and self assigning/unassigning is done right in the "all tickets"
listing.
Jeremy, a per project security attribute that allows all developers to assign
to each other is an interesting idea. That may be where I head next, but I
wanted to see if anyone had any comments about the design and implementation of
what I have done so far.
diff -rupN fossil_src_orig/src/report.c fossil/src/report.c
--- fossil_src_orig/src/report.c 2010-03-18 10:20:53.000000000 -0400
+++ fossil/src/report.c 2010-05-12 22:08:36.372518961 -0400
@@ -646,13 +646,14 @@ static int generate_html(
int i;
const char *zTid; /* Ticket UUID. (value of column named '#') */
int rn; /* Report number */
+ char zrn[4];
char *zBg = 0; /* Use this background color */
char zPage[30]; /* Text version of the ticket number */
/* Get the report number
*/
rn = pState->rn;
-
+ sprintf(zrn, "%d", rn);
/* Do initialization
*/
if( pState->nCount==0 ){
@@ -759,6 +760,13 @@ static int generate_html(
}else{
@ <td valign="top">%h(zData)</td>
}
+ }else if ( strcmp(azName[i], "assignedto") == 0 ){
+ if ( zData[0]==0 )
+ @ <td valign="top"><a
href="/tktassign?name=%h(zTid)&rn=%h(zrn)">unassigned</a></td>
+ else if ( strcmp(zData, g.zLogin) == 0 )
+ @ <td valign="top">%h(zData) <a
href="/tktunassign?name=%h(zTid)&rn=%h(zrn)">(unassign)</a></td>
+ else
+ @ <td valign="top">%h(zData)</td>
}else if( zData[0]==0 ){
@ <td valign="top"> </td>
}else{
diff -rupN fossil_src_orig/src/schema.c fossil/src/schema.c
--- fossil_src_orig/src/schema.c 2010-03-18 10:20:53.000000000 -0400
+++ fossil/src/schema.c 2010-05-09 11:15:12.108214371 -0400
@@ -171,10 +171,33 @@ const char zRepositorySchema1[] =
@ datetime(tkt_mtime) AS ''mtime'',
@ type,
@ status,
+@ assignedto,
@ subsystem,
@ title
@ FROM ticket');
@
+@ INSERT INTO reportfmt(title,cols,sqlcode) VALUES('My Tickets','#ffffff Key:
+@ #f2dcdc Active
+@ #e8e8e8 Review
+@ #cfe8bd Fixed
+@ #bde5d6 Tested
+@ #cacae5 Deferred
+@ #c8c8c8 Closed','SELECT
+@ CASE WHEN status IN (''Open'',''Verified'') THEN ''#f2dcdc''
+@ WHEN status=''Review'' THEN ''#e8e8e8''
+@ WHEN status=''Fixed'' THEN ''#cfe8bd''
+@ WHEN status=''Tested'' THEN ''#bde5d6''
+@ WHEN status=''Deferred'' THEN ''#cacae5''
+@ ELSE ''#c8c8c8'' END AS ''bgcolor'',
+@ substr(tkt_uuid,1,10) AS ''#'',
+@ datetime(tkt_mtime) AS ''mtime'',
+@ type,
+@ status,
+@ assignedto,
+@ subsystem,
+@ title
+@ FROM ticket WHERE assignedto=user()');
+@
@ -- Some ticket content (such as the originators email address or contact
@ -- information) needs to be obscured to protect privacy. This is achieved
@ -- by storing an SHA1 hash of the content. For display, the hash is
@@ -358,6 +381,7 @@ const char zRepositorySchema2[] =
@ priority TEXT,
@ severity TEXT,
@ foundin TEXT,
+@ assignedto TEXT,
@ private_contact TEXT,
@ resolution TEXT,
@ title TEXT,
diff -rupN fossil_src_orig/src/tkt.c fossil/src/tkt.c
--- fossil_src_orig/src/tkt.c 2010-03-18 10:20:53.000000000 -0400
+++ fossil/src/tkt.c 2010-05-12 21:52:11.766531533 -0400
@@ -291,6 +291,74 @@ void ticket_rebuild(void){
}
/*
+** WEBPAGE: tktassign
+** URL: tktassign?name=UUID
+**
+** Assign current user to ticket.
+*/
+void tktassign(void){
+ const char *zUuid;
+ const char *zFrom;
+ const char *zFullName;
+
+ Stmt q;
+ zUuid = PD("name", "");
+ zFrom = PD("rn", "");
+
+ login_check_credentials();
+
+ zFullName = db_text(0,
+ "SELECT tkt_uuid FROM ticket"
+ " WHERE tkt_uuid GLOB '%q*'", zUuid);
+
+ db_prepare(&q, "UPDATE ticket SET assignedto=:user WHERE tkt_uuid=:ticket");
+ db_bind_text(&q, ":user", g.zLogin);
+ db_bind_text(&q, ":ticket", zFullName);
+
+ db_step(&q);
+ db_finalize(&q);
+ cgi_redirectf("rptview?rn=%T", zFrom);
+}
+
+/*
+** WEBPAGE: tktunassign
+** URL: tktunassign?name=UUID
+**
+** Unassign from a ticket.
+*/
+void tktunassign(void){
+ const char *zUuid;
+ const char *zFrom;
+ const char *zFullName;
+ const char *zAssignedto;
+
+ Stmt q;
+ zUuid = PD("name", "");
+ zFrom = PD("rn", "");
+
+ login_check_credentials();
+
+ zFullName = db_text(0,
+ "SELECT tkt_uuid FROM ticket"
+ " WHERE tkt_uuid GLOB '%q*'", zUuid);
+
+ db_prepare(&q, "SELECT assignedto FROM ticket WHERE tkt_uuid=%Q", zFullName);
+ db_step(&q);
+
+ zAssignedto = db_column_text(&q, 0);
+
+ if (strcmp(g.zLogin, zAssignedto) != 0){
+ cgi_redirect("home");
+ }
+
+ db_prepare(&q, "UPDATE ticket SET assignedto='' WHERE tkt_uuid=%Q",
zFullName);
+
+ db_step(&q);
+ db_finalize(&q);
+ cgi_redirectf("rptview?rn=%T", zFrom);
+}
+
+/*
** WEBPAGE: tktview
** URL: tktview?name=UUID
**
diff -rupN fossil_src_orig/src/tktsetup.c fossil/src/tktsetup.c
--- fossil_src_orig/src/tktsetup.c 2010-03-18 10:20:53.000000000 -0400
+++ fossil/src/tktsetup.c 2010-05-09 12:04:54.879214088 -0400
@@ -289,6 +289,17 @@ static const char zDefaultNew[] =
@ affect the operation of the product?</td>
@ </tr>
@
+@ <th1>
+@ if {[hascap a]} {
+@ html "<tr>"
+@ html "<td align='right'>Assigned To:"
+@ html "<input type='text' name='assignedto' value=''>"
+@ html "</td>"
+@ html "<td>Should this issue be assigned to a particular developer?</td>"
+@ html "</tr>"
+@ }
+@ </th1>
+@
@ <tr>
@ <td align="right">EMail:
@ <input type="text" name="private_contact" value="$<private_contact>"
size="30">
@@ -377,8 +388,11 @@ static const char zDefaultView[] =
@ </td></tr>
@ <tr><td align="right">Severity:</td><td bgcolor="#d0d0d0">
@ $<severity>
-@ </td>
-@ <td align="right">Priority:</td><td bgcolor="#d0d0d0">
+@ </td></tr>
+@ <tr><td align="right">Assigned:</td><td bgcolor="#d0d0d0">
+@ $<assignedto>
+@ </td></tr>
+@ <tr><td align="right">Priority:</td><td bgcolor="#d0d0d0">
@ $<priority>
@ </td></tr>
@ <tr><td align="right">Subsystem:</td><td bgcolor="#d0d0d0">
@@ -464,6 +478,11 @@ static const char zDefaultEdit[] =
@ <tr><td align="right">Severity:</td><td>
@ <th1>combobox severity $severity_choices 1</th1>
@ </td></tr>
+@ <th1>enable_output [hascap a]</th1>
+@ <tr><td align="right">Assigned To:</td><td>
+@ <input type='text' name='assignedto' value='$<assignedto>'>
+@ </td></tr>
+@ <th1>enable_output 1</th1>
@ <tr><td align="right">Priority:</td><td>
@ <th1>combobox priority $priority_choices 1</th1>
@ </td></tr>
_______________________________________________
fossil-users mailing list
[email protected]
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users