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 &lt;instance_home&gt;</tt> 160 &lt;instance_home&gt;</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/&lt;instance name&gt;/index</tt> where 210 <li>Load up the page <tt>/roundup/roundup.cgi/&lt;instance name&gt;/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>.../&lt;instance name&gt;/newuser</tt> 219 <li>On the web, access the URL <tt>.../&lt;instance name&gt;/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>.../&lt;instance name&gt;/newissue</tt> 237 <li>On the web, access the URL <tt>.../&lt;instance name&gt;/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] &lt;command&gt; 254 <tt>roundup-admin [-i instance home] [-u login] [-c] &lt;command&gt;
255 &lt;arguments&gt;</tt> 255 &lt;arguments&gt;</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 "&gt;" or "|" character are considered "quoting sections". The first line of 420 a "&gt;" 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>&lt;display&gt;</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 > &lt;display call="plain('status', max=30)"&gt;
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&amp;
715 topic=security,ui&amp;
716 :group=+priority&amp;
717 :sort=-activity&amp;
718 :filters=status,topic&amp;
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>&lt;property&gt;</tt>...<tt>&lt;/property&gt;</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 >&lt;property name=status&gt;
772 &lt;display call="checklist('status')"&gt;
773 &lt;/property&gt;
774 &lt;br&gt;
775 &lt;property name=priority&gt;
776 &lt;display call="checklist('priority')"&gt;
777 &lt;/property&gt;
778 &lt;br&gt;
779 &lt;property name=fixer&gt;
780 &lt;display call="menu('fixer')"&gt;
781 &lt;/property&gt;</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>&lt;property&gt;</tt>...<tt>&lt;/property&gt;</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>&lt;display&gt;</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 >&lt;tr&gt;
797 &lt;property name=title&gt;
798 &lt;td&gt;&lt;display call="plain('title', max=50)"&gt;&lt;/td&gt;
799 &lt;/property&gt;
800 &lt;property name=status&gt;
801 &lt;td&gt;&lt;display call="plain('status')"&gt;&lt;/td&gt;
802 &lt;/property&gt;
803 &lt;property name=fixer&gt;
804 &lt;td&gt;&lt;display call="plain('fixer')"&gt;&lt;/td&gt;
805 &lt;/property&gt;
806 &lt;/tr&gt;</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>&lt;display&gt;</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 >&lt;table&gt;
841 &lt;tr&gt;
842 &lt;td colspan=2&gt;
843 &lt;display call="field('title', size=60)"&gt;
844 &lt;/td&gt;
845 &lt;/tr&gt;
846 &lt;tr&gt;
847 &lt;td&gt;
848 &lt;display call="field('fixer', size=30)"&gt;
849 &lt;/td&gt;
850 &lt;td&gt;
851 &lt;display call="menu('status')&gt;
852 &lt;/td&gt;
853 &lt;/tr&gt;
854 &lt;tr&gt;
855 &lt;td&gt;
856 &lt;display call="field('nosy', size=30)"&gt;
857 &lt;/td&gt;
858 &lt;td&gt;
859 &lt;display call="menu('priority')&gt;
860 &lt;/td&gt;
861 &lt;/tr&gt;
862 &lt;tr&gt;
863 &lt;td colspan=2&gt;
864 &lt;display call="note()"&gt;
865 &lt;/td&gt;
866 &lt;/tr&gt;
867 &lt;/table&gt;
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 -&gt; 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>&nbsp;</p> 906 <p>&nbsp;</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>&nbsp;</p> 909 <p>&nbsp;</p>
625 910
626 </body></html> 911 </body></html>
627 912

Roundup Issue Tracker: http://roundup-tracker.org/