summaryrefslogtreecommitdiff
path: root/rt/docs/design_docs
diff options
context:
space:
mode:
Diffstat (limited to 'rt/docs/design_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
5 files changed, 283 insertions, 3 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
+