summaryrefslogtreecommitdiff
path: root/rt/docs
diff options
context:
space:
mode:
authorivan <ivan>2005-10-15 09:11:20 +0000
committerivan <ivan>2005-10-15 09:11:20 +0000
commitd4d0590bef31071e8809ec046717444b95b3f30a (patch)
treeee1236da50578390d2642114f28eaed99a5efb18 /rt/docs
parentd39d52aac8f38ea9115628039f0df5aa3ac826de (diff)
import rt 3.4.4
Diffstat (limited to 'rt/docs')
-rw-r--r--rt/docs/design_docs/3.3-schema-redesign.txt57
-rw-r--r--rt/docs/design_docs/cvs_integration4
-rw-r--r--rt/docs/design_docs/link-definitions.txt2
-rw-r--r--rt/docs/design_docs/realflow.txt191
-rw-r--r--rt/docs/design_docs/rt-mvc32
-rw-r--r--rt/docs/rt3-schema-relationships.dot44
6 files changed, 309 insertions, 21 deletions
diff --git a/rt/docs/design_docs/3.3-schema-redesign.txt b/rt/docs/design_docs/3.3-schema-redesign.txt
new file mode 100644
index 000000000..518eccd4d
--- /dev/null
+++ b/rt/docs/design_docs/3.3-schema-redesign.txt
@@ -0,0 +1,57 @@
+-- --------------------------------------- --
+-- RT 3.3 Schema redesign v7: 2004-11-08 --
+-- --------------------------------------- --
+
+TABLE CustomFields (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ Name varchar(200) NULL ,
+ Type varchar(200) NULL , -- Changed: see MaxValues below
+ MaxValues integer, -- New: 1 = Single, 0 = Multiple
+ Pattern varchar(255) NULL , -- New: regex to validate against
+ Repeated int2 NOT NULL DEFAULT 0 , -- New: repeated table entry
+ LookupType varchar(255) NOT NULL, -- New: "RT::Queue-RT::Ticket"
+ Description varchar(255) NULL ,
+ SortOrder integer NOT NULL DEFAULT 0 , -- only used on "pick CF" screen
+)
+
+-- This table replaces the "Queue" field in CustomFields
+TABLE ObjectCustomFields (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ CustomField int NOT NULL , -- CustomField ID
+ ObjectId integer NOT NULL, -- Final id of toplevel parent, or
+ -- the object itself if ParentType
+ -- is empty; 0 means global as usual
+ SortOrder integer NOT NULL DEFAULT 0 , -- this is used to sort the CFs
+);
+
+-- This table replaces TicketCustomFieldValues
+TABLE ObjectCustomFieldValues (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ CustomField int NOT NULL ,
+ ObjectType varchar(255) NOT NULL, -- Final target of the Object
+ ObjectId int NOT NULL , -- New: replaces the "Ticket" field
+ SortOrder integer NOT NULL DEFAULT 0 , -- New: for Repeated fields
+
+ Content varchar(255) NULL ,
+ LargeContent LONGTEXT NULL, -- New: data longer than 255 bytes
+ ContentType varchar(80) NULL, -- New: MIME type of LargeContent
+ ContentEncoding varchar(80) NULL , -- New: for binary LargeContent
+ Disabled int2 NOT NULL DEFAULT 0 , -- New: whether this is deleted
+)
+
+TABLE Transactions (
+ id INTEGER NOT NULL AUTO_INCREMENT,
+ ObjectType varchar(255) NULL, -- Final target of the Object
+ ObjectId integer NOT NULL DEFAULT 0 , -- New: replaces the "Ticket" field
+ TimeTaken integer NOT NULL DEFAULT 0 ,
+ Type varchar(20) NULL ,
+ Field varchar(40) NULL ,
+ OldValue varchar(255) NULL ,
+ NewValue varchar(255) NULL ,
+ ReferenceType varchar(255) NULL, -- NeW: Currently "RT::OCFV" only
+ OldReference integer NULL , -- New: Id of ReferenceType
+ NewReference integer NULL , -- New: Id of ReferenceType
+ Data varchar(255) NULL ,
+)
+
+-- vim: filetype=mysql shiftwidth=4 expandtab
diff --git a/rt/docs/design_docs/cvs_integration b/rt/docs/design_docs/cvs_integration
index 35c8737ed..45a758fbe 100644
--- a/rt/docs/design_docs/cvs_integration
+++ b/rt/docs/design_docs/cvs_integration
@@ -85,14 +85,14 @@ marc: I think the idea is to force you to
mention the ticket closing in the commit message. ()
jesse@FSCK.COM: but yeah, state changing
- and 'update messages' are seperate concepts that should both be
+ and 'update messages' are separate concepts that should both be
supported. ()
jesse@FSCK.COM: part of the idea is to
drag the commit message into the BTS ()
jhawk: Err, I think it quite frequent that I want
- to put seperate info in both the commit message and the ticket system,
+ to put separate info in both the commit message and the ticket system,
and entering them at the same time seems cool. ()
jesse@FSCK.COM: ok. noted. I'll see if
diff --git a/rt/docs/design_docs/link-definitions.txt b/rt/docs/design_docs/link-definitions.txt
index 30b903567..e109744cf 100644
--- a/rt/docs/design_docs/link-definitions.txt
+++ b/rt/docs/design_docs/link-definitions.txt
@@ -92,7 +92,7 @@ For 2.0, those Linking actions should be supported:
Based on user feedback, merged tickets will be displayed as the same ticket
within RT's user interfaces. but the original tickets' transactions will be
-kept seperated in the database. this may require some magic.
+kept separated in the database. this may require some magic.
4. RefersTo / No Action link (linking)
diff --git a/rt/docs/design_docs/realflow.txt b/rt/docs/design_docs/realflow.txt
new file mode 100644
index 000000000..3717e273b
--- /dev/null
+++ b/rt/docs/design_docs/realflow.txt
@@ -0,0 +1,191 @@
+- I have a MonitoredQueue that sets tickets to "Monitored"
+ if its subject matches /monitored/.
+
+- I want to have a kind of Ticket that are 'Monitored'.
+- I want all monitored tickets, when they are overdue for
+ 14 days, to:
+ - send notification to manager
+ - mark as stalled
+- I want all monitored tickets, when they are overdue for
+ 28 days, to:
+ - mark as rejected
+- I want to query all tickets that are monitored as such
+- I want to modify 14 => 15 and have it affect all existing
+ tickets that are monitored
+
+{
+- I want to add a new "overdue for 27 days, add a 'ultimatum'
+ correspondence to it" rule for all monitored tickets.
+- I want to add a new "overdue for 27 days, add a 'ultimatum'
+ correspondence to it" rule for all _new_ monitored tickets
+ without affecting existing ones.
+}
+
+- The user of OrderRequest queue needs to fill a numeric "CF",
+ called "Price".
+- On creation, it needs to create following approvals:
+ - "Manager" approval if CF.Price is > 1000
+ - "President" approval if CF.Price is > 2000
+- When all of "M", "P" are resolved (if any, or if there were none
+ to begin with), Create a new approval, "Finance".
+- If any approvals above is rejected, reject the original ticket.
+- If "Finance" is resolved, resolve original ticket.
+- If "Finance" is rejected, create an approval for "CEO".
+- If "CEO" is resolved, resolve the original ticket.
+- If "CEO" is rejected, reject the original ticket.
+
+[RuleAction CreateTicketWithRuleset]
+ -> ReleaseMyLockOnRuleset $ruleset
+ -> UnlessLockOnRuleset $ruleset
+ # i.e. if no active tickets still have a lock on it
+ -> ForceCreateTicketWithRuleset $ruleset
+
+[Queue OrderRequest]
+ -> Condition: OnCreate
+ Action: AddTicketRuleSet "PurchaseApproval"
+ # Triggers immediately
+
+[RuleSet: PurchaseApproval]
+ -> Condition: OnCreate
+ Condition: CF.Price > 1000
+ Action: CreateTicketWithRuleset "ManagerApproval"
+ -> Condition: OnCreate
+ Condition: CF.Price > 2000
+ Action: CreateTicketWithRuleset "PresidentApproval"
+ -> Condition: OnCreate
+ Action: CreateTicketWithRuleset "FinanceApproval"
+ -> Condition: OnReject
+ Action: DeleteTree
+
+[RuleSet: ManagerApproval]
+ -> Condition: OnCreate
+ Action: Prohibit Ruleset "FinanceApproval"
+ -> Condition: OnResolve
+ Action: CreateTicketWithRuleset "FinanceApproval"
+ -> Condition: OnReject
+ Action: RejectTicket TOP
+
+[RuleSet: PresidentApproval]
+ -> Condition: OnCreate
+ Action: Prohibit CreateTicketWithRuleset "FinanceApproval"
+ -> Condition: OnResolve
+ Action: CreateTicketWithRuleset "FinanceApproval"
+ -> Condition: OnReject
+ Action: RejectTicket TOP
+
+[RuleSet: FinanceApproval]
+ -> Condition: OnCreate
+ Action: Prohibit RuleSet "CEOApproval"
+ -> Condition: OnResolve
+ Action: ResolveTicket TOP
+ -> Condition: OnReject
+ Action: CreateTicketWithRuleset "CEOApproval"
+
+[RuleSet: CEOApproval]
+ -> Condition: OnResolve
+ Action: ResolveTicket TOP
+ -> Condition: OnReject
+ Action: RejectTicket TOP
+
+
+
+Prohibit Ticket Operation:
+ Ruleset CEOApproval
+
+
+
+
+
+
+
+ ,--------.
+[TOP] --> [M] --> [F]
+ ` `-> [P] -'
+ `
+ `-> [X] --> [Y]
+
+
+[TOP] => [Approval]
+ -> Queue: B
+ -> Rule: yyy
+ -> Workflow: W
+ -> Stage: Approval
+ -> Rule: xxx
+
+isa_ok( $Approval->Type, 'RT::Ticket' );
+is( $Approval->Workflow->Name, 'W' );
+is( $Approval->Stage->Name, 'Approval' );
+
+[Queue: A]
+ -> Workflow: W
+
+[Workflow: W]
+ -> Stage: TOP
+ -> Stage: Approval
+ -> Stage: SUCCESS
+ -> Stage: FAIL
+
+"RuleCollections"
+
+[Stage: TOP]
+ -> Rule: OnCreate RunStage Approval
+
+ok( TicketA->Rules->HasEntry($ApprovalRule) )
+ok( TicketB->Rules->HasEntry($ApprovalRule) )
+
+[Rule: Approval]
+ -> Rule: OnResolve RunStage SUCCESS
+ -> Rule: OnReject RunStage FAIL
+
+[Stage: SUCCESS]
+ -> Rule: OnCreate SetStatus('resolved') TOP
+
+[Stage: FAIL]
+ -> Rule: OnCreate SetStatus('rejected') TOP
+
+[Unassociated]
+ - Rule FOO: OnAnything {
+ CreateTicketIfNotBlocked StageFOO
+ AddLink DependedOnBy TOP to Stage1
+ AssignRule DoStage2 to Stage1
+ AssignRule DoStage3 to Stage1
+ }
+ - Rule BAR: OnAnything {
+ CreateTicketIfNotBlocked StageBAR
+ DoSomethingBizzare
+ }
+
+ ,==> [Stage0] ==>.
+ , .
+[TOP] ==> [Stage1] ==> [Stage3]
+ ` '
+ `==> [Stage2] ==>'
+
+OnTransaction:
+ $self->Ticket->Queues->Scrips->Apply
+
+OnTransaction:
+ $self->Ticket->Queues->Scrips->Apply
+ ->Scrips->Apply
+
+OnTransaction:
+ $self->Ticket->Queues->Scrips->Apply
+ ->Stages->Scrips->Apply
+
+[QueueX]
+ - Rule:
+ OnCreate:
+ RunRule FOO
+
+[QueueY]
+ - Rule:
+ OnWhatever:
+ RunRule FOO
+
+
+[TOP] => [Stage1] => [Stage2] => [END]
+ `- => [Stage3] => [END]
+ ` -> [Stage4]
+
+[Stages]
+ ->
diff --git a/rt/docs/design_docs/rt-mvc b/rt/docs/design_docs/rt-mvc
new file mode 100644
index 000000000..3518b7d9a
--- /dev/null
+++ b/rt/docs/design_docs/rt-mvc
@@ -0,0 +1,32 @@
+Goals:
+
+
+ Never write an init block for a page that just views/edits pages
+ No style embedded in view/edit pages
+
+ Validation / Error display and re-editing.
+
+
+Implementation.
+
+
+ For a given object's fields:
+
+ print a label for the field
+ print the current values for the field
+ print an edit widget for create
+ print an edit widget for update
+
+
+
+ for a given form buttons for "perform the action" "don't perform the main action"
+
+
+Edit widgets
+
+
+ text input
+ hidden
+ fixed enum as { dropdown, select multiple, sleect single, radio}
+ checkbox fixed enum
+
diff --git a/rt/docs/rt3-schema-relationships.dot b/rt/docs/rt3-schema-relationships.dot
index 77ed35f01..e290f8bcf 100644
--- a/rt/docs/rt3-schema-relationships.dot
+++ b/rt/docs/rt3-schema-relationships.dot
@@ -1,7 +1,7 @@
digraph g {
graph [
-rankdir = "LR",
-concentrate = true,
+rankdir = "RL",
+ concentrate = true,
ratio = auto
];
node [
@@ -11,40 +11,43 @@ shape = record, fontsize = 18
edge [
];
+"Records" [shape = record, fontsize = 18, label = "(Any RT::Record)" ];
+"Records" -> "Principals" [label = "Creator -> id"];
"ACL" [shape = record, fontsize = 18, label = "<col0> \N " ];
-"ACL" -> "Principals" [label="PrincipalId -> Id"];
-"ACL" -> "Principals" [label="DelegatedBy -> Id"];
-"ACL" -> "ACL" [label="DelegatedFrom -> Id"];
+"ACL" -> "Principals" [label="PrincipalId -> id"];
+"ACL" -> "Principals" [label="DelegatedBy -> id"];
+"ACL" -> "ACL" [label="DelegatedFrom -> id"];
"Attachments" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Attachments" -> "Transactions" [label="TransactionId -> id"];
"Attachments" -> "Attachments" [label="Parent -> id"];
"CachedGroupMemers" [shape = record, fontsize = 18, label = "<col0> \N " ];
-"CachedGroupMemers" -> "Groups" [label="GroupId -> Groups.id"];
-"CachedGroupMemers" -> "Principals" [label="MemberId -> Id"];
+"CachedGroupMemers" -> "Groups" [label="GroupId -> id", weight=2];
+"CachedGroupMemers" -> "Principals" [label="MemberId -> id"];
"CachedGroupMemers" -> "CachedGroupMemers" [label="Via -> id"];
-"CachedGroupMemers" -> "Groups" [label="ImmediateParentId -> Groups.id"];
+"CachedGroupMemers" -> "Groups" [label="ImmediateParentId -> id"];
"CustomFields" [shape = record, fontsize = 18, label = "<col0> \N " ];
-"CustomFields" -> "Queues" [label="Queue -> id"];
"CustomFieldValues" [shape = record, fontsize = 18, label = "<col0> \N " ];
"CustomFieldValues" -> "CustomFields" [label="CustomField -> id"];
"GroupMembers" [shape = record, fontsize = 18, label = "<col0> \N " ];
-"GroupMembers" -> "Groups" [label="GroupId => Groups.Id"];
-"GroupMembers" -> "Principals" [label="MemberId => Id"];
+"GroupMembers" -> "Groups" [label="GroupId -> id", weight=2];
+"GroupMembers" -> "Principals" [label="MemberId -> id", weight = 2];
"Groups" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Groups" -> "Principals" [label="Groups.id -> id"];
"Links" [shape = record, fontsize = 18, label = "<col0> \N " ];
-"Links" -> "Tickets" [label="LocalBase => id (usually)"];
-"Links" -> "Tickets" [label="LocalTarget => id (usually)"];
+"Links" -> "Tickets" [label="LocalBase => id (usually)", style="dotted"];
+"Links" -> "Tickets" [label="LocalTarget => id (usually)", style="dotted"];
"Principals" [shape = record, fontsize = 18, label = "<col0> \N " ];
+"Attributes" [shape = record, fontsize = 18, label = "<col0> \N " ];
+"Attributes" -> "Records" [label="ObjectId -> id"];
"Queues" [shape = record, fontsize = 18, label = "<col0> \N " ];
@@ -61,17 +64,22 @@ edge [
"Templates" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Templates" -> "Queues" [label ="Queue -> id" ];
-"TicketCustomFieldValues" [shape = record, fontsize = 18, label = "<col0> \N " ];
-"TicketCustomFieldValues" -> "Tickets" [label="Ticket -> id"];
-"TicketCustomFieldValues" -> "CustomFields" [label="CustomField -> id"];
+"ObjectCustomFields" [shape = record, fontsize = 18, label = "<col0> \N " ];
+"ObjectCustomFields" -> "CustomFields" [label="CustomField -> id"];
+"ObjectCustomFields" -> "Records" [label="ObjectId -> id"];
+
+"ObjectCustomFieldValues" [shape = record, fontsize = 18, label = "<col0> \N " ];
+"ObjectCustomFieldValues" -> "CustomFields" [label="CustomField -> id"];
+"ObjectCustomFieldValues" -> "Records" [label="ObjectId -> id"];
"Tickets" [shape = record, fontsize = 18, label = "<col0> \N " ];
"Tickets" -> "Tickets" [label="EffectiveId -> id"];
-"Tickets" -> "Queues" [label="Queue -> id"];
"Tickets" -> "Principals" [label="Owner -> id"];
+"Queues" -> "Tickets" [style="invis"];
+"Tickets" -> "Queues" [label="Queue -> id"];
"Transactions" [shape = record, fontsize = 18, label = "<col0> \N " ];
-"Transactions" -> "Tickets" [label="Ticket -> Id"];
+"Transactions" -> "Records" [label="ObjectId -> id"];
"Users" [shape = record, fontsize = 18, label = "<col0> \N " ];