diff options
Diffstat (limited to 'rt/docs/design_docs')
-rw-r--r-- | rt/docs/design_docs/3.3-schema-redesign.txt | 57 | ||||
-rw-r--r-- | rt/docs/design_docs/cvs_integration | 4 | ||||
-rw-r--r-- | rt/docs/design_docs/link-definitions.txt | 2 | ||||
-rw-r--r-- | rt/docs/design_docs/realflow.txt | 191 | ||||
-rw-r--r-- | rt/docs/design_docs/rt-mvc | 32 |
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 + |