Mercurial > p > roundup > code
comparison doc/index.html @ 256:0fb85acfa9e4
more doc
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Sun, 30 Sep 2001 01:19:22 +0000 |
| parents | d4ef19ef17bd |
| children | 2a77a461cc33 |
comparison
equal
deleted
inserted
replaced
| 255:d4ef19ef17bd | 256:0fb85acfa9e4 |
|---|---|
| 1 <html><head> | 1 <html><head> |
| 2 <title>Roundup: an Issue-Tracking System for Knowledge Workers</title> | 2 <title>Roundup: an Issue-Tracking System for Knowledge Workers</title> |
| 3 </head><body> | 3 </head><body> |
| 4 | 4 |
| 5 <h1 align=center>Roundup</h1> | 5 <h1 align=center>Roundup</h1> |
| 6 <h3 align=center>An Issue-Tracking System for Knowledge Workers</h3> | 6 <h3 align=center>An Issue-Tracking System for Knowledge Workers</h2> |
| 7 | 7 |
| 8 <h2>Contents</h2> | 8 <h1>Contents</h1> |
| 9 | 9 |
| 10 <ul> | 10 <ul> |
| 11 <li><a href="overview.html">Overview</a> (Initial submission to SC Track) | 11 <li><a href="overview.html">Overview</a> (Initial submission to SC Track) |
| 12 <li><a href="#installation">Installation</a> | 12 <li><a href="#installation">Installation</a> |
| 13 <ul> | 13 <ul> |
| 38 <li><a href="spec.html">Roundup's Design Document</a> ("Implementation Guide") | 38 <li><a href="spec.html">Roundup's Design Document</a> ("Implementation Guide") |
| 39 <li><a href="#ack">Acknowledgements</a> | 39 <li><a href="#ack">Acknowledgements</a> |
| 40 </ul> | 40 </ul> |
| 41 | 41 |
| 42 <p><hr> | 42 <p><hr> |
| 43 <h2><a name="installation">Installation</a></h2> | 43 <h1><a name="installation">Installation</a></h1> |
| 44 | 44 |
| 45 | 45 |
| 46 <h3><a name="requires">Prerequisites</a></h3> | 46 <h2><a name="requires">Prerequisites</a></h2> |
| 47 | 47 |
| 48 <dl> | 48 <dl> |
| 49 <dt>Either: | 49 <dt>Either: |
| 50 <dd>Python 2.0 with pydoc installed. See http://www.lfw.org/ for pydoc. | 50 <dd>Python 2.0 with pydoc installed. See http://www.lfw.org/ for pydoc. |
| 51 <dt>or | 51 <dt>or |
| 55 Download the latest version from | 55 Download the latest version from |
| 56 <a href="http://www.python.org/">http://www.python.org/</a>. | 56 <a href="http://www.python.org/">http://www.python.org/</a>. |
| 57 | 57 |
| 58 | 58 |
| 59 | 59 |
| 60 <h3><a name="getting">Getting Roundup</a></h3> | 60 <h2><a name="getting">Getting Roundup</a></h2> |
| 61 | 61 |
| 62 Download the latest version from | 62 Download the latest version from |
| 63 <a href="http://roundup.sf.net/">http://roundup.sf.net/</a>. | 63 <a href="http://roundup.sf.net/">http://roundup.sf.net/</a>. |
| 64 | 64 |
| 65 | 65 |
| 66 <h3><a name="installing">Installing Roundup</a></h3> | 66 <h2><a name="installing">Installing Roundup</a></h2> |
| 67 | 67 |
| 68 <ol> | 68 <ol> |
| 69 <li>Run: | 69 <li>Run: |
| 70 <br><tt>python setup.py install</tt> | 70 <br><tt>python setup.py install</tt> |
| 71 <li>If you would prefer the scripts installed in somewhere other than | 71 <li>If you would prefer the scripts installed in somewhere other than |
| 77 <br>gives all the options available for installation. | 77 <br>gives all the options available for installation. |
| 78 </ol> | 78 </ol> |
| 79 | 79 |
| 80 | 80 |
| 81 <p><hr> | 81 <p><hr> |
| 82 <h2><a name="starting">Getting Started</a></h2> | 82 <h1><a name="starting">Getting Started</a></h1> |
| 83 | 83 |
| 84 The following instructions assume that you have installed roundup. If you | 84 The following instructions assume that you have installed roundup. If you |
| 85 haven't, you may still proceed - just preface all commands with "./" | 85 haven't, you may still proceed - just preface all commands with "./" |
| 86 ie. "./roundup-admin init". | 86 ie. "./roundup-admin init". |
| 87 | 87 |
| 88 | 88 |
| 89 <h3><a name="instance">The Instance</a></h3> | 89 <h2><a name="instance">The Instance</a></h2> |
| 90 | 90 |
| 91 We'll be referring to the term <em>instance</em> a lot from now on. An | 91 We'll be referring to the term <em>instance</em> a lot from now on. An |
| 92 instance is | 92 instance is |
| 93 a directory in your filesystem that is where all the information about a | 93 a directory in your filesystem that is where all the information about a |
| 94 live issue tracker database is stored. The data that is entered as issues, | 94 live issue tracker database is stored. The data that is entered as issues, |
| 111 each instance in use. | 111 each instance in use. |
| 112 </ol> | 112 </ol> |
| 113 | 113 |
| 114 Instances are created using the <tt>roundup-admin</tt> tool. | 114 Instances are created using the <tt>roundup-admin</tt> tool. |
| 115 | 115 |
| 116 <h3><a name="startcmd">Command Line Tool</a></h3> | 116 <h2><a name="startcmd">Command Line Tool</a></h2> |
| 117 | 117 |
| 118 To initiliase a new instance, run <tt>roundup-admin init</tt>. You will be | 118 To initiliase a new instance, run <tt>roundup-admin init</tt>. You will be |
| 119 asked a series of questions: | 119 asked a series of questions: |
| 120 | 120 |
| 121 <ol> | 121 <ol> |
| 151 We run the instance as group "issue_tracker" and add the mail and web user | 151 We run the instance as group "issue_tracker" and add the mail and web user |
| 152 ("mail" and "apache" on our RedHat 7.1 system) to that group, as well as | 152 ("mail" and "apache" on our RedHat 7.1 system) to that group, as well as |
| 153 any admin people. | 153 any admin people. |
| 154 | 154 |
| 155 | 155 |
| 156 <h3><a name="startweb">E-Mail Interface</a></h3> | 156 <h2><a name="startweb">E-Mail Interface</a></h2> |
| 157 Set up a mail alias called "issue_tracker" as: | 157 Set up a mail alias called "issue_tracker" as: |
| 158 <blockquote> | 158 <blockquote> |
| 159 <tt>|/usr/bin/python /usr/local/bin/roundup-mailgw | 159 <tt>|/usr/bin/python /usr/local/bin/roundup-mailgw |
| 160 <instance_home></tt> | 160 <instance_home></tt> |
| 161 </blockquote> | 161 </blockquote> |
| 174 <tt>echo test |mail -s '[issue] test' issue_tracker@your.domain</tt> | 174 <tt>echo test |mail -s '[issue] test' issue_tracker@your.domain</tt> |
| 175 </blockquote> | 175 </blockquote> |
| 176 | 176 |
| 177 | 177 |
| 178 | 178 |
| 179 <h3><a name="startweb">Web Interface</a></h3> | 179 <h2><a name="startweb">Web Interface</a></h2> |
| 180 This software will work through apache or stand-alone. | 180 This software will work through apache or stand-alone. |
| 181 <p> | 181 <p> |
| 182 <strong>Stand-alone:</strong> | 182 <strong>Stand-alone:</strong> |
| 183 <ol> | 183 <ol> |
| 184 <li>Edit roundup-server at the top - ROUNDUP_INSTANCE_HOMES needs to know | 184 <li>Edit roundup-server at the top - ROUNDUP_INSTANCE_HOMES needs to know |
| 210 <li>Load up the page <tt>/roundup/roundup.cgi/<instance name>/index</tt> where | 210 <li>Load up the page <tt>/roundup/roundup.cgi/<instance name>/index</tt> where |
| 211 instance name is the name you nominated in ROUNDUP_INSTANCE_HOMES. | 211 instance name is the name you nominated in ROUNDUP_INSTANCE_HOMES. |
| 212 </ol> | 212 </ol> |
| 213 | 213 |
| 214 | 214 |
| 215 <h3><a name="users">Users</a></h3> | 215 <h2><a name="users">Users</a></h2> |
| 216 To add users, use one of the following interfaces: | 216 To add users, use one of the following interfaces: |
| 217 | 217 |
| 218 <ol> | 218 <ol> |
| 219 <li>On the web, access the URL <tt>.../<instance name>/newuser</tt> | 219 <li>On the web, access the URL <tt>.../<instance name>/newuser</tt> |
| 220 to bring up a form which may be used to add a new user. | 220 to bring up a form which may be used to add a new user. |
| 228 created for that user. | 228 created for that user. |
| 229 </ol> | 229 </ol> |
| 230 | 230 |
| 231 | 231 |
| 232 | 232 |
| 233 <h3><a name="issues">Issues</a></h3> | 233 <h2><a name="issues">Issues</a></h2> |
| 234 To add issues, use one of the following interfaces: | 234 To add issues, use one of the following interfaces: |
| 235 | 235 |
| 236 <ol> | 236 <ol> |
| 237 <li>On the web, access the URL <tt>.../<instance name>/newissue</tt> | 237 <li>On the web, access the URL <tt>.../<instance name>/newissue</tt> |
| 238 to bring up a form which may be used to add a new issue. | 238 to bring up a form which may be used to add a new issue. |
| 245 will automatically created a new issue in the database using the | 245 will automatically created a new issue in the database using the |
| 246 contents of the e-mail. | 246 contents of the e-mail. |
| 247 </ol> | 247 </ol> |
| 248 | 248 |
| 249 <p><hr> | 249 <p><hr> |
| 250 <h2><a name="guide">User Guide</a></h2> | 250 <h1><a name="guide">User Guide</a></h1> |
| 251 <h3><a name="cmd">Command Line Tool</a></h3> | 251 <h2><a name="cmd">Command Line Tool</a></h2> |
| 252 | 252 |
| 253 Usage: | 253 Usage: |
| 254 <tt>roundup-admin [-i instance home] [-u login] [-c] <command> | 254 <tt>roundup-admin [-i instance home] [-u login] [-c] <command> |
| 255 <arguments></tt> | 255 <arguments></tt> |
| 256 | 256 |
| 395 <li>the -u command-line option | 395 <li>the -u command-line option |
| 396 </ul> | 396 </ul> |
| 397 If either the name or password is not supplied, they are obtained from the | 397 If either the name or password is not supplied, they are obtained from the |
| 398 command-line. | 398 command-line. |
| 399 | 399 |
| 400 <h3><a name="web">Web Interface</a></h3> | 400 <h2><a name="web">Web Interface</a></h2> |
| 401 T.B.D. | 401 T.B.D. |
| 402 | 402 |
| 403 <h3><a name="mail">E-Mail Gateway</a></h3> | 403 <h2><a name="mail">E-Mail Gateway</a></h2> |
| 404 | 404 |
| 405 Incoming messages are examined for multiple parts: | 405 Incoming messages are examined for multiple parts: |
| 406 <ul> | 406 <ul> |
| 407 <li>In a multipart/mixed message or part, each subpart is extracted and | 407 <li>In a multipart/mixed message or part, each subpart is extracted and |
| 408 examined. The text/plain subparts are assembled to form the textual | 408 examined. The text/plain subparts are assembled to form the textual |
| 411 and given "file" class nodes that are linked to the "msg" node. | 411 and given "file" class nodes that are linked to the "msg" node. |
| 412 <li>In a multipart/alternative message or part, we look for a text/plain | 412 <li>In a multipart/alternative message or part, we look for a text/plain |
| 413 subpart and ignore the other parts. | 413 subpart and ignore the other parts. |
| 414 </ul> | 414 </ul> |
| 415 | 415 |
| 416 <h4>Summary</h4> | 416 <h3>Summary</h3> |
| 417 The "summary" property on message nodes is taken from the first non-quoting | 417 The "summary" property on message nodes is taken from the first non-quoting |
| 418 section in the message body. The message body is divided into sections by | 418 section in the message body. The message body is divided into sections by |
| 419 blank lines. Sections where the second and all subsequent lines begin with | 419 blank lines. Sections where the second and all subsequent lines begin with |
| 420 a ">" or "|" character are considered "quoting sections". The first line of | 420 a ">" or "|" character are considered "quoting sections". The first line of |
| 421 the first non-quoting section becomes the summary of the message. | 421 the first non-quoting section becomes the summary of the message. |
| 422 | 422 |
| 423 <h4>Addresses</h4> | 423 <h3>Addresses</h3> |
| 424 All of the addresses in the To: and Cc: headers of the incoming message are | 424 All of the addresses in the To: and Cc: headers of the incoming message are |
| 425 looked up among the user nodes, and the corresponding users are placed in | 425 looked up among the user nodes, and the corresponding users are placed in |
| 426 the "recipients" property on the new "msg" node. The address in the From: | 426 the "recipients" property on the new "msg" node. The address in the From: |
| 427 header similarly determines the "author" property of the new "msg" | 427 header similarly determines the "author" property of the new "msg" |
| 428 node. The default handling for addresses that don't have corresponding | 428 node. The default handling for addresses that don't have corresponding |
| 430 address. (The web interface does not permit logins for users with no | 430 address. (The web interface does not permit logins for users with no |
| 431 passwords.) If we prefer to reject mail from outside sources, we can simply | 431 passwords.) If we prefer to reject mail from outside sources, we can simply |
| 432 register an auditor on the "user" class that prevents the creation of user | 432 register an auditor on the "user" class that prevents the creation of user |
| 433 nodes with no passwords. | 433 nodes with no passwords. |
| 434 | 434 |
| 435 <h4>Actions</h4> | 435 <h3>Actions</h3> |
| 436 The subject line of the incoming message is examined to determine whether | 436 The subject line of the incoming message is examined to determine whether |
| 437 the message is an attempt to create a new item or to discuss an existing | 437 the message is an attempt to create a new item or to discuss an existing |
| 438 item. A designator enclosed in square brackets is sought as the first thing | 438 item. A designator enclosed in square brackets is sought as the first thing |
| 439 on the subject line (after skipping any "Fwd:" or "Re:" prefixes). | 439 on the subject line (after skipping any "Fwd:" or "Re:" prefixes). |
| 440 | 440 |
| 445 If just an item class name is found there, we attempt to create a new item | 445 If just an item class name is found there, we attempt to create a new item |
| 446 of that class with its "messages" property initialized to contain the new | 446 of that class with its "messages" property initialized to contain the new |
| 447 "msg" node and its "files" property initialized to contain any new "file" | 447 "msg" node and its "files" property initialized to contain any new "file" |
| 448 nodes. | 448 nodes. |
| 449 | 449 |
| 450 <h4>Triggers</h4> | 450 <h3>Triggers</h3> |
| 451 Both cases may trigger detectors (in the first case we are calling the | 451 Both cases may trigger detectors (in the first case we are calling the |
| 452 set() method to add the message to the item's spool; in the second case we | 452 set() method to add the message to the item's spool; in the second case we |
| 453 are calling the create() method to create a new node). If an auditor raises | 453 are calling the create() method to create a new node). If an auditor raises |
| 454 an exception, the original message is bounced back to the sender with the | 454 an exception, the original message is bounced back to the sender with the |
| 455 explanatory message given in the exception. | 455 explanatory message given in the exception. |
| 456 | 456 |
| 457 <p><hr> | 457 <p><hr> |
| 458 <h2><a name="custom">Customising Roundup</a></h2> | 458 <h1><a name="custom">Customising Roundup</a></h1> |
| 459 | 459 |
| 460 Instances have the following structure: | 460 Instances have the following structure: |
| 461 <table> | 461 <table> |
| 462 <tr><td valign=top><strong>dbinit.py</strong></td> | 462 <tr><td valign=top><strong>dbinit.py</strong></td> |
| 463 <td>Holds the instance schema</td></tr> | 463 <td>Holds the instance schema</td></tr> |
| 475 <td>Auditors and reactors for this instance</td></tr> | 475 <td>Auditors and reactors for this instance</td></tr> |
| 476 <tr><td valign=top><strong>html/</strong></td> | 476 <tr><td valign=top><strong>html/</strong></td> |
| 477 <td>Web interface templates, images and style sheets</td></tr> | 477 <td>Web interface templates, images and style sheets</td></tr> |
| 478 </table> | 478 </table> |
| 479 | 479 |
| 480 <h3><a name="custinst">Instance Schema</a></h3> | 480 <h2><a name="custinst">Instance Schema</a></h2> |
| 481 An instance schema defines what data is stored in the instance's database. | 481 An instance schema defines what data is stored in the instance's database. |
| 482 The two schemas shipped with Roundup turn it into a typical software bug | 482 The two schemas shipped with Roundup turn it into a typical software bug |
| 483 tracker (the extended schema allowing for support issues as well as bugs). | 483 tracker (the extended schema allowing for support issues as well as bugs). |
| 484 Schemas are defined using Python code. The "classic" schema looks like | 484 Schemas are defined using Python code. The "classic" schema looks like |
| 485 this: | 485 this: |
| 520 issue = IssueClass(db, "issue", assignedto=Link("user"), | 520 issue = IssueClass(db, "issue", assignedto=Link("user"), |
| 521 topic=Multilink("keyword"), priority=Link("priority"), status=Link("status")) | 521 topic=Multilink("keyword"), priority=Link("priority"), status=Link("status")) |
| 522 issue.setkey('title') | 522 issue.setkey('title') |
| 523 </pre> | 523 </pre> |
| 524 | 524 |
| 525 <h4>Class, FileClass, IssueClass - creating a new information store</h4> | 525 <h3>Class, FileClass, IssueClass - creating a new information store</h3> |
| 526 A <em>Class</em> defines a particular class (or type) of data that will be | 526 A <em>Class</em> defines a particular class (or type) of data that will be |
| 527 stored in the database. In the instance above, we've defined 7 classes of | 527 stored in the database. In the instance above, we've defined 7 classes of |
| 528 information: | 528 information: |
| 529 <dl> | 529 <dl> |
| 530 <dt><strong>priority</strong> | 530 <dt><strong>priority</strong> |
| 587 and the value of the "activity" property is the date when any property on | 587 and the value of the "activity" property is the date when any property on |
| 588 the item was last edited (equivalently, these are the dates on the first | 588 the item was last edited (equivalently, these are the dates on the first |
| 589 and last records in the item's journal). The "creator" property holds a | 589 and last records in the item's journal). The "creator" property holds a |
| 590 link to the user that created the issue. | 590 link to the user that created the issue. |
| 591 | 591 |
| 592 <h4>setkey(property)</h4> | 592 <h3>setkey(property)</h3> |
| 593 Select a String property of the class to be the key property. The key | 593 Select a String property of the class to be the key property. The key |
| 594 property muse be unique, and allows references to the items in the class by | 594 property muse be unique, and allows references to the items in the class by |
| 595 the content of the key property. That is, we can refer to users by their | 595 the content of the key property. That is, we can refer to users by their |
| 596 username, e.g. let's say that there's an issue in roundup, issue 23. There's | 596 username, e.g. let's say that there's an issue in roundup, issue 23. There's |
| 597 also a user, richard who happens to be user 2. To assign an issue to him, | 597 also a user, richard who happens to be user 2. To assign an issue to him, |
| 604 <blockquote><tt>roundup-admin set issue | 604 <blockquote><tt>roundup-admin set issue |
| 605 assignedto=richard</tt></blockquote> | 605 assignedto=richard</tt></blockquote> |
| 606 <p> | 606 <p> |
| 607 Note, the same thing can be done in the web and e-mail interfaces. | 607 Note, the same thing can be done in the web and e-mail interfaces. |
| 608 | 608 |
| 609 <h4>create(information)</h4> | 609 <h3>create(information)</h3> |
| 610 Create an item in the database. This is generally used to create items in | 610 Create an item in the database. This is generally used to create items in |
| 611 the "definitional" classes like "priority" and "status". | 611 the "definitional" classes like "priority" and "status". |
| 612 | 612 |
| 613 <h3><a name="custweb">Web Interface</a></h3> | 613 <h2><a name="custweb">Web Interface</a></h2> |
| 614 | |
| 615 The web interface works behind the cgi-bin/roundup.cgi or roundup-server | |
| 616 scripts. In both cases, the scripts determine which instance is being | |
| 617 accessed (the first part of the URL path inside the scope of the CGI | |
| 618 handler) and pass control on to the instance interfaces.Client class which | |
| 619 handles the rest of the access through its main() method. This means that | |
| 620 you can do pretty much anything you want as a web interface to your | |
| 621 instance. | |
| 622 <p> | |
| 623 Most customisation of the web view can be done by modifying the templates | |
| 624 in the instance html directory. These are divided into index, item and | |
| 625 newitem views. The newitem view is optional - the item view will be used if | |
| 626 the newitem view doesn't exist. | |
| 627 | |
| 628 <p> | |
| 629 <em>Next bit cut straight from the implementation guide</em> | |
| 630 | |
| 631 <p> | |
| 632 <h3>8.2. Displaying Properties</h3> | |
| 633 | |
| 634 <p>Properties appear in the user interface in three contexts: | |
| 635 in indices, in editors, and as filters. For each type of | |
| 636 property, there are several display possibilities. For example, | |
| 637 in an index view, a string property may just be printed as | |
| 638 a plain string, but in an editor view, that property should | |
| 639 be displayed in an editable field. | |
| 640 | |
| 641 <p>The display of a property is handled by functions in | |
| 642 a <tt>displayers</tt> module. Each function accepts at | |
| 643 least three standard arguments -- the database, class name, | |
| 644 and node id -- and returns a chunk of HTML. | |
| 645 | |
| 646 <p>Displayer functions are triggered by <tt><display></tt> | |
| 647 tags in templates. The <tt>call</tt> attribute of the tag | |
| 648 provides a Python expression for calling the displayer | |
| 649 function. The three standard arguments are inserted in | |
| 650 front of the arguments given. For example, the occurrence of | |
| 651 | |
| 652 <blockquote><pre><small | |
| 653 > <display call="plain('status', max=30)"> | |
| 654 </small></pre></blockquote> | |
| 655 | |
| 656 in a template triggers a call to | |
| 657 | |
| 658 <blockquote><pre><small | |
| 659 > plain(db, "issue", 13, "status", max=30) | |
| 660 </small></pre></blockquote> | |
| 661 | |
| 662 when displaying item 13 in the "issue" class. The displayer | |
| 663 functions can accept extra arguments to further specify | |
| 664 details about the widgets that should be generated. By defining new | |
| 665 displayer functions, the user interface can be highly customized. | |
| 666 | |
| 667 <p>Some of the standard displayer functions include: | |
| 668 | |
| 669 <ul> | |
| 670 <li><strong>plain</strong>: display a String property directly; | |
| 671 display a Date property in a specified time zone with an option | |
| 672 to omit the time from the date stamp; for a Link or Multilink | |
| 673 property, display the key strings of the linked nodes (or the | |
| 674 ids if the linked class has no key property) | |
| 675 | |
| 676 <li><strong>field</strong>: display a property like the | |
| 677 <strong>plain</strong> displayer above, but in a text field | |
| 678 to be edited | |
| 679 | |
| 680 <li><strong>menu</strong>: for a Link property, display | |
| 681 a menu of the available choices | |
| 682 | |
| 683 <li><strong>link</strong>: for a Link or Multilink property, | |
| 684 display the names of the linked nodes, hyperlinked to the | |
| 685 item views on those nodes | |
| 686 | |
| 687 <li><strong>count</strong>: for a Multilink property, display | |
| 688 a count of the number of links in the list | |
| 689 | |
| 690 <li><strong>reldate</strong>: display a Date property in terms | |
| 691 of an interval relative to the current date (e.g. "+ 3w", "- 2d"). | |
| 692 | |
| 693 <li><strong>download</strong>: show a Link("file") or Multilink("file") | |
| 694 property using links that allow you to download files | |
| 695 | |
| 696 <li><strong>checklist</strong>: for a Link or Multilink property, | |
| 697 display checkboxes for the available choices to permit filtering | |
| 698 </ul> | |
| 699 | |
| 700 <h3>8.3. Index Views</h3> | |
| 701 | |
| 702 <p>An index view contains two sections: a filter section | |
| 703 and an index section. | |
| 704 The filter section provides some widgets for selecting | |
| 705 which items appear in the index. The index section is | |
| 706 a table of items. | |
| 707 | |
| 708 <h4>8.3.1. Index View Specifiers</h4> | |
| 709 | |
| 710 <p>An index view specifier looks like this (whitespace | |
| 711 has been added for clarity): | |
| 712 | |
| 713 <blockquote><pre><small | |
| 714 >/issue?status=unread,in-progress,resolved& | |
| 715 topic=security,ui& | |
| 716 :group=+priority& | |
| 717 :sort=-activity& | |
| 718 :filters=status,topic& | |
| 719 :columns=title,status,fixer | |
| 720 </small></pre></blockquote> | |
| 721 | |
| 722 <p>The index view is determined by two parts of the | |
| 723 specifier: the layout part and the filter part. | |
| 724 The layout part consists of the query parameters that | |
| 725 begin with colons, and it determines the way that the | |
| 726 properties of selected nodes are displayed. | |
| 727 The filter part consists of all the other query parameters, | |
| 728 and it determines the criteria by which nodes | |
| 729 are selected for display. | |
| 730 | |
| 731 <p>The filter part is interactively manipulated with | |
| 732 the form widgets displayed in the filter section. The | |
| 733 layout part is interactively manipulated by clicking | |
| 734 on the column headings in the table. | |
| 735 | |
| 736 <p>The filter part selects the <em>union</em> of the | |
| 737 sets of items with values matching any specified Link | |
| 738 properties and the <em>intersection</em> of the sets | |
| 739 of items with values matching any specified Multilink | |
| 740 properties. | |
| 741 | |
| 742 <p>The example specifies an index of "issue" nodes. | |
| 743 Only items with a "status" of <em>either</em> | |
| 744 "unread" or "in-progres" or "resolved" are displayed, | |
| 745 and only items with "topic" values including <em>both</em> | |
| 746 "security" <em>and</em> "ui" are displayed. The items | |
| 747 are grouped by priority, arranged in ascending order; | |
| 748 and within groups, sorted by activity, arranged in | |
| 749 descending order. The filter section shows filters | |
| 750 for the "status" and "topic" properties, and the | |
| 751 table includes columns for the "title", "status", and | |
| 752 "fixer" properties. | |
| 753 | |
| 754 <p>Associated with each item class is a default | |
| 755 layout specifier. The layout specifier in the above | |
| 756 example is the default layout to be provided with | |
| 757 the default bug-tracker schema described above in | |
| 758 section 4.4. | |
| 759 | |
| 760 <h4>8.3.2. Filter Section</h4> | |
| 761 | |
| 762 <p>The template for a filter section provides the | |
| 763 filtering widgets at the top of the index view. | |
| 764 Fragments enclosed in <tt><property></tt>...<tt></property></tt> | |
| 765 tags are included or omitted depending on whether the | |
| 766 view specifier requests a filter for a particular property. | |
| 767 | |
| 768 <p>Here's a simple example of a filter template. | |
| 769 | |
| 770 <blockquote><pre><small | |
| 771 ><property name=status> | |
| 772 <display call="checklist('status')"> | |
| 773 </property> | |
| 774 <br> | |
| 775 <property name=priority> | |
| 776 <display call="checklist('priority')"> | |
| 777 </property> | |
| 778 <br> | |
| 779 <property name=fixer> | |
| 780 <display call="menu('fixer')"> | |
| 781 </property></small></pre></blockquote> | |
| 782 | |
| 783 <h4>8.3.3. Index Section</h4> | |
| 784 | |
| 785 <p>The template for an index section describes one row of | |
| 786 the index table. | |
| 787 Fragments enclosed in <tt><property></tt>...<tt></property></tt> | |
| 788 tags are included or omitted depending on whether the | |
| 789 view specifier requests a column for a particular property. | |
| 790 The table cells should contain <tt><display></tt> tags | |
| 791 to display the values of the item's properties. | |
| 792 | |
| 793 <p>Here's a simple example of an index template. | |
| 794 | |
| 795 <blockquote><pre><small | |
| 796 ><tr> | |
| 797 <property name=title> | |
| 798 <td><display call="plain('title', max=50)"></td> | |
| 799 </property> | |
| 800 <property name=status> | |
| 801 <td><display call="plain('status')"></td> | |
| 802 </property> | |
| 803 <property name=fixer> | |
| 804 <td><display call="plain('fixer')"></td> | |
| 805 </property> | |
| 806 </tr></small></pre></blockquote> | |
| 807 | |
| 808 <h4>8.3.4. Sorting</h4> | |
| 809 | |
| 810 <p>String and Date values are sorted in the natural way. | |
| 811 Link properties are sorted according to the value of the | |
| 812 "order" property on the linked nodes if it is present; or | |
| 813 otherwise on the key string of the linked nodes; or | |
| 814 finally on the node ids. Multilink properties are | |
| 815 sorted according to how many links are present. | |
| 816 | |
| 817 <h3>8.4. Item Views</h3> | |
| 818 | |
| 819 <p>An item view contains an editor section and a spool section. | |
| 820 At the top of an item view, links to superseding and superseded | |
| 821 items are always displayed. | |
| 822 | |
| 823 <h4>8.4.1. Item View Specifiers</h4> | |
| 824 | |
| 825 <p>An item view specifier is simply the item's designator: | |
| 826 | |
| 827 <blockquote><pre><small | |
| 828 >/patch23 | |
| 829 </small></pre></blockquote> | |
| 830 | |
| 831 <h4>8.4.2. Editor Section</h4> | |
| 832 | |
| 833 <p>The editor section is generated from a template | |
| 834 containing <tt><display></tt> tags to insert | |
| 835 the appropriate widgets for editing properties. | |
| 836 | |
| 837 <p>Here's an example of a basic editor template. | |
| 838 | |
| 839 <blockquote><pre><small | |
| 840 ><table> | |
| 841 <tr> | |
| 842 <td colspan=2> | |
| 843 <display call="field('title', size=60)"> | |
| 844 </td> | |
| 845 </tr> | |
| 846 <tr> | |
| 847 <td> | |
| 848 <display call="field('fixer', size=30)"> | |
| 849 </td> | |
| 850 <td> | |
| 851 <display call="menu('status')> | |
| 852 </td> | |
| 853 </tr> | |
| 854 <tr> | |
| 855 <td> | |
| 856 <display call="field('nosy', size=30)"> | |
| 857 </td> | |
| 858 <td> | |
| 859 <display call="menu('priority')> | |
| 860 </td> | |
| 861 </tr> | |
| 862 <tr> | |
| 863 <td colspan=2> | |
| 864 <display call="note()"> | |
| 865 </td> | |
| 866 </tr> | |
| 867 </table> | |
| 868 </small></pre></blockquote> | |
| 869 | |
| 870 <p>As shown in the example, the editor template can also | |
| 871 request the display of a "note" field, which is a | |
| 872 text area for entering a note to go along with a change. | |
| 873 | |
| 874 <p>When a change is submitted, the system automatically | |
| 875 generates a message describing the changed properties. | |
| 876 The message displays all of the property values on the | |
| 877 item and indicates which ones have changed. | |
| 878 An example of such a message might be this: | |
| 879 | |
| 880 <blockquote><pre><small | |
| 881 >title: Polly Parrot is dead | |
| 882 priority: critical | |
| 883 status: unread -> in-progress | |
| 884 fixer: (none) | |
| 885 keywords: parrot,plumage,perch,nailed,dead | |
| 886 </small></pre></blockquote> | |
| 887 | |
| 888 <p>If a note is given in the "note" field, the note is | |
| 889 appended to the description. The message is then added | |
| 890 to the item's message spool (thus triggering the standard | |
| 891 detector to react by sending out this message to the nosy list). | |
| 892 | |
| 893 <h4>8.4.3. Spool Section</h4> | |
| 894 | |
| 895 <p>The spool section lists messages in the item's "messages" | |
| 896 property. The index of messages displays the "date", "author", | |
| 897 and "summary" properties on the message nodes, and selecting a | |
| 898 message takes you to its content. | |
| 614 | 899 |
| 615 <p><hr> | 900 <p><hr> |
| 616 <h2><a name="ack">Acknowledgements</a></h2> | 901 <h1><a name="ack">Acknowledgements</a></h1> |
| 617 | 902 |
| 618 Go Ping, you rock! Also, go Bizar Software for letting me implement this | 903 Go Ping, you rock! Also, go Bizar Software for letting me implement this |
| 619 system on their time. | 904 system on their time. |
| 620 | 905 |
| 621 <p> </p> | 906 <p> </p> |
| 622 <hr> | 907 <hr> |
| 623 $Id: index.html,v 1.4 2001-09-29 23:48:06 richard Exp $ | 908 $Id: index.html,v 1.5 2001-09-30 01:19:22 richard Exp $ |
| 624 <p> </p> | 909 <p> </p> |
| 625 | 910 |
| 626 </body></html> | 911 </body></html> |
| 627 | 912 |
