[prev in list] [next in list] [prev in thread] [next in thread] 

List:       fossil-users
Subject:    Re: [fossil-users] ticket assignment
From:       zachtodd () cis-partners ! com
Date:       2010-05-14 15:31:15
Message-ID: 1273851075.31433391 () 192 ! 168 ! 2 ! 227
[Download RAW message or body]

I have introduced a new capability 'q', or "assign ticket".  It is not a default out of the box, but can easily be added to groups or individuals as needed.  This is in addition to the "my tickets" report that is now displayed as part of the ticket reports page.  

diff -rupN fossil_src_orig/src/login.c fossil/src/login.c
--- fossil_src_orig/src/login.c	2010-03-18 10:20:53.000000000 -0400
+++ fossil/src/login.c	2010-05-14 10:37:38.523325839 -0400
@@ -474,7 +474,7 @@ void login_set_capabilities(const char *
   for(i=0; zCap[i]; i++){
     switch( zCap[i] ){
       case 's':   g.okSetup = 1;  /* Fall thru into Admin */
-      case 'a':   g.okAdmin = g.okRdTkt = g.okWrTkt = g.okZip =
+      case 'a':   g.okAdmin = g.okRdTkt = g.okWrTkt = g.okAssignTkt = g.okZip =
                               g.okRdWiki = g.okWrWiki = g.okNewWiki =
                               g.okApndWiki = g.okHistory = g.okClone = 
                               g.okNewTkt = g.okPassword = g.okRdAddr =
@@ -500,6 +500,7 @@ void login_set_capabilities(const char *
       case 'w':   g.okWrTkt = g.okRdTkt = g.okNewTkt = 
                   g.okApndTkt = 1;                              break;
       case 'c':   g.okApndTkt = 1;                              break;
+      case 'q':   g.okAssignTkt = 1;                            break;
       case 't':   g.okTktFmt = 1;                               break;
       case 'b':   g.okAttach = 1;                               break;
 
@@ -553,7 +554,7 @@ int login_has_capability(const char *zCa
       case 'n':  rc = g.okNewTkt;    break;
       case 'o':  rc = g.okRead;      break;
       case 'p':  rc = g.okPassword;  break;
-      /* case 'q': */
+      case 'q':  rc = g.okAssignTkt; break;
       case 'r':  rc = g.okRdTkt;     break;
       case 's':  rc = g.okSetup;     break;
       case 't':  rc = g.okTktFmt;    break;
diff -rupN fossil_src_orig/src/main.c fossil/src/main.c
--- fossil_src_orig/src/main.c	2010-03-18 10:20:53.000000000 -0400
+++ fossil/src/main.c	2010-05-14 09:28:24.839325795 -0400
@@ -127,6 +127,7 @@ struct Global {
   int okRdWiki;           /* j: view wiki via web */
   int okNewWiki;          /* f: create new wiki via web */
   int okApndWiki;         /* m: append to wiki via web */
+  int okAssignTkt;        /* q: assign tickets */
   int okWrWiki;           /* k: edit wiki via web */
   int okRdTkt;            /* r: view tickets via web */
   int okNewTkt;           /* n: create new tickets */
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-14 09:10:07.800326842 -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/setup.c fossil/src/setup.c
--- fossil_src_orig/src/setup.c	2010-03-18 10:20:53.000000000 -0400
+++ fossil/src/setup.c	2010-05-14 10:14:05.411327342 -0400
@@ -178,6 +178,8 @@ void setup_ulist(void){
      @   <td><i>Check-Out:</i> Check out versions</td></tr>
      @ <tr><td valign="top"><b>p</b></td>
      @   <td><i>Password:</i> Change your own password</td></tr>
+     @ <tr><td valign="top"><b>q</b></td>
+     @   <td><i>Assign-Tkt:</i> Assign tickets</td></tr>
      @ <tr><td valign="top"><b>r</b></td>
      @   <td><i>Read-Tkt:</i> View tickets</td></tr>
      @ <tr><td valign="top"><b>s</b></td>
@@ -241,7 +243,7 @@ static int isValidPwString(const char *z
 */
 void user_edit(void){
   const char *zId, *zLogin, *zInfo, *zCap, *zPw;
-  char *oaa, *oas, *oar, *oaw, *oan, *oai, *oaj, *oao, *oap;
+  char *oaa, *oas, *oaq, *oar, *oaw, *oan, *oai, *oaj, *oao, *oap;
   char *oak, *oad, *oac, *oaf, *oam, *oah, *oag, *oae;
   char *oat, *oau, *oav, *oab, *oaz;
   const char *inherit[128];
@@ -289,6 +291,7 @@ void user_edit(void){
     int an = P("an")!=0;
     int ao = P("ao")!=0;
     int ap = P("ap")!=0;
+    int aq = P("aq")!=0;
     int ar = P("ar")!=0;
     int as = g.okSetup && P("as")!=0;
     int aw = P("aw")!=0;
@@ -316,6 +319,7 @@ void user_edit(void){
     if( an ){ zCap[i++] = 'n'; }
     if( ao ){ zCap[i++] = 'o'; }
     if( ap ){ zCap[i++] = 'p'; }
+    if( aq ){ zCap[i++] = 'q'; }
     if( ar ){ zCap[i++] = 'r'; }
     if( as ){ zCap[i++] = 's'; }
     if( at ){ zCap[i++] = 't'; }
@@ -360,7 +364,7 @@ void user_edit(void){
   zCap = "";
   zPw = "";
   oaa = oab = oac = oad = oae = oaf = oag = oah = oai = oaj = oak = oam =
-        oan = oao = oap = oar = oas = oat = oau = oav = oaw = oaz = "";
+        oan = oao = oap = oaq = oar = oas = oat = oau = oav = oaw = oaz = "";
   if( uid ){
     zLogin = db_text("", "SELECT login FROM user WHERE uid=%d", uid);
     zInfo = db_text("", "SELECT info FROM user WHERE uid=%d", uid);
@@ -381,6 +385,7 @@ void user_edit(void){
     if( strchr(zCap, 'n') ) oan = " checked";
     if( strchr(zCap, 'o') ) oao = " checked";
     if( strchr(zCap, 'p') ) oap = " checked";
+    if( strchr(zCap, 'q') ) oaq = " checked";
     if( strchr(zCap, 'r') ) oar = " checked";
     if( strchr(zCap, 's') ) oas = " checked";
     if( strchr(zCap, 't') ) oat = " checked";
@@ -475,6 +480,7 @@ void user_edit(void){
   @    <input type="checkbox" name="am"%s(oam)/>%s(B('m'))Append Wiki<br>
   @    <input type="checkbox" name="ak"%s(oak)/>%s(B('k'))Write Wiki<br>
   @    <input type="checkbox" name="ab"%s(oab)/>%s(B('b'))Attachments<br>
+  @    <input type="checkbox" name="aq"%s(oaq)/>%s(B('q'))Assign Ticket<br>
   @    <input type="checkbox" name="ar"%s(oar)/>%s(B('r'))Read Ticket<br>
   @    <input type="checkbox" name="an"%s(oan)/>%s(B('n'))New Ticket<br>
   @    <input type="checkbox" name="ac"%s(oac)/>%s(B('c'))Append Ticket<br>
@@ -572,8 +578,8 @@ void user_edit(void){
   @ <li><p>
   @ The <b>Read Wiki</b>, <b>New Wiki</b>, <b>Append Wiki</b>, and
   @ <b>Write Wiki</b> privileges control access to wiki pages.  The
-  @ <b>Read Ticket</b>, <b>New Ticket</b>, <b>Append Ticket</b>, and
-  @ <b>Write Ticket</b> privileges control access to trouble tickets.
+  @ <b>Read Ticket</b>, <b>New Ticket</b>, <b>Append Ticket</b>,
+  @ <b>Write Ticket</b>, and <b>Assign Ticket</b> privileges control access to trouble tickets.
   @ The <b>Ticket Report</b> privilege allows the user to create or edit
   @ ticket report formats.
   @ </p></li>
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-14 11:14:07.430327005 -0400
@@ -79,6 +79,7 @@ static const char zDefaultTicketTable[] 
 @   subsystem TEXT,
 @   priority TEXT,
 @   severity TEXT,
+@   assignedto TEXT,
 @   foundin TEXT,
 @   private_contact TEXT,
 @   resolution TEXT,
@@ -289,6 +290,17 @@ static const char zDefaultNew[] =
 @ affect the operation of the product?</td>
 @ </tr>
 @ 
+@ <th1>
+@ if {[hascap q]} {
+@ 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 +389,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 +479,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 q]</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>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic