import rt 2.0.14
[freeside.git] / rt / docs / design_docs / local_hacking
diff --git a/rt/docs/design_docs/local_hacking b/rt/docs/design_docs/local_hacking
new file mode 100644 (file)
index 0000000..c06d112
--- /dev/null
@@ -0,0 +1,32 @@
+To facilitate local hacking, RT needs a mechanism to allow site administrators
+to easily add HTML templates for the web ui and to replace sections
+of code in RT's core modules _without_ having to modify those modules
+
+We'll use several methods to achieve this goal.
+
+       Webui
+               HTML::Mason allows users to create multiple
+component hierarchies.  RT should ship with a local component root
+defined and available. This root should be configured as the "primary"
+component root.
+
+
+       Core modules
+
+       This gets a bit trickier. we want to allow people to trivially
+subclass core modules and to use those subclasses throughout the code.
+
+The way we're going to handle this is by setting up a number of subroutines
+in config.pm that look something like this:
+
+sub NewTicketObj {
+       eval "require $TicketClass";
+       my $object = new $TicketClass;
+       return ($object);
+}
+
+# This variable is used for ref type checking
+$TicketClass = "RT::Ticket";
+
+we could use an eval around the require and thus completely avoid specifying
+the object in two places. which feels like a win. but i'm worried about perf.