From Request Tracker Wiki
Jump to navigation Jump to search

If you would like to use a Calendar widget with the date fields in RT, you can do the following. All of the file changes were done under the local RT3 Mason overlay, which is `/usr/local/lib/rt3/html` on my machine (Fedora Core 4). Note that this functionality is native in 3.8. Also note that this is NOT a calendar for Custom Fields.

  • Create a directory named `NoAuth/js`
cd /usr/local/lib/rt3/html
mkdir -p NoAuth/js
  • Download jscalendar from (DynArch Calendar page)
  • Unpack the downloaded file in `NoAuth/js`, I also renamed it to remove the version number
cd NoAuth/js
unzip /tmp/
mv jscalendar-1.0 jscalendar
  • Now, create a directory named `Elements` to modify the date selector
cd /usr/local/lib/rt3/html
mkdir -p Elements
  • I started by copying the contents of the `Elements/SelectDate` file distributed with RT and then modified it. Here's the final result:
<INPUT ID="<%$Name%>" NAME="<%$Name%>" VALUE="<%$Default%>" size=<%$Size%>>
  <BUTTON TYPE="reset" id="<%$Name%>_date_button">Choose...</BUTTON>
  <SCRIPT TYPE="text/javascript">
      inputField: "<%$Name%>",
      ifFormat:   "%Y-%m-%d %H:%M",
      showsTime:  true,
      button:     "<%$Name%>_date_button",
  unless ((defined $Default) or
      ($current <= 0)) {
      my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
          $Default = sprintf("%04d-%02d-%02d %02d:%02d",
  unless ($Name) {
      $Name = $menu_prefix. "_Date";
  $ShowTime => undef
  $Default => undef
  $Name => undef
  $Size => 16

Now, all the date fields should have a "Choose..." button next to them that pops open a calendar widget. You may need to restart the web server to force Mason to refresh the code cache. You might also want to use a button with an image, but I leave that as an exercise for the reader.


10 Nov 2006

Opera 8.54 reported syntax error, fixed by removing the "," at the end of the argument list in SelectDate, as follows:

<SCRIPT TYPE="text/javascript">
    inputField: "<%$Name%>",
    ifFormat:   "%Y-%m-%d %H:%M",
    showsTime:  true,
    button:     "<%$Name%>_date_button"

Also, installing this on rt 3.4.6 I had to add some links to the head of Header

*** 55,60 ****
  --- 55,70 ----
    <link media="all" rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/webrt.css" type="text/css" />
    <link media="print" rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/printrt.css" type="text/css" />
  + %#
  + %# 10 Nov 2006, Additions for Calendar popup
  + %#
  + <link rel="stylesheet" type="text/css"
  + href="<%$RT::WebPath%>/NoAuth/js/jscalendar/calendar-system.css"
  + title="calendar-system">
  + <script language="javascript" type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/jscalendar/calendar.js"></script>
  + <script language="javascript" type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/jscalendar/lang/calendar-en.js"></script>
  + <script language="javascript" type="text/javascript" src="<%$RT::WebPath%>/NoAuth/js/jscalendar/calendar-setup.js"></script>
   function hideshow(num) {
       idstring = "element-" + num;

Which I did by copying Header to local/html/Elements/Header and then editing it.

Ian Goodacre