CalendarWidget

From Request Tracker Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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.com. (DynArch Calendar page)
  • Unpack the downloaded file in `NoAuth/js`, I also renamed it to remove the version number
cd NoAuth/js
unzip /tmp/jscalendar-1.0.zip
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">
  Calendar.setup({
      inputField: "<%$Name%>",
      ifFormat:   "%Y-%m-%d %H:%M",
      showsTime:  true,
      button:     "<%$Name%>_date_button",
  });
  </SCRIPT>
  
  <%init>
  unless ((defined $Default) or
      ($current <= 0)) {
      my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                              localtime($current);
          $Default = sprintf("%04d-%02d-%02d %02d:%02d",
                             $year+1900,$mon+1,$mday,
                             $hour,$min);
  }
  
  unless ($Name) {
      $Name = $menu_prefix. "_Date";
  }
  </%init>
  
  <%args>
  
  $ShowTime => undef
  $menu_prefix=>''
  $current=>time
  $Default => undef
  $Name => undef
  $Size => 16
  </%args>
  
  

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.

COMMENTS:

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">
Calendar.setup({
    inputField: "<%$Name%>",
    ifFormat:   "%Y-%m-%d %H:%M",
    showsTime:  true,
    button:     "<%$Name%>_date_button"
});
</SCRIPT>

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>
  +
   <script>
   function hideshow(num) {
       idstring = "element-" + num;
  
  
  

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

Ian Goodacre