r46427 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r46426‎ | r46427 | r46428 >
Date:05:34, 28 January 2009
Author:tstarling
Status:deferred
Tags:
Comment:
Patches against OTRS 2.4 CVS. The first 5 patches were taken from the live copy and modified for this version of OTRS, authorship is not certain but JeLuF probably had something to do with them. I'll document it in README.wikimedia when I find out. The secure mode patch is all my own work.
Modified paths:
  • /trunk/otrs (added) (history)
  • /trunk/otrs/README.wikimedia (added) (history)
  • /trunk/otrs/patches (added) (history)
  • /trunk/otrs/patches/10-tooltips.patch (added) (history)
  • /trunk/otrs/patches/20-ticket-number-search.patch (added) (history)
  • /trunk/otrs/patches/30-wm-brand.patch (added) (history)
  • /trunk/otrs/patches/40-user-tooltips.patch (added) (history)
  • /trunk/otrs/patches/50-one-click-spam.patch (added) (history)
  • /trunk/otrs/patches/60-really-secure-mode.patch (added) (history)
  • /trunk/otrs/patches/series (added) (history)
  • /trunk/otrs/var (added) (history)
  • /trunk/otrs/var/httpd (added) (history)
  • /trunk/otrs/var/httpd/htdocs (added) (history)
  • /trunk/otrs/var/httpd/htdocs/120px-Wikimedia_logo_text_RGB.svg.png (added) (history)
  • /trunk/otrs/var/httpd/htdocs/22px-Wikimedia-logo.svg.png (added) (history)
  • /trunk/otrs/var/httpd/htdocs/22px-Wikimedia_Community_Logo.svg.png (added) (history)
  • /trunk/otrs/var/httpd/htdocs/images (added) (history)
  • /trunk/otrs/var/httpd/htdocs/images/Standard (added) (history)
  • /trunk/otrs/var/httpd/htdocs/images/Standard/clock.gif (added) (history)
  • /trunk/otrs/var/httpd/htdocs/images/Standard/edittrash.png (added) (history)
  • /trunk/otrs/var/httpd/htdocs/images/Standard/notready.png (added) (history)
  • /trunk/otrs/var/httpd/htdocs/images/Standard/ready.png (added) (history)
  • /trunk/otrs/var/httpd/htdocs/images/Standard/searchX.gif (added) (history)
  • /trunk/otrs/var/httpd/htdocs/images/Standard/user.gif (added) (history)

Diff [purge]

Index: trunk/otrs/patches/30-wm-brand.patch
@@ -0,0 +1,159 @@
 2+Index: trunk/Kernel/Output/HTML/Standard/AgentNavigationBar.dtl
 3+===================================================================
 4+--- trunk.orig/Kernel/Output/HTML/Standard/AgentNavigationBar.dtl 2009-01-27 14:54:35.000000000 +1100
 5+@@ -67,6 +67,22 @@
 6+ </td>
 7+ <!-- dtl:block:ItemPersonal -->
 8+
 9++<!-- Wikimedia patch start -->
 10++<td valign="bottom" align="center" class="nav"><span onmouseover="this.T_OPACITY=95;
 11++ this.T_SHADOWCOLOR='#aaaacc';
 12++ this.T_TITLE='OTRS on meta.wikimedia.org';
 13++ this.T_BORDERCOLOR='#222266';
 14++ return escape('The OTRS page on meta has the public information about the OTRS system, including a list of queues and the people processing those queues.');">
 15++<a href="http://meta.wikimedia.org/wiki/OTRS"><img src="/otrs-web/22px-Wikimedia_Community_Logo.svg.png" border="0" width="22" height="22"><br>Meta</a></span></td>
 16++<td valign="bottom" align="center" class="nav">
 17++<span onmouseover="this.T_OPACITY=95;
 18++ this.T_SHADOWCOLOR='#aaaacc';
 19++ this.T_TITLE='OTRS wiki';
 20++ this.T_BORDERCOLOR='#222266';
 21++ return escape('The OTRS wiki is a private wiki. It contains informations and discussions that will help you to handle tickets.');">
 22++<a href="http://otrs-wiki.wikimedia.org/wiki/Main_Page"><img src="/otrs-web/22px-Wikimedia-logo.svg.png" border="0" width="22" height="22"><br>Wiki</a></span></td>
 23++<!-- Wikimedia patch end -->
 24++
 25+ <!-- Ticket number search patch start -->
 26+ <td valign="bottom" align="center" class="nav">
 27+ <a href="javascript:ticketNumberSearch();"><img src="$Env{"Images"}searchX.gif" border="0" width="22"><br>Ticket#</a>
 28+Index: trunk/Kernel/Output/HTML/Standard/Login.dtl
 29+===================================================================
 30+--- trunk.orig/Kernel/Output/HTML/Standard/Login.dtl 2009-01-27 14:51:08.000000000 +1100
 31+@@ -23,6 +23,14 @@
 32+ <title>$Config{"ProductName"} :: $Text{"$Data{"Title"}"}</title>
 33+ # include css.dtl file
 34+ $Include{"css"}
 35++<style>
 36++.singleboxhead {
 37++ -moz-border-radius-bottomleft:0;
 38++ -moz-border-radius-bottomright:0;
 39++ -moz-border-radius-topleft:1em;
 40++ -moz-border-radius-topright:1em;
 41++}
 42++</style>
 43+ </head>
 44+ <!-- end header -->
 45+ <body onLoad="document.login.User.focus();">
 46+@@ -49,6 +57,7 @@
 47+ </script>
 48+
 49+ <center>
 50++
 51+ <p>
 52+ <font color="red">$Text{"$Data{"Message"}"}</font>
 53+ </p>
 54+@@ -58,7 +67,7 @@
 55+ <input type="hidden" name="RequestedURL" value="$QData{"RequestedURL"}"/>
 56+ <input type="hidden" name="Lang" value="$Env{"UserLanguage"}"/>
 57+ <input type="hidden" name="TimeOffset" value=""/>
 58+- <table border="0" cellspacing="0" cellpadding="3" width="280">
 59++ <table border="0" cellspacing="0" cellpadding="3" width="370" style="margin-right: 220px;">
 60+ <tr>
 61+ <td align="center" class="singleboxhead">$Text{"Welcome to %s", "$Config{"ProductName"}"}</td>
 62+ </tr>
 63+@@ -80,6 +89,11 @@
 64+ </table>
 65+ </form>
 66+ </p>
 67++
 68++<div style="position:absolute; top: 1em; right: 0.5em; width: 220px; float:right; border: solid 1px silver; padding:6px; height: 95%; background: #EEEEFF;-moz-border-radius:2em;">
 69++
 70++<img src="/otrs-web/120px-Wikimedia_logo_text_RGB.svg.png">
 71++
 72+ # --
 73+ # language
 74+ # --
 75+@@ -87,18 +101,14 @@
 76+ <form action="$Env{"CGIHandle"}" method="post" enctype="application/x-www-form-urlencoded">
 77+ <input type="hidden" name="Action" value=""/>
 78+ <input type="hidden" name="RequestedURL" value="$QData{"RequestedURL"}"/>
 79+- <table border="0" cellspacing="0" cellpadding="3" width="280">
 80++ <table border="0" cellspacing="0" cellpadding="3" width="220">
 81+ <tr>
 82+ <td align="center" class="singleboxhead">$Text{"Language"}</td>
 83+ </tr>
 84+ <tr>
 85+ <td align="center" class="singleboxbody">
 86+- <table cellspacing="8" cellpadding="2">
 87+- <tr>
 88+- <td class="singleboxkey">$Text{"Language"}:</td>
 89+- <td class="singleboxvalue">$Data{"Language"}</td>
 90+- </tr>
 91+- </table>
 92++ $Text{"Language"}:<br/>
 93++ $Data{"Language"}<br/>
 94+ <input class="button" type="submit" value="$Text{"Submit"}"/>
 95+ </td>
 96+ </tr>
 97+@@ -107,8 +117,8 @@
 98+ </p>
 99+ <!-- dtl:block:LostPassword -->
 100+ <p>
 101+- <center>
 102+- <table border="0" cellspacing="0" cellpadding="3" width="280">
 103++ <!--<center>-->
 104++ <table border="0" cellspacing="0" cellpadding="3" width="220">
 105+ <tr>
 106+ <td align="center" class="singleboxhead">$Text{"Lost your password?"}</td>
 107+ </tr>
 108+@@ -129,12 +139,20 @@
 109+ </td>
 110+ </tr>
 111+ </table>
 112+- </center>
 113++ <!--</center>-->
 114+ </p>
 115+ <!-- dtl:block:LostPassword -->
 116++</div>
 117++
 118+ # --
 119+ # Message of the day data!
 120+ # --
 121++<table border="0" cellspacing="0" cellpadding="3" width="370" style="margin-top: 5%; margin-right: 220px;">
 122++<tr><td align="center" class="singleboxhead">News</td></tr>
 123++<tr><td align="center" class="singleboxbody">
 124++$Include{"Motd"}
 125++</td></tr></table>
 126++
 127+ $Data{"Motd"}
 128+ </center>
 129+ <!-- start footer -->
 130+Index: trunk/Kernel/Output/HTML/Standard/Motd.dtl
 131+===================================================================
 132+--- trunk.orig/Kernel/Output/HTML/Standard/Motd.dtl 2009-01-27 14:51:08.000000000 +1100
 133+@@ -9,4 +9,23 @@
 134+ # did not receive this file, see http://www.gnu.org/licenses/gpl-2.0.txt.
 135+ # --
 136+
 137+-<p>This is the message of the day. You can edit this in Kernel/Output/HTML/Standard/Motd.dtl.</p>
 138++<p style="border: none;">
 139++ September 23, 2008: Due to more pressing concerns, the scheduled maintenance outage of OTRS set for this past Monday did not occur.<p>
 140++ The downtime will now occur this coming Thursday, Sept. 25th, 2008 at approximately 18:00 GMT.<p>
 141++ We apologize for any issues this may cause. The outage is necessary to setup database replication.
 142++</p><p>
 143++ September 18, 2008: OTRS will be shutdown for database replication on Monday, September 22nd at approx. 14:00 EST. This downtime should be minimal.
 144++</p><p>
 145++ September 04, 2008: The databases has been moved from srv179 to db9.
 146++</p><p>
 147++ April 07, 2008: Due to an urgent security update, OTRS has been upgraded to the newest version.
 148++ Wikimedia-specific patches have not yet been migrated completely ("undo" of one-click-spam requires
 149++ manual action).
 150++</p>
 151++<p>
 152++ December 22, 2007: Migrated to a new database server with more disk space
 153++</p>
 154++<p>
 155++ January 6, 2007: Upgraded to OTRS-2.1.3, and running on a new pair of DB servers.
 156++</p>
 157++
Property changes on: trunk/otrs/patches/30-wm-brand.patch
___________________________________________________________________
Added: svn:eol-style
1158 + native
Index: trunk/otrs/patches/40-user-tooltips.patch
@@ -0,0 +1,101 @@
 2+Index: trunk/Kernel/Output/HTML/NotificationAgentOnline.pm
 3+===================================================================
 4+--- trunk.orig/Kernel/Output/HTML/NotificationAgentOnline.pm 2009-01-28 11:34:27.000000000 +1100
 5+@@ -15,6 +15,7 @@
 6+ use warnings;
 7+
 8+ use Kernel::System::AuthSession;
 9++use CGI;
 10+
 11+ use vars qw($VERSION);
 12+ $VERSION = qw($Revision: 1.7 $) [1];
 13+@@ -52,10 +53,33 @@
 14+ && $Data{UserLastname}
 15+ )
 16+ {
 17+- $Online{ $Data{UserID} } = "$Data{UserFirstname} $Data{UserLastname}";
 18++ my $sleep = int( (time() - $Data{UserLastRequest}) / 60 );
 19++ my $images = $Self->{LayoutObject}->{Images};
 20++ my $encName = CGI::escapeHTML("$Data{UserFirstname} $Data{UserLastname}");
 21++ my $encLogin = CGI::escapeHTML($Data{UserLogin});
 22++ my $encEmail = CGI::escapeHTML($Data{UserEmail});
 23++ my $tooltip = <<EOF;
 24++ <div style=\'float:right;\'>
 25++ <img src=\'$images/clock.gif\' align=\'top\'/> $sleep min
 26++ </div>
 27++ <img src=\'$images/user.gif\' align=\'top\'/>
 28++ <b>$encLogin</b>
 29++ <br/>
 30++ $encName
 31++EOF
 32+ if ( $Param{Config}->{ShowEmail} ) {
 33+- $Online{ $Data{UserID} } .= " ($Data{UserEmail})";
 34++ $tooltip .= "<br/>\n$encEmail\n";
 35+ }
 36++ my $quoteTooltip = $Self->quoteJs($tooltip);
 37++ my $js = <<EOF;
 38++ this.T_OPACITY=95;
 39++ this.T_SHADOWCOLOR='#aaaacc';
 40++ this.T_TITLE='User info';
 41++ this.T_BORDERCOLOR='#222266';
 42++ return escape($quoteTooltip);
 43++EOF
 44++ my $encJs = CGI::escapeHTML($js);
 45++ $Online{ $Data{UserID} } = "<span onmouseover=\"$encJs\">$encName</span>";
 46+ }
 47+ }
 48+ for ( sort { $Online{$a} cmp $Online{$b} } keys %Online ) {
 49+@@ -65,11 +89,38 @@
 50+ $Param{Message} .= "$Online{$_}";
 51+ }
 52+ if ( $Param{Message} ) {
 53+- return $Self->{LayoutObject}->Notify( Info => 'Online Agent: %s", "' . $Param{Message} );
 54++ return $Self->{LayoutObject}->Notify( Info => 'Online Agent: ' . $Param{Message} );
 55+ }
 56+ else {
 57+ return '';
 58+ }
 59+ }
 60+
 61++sub quoteJs {
 62++ # Based on MediaWiki's Xml::escapeJsString()
 63++
 64++ # See ECMA 262 section 7.8.4 for string literal format
 65++ my ( $Self, $s ) = @_;
 66++ $_ = $s;
 67++ s/\\/\\\\/;
 68++ s/\"/\\"/;
 69++ s/\'/\\'/;
 70++ s/\n/\\n/;
 71++ s/\r/\\r/;
 72++
 73++ # To avoid closing the element or CDATA section
 74++ s/</\\x3c/;
 75++ s/>/\\x3e/;
 76++
 77++ # To avoid any complaints about bad entity refs
 78++ s/&/\\x26/;
 79++
 80++ # Work around https://bugzilla.mozilla.org/show_bug.cgi?id=274152
 81++ # Encode certain Unicode formatting chars so affected
 82++ # versions of Gecko don't misinterpret our strings;
 83++ # this is a common problem with Farsi text.
 84++ s/\xe2\x80\x8c/\\u200c/; # ZERO WIDTH NON-JOINER
 85++ s/\xe2\x80\x8d/\\u200d/; # ZERO WIDTH JOINER
 86++ return "\"$_\"";
 87++}
 88+ 1;
 89+Index: trunk/Kernel/Output/HTML/Standard/Notify.dtl
 90+===================================================================
 91+--- trunk.orig/Kernel/Output/HTML/Standard/Notify.dtl 2009-01-28 11:34:27.000000000 +1100
 92+@@ -25,7 +25,7 @@
 93+ <a href="$Data{"LinkStart"}">
 94+ <!-- dtl:block:LinkStart -->
 95+ <!-- dtl:block:Text -->
 96+- $Text{"$Data{"Info"}"}
 97++ $Data{"Info"}
 98+ <!-- dtl:block:Text -->
 99+ <!-- dtl:block:Data -->
 100+ $Data{"Data"}
Property changes on: trunk/otrs/patches/40-user-tooltips.patch
___________________________________________________________________
Added: svn:eol-style
1101 + native
Index: trunk/otrs/patches/10-tooltips.patch
@@ -0,0 +1,524 @@
 2+diff -ru trunk/Kernel/Output/HTML/Standard/Footer.dtl trunk-tooltips/Kernel/Output/HTML/Standard/Footer.dtl
 3+--- trunk/Kernel/Output/HTML/Standard/Footer.dtl 2008-02-12 20:08:07.000000000 +1100
 4+@@ -33,6 +33,7 @@
 5+ </tr>
 6+ </table>
 7+ <a name="end"></a>
 8++<script language="JavaScript" type="text/javascript" src="/otrs-web/wz_tooltip.js"></script>
 9+ </body>
 10+ </html>
 11+ <!-- end footer -->
 12+diff -ru trunk/var/httpd/htdocs/wz_tooltip.js trunk-tooltips/var/httpd/htdocs/wz_tooltip.js
 13+--- trunk/var/httpd/htdocs/wz_tooltip.js 2009-01-27 12:35:58.000000000 +1100
 14+@@ -0,0 +1,509 @@
 15++/* This notice must be untouched at all times.
 16++
 17++wz_tooltip.js v. 3.45
 18++
 19++The latest version is available at
 20++http://www.walterzorn.com
 21++or http://www.devira.com
 22++or http://www.walterzorn.de
 23++
 24++Copyright (c) 2002-2005 Walter Zorn. All rights reserved.
 25++Created 1. 12. 2002 by Walter Zorn (Web: http://www.walterzorn.com )
 26++Last modified: 17. 2. 2007
 27++
 28++Cross-browser tooltips working even in Opera 5 and 6,
 29++as well as in NN 4, Gecko-Browsers, IE4+, Opera 7+ and Konqueror.
 30++No onmouseouts required.
 31++Appearance of tooltips can be individually configured
 32++via commands within the onmouseovers.
 33++
 34++LICENSE: LGPL
 35++
 36++This library is free software; you can redistribute it and/or
 37++modify it under the terms of the GNU Lesser General Public
 38++License (LGPL) as published by the Free Software Foundation; either
 39++version 2.1 of the License, or (at your option) any later version.
 40++
 41++This library is distributed in the hope that it will be useful,
 42++but WITHOUT ANY WARRANTY; without even the implied warranty of
 43++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 44++
 45++For more details on the GNU Lesser General Public License,
 46++see http://www.gnu.org/copyleft/lesser.html
 47++*/
 48++
 49++
 50++
 51++//////////////// GLOBAL TOOPTIP CONFIGURATION /////////////////////
 52++var ttAbove = false; // tooltip above mousepointer? Alternative: true
 53++var ttBgColor = "#e6ecff";
 54++var ttBgImg = ""; // path to background image;
 55++var ttBorderColor = "#003399";
 56++var ttBorderWidth = 1;
 57++var ttClickClose = false;
 58++var ttDelay = 500; // time span until tooltip shows up [milliseconds]
 59++var ttFontColor = "#000066";
 60++var ttFontFace = "arial,helvetica,sans-serif";
 61++var ttFontSize = "11px";
 62++var ttFontWeight = "normal"; // alternative: "bold";
 63++var ttLeft = false; // tooltip on the left of the mouse? Alternative: true
 64++var ttOffsetX = 12; // horizontal offset of left-top corner from mousepointer
 65++var ttOffsetY = 15; // vertical offset "
 66++var ttOpacity = 100; // opacity of tooltip in percent (must be integer between 0 and 100)
 67++var ttPadding = 3; // spacing between border and content
 68++var ttShadowColor = "";
 69++var ttShadowWidth = 0;
 70++var ttStatic = false; // tooltip NOT move with the mouse? Alternative: true
 71++var ttSticky = false; // do NOT hide tooltip on mouseout? Alternative: true
 72++var ttTemp = 0; // time span after which the tooltip disappears; 0 (zero) means "infinite timespan"
 73++var ttTextAlign = "left";
 74++var ttTitleColor = "#ffffff"; // color of caption text
 75++var ttWidth = 300;
 76++//////////////////// END OF TOOLTIP CONFIG ////////////////////////
 77++
 78++
 79++
 80++////////////// TAGS WITH TOOLTIP FUNCTIONALITY ////////////////////
 81++// List may be extended or shortened:
 82++var tt_tags = new Array("a","area","b","big","caption","center","code","dd","div","dl","dt","em","h1","h2","h3","h4","h5","h6","i","img","input","li","map","ol","p","pre","s", "select", "small","span","strike","strong","sub","sup","table","td","textarea","th","tr","tt","u","var","ul","layer");
 83++/////////////////////////////////////////////////////////////////////
 84++
 85++
 86++
 87++///////// DON'T CHANGE ANYTHING BELOW THIS LINE /////////////////////
 88++var tt_obj = null, // current tooltip
 89++tt_ifrm = null, // iframe to cover windowed controls in IE
 90++tt_objW = 0, tt_objH = 0, // width and height of tt_obj
 91++tt_objX = 0, tt_objY = 0,
 92++tt_offX = 0, tt_offY = 0,
 93++xlim = 0, ylim = 0, // right and bottom borders of visible client area
 94++tt_sup = false, // true if T_ABOVE cmd
 95++tt_sticky = false, // tt_obj sticky?
 96++tt_wait = false,
 97++tt_act = false, // tooltip visibility flag
 98++tt_sub = false, // true while tooltip below mousepointer
 99++tt_u = "undefined",
 100++tt_mf = null, // stores previous mousemove evthandler
 101++// Opera: disable href when hovering <a>
 102++tt_tag = null; // stores hovered dom node, href and previous statusbar txt
 103++
 104++
 105++var tt_db = (document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body? document.body : null,
 106++tt_n = navigator.userAgent.toLowerCase(),
 107++tt_nv = navigator.appVersion;
 108++// Browser flags
 109++var tt_op = !!(window.opera && document.getElementById),
 110++tt_op6 = tt_op && !document.defaultView,
 111++tt_op7 = tt_op && !tt_op6,
 112++tt_ie = tt_n.indexOf("msie") != -1 && document.all && tt_db && !tt_op,
 113++tt_ie7 = tt_ie && typeof document.body.style.maxHeight != tt_u,
 114++tt_ie6 = tt_ie && !tt_ie7 && parseFloat(tt_nv.substring(tt_nv.indexOf("MSIE")+5)) >= 5.5,
 115++tt_n4 = (document.layers && typeof document.classes != tt_u),
 116++tt_n6 = (!tt_op && document.defaultView && typeof document.defaultView.getComputedStyle != tt_u),
 117++tt_w3c = !tt_ie && !tt_n6 && !tt_op && document.getElementById,
 118++tt_ce = document.captureEvents && !tt_n6;
 119++
 120++function tt_Int(t_x)
 121++{
 122++ var t_y;
 123++ return isNaN(t_y = parseInt(t_x))? 0 : t_y;
 124++}
 125++function wzReplace(t_x, t_y)
 126++{
 127++ var t_ret = "",
 128++ t_str = this,
 129++ t_xI;
 130++ while((t_xI = t_str.indexOf(t_x)) != -1)
 131++ {
 132++ t_ret += t_str.substring(0, t_xI) + t_y;
 133++ t_str = t_str.substring(t_xI + t_x.length);
 134++ }
 135++ return t_ret+t_str;
 136++}
 137++String.prototype.wzReplace = wzReplace;
 138++function tt_N4Tags(tagtyp, t_d, t_y)
 139++{
 140++ t_d = t_d || document;
 141++ t_y = t_y || new Array();
 142++ var t_x = (tagtyp=="a")? t_d.links : t_d.layers;
 143++ for(var z = t_x.length; z--;) t_y[t_y.length] = t_x[z];
 144++ for(z = t_d.layers.length; z--;) t_y = tt_N4Tags(tagtyp, t_d.layers[z].document, t_y);
 145++ return t_y;
 146++}
 147++function tt_Htm(tt, t_id, txt)
 148++{
 149++ var t_bgc = (typeof tt.T_BGCOLOR != tt_u)? tt.T_BGCOLOR : ttBgColor,
 150++ t_bgimg = (typeof tt.T_BGIMG != tt_u)? tt.T_BGIMG : ttBgImg,
 151++ t_bc = (typeof tt.T_BORDERCOLOR != tt_u)? tt.T_BORDERCOLOR : ttBorderColor,
 152++ t_bw = (typeof tt.T_BORDERWIDTH != tt_u)? tt.T_BORDERWIDTH : ttBorderWidth,
 153++ t_ff = (typeof tt.T_FONTFACE != tt_u)? tt.T_FONTFACE : ttFontFace,
 154++ t_fc = (typeof tt.T_FONTCOLOR != tt_u)? tt.T_FONTCOLOR : ttFontColor,
 155++ t_fsz = (typeof tt.T_FONTSIZE != tt_u)? tt.T_FONTSIZE : ttFontSize,
 156++ t_fwght = (typeof tt.T_FONTWEIGHT != tt_u)? tt.T_FONTWEIGHT : ttFontWeight,
 157++ t_opa = (typeof tt.T_OPACITY != tt_u)? tt.T_OPACITY : ttOpacity,
 158++ t_padd = (typeof tt.T_PADDING != tt_u)? tt.T_PADDING : ttPadding,
 159++ t_shc = (typeof tt.T_SHADOWCOLOR != tt_u)? tt.T_SHADOWCOLOR : (ttShadowColor || 0),
 160++ t_shw = (typeof tt.T_SHADOWWIDTH != tt_u)? tt.T_SHADOWWIDTH : (ttShadowWidth || 0),
 161++ t_algn = (typeof tt.T_TEXTALIGN != tt_u)? tt.T_TEXTALIGN : ttTextAlign,
 162++ t_tit = (typeof tt.T_TITLE != tt_u)? tt.T_TITLE : "",
 163++ t_titc = (typeof tt.T_TITLECOLOR != tt_u)? tt.T_TITLECOLOR : ttTitleColor,
 164++ t_w = (typeof tt.T_WIDTH != tt_u)? tt.T_WIDTH : ttWidth;
 165++ if(t_shc || t_shw)
 166++ {
 167++ t_shc = t_shc || "#c0c0c0";
 168++ t_shw = t_shw || 5;
 169++ }
 170++ if(tt_n4 && (t_fsz == "10px" || t_fsz == "11px")) t_fsz = "12px";
 171++
 172++ var t_optx = (tt_n4? '' : tt_n6? ('-moz-opacity:'+(t_opa/100.0)) : tt_ie? ('filter:Alpha(opacity='+t_opa+')') : ('opacity:'+(t_opa/100.0))) + ';';
 173++ var t_y = '<div id="'+t_id+'" style="position:absolute;z-index:1010;';
 174++ t_y += 'left:0px;top:0px;width:'+(t_w+t_shw)+'px;visibility:'+(tt_n4? 'hide' : 'hidden')+';'+t_optx+'">' +
 175++ '<table border="0" cellpadding="0" cellspacing="0"'+(t_bc? (' bgcolor="'+t_bc+'" style="background:'+t_bc+';"') : '')+' width="'+t_w+'">';
 176++ if(t_tit)
 177++ {
 178++ t_y += '<tr><td style="padding-left:3px;padding-right:3px;" align="'+t_algn+'"><font color="'+t_titc+'" face="'+t_ff+'" ' +
 179++ 'style="color:'+t_titc+';font-family:'+t_ff+';font-size:'+t_fsz+';"><b>' +
 180++ (tt_n4? '&nbsp;' : '')+t_tit+'</b></font></td></tr>';
 181++ }
 182++ t_y += '<tr><td><table border="0" cellpadding="'+t_padd+'" cellspacing="'+t_bw+'" width="100%">' +
 183++ '<tr><td'+(t_bgc? (' bgcolor="'+t_bgc+'"') : '')+(t_bgimg? ' background="'+t_bgimg+'"' : '')+' style="text-align:'+t_algn+';';
 184++ if(tt_n6) t_y += 'padding:'+t_padd+'px;';
 185++ t_y += '" align="'+t_algn+'"><font color="'+t_fc+'" face="'+t_ff+'"' +
 186++ ' style="color:'+t_fc+';font-family:'+t_ff+';font-size:'+t_fsz+';font-weight:'+t_fwght+';">';
 187++ if(t_fwght == 'bold') t_y += '<b>';
 188++ t_y += txt;
 189++ if(t_fwght == 'bold') t_y += '</b>';
 190++ t_y += '</font></td></tr></table></td></tr></table>';
 191++ if(t_shw)
 192++ {
 193++ var t_spct = Math.round(t_shw*1.3);
 194++ if(tt_n4)
 195++ {
 196++ t_y += '<layer bgcolor="'+t_shc+'" left="'+t_w+'" top="'+t_spct+'" width="'+t_shw+'" height="0"></layer>' +
 197++ '<layer bgcolor="'+t_shc+'" left="'+t_spct+'" align="bottom" width="'+(t_w-t_spct)+'" height="'+t_shw+'"></layer>';
 198++ }
 199++ else
 200++ {
 201++ t_optx = tt_n6? '-moz-opacity:0.85;' : tt_ie? 'filter:Alpha(opacity=85);' : 'opacity:0.85;';
 202++ t_y += '<div id="'+t_id+'R" style="position:absolute;background:'+t_shc+';left:'+t_w+'px;top:'+t_spct+'px;width:'+t_shw+'px;height:1px;overflow:hidden;'+t_optx+'"></div>' +
 203++ '<div style="position:relative;background:'+t_shc+';left:'+t_spct+'px;top:0px;width:'+(t_w-t_spct)+'px;height:'+t_shw+'px;overflow:hidden;'+t_optx+'"></div>';
 204++ }
 205++ }
 206++ return(t_y+'</div>');
 207++}
 208++function tt_EvX(t_e)
 209++{
 210++ var t_y = tt_Int(t_e.pageX || t_e.clientX || 0) +
 211++ tt_Int(tt_ie? tt_db.scrollLeft : 0) +
 212++ tt_offX;
 213++ if(t_y > xlim) t_y = xlim;
 214++ var t_scr = tt_Int(window.pageXOffset || (tt_db? tt_db.scrollLeft : 0) || 0);
 215++ if(t_y < t_scr) t_y = t_scr;
 216++ return t_y;
 217++}
 218++function tt_EvY(t_e)
 219++{
 220++ var t_y2;
 221++
 222++ var t_y = tt_Int(t_e.pageY || t_e.clientY || 0) +
 223++ tt_Int(tt_ie? tt_db.scrollTop : 0);
 224++ if(tt_sup && (t_y2 = t_y - (tt_objH + tt_offY - 15)) >= tt_Int(window.pageYOffset || (tt_db? tt_db.scrollTop : 0) || 0))
 225++ t_y -= (tt_objH + tt_offY - 15);
 226++ else if(t_y > ylim || !tt_sub && t_y > ylim-24)
 227++ {
 228++ t_y -= (tt_objH + 5);
 229++ tt_sub = false;
 230++ }
 231++ else
 232++ {
 233++ t_y += tt_offY;
 234++ tt_sub = true;
 235++ }
 236++ return t_y;
 237++}
 238++function tt_ReleasMov()
 239++{
 240++ if(document.onmousemove == tt_Move)
 241++ {
 242++ if(!tt_mf && tt_ce) document.releaseEvents(Event.MOUSEMOVE);
 243++ document.onmousemove = tt_mf;
 244++ }
 245++}
 246++function tt_ShowIfrm(t_x)
 247++{
 248++ if(!tt_obj || !tt_ifrm) return;
 249++ if(t_x)
 250++ {
 251++ tt_ifrm.style.width = tt_objW+'px';
 252++ tt_ifrm.style.height = tt_objH+'px';
 253++ tt_ifrm.style.display = "block";
 254++ }
 255++ else tt_ifrm.style.display = "none";
 256++}
 257++function tt_GetDiv(t_id)
 258++{
 259++ return(
 260++ tt_n4? (document.layers[t_id] || null)
 261++ : tt_ie? (document.all[t_id] || null)
 262++ : (document.getElementById(t_id) || null)
 263++ );
 264++}
 265++function tt_GetDivW()
 266++{
 267++ return tt_Int(
 268++ tt_n4? tt_obj.clip.width
 269++ : (tt_obj.offsetWidth || tt_obj.style.pixelWidth)
 270++ );
 271++}
 272++function tt_GetDivH()
 273++{
 274++ return tt_Int(
 275++ tt_n4? tt_obj.clip.height
 276++ : (tt_obj.offsetHeight || tt_obj.style.pixelHeight)
 277++ );
 278++}
 279++
 280++// Compat with DragDrop Lib: Ensure that z-index of tooltip is lifted beyond toplevel dragdrop element
 281++function tt_SetDivZ()
 282++{
 283++ var t_i = tt_obj.style || tt_obj;
 284++ if(t_i)
 285++ {
 286++ if(window.dd && dd.z)
 287++ t_i.zIndex = Math.max(dd.z+1, t_i.zIndex);
 288++ if(tt_ifrm) tt_ifrm.style.zIndex = t_i.zIndex-1;
 289++ }
 290++}
 291++function tt_SetDivPos(t_x, t_y)
 292++{
 293++ var t_i = tt_obj.style || tt_obj;
 294++ var t_px = (tt_op6 || tt_n4)? '' : 'px';
 295++ t_i.left = (tt_objX = t_x) + t_px;
 296++ t_i.top = (tt_objY = t_y) + t_px;
 297++ // window... to circumvent the FireFox Alzheimer Bug
 298++ if(window.tt_ifrm)
 299++ {
 300++ tt_ifrm.style.left = t_i.left;
 301++ tt_ifrm.style.top = t_i.top;
 302++ }
 303++}
 304++function tt_ShowDiv(t_x)
 305++{
 306++ tt_ShowIfrm(t_x);
 307++ if(tt_n4) tt_obj.visibility = t_x? 'show' : 'hide';
 308++ else tt_obj.style.visibility = t_x? 'visible' : 'hidden';
 309++ tt_act = t_x;
 310++}
 311++function tt_DeAlt(t_tag)
 312++{
 313++ if(t_tag)
 314++ {
 315++ if(t_tag.alt) t_tag.alt = "";
 316++ if(t_tag.title) t_tag.title = "";
 317++ var t_c = t_tag.children || t_tag.childNodes || null;
 318++ if(t_c)
 319++ {
 320++ for(var t_i = t_c.length; t_i; )
 321++ tt_DeAlt(t_c[--t_i]);
 322++ }
 323++ }
 324++}
 325++function tt_OpDeHref(t_e)
 326++{
 327++ var t_tag;
 328++ if(t_e)
 329++ {
 330++ t_tag = t_e.target;
 331++ while(t_tag)
 332++ {
 333++ if(t_tag.hasAttribute("href"))
 334++ {
 335++ tt_tag = t_tag
 336++ tt_tag.t_href = tt_tag.getAttribute("href");
 337++ tt_tag.removeAttribute("href");
 338++ tt_tag.style.cursor = "hand";
 339++ tt_tag.onmousedown = tt_OpReHref;
 340++ tt_tag.stats = window.status;
 341++ window.status = tt_tag.t_href;
 342++ break;
 343++ }
 344++ t_tag = t_tag.parentElement;
 345++ }
 346++ }
 347++}
 348++function tt_OpReHref()
 349++{
 350++ if(tt_tag)
 351++ {
 352++ tt_tag.setAttribute("href", tt_tag.t_href);
 353++ window.status = tt_tag.stats;
 354++ tt_tag = null;
 355++ }
 356++}
 357++function tt_Show(t_e, t_id, t_sup, t_clk, t_delay, t_fix, t_left, t_offx, t_offy, t_static, t_sticky, t_temp)
 358++{
 359++ if(tt_obj) tt_Hide();
 360++ tt_mf = document.onmousemove || null;
 361++ if(window.dd && (window.DRAG && tt_mf == DRAG || window.RESIZE && tt_mf == RESIZE)) return;
 362++ var t_sh, t_h;
 363++
 364++ tt_obj = tt_GetDiv(t_id);
 365++ if(tt_obj)
 366++ {
 367++ t_e = t_e || window.event;
 368++ tt_sub = !(tt_sup = t_sup);
 369++ tt_sticky = t_sticky;
 370++ tt_objW = tt_GetDivW();
 371++ tt_objH = tt_GetDivH();
 372++ tt_offX = t_left? -(tt_objW+t_offx) : t_offx;
 373++ tt_offY = t_offy;
 374++ if(tt_op7) tt_OpDeHref(t_e);
 375++ if(tt_n4)
 376++ {
 377++ if(tt_obj.document.layers.length)
 378++ {
 379++ t_sh = tt_obj.document.layers[0];
 380++ t_sh.clip.height = tt_objH - Math.round(t_sh.clip.width*1.3);
 381++ }
 382++ }
 383++ else
 384++ {
 385++ t_sh = tt_GetDiv(t_id+'R');
 386++ if(t_sh)
 387++ {
 388++ t_h = tt_objH - tt_Int(t_sh.style.pixelTop || t_sh.style.top || 0);
 389++ if(typeof t_sh.style.pixelHeight != tt_u) t_sh.style.pixelHeight = t_h;
 390++ else t_sh.style.height = t_h+'px';
 391++ }
 392++ }
 393++
 394++ xlim = tt_Int((tt_db && tt_db.clientWidth)? tt_db.clientWidth : window.innerWidth) +
 395++ tt_Int(window.pageXOffset || (tt_db? tt_db.scrollLeft : 0) || 0) -
 396++ tt_objW -
 397++ (tt_n4? 21 : 0);
 398++ ylim = tt_Int(window.innerHeight || tt_db.clientHeight) +
 399++ tt_Int(window.pageYOffset || (tt_db? tt_db.scrollTop : 0) || 0) -
 400++ tt_objH - tt_offY;
 401++
 402++ tt_SetDivZ();
 403++ if(t_fix) tt_SetDivPos(tt_Int((t_fix = t_fix.split(','))[0]), tt_Int(t_fix[1]));
 404++ else tt_SetDivPos(tt_EvX(t_e), tt_EvY(t_e));
 405++
 406++ var t_txt = 'tt_ShowDiv(\'true\');';
 407++ if(t_sticky) t_txt += '{'+
 408++ 'tt_ReleasMov();'+
 409++ (t_clk? ('window.tt_upFunc = document.onmouseup || null;'+
 410++ 'if(tt_ce) document.captureEvents(Event.MOUSEUP);'+
 411++ 'document.onmouseup = new Function("window.setTimeout(\'tt_Hide();\', 10);");') : '')+
 412++ '}';
 413++ else if(t_static) t_txt += 'tt_ReleasMov();';
 414++ if(t_temp > 0) t_txt += 'window.tt_rtm = window.setTimeout(\'tt_sticky = false; tt_Hide();\','+t_temp+');';
 415++ window.tt_rdl = window.setTimeout(t_txt, t_delay);
 416++
 417++ if(!t_fix)
 418++ {
 419++ if(tt_ce) document.captureEvents(Event.MOUSEMOVE);
 420++ document.onmousemove = tt_Move;
 421++ }
 422++ }
 423++}
 424++var tt_area = false;
 425++function tt_Move(t_ev)
 426++{
 427++ if(!tt_obj) return;
 428++ if(tt_n6 || tt_w3c)
 429++ {
 430++ if(tt_wait) return;
 431++ tt_wait = true;
 432++ setTimeout('tt_wait = false;', 5);
 433++ }
 434++ var t_e = t_ev || window.event;
 435++ tt_SetDivPos(tt_EvX(t_e), tt_EvY(t_e));
 436++ if(window.tt_op6)
 437++ {
 438++ if(tt_area && t_e.target.tagName != 'AREA') tt_Hide();
 439++ else if(t_e.target.tagName == 'AREA') tt_area = true;
 440++ }
 441++}
 442++function tt_Hide()
 443++{
 444++ if(window.tt_obj)
 445++ {
 446++ if(window.tt_rdl) window.clearTimeout(tt_rdl);
 447++ if(!tt_sticky || !tt_act)
 448++ {
 449++ if(window.tt_rtm) window.clearTimeout(tt_rtm);
 450++ tt_ShowDiv(false);
 451++ tt_SetDivPos(-tt_objW, -tt_objH);
 452++ tt_obj = null;
 453++ if(typeof window.tt_upFunc != tt_u) document.onmouseup = window.tt_upFunc;
 454++ }
 455++ tt_sticky = false;
 456++ if(tt_op6 && tt_area) tt_area = false;
 457++ tt_ReleasMov();
 458++ if(tt_op7) tt_OpReHref();
 459++ }
 460++}
 461++function tt_Init()
 462++{
 463++ if(!(tt_op || tt_n4 || tt_n6 || tt_ie || tt_w3c)) return;
 464++
 465++ var htm = tt_n4? '<div style="position:absolute;"></div>' : '',
 466++ tags,
 467++ t_tj,
 468++ over,
 469++ t_b,
 470++ esc = 'return escape(';
 471++ for(var i = tt_tags.length; i;)
 472++ {--i;
 473++ tags = tt_ie? (document.all.tags(tt_tags[i]) || 1)
 474++ : document.getElementsByTagName? (document.getElementsByTagName(tt_tags[i]) || 1)
 475++ : (!tt_n4 && tt_tags[i]=="a")? document.links
 476++ : 1;
 477++ if(tt_n4 && (tt_tags[i] == "a" || tt_tags[i] == "layer")) tags = tt_N4Tags(tt_tags[i]);
 478++ for(var j = tags.length; j;)
 479++ {--j;
 480++ if(typeof (t_tj = tags[j]).onmouseover == "function" && t_tj.onmouseover.toString().indexOf(esc) != -1 && !tt_n6 || tt_n6 && (over = t_tj.getAttribute("onmouseover")) && over.indexOf(esc) != -1)
 481++ {
 482++ if(over) t_tj.onmouseover = new Function(over);
 483++ var txt = unescape(t_tj.onmouseover());
 484++ htm += tt_Htm(
 485++ t_tj,
 486++ "tOoLtIp"+i+""+j,
 487++ txt.wzReplace("& ","&")
 488++ );
 489++ // window. to circumvent the FF Alzheimer Bug
 490++ t_tj.onmouseover = new Function('e',
 491++ 'if(window.tt_Show && tt_Show) tt_Show(e,'+
 492++ '"tOoLtIp' +i+''+j+ '",'+
 493++ ((typeof t_tj.T_ABOVE != tt_u)? t_tj.T_ABOVE : ttAbove)+','+
 494++ ((typeof t_tj.T_CLICKCLOSE != tt_u)? t_tj.T_CLICKCLOSE : ttClickClose)+','+
 495++ ((typeof t_tj.T_DELAY != tt_u)? t_tj.T_DELAY : ttDelay)+','+
 496++ ((typeof t_tj.T_FIX != tt_u)? '"'+t_tj.T_FIX+'"' : '""')+','+
 497++ ((typeof t_tj.T_LEFT != tt_u)? t_tj.T_LEFT : ttLeft)+','+
 498++ ((typeof t_tj.T_OFFSETX != tt_u)? t_tj.T_OFFSETX : ttOffsetX)+','+
 499++ ((typeof t_tj.T_OFFSETY != tt_u)? t_tj.T_OFFSETY : ttOffsetY)+','+
 500++ ((typeof t_tj.T_STATIC != tt_u)? t_tj.T_STATIC : ttStatic)+','+
 501++ ((typeof t_tj.T_STICKY != tt_u)? t_tj.T_STICKY : ttSticky)+','+
 502++ ((typeof t_tj.T_TEMP != tt_u)? t_tj.T_TEMP : ttTemp)+
 503++ ');'
 504++ );
 505++ t_tj.onmouseout = tt_Hide;
 506++ tt_DeAlt(t_tj);
 507++ }
 508++ }
 509++ }
 510++ if(tt_ie6) htm += '<iframe id="TTiEiFrM" src="javascript:false" scrolling="no" frameborder="0" style="filter:Alpha(opacity=0);position:absolute;top:0px;left:0px;display:none;"></iframe>';
 511++ t_b = document.getElementsByTagName? document.getElementsByTagName("body")[0] : tt_db;
 512++ if(t_b && t_b.insertAdjacentHTML) t_b.insertAdjacentHTML("AfterBegin", htm);
 513++ else if(t_b && typeof t_b.innerHTML != tt_u && document.createElement && t_b.appendChild)
 514++ {
 515++ var t_el = document.createElement("div");
 516++ t_b.appendChild(t_el);
 517++ t_el.innerHTML = htm;
 518++ }
 519++ else
 520++ document.write(htm);
 521++ if(document.getElementById) tt_ifrm = document.getElementById("TTiEiFrM");
 522++}
 523++tt_Init();
Property changes on: trunk/otrs/patches/10-tooltips.patch
___________________________________________________________________
Added: svn:eol-style
1524 + native
Index: trunk/otrs/patches/20-ticket-number-search.patch
@@ -0,0 +1,26 @@
 2+Index: trunk/Kernel/Output/HTML/Standard/AgentNavigationBar.dtl
 3+===================================================================
 4+--- trunk.orig/Kernel/Output/HTML/Standard/AgentNavigationBar.dtl 2009-01-27 14:51:08.000000000 +1100
 5+@@ -66,6 +66,21 @@
 6+ </div>
 7+ </td>
 8+ <!-- dtl:block:ItemPersonal -->
 9++
 10++<!-- Ticket number search patch start -->
 11++<td valign="bottom" align="center" class="nav">
 12++<a href="javascript:ticketNumberSearch();"><img src="$Env{"Images"}searchX.gif" border="0" width="22"><br>Ticket#</a>
 13++<script language="JavaScript" type="text/javascript"><!--
 14++function ticketNumberSearch() {
 15++ x=prompt("Ticket#");
 16++ if ( x!='' && x != null ) {
 17++ window.location="$Env{"CGIHandle"}?Action=AgentTicketSearch&Subaction=Search&TicketNumber="+x;
 18++ }
 19++}
 20++-->
 21++</script></td>
 22++<!-- Ticket number search patch end -->
 23++
 24+ <!-- dtl:block:Classic -->
 25+ <!-- dtl:block:Modern -->
 26+ <!-- dtl:block:ItemPre -->
Property changes on: trunk/otrs/patches/20-ticket-number-search.patch
___________________________________________________________________
Added: svn:eol-style
127 + native
Index: trunk/otrs/patches/series
@@ -0,0 +1,6 @@
 2+10-tooltips.patch
 3+20-ticket-number-search.patch
 4+30-wm-brand.patch
 5+40-user-tooltips.patch
 6+50-one-click-spam.patch
 7+60-really-secure-mode.patch
Property changes on: trunk/otrs/patches/series
___________________________________________________________________
Added: svn:eol-style
18 + native
Index: trunk/otrs/patches/60-really-secure-mode.patch
@@ -0,0 +1,961 @@
 2+Index: trunk/.fetchmailrc.dist
 3+===================================================================
 4+--- trunk.orig/.fetchmailrc.dist 2009-01-28 15:43:49.000000000 +1100
 5+@@ -1,31 +0,0 @@
 6+-# --
 7+-# .fetchmailrc - fetchmailrc of the OTRS user
 8+-# Copyright (C) 2001-2008 OTRS AG, http://otrs.org/
 9+-# --
 10+-# $Id: .fetchmailrc.dist,v 1.3 2008/03/07 17:00:14 martin Exp $
 11+-# --
 12+-# This software comes with ABSOLUTELY NO WARRANTY. For details, see
 13+-# the enclosed file COPYING for license information (GPL). If you
 14+-# did not receive this file, see http://www.gnu.org/licenses/gpl-2.0.txt.
 15+-# --
 16+-# Note: Continue lines with whitespace at the beginning of each newline
 17+-# --
 18+-
 19+-#-----------------#
 20+-# simple example:
 21+-#-----------------#
 22+-
 23+-#poll <MAIL_SERVER> protocol POP3 user <MAIL_USERNAME> pass <MAIL_PASSWORD> is <LOCAL_OTRS_USERNAME> here
 24+-
 25+-#-------------------------------------------------#
 26+-# example for polling from an IMAP-Server via SSL.
 27+-#-------------------------------------------------#
 28+-
 29+-#poll <MAIL_SERVER> protocol IMAP port 993 plugin "openssl s_client -connect %h:%p" user <MAIL_USERNAME> pass <MAIL_PASSWORD> is <LOCAL_OTRS_USERNAME> here
 30+-
 31+-#--------------------------------------------------------#
 32+-# The openssl command has to be installed and accessible
 33+-# for the otrs user.
 34+-# If the otrs user cannot find openssl, try:
 35+-# plugin "/path/to/openssl s_client -connect %h:%p"
 36+-#--------------------------------------------------------#
 37+Index: trunk/.mailfilter.dist
 38+===================================================================
 39+--- trunk.orig/.mailfilter.dist 2009-01-28 15:46:53.000000000 +1100
 40+@@ -1,79 +0,0 @@
 41+-# --
 42+-# .mailfilter - mailfilter of the OTRS user
 43+-# Copyright (C) 2003 Wiktor Wodecki <wiktor.wodecki@net-m.de>
 44+-# --
 45+-# $Id: .mailfilter.dist,v 1.3 2007/02/06 16:01:13 tr Exp $
 46+-# --
 47+-# This software comes with ABSOLUTELY NO WARRANTY. For details, see
 48+-# the enclosed file COPYING for license information (GPL). If you
 49+-# did not receive this file, see http://www.gnu.org/licenses/gpl.txt.
 50+-# --
 51+-
 52+-#SYS_HOME=/opt/otrs
 53+-SYS_HOME=$HOME
 54+-
 55+-import DEFAULT
 56+-LOCALDEFAULT=$DEFAULT
 57+-DEFAULT=${SYS_HOME}/var/spool/`date +%s`${FROM}${SIZE}
 58+-MONTHFOLDER=`date +%Y-%m`
 59+-YEARFOLDER=`date +%Y`
 60+-
 61+-
 62+-# Remove all X-OTRS Header (allow this only for trusted email)
 63+-# e. g. from *@example.com
 64+-
 65+-if (/^To:.*@example.com/)
 66+-{
 67+- xfilter "grep -vi '^X-OTRS-'"
 68+-}
 69+-
 70+-# or just not emails with "X-OTRS-Ident: ahfiw2Fw32r230dddl2foeo3r" header!
 71+-#if (/^X-OTRS-Ident: ahfiw2Fw32r230dddl2foeo3r/)
 72+-#{
 73+-# xfilter "grep -vi '^X-OTRS-'"
 74+-#}
 75+-
 76+-
 77+-
 78+-# Examples for queue presorting.
 79+-
 80+-if (/^To:.*@example.com/)
 81+-{
 82+- xfilter "formail -I \"X-OTRS-Queue: example\""
 83+-}
 84+-
 85+-if (/^List-Id:.*OpenAntiVirus/)
 86+-{
 87+- xfilter "formail -I \"X-OTRS-Queue: OpenAntiVirus\""
 88+-}
 89+-
 90+-
 91+-# Example for add free form key and value (max 3).
 92+-
 93+-if (/^To:.*@example.com/)
 94+-{
 95+- xfilter "formail -I \"X-OTRS-ArticleKey1: Test\""
 96+- xfilter "formail -I \"X-OTRS-ArticleValue1: True!\""
 97+-}
 98+-
 99+-
 100+-# Backup of all incoming emails.
 101+-# It's always better to have a backup of all incoming emails!
 102+-
 103+-cc ${SYS_HOME}/var/INBOX.Backup.${MONTHFOLDER}
 104+-
 105+-
 106+-# Pipe all email into the PostMaster process.
 107+-
 108+-xfilter "${SYS_HOME}/bin/PostMaster.pl"
 109+-
 110+-
 111+-# spool all the rest (which the PostMaster.pl can't process!)
 112+-# If the database is down or the PostMaster.pl exit was not '0'!
 113+-
 114+-to $DEFAULT
 115+-
 116+-
 117+-# end of .mailfilter
 118+-
 119+-
 120+Index: trunk/.procmailrc.dist
 121+===================================================================
 122+--- trunk.orig/.procmailrc.dist 2009-01-28 15:46:53.000000000 +1100
 123+@@ -1,86 +0,0 @@
 124+-# --
 125+-# .procmailrc - procmailrc of the OTRS user
 126+-# Copyright (C) 2001-2008 OTRS AG, http://otrs.org/
 127+-# --
 128+-# $Id: .procmailrc.dist,v 1.4 2008/10/15 17:19:21 martin Exp $
 129+-# --
 130+-# This software comes with ABSOLUTELY NO WARRANTY. For details, see
 131+-# the enclosed file COPYING for license information (GPL). If you
 132+-# did not receive this file, see http://www.gnu.org/licenses/gpl-2.0.txt.
 133+-# --
 134+-
 135+-#SYS_HOME=/opt/otrs/
 136+-SYS_HOME=$HOME
 137+-
 138+-SHELL=/bin/sh
 139+-PATH=/bin:/usr/bin:/usr/local/bin
 140+-MONTHFOLDER=`date +%Y-%m`
 141+-YEARFOLDER=`date +%Y`
 142+-LOGFILE=$SYS_HOME/var/log/procmail-$MONTHFOLDER.log
 143+-VERBOSE=on
 144+-
 145+-
 146+-# Remove all X-OTRS Header (allow this only for trusted email)
 147+-# e. g. from *@example.com
 148+-
 149+-:0 fhw :
 150+-* !^From.*@example.com
 151+-| grep -vi '^X-OTRS-'
 152+-
 153+-# or just not emails with "X-OTRS-Ident: ahfiw2Fw32r230dddl2foeo3r" header!
 154+-#:0 fhw :
 155+-#* !^X-OTRS-Ident: ahfiw2Fw32r230dddl2foeo3r
 156+-#| grep -vi '^X-OTRS-'
 157+-
 158+-
 159+-
 160+-# Examples for queue presorting.
 161+-
 162+-:0 fhw :
 163+-* TO:.*@example.com
 164+-| formail -I "X-OTRS-Queue: example"
 165+-
 166+-:0 fhw :
 167+-* ^List-Id:.*OpenAntiVirus
 168+-| formail -I "X-OTRS-Queue: OpenAntiVirus"
 169+-
 170+-
 171+-# Example for add free form key and value (max 3).
 172+-
 173+-:0 fhw :
 174+-* TO:.*@example.com
 175+-| formail -I "X-OTRS-ArticleKey1: Test" | formail -I "X-OTRS-ArticleValue1: True!"
 176+-
 177+-
 178+-# Example for assigning the "email domain as customer ID" automaticaly.
 179+-
 180+-#:0hc
 181+-#CUSTOMERID=|formail -X "From:"|perl -e '$i=<STDIN>; $i=~s/^From: //;$i=~s/\(.*?\)//;$i=~s/<(.*?)>/$1/;$i=~s/ //g;$i=~s/.*@(.*)/$1/;print $i'
 182+-#
 183+-#:0 fhw :
 184+-#| formail -I "X-OTRS-CustomerNo: $CUSTOMERID"
 185+-
 186+-
 187+-# Backup of all incoming emails.
 188+-# It's always better to have a backup of all incoming emails!
 189+-
 190+-#:0 c :
 191+-#$SYS_HOME/var/INBOX.Backup.$MONTHFOLDER
 192+-
 193+-
 194+-# Pipe all email into the PostMaster process.
 195+-
 196+-:0 :
 197+-| $SYS_HOME/bin/PostMaster.pl
 198+-
 199+-
 200+-# spool all the rest (which the PostMaster.pl can't process!)
 201+-# If the database is down or the PostMaster.pl exit was not '0'!
 202+-
 203+-:0 :
 204+-$SYS_HOME/var/spool/.
 205+-
 206+-
 207+-# end of .procmailrc
 208+-
 209+-
 210+Index: trunk/INSTALL
 211+===================================================================
 212+--- trunk.orig/INSTALL 2009-01-28 15:44:01.000000000 +1100
 213+@@ -74,7 +74,7 @@
 214+ ------------
 215+ Add user:
 216+ ---------
 217+- $shell: useradd -d /opt/otrs/ -c 'OTRS user' otrs
 218++ $shell: useradd -d /opt/otrs/home/ -c 'OTRS user' otrs
 219+
 220+ Add user to webserver group (if the webserver is not running with OTRS user):
 221+ -----------------------------------------------------------------------------
 222+@@ -115,12 +115,26 @@
 223+
 224+ 7. File Permissions:
 225+ -----------------
 226+- Set the file permissions with
 227+- "$HOME/bin/SetPermissions.sh <OTRS_HOME> <OTRS_USER> <WEBSERVER_USER> [OTRS_GROUP] [WEB_GROUP]"
 228+- e. g.
 229+- Webserver with OTRS user: "SetPermissions.sh /opt/otrs otrs otrs"
 230+- Webserver with wwwrun user (e. g. SuSE): "SetPermissions.sh /opt/otrs otrs wwwrun"
 231+- Webserver with apache user (e. g. Redhat): "SetPermissions.sh /opt/otrs otrs apache apache apache"
 232++ To set the file permissions with a functional package manager:
 233++ "$HOME/bin/SetPermissions.pl --otrs-user=<OTRS_USER> --web-user=<WEBSERVER_USER> [--otrs-group=<OTRS_GROUP>] [--web-group=<WEB_GROUP>] <OTRS_HOME>"
 234++
 235++ e. g.
 236++ Webserver with OTRS user:
 237++ "SetPermissions.pl --otrs-user=otrs --web-user=otrs /opt/otrs"
 238++ Webserver with wwwrun user (e. g. SuSE):
 239++ "SetPermissions.pl --otrs-user=otrs --web-user=wwwrun /opt/otrs"
 240++ Webserver with apache user (e. g. Redhat):
 241++ "SetPermissions.pl --otrs-user=otrs --web-user=apache --otrs-group=apache --web-group=apache /opt/otrs"
 242++
 243++ To set the file permissions with package manager disabled:
 244++ "$HOME/bin/SetPermissions.pl --secure --otrs-user=<OTRS_USER> --web-user=<WEBSERVER_USER> --admin-user=<ADMIN_USER> [--otrs-group=<OTRS_GROUP>] [--web-group=<WEB_GROUP>] [--admin-group=<ADMIN_GROUP] <OTRS_HOME>"
 245++
 246++ e.g.
 247++ "SetPermissions.pl --secure --otrs-user=otrs --web-user=otrs --admin-user=root /opt/otrs"
 248++
 249++ You will also need to add the following to Kernel/Config.pm:
 250++
 251++ $Self->{SecureMode} = 1;
 252+
 253+ 8. Database setup:
 254+ ---------------
 255+Index: trunk/Kernel/Modules/AdminGenericAgent.pm
 256+===================================================================
 257+--- trunk.orig/Kernel/Modules/AdminGenericAgent.pm 2009-01-28 15:46:53.000000000 +1100
 258+@@ -533,6 +533,11 @@
 259+ }
 260+ }
 261+
 262++ # Secure mode
 263++ if ( !$Self->{ConfigObject}->Get( 'SecureMode' ) ) {
 264++ $Self->{LayoutObject}->Block( Name => 'InsecureOptions' );
 265++ }
 266++
 267+ # html search mask output
 268+ my $Output = $Self->{LayoutObject}->Header( Title => 'Affected Tickets' );
 269+ $Output .= $Self->{LayoutObject}->NavigationBar();
 270+@@ -1106,6 +1111,11 @@
 271+ }
 272+ }
 273+
 274++ # Secure mode
 275++ if ( !$Self->{ConfigObject}->Get( 'SecureMode' ) ) {
 276++ $Self->{LayoutObject}->Block( Name => 'InsecureOptions' );
 277++ }
 278++
 279+ # generate search mask
 280+ my $Output = $Self->{LayoutObject}->Header( Title => 'Edit' );
 281+ $Output .= $Self->{LayoutObject}->NavigationBar();
 282+Index: trunk/Kernel/Modules/AdminSelectBox.pm
 283+===================================================================
 284+--- trunk.orig/Kernel/Modules/AdminSelectBox.pm 2009-01-28 15:46:53.000000000 +1100
 285+@@ -35,6 +35,11 @@
 286+ sub Run {
 287+ my ( $Self, %Param ) = @_;
 288+
 289++ if ( $Self->{ConfigObject}->Get( 'SecureMode' ) ) {
 290++ $Self->{LayoutObject}->FatalError( Message => "The SQL box is disabled in secure mode." );
 291++ return;
 292++ }
 293++
 294+ # ------------------------------------------------------------ #
 295+ # print form
 296+ # ------------------------------------------------------------ #
 297+Index: trunk/Kernel/Modules/AdminSysConfig.pm
 298+===================================================================
 299+--- trunk.orig/Kernel/Modules/AdminSysConfig.pm 2009-01-28 15:46:53.000000000 +1100
 300+@@ -45,6 +45,11 @@
 301+ my $Group = '';
 302+ my $Anker = '';
 303+
 304++ if ( $Self->{ConfigObject}->Get( 'SecureMode' ) ) {
 305++ $Self->{LayoutObject}->FatalError( Message => "SysConfig is disabled in secure mode." );
 306++ return;
 307++ }
 308++
 309+ # write default file
 310+ if ( !$Self->{ParamObject}->GetParam( Param => 'DontWriteDefault' ) ) {
 311+ if ( !$Self->{SysConfigObject}->WriteDefault() ) {
 312+Index: trunk/Kernel/Output/HTML/NavBarModuleAdmin.pm
 313+===================================================================
 314+--- trunk.orig/Kernel/Output/HTML/NavBarModuleAdmin.pm 2009-01-28 15:46:53.000000000 +1100
 315+@@ -88,6 +88,17 @@
 316+ }
 317+
 318+ }
 319++
 320++ # Disable modules disabled by SecureMode
 321++ if ( $Self->{ConfigObject}->Get( 'SecureMode' ) ) {
 322++ for my $BlacklistedModule ( qw'AdminPackageManager AdminSelectBox AdminSysConfig' ) {
 323++ if ( $Module eq $BlacklistedModule ) {
 324++ $Shown = 0;
 325++ last;
 326++ }
 327++ }
 328++ }
 329++
 330+ next if !$Shown;
 331+
 332+ my $Key = sprintf( "%07d", $Hash{NavBarModule}->{Prio} || 0 );
 333+Index: trunk/Kernel/Output/HTML/Standard/AdminGenericAgent.dtl
 334+===================================================================
 335+--- trunk.orig/Kernel/Output/HTML/Standard/AdminGenericAgent.dtl 2009-01-28 15:46:53.000000000 +1100
 336+@@ -476,14 +476,14 @@
 337+ </td>
 338+ </tr>
 339+ <tr>
 340+- <td class="mainhead" width="50%">$Text{"CMD"}</td>
 341++ <td class="mainhead" width="50%">$Text{"Send Notification"}</td>
 342+ <td class="mainhead" width="50%">$Text{"Delete"}</td>
 343+ </tr>
 344+- <tr>
 345+ <td class="contentbody">
 346+- <input type="text" name="NewCMD" value="$QData{"NewCMD"}" size="40"/>
 347++ $Text{"Send no notifications"}: $Data{"SendNoNotificationOption"}
 348+ <br/>
 349+- ($Text{"This command will be executed. ARG[0] will be the ticket number. ARG[1] the ticket id."})
 350++ $Text{"Yes means, send no agent and customer notifications on changes."}
 351++ $Text{"No means, send agent and customer notifications on changes."}
 352+ </td>
 353+ <td class="contentbody">
 354+ $Text{"Delete tickets"}: $Data{"DeleteOption"}
 355+@@ -492,13 +492,20 @@
 356+ <b>($Text{"Warning! This tickets will be removed from the database! This tickets are lost!"})</b>
 357+ </font>
 358+ </td>
 359++ <tr>
 360+ </tr>
 361++<!-- dtl:block:InsecureOptions -->
 362+ <tr>
 363++ <td class="mainhead" width="50%">$Text{"CMD"}</td>
 364+ <td class="mainhead" width="50%">$Text{"Module"}</td>
 365+- <td class="mainhead" width="50%">$Text{"Send Notification"}</td>
 366+ </tr>
 367+ <tr>
 368+ <td class="contentbody">
 369++ <input type="text" name="NewCMD" value="$QData{"NewCMD"}" size="40"/>
 370++ <br/>
 371++ ($Text{"This command will be executed. ARG[0] will be the ticket number. ARG[1] the ticket id."})
 372++ </td>
 373++ <td class="contentbody">
 374+ <table>
 375+ <tr>
 376+ <td valign="top">$Text{"Module"}:</td>
 377+@@ -548,13 +555,8 @@
 378+ </tr>
 379+ </table>
 380+ </td>
 381+- <td class="contentbody">
 382+- $Text{"Send no notifications"}: $Data{"SendNoNotificationOption"}
 383+- <br/>
 384+- $Text{"Yes means, send no agent and customer notifications on changes."}
 385+- $Text{"No means, send agent and customer notifications on changes."}
 386+- </td>
 387+ </tr>
 388++<!-- dtl:block:InsecureOptions -->
 389+ <tr>
 390+ <td colspan="2" class="contentfooter">
 391+ <input class="button" type="submit" value="$Text{"Save"}"/>
 392+Index: trunk/Kernel/System/GenericAgent.pm
 393+===================================================================
 394+--- trunk.orig/Kernel/System/GenericAgent.pm 2009-01-28 15:46:53.000000000 +1100
 395+@@ -273,6 +273,18 @@
 396+ }
 397+ }
 398+
 399++ # Check security
 400++ if ( $Self->{ConfigObject}->Get( 'SecureMode' ) ) {
 401++ if ( $Job{New}->{Module} ) {
 402++ $Self->{LogObject}->Log( Priority => 'error', Message => "Cannot run modules in secure mode.\n" );
 403++ return;
 404++ }
 405++ if ( $Job{New}->{CMD} ) {
 406++ $Self->{LogObject}->Log( Priority => 'error', Message => "Cannot run commands in secure mode.\n" );
 407++ return;
 408++ }
 409++ }
 410++
 411+ my %Tickets = ();
 412+
 413+ # escalation tickets
 414+Index: trunk/Kernel/System/Package.pm
 415+===================================================================
 416+--- trunk.orig/Kernel/System/Package.pm 2009-01-28 15:46:53.000000000 +1100
 417+@@ -125,9 +125,9 @@
 418+ $Self->{Home} = $Self->{ConfigObject}->Get('Home');
 419+
 420+ # permission check
 421+- if ( !$Self->_FileSystemCheck() ) {
 422++ if ( !$Self->{ConfigObject}->Get( 'SecureMode' ) && !$Self->_FileSystemCheck() ) {
 423+ die "ERROR: Need write permission in OTRS home\n"
 424+- . "Try: \$OTRS_HOME/bin/SetPermissions.sh !!!\n";
 425++ . "Try: \$OTRS_HOME/bin/SetPermissions.pl !!!\n";
 426+ }
 427+
 428+ return $Self;
 429+@@ -2310,21 +2310,7 @@
 430+
 431+ # create test files in following directories
 432+ for (qw(/bin/ /Kernel/ /Kernel/System/ /Kernel/Output/ /Kernel/Output/HTML/ /Kernel/Modules/)) {
 433+- my $Location = "$Home/$_/check_permissons.$$";
 434+- my $FH;
 435+- my $Content = 'test';
 436+-
 437+- # create test file
 438+- my $Write = $Self->{MainObject}->FileWrite(
 439+- Location => $Location,
 440+- Content => \$Content,
 441+- );
 442+-
 443+- # return false if not created
 444+- return if !$Write;
 445+-
 446+- # delete test file
 447+- $Self->{MainObject}->FileDelete( Location => $Location );
 448++ return if ! -w "$Home/$_";
 449+ }
 450+ return 1;
 451+ }
 452+Index: trunk/Kernel/System/Ticket/ArticleStorageFS.pm
 453+===================================================================
 454+--- trunk.orig/Kernel/System/Ticket/ArticleStorageFS.pm 2009-01-28 15:46:53.000000000 +1100
 455+@@ -55,10 +55,10 @@
 456+ $Self->{LogObject}->Log(
 457+ Priority => 'notice',
 458+ Message => "Can't create $Self->{ArticleDataDir}/check_permissions_$$: $Error, "
 459+- . "Try: \$OTRS_HOME/bin/SetPermissions.sh !",
 460++ . "Try: \$OTRS_HOME/bin/SetPermissions.pl !",
 461+ );
 462+ die "Error: Can't create $Self->{ArticleDataDir}/check_permissions_$$: $Error \n\n "
 463+- . "Try: \$OTRS_HOME/bin/SetPermissions.sh !!!\n";
 464++ . "Try: \$OTRS_HOME/bin/SetPermissions.pl !!!\n";
 465+ }
 466+ return 1;
 467+ }
 468+Index: trunk/README.webserver
 469+===================================================================
 470+--- trunk.orig/README.webserver 2009-01-28 15:46:53.000000000 +1100
 471+@@ -48,11 +48,21 @@
 472+ because you have other applications running on this server, you can
 473+ also work with group permissions (more tricky).
 474+
 475+- Use "$HOME/bin/SetPermissions.sh <OTRS_HOME> <OTRS_USER> <WEBSERVER_USER> [OTRS_GROUP] [WEB_GROUP]"
 476++ Use "$HOME/bin/SetPermissions.pl --otrs-user=<OTRS_USER> --web-user=<WEBSERVER_USER> [--otrs-group=<OTRS_GROUP>] [--web-group=<WEB_GROUP>] <OTRS_HOME>"
 477+ e. g.
 478+- Webserver with otrs user: "SetPermissions.sh /opt/otrs otrs otrs"
 479+- Webserver with wwwrun user (e. g. SuSE): "SetPermissions.sh /opt/otrs otrs wwwrun"
 480+- Webserver with apache user (e. g. Redhat): "SetPermissions.sh /opt/otrs otrs apache"
 481++ Webserver with OTRS user:
 482++ "SetPermissions.pl --otrs-user=otrs --web-user=otrs /opt/otrs"
 483++ Webserver with wwwrun user (e. g. SuSE):
 484++ "SetPermissions.pl --otrs-user=otrs --web-user=wwwrun /opt/otrs"
 485++ Webserver with apache user (e. g. Redhat):
 486++ "SetPermissions.pl --otrs-user=otrs --web-user=apache --otrs-group=apache --web-group=apache /opt/otrs"
 487++
 488++ To set the file permissions with package manager disabled:
 489++ "$HOME/bin/SetPermissions.pl --secure --otrs-user=<OTRS_USER> --web-user=<WEBSERVER_USER> --admin-user=<ADMIN_USER> [--otrs-group=<OTRS_GROUP>] [--web-group=<WEB_GROUP>] [--admin-group=<ADMIN_GROUP] <OTRS_HOME>"
 490++
 491++ You will also need to add the following to Kernel/Config.pm:
 492++
 493++ $Self->{SecureMode} = 1;
 494+
 495+ b)
 496+ *)
 497+Index: trunk/UPGRADING
 498+===================================================================
 499+--- trunk.orig/UPGRADING 2009-01-28 15:51:30.000000000 +1100
 500+@@ -48,7 +48,7 @@
 501+ PostgreSQL:
 502+ cat $OTRS_HOME/scripts/DBUpdate-to-2.3-post.postgresql.sql | psql otrs
 503+
 504+-*) If _no_ RPM is used, execute $OTRS_HOME/bin/SetPermissions.sh!
 505++*) If _no_ RPM is used, execute $OTRS_HOME/bin/SetPermissions.pl!
 506+
 507+ *) Restart your services (e. g. rcotrs restart-force or each service manually)
 508+
 509+Index: trunk/bin/SetPermissions.sh
 510+===================================================================
 511+--- trunk.orig/bin/SetPermissions.sh 2009-01-28 15:43:30.000000000 +1100
 512+@@ -20,9 +20,6 @@
 513+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 514+ # --
 515+
 516+-echo "SetPermissions.sh <\$Revision: 1.32 $> - set OTRS file permissions"
 517+-echo "Copyright (C) 2001-2008 OTRS AG, http://otrs.org/"
 518+-
 519+ if ! test $1 || ! test $2 || ! test $3; then
 520+ # check required options
 521+ echo ""
 522+@@ -42,92 +39,12 @@
 523+ [ "$5" != "" ]&& WEBGROUP=$5
 524+ fi
 525+
 526+-# set permission
 527+-echo "Setting file permissions... "
 528+-# set all files writeabel for webserver user (needed for package manager)
 529+-echo "chown -R $WEBUSER:$OTRSGROUP $OTRSDEST"
 530+-chown $WEBUSER:$OTRSGROUP $OTRSDEST
 531+-chown -R $WEBUSER:$OTRSGROUP $OTRSDEST
 532+-echo "chmod -R og+rw $OTRSDEST"
 533+-chmod 755 $OTRSDEST
 534+-chmod -R ug+wr $OTRSDEST/*
 535+-
 536+-# set the $HOME to the OTRS user
 537+-echo "chown $OTRSUSER:$OTRSGROUP $OTRSDEST"
 538+-chown $OTRSUSER:$OTRSGROUP $OTRSDEST
 539+-
 540+-# set the fetchmail rc to OTRS user
 541+-if test -e $OTRSDEST/.fetchmailrc; then
 542+- echo "chown $OTRSUSER:$OTRSGROUP $OTRSDEST/.fetchmailrc"
 543+- chown $OTRSUSER:$OTRSGROUP $OTRSDEST/.fetchmailrc
 544+- echo "chmod 0600 $OTRSDEST/.fetchmailrc"
 545+- chmod 0600 $OTRSDEST/.fetchmailrc
 546+-fi
 547+-
 548+-# set procmailrc
 549+-if test -e $OTRSDEST/.procmailrc; then
 550+- echo "chown $OTRSUSER:$OTRSGROUP $OTRSDEST/.procmailrc"
 551+- chown $OTRSUSER:$OTRSGROUP $OTRSDEST/.procmailrc
 552+- echo "chmod 0644 $OTRSDEST/.procmailrc"
 553+- chmod 0644 $OTRSDEST/.procmailrc
 554+-fi
 555+-
 556+-# set mailfilter
 557+-if test -e $OTRSDEST/.mailfilter; then
 558+- echo "chown $OTRSUSER:$OTRSGROUP $OTRSDEST/.mailfilter"
 559+- chown $OTRSUSER:$OTRSGROUP $OTRSDEST/.mailfilter
 560+- echo "chmod 0600 $OTRSDEST/.mailfilter"
 561+- chmod 0600 $OTRSDEST/.mailfilter
 562+-fi
 563+-
 564+-# set forward (just for Exim)
 565+-if test -e $OTRSDEST/.forward; then
 566+- echo "chown $OTRSUSER:$OTRSGROUP $OTRSDEST/.forward"
 567+- chown $OTRSUSER:$OTRSGROUP $OTRSDEST/.forward
 568+-fi
 569+-
 570+-# var/*
 571+-
 572+-# set the var directory to OTRS and webserver user
 573+-echo "chown -R $OTRSUSER:$WEBGROUP $OTRSDEST/var/"
 574+-chown -R $OTRSUSER:$WEBGROUP $OTRSDEST/var/
 575+-chmod -R 2775 $OTRSDEST/var/article/
 576+-chmod -R 2775 $OTRSDEST/var/log/
 577+-chmod -R 2775 $OTRSDEST/var/tmp/
 578+-
 579+-# set the var/sessions directory to OTRS and webserver user
 580+-echo "chown -R $WEBUSER:$WEBGROUP $OTRSDEST/var/sessions/"
 581+-chown -R $WEBUSER:$WEBGROUP $OTRSDEST/var/sessions/
 582+-
 583+-# set the var/log/TicketCounter.log file to OTRS and webserver user
 584+-echo "touch && chown $OTRSUSER:$WEBGROUP $OTRSDEST/var/log/TicketCounter.log"
 585+-touch $OTRSDEST/var/log/TicketCounter.log
 586+-chown $OTRSUSER:$WEBGROUP $OTRSDEST/var/log/TicketCounter.log
 587+-chmod 664 $OTRSDEST/var/log/TicketCounter.log
 588+-
 589+-
 590+-# bin/*
 591+-
 592+-# set all bin/* as executable
 593+-echo "chmod -R 775 $OTRSDEST/bin/"
 594+-chmod -R 775 $OTRSDEST/bin/
 595+-
 596+-# set the DeleteSessionIDs.pl just to OTRS user
 597+-echo "(chown && chmod 700) $OTRSUSER:0 $OTRSDEST/bin/DeleteSessionIDs.pl"
 598+-chmod 700 $OTRSDEST/bin/DeleteSessionIDs.pl
 599+-chown $OTRSUSER:0 $OTRSDEST/bin/DeleteSessionIDs.pl
 600+-
 601+-# set the UnlockTickets.pl just to OTRS user
 602+-echo "(chown && chmod 700) $OTRSUSER:0 $OTRSDEST/bin/UnlockTickets.pl"
 603+-chmod 700 $OTRSDEST/bin/UnlockTickets.pl
 604+-chown $OTRSUSER:0 $OTRSDEST/bin/UnlockTickets.pl
 605+-
 606+-# set the bin/otrs.getConfig just to OTRS user
 607+-echo "(chown && chmod 700) $OTRSUSER:0 $OTRSDEST/bin/otrs.getConfig"
 608+-chmod 700 $OTRSDEST/bin/otrs.getConfig
 609+-chown $OTRSUSER:0 $OTRSDEST/bin/otrs.getConfig
 610+
 611+-# set write permission for web installer
 612+-chown $WEBUSER $OTRSDEST/Kernel/Config.pm
 613++`dirname "$0"`/SetPermissions.pl \
 614++ --web-user="$WEBUSER" \
 615++ --otrs-user="$OTRSUSER" \
 616++ --web-group="$WEBGROUP" \
 617++ --otrs-group="$OTRSGROUP" \
 618++ "$OTRSDEST"
 619+
 620+ exit;
 621+Index: trunk/home/.fetchmailrc.dist
 622+===================================================================
 623+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
 624+@@ -0,0 +1,31 @@
 625++# --
 626++# .fetchmailrc - fetchmailrc of the OTRS user
 627++# Copyright (C) 2001-2008 OTRS AG, http://otrs.org/
 628++# --
 629++# $Id: .fetchmailrc.dist,v 1.3 2008/03/07 17:00:14 martin Exp $
 630++# --
 631++# This software comes with ABSOLUTELY NO WARRANTY. For details, see
 632++# the enclosed file COPYING for license information (GPL). If you
 633++# did not receive this file, see http://www.gnu.org/licenses/gpl-2.0.txt.
 634++# --
 635++# Note: Continue lines with whitespace at the beginning of each newline
 636++# --
 637++
 638++#-----------------#
 639++# simple example:
 640++#-----------------#
 641++
 642++#poll <MAIL_SERVER> protocol POP3 user <MAIL_USERNAME> pass <MAIL_PASSWORD> is <LOCAL_OTRS_USERNAME> here
 643++
 644++#-------------------------------------------------#
 645++# example for polling from an IMAP-Server via SSL.
 646++#-------------------------------------------------#
 647++
 648++#poll <MAIL_SERVER> protocol IMAP port 993 plugin "openssl s_client -connect %h:%p" user <MAIL_USERNAME> pass <MAIL_PASSWORD> is <LOCAL_OTRS_USERNAME> here
 649++
 650++#--------------------------------------------------------#
 651++# The openssl command has to be installed and accessible
 652++# for the otrs user.
 653++# If the otrs user cannot find openssl, try:
 654++# plugin "/path/to/openssl s_client -connect %h:%p"
 655++#--------------------------------------------------------#
 656+Index: trunk/home/.mailfilter.dist
 657+===================================================================
 658+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
 659+@@ -0,0 +1,79 @@
 660++# --
 661++# .mailfilter - mailfilter of the OTRS user
 662++# Copyright (C) 2003 Wiktor Wodecki <wiktor.wodecki@net-m.de>
 663++# --
 664++# $Id: .mailfilter.dist,v 1.3 2007/02/06 16:01:13 tr Exp $
 665++# --
 666++# This software comes with ABSOLUTELY NO WARRANTY. For details, see
 667++# the enclosed file COPYING for license information (GPL). If you
 668++# did not receive this file, see http://www.gnu.org/licenses/gpl.txt.
 669++# --
 670++
 671++#SYS_HOME=/opt/otrs
 672++SYS_HOME="$HOME/.."
 673++
 674++import DEFAULT
 675++LOCALDEFAULT=$DEFAULT
 676++DEFAULT=${SYS_HOME}/var/spool/`date +%s`${FROM}${SIZE}
 677++MONTHFOLDER=`date +%Y-%m`
 678++YEARFOLDER=`date +%Y`
 679++
 680++
 681++# Remove all X-OTRS Header (allow this only for trusted email)
 682++# e. g. from *@example.com
 683++
 684++if (/^To:.*@example.com/)
 685++{
 686++ xfilter "grep -vi '^X-OTRS-'"
 687++}
 688++
 689++# or just not emails with "X-OTRS-Ident: ahfiw2Fw32r230dddl2foeo3r" header!
 690++#if (/^X-OTRS-Ident: ahfiw2Fw32r230dddl2foeo3r/)
 691++#{
 692++# xfilter "grep -vi '^X-OTRS-'"
 693++#}
 694++
 695++
 696++
 697++# Examples for queue presorting.
 698++
 699++if (/^To:.*@example.com/)
 700++{
 701++ xfilter "formail -I \"X-OTRS-Queue: example\""
 702++}
 703++
 704++if (/^List-Id:.*OpenAntiVirus/)
 705++{
 706++ xfilter "formail -I \"X-OTRS-Queue: OpenAntiVirus\""
 707++}
 708++
 709++
 710++# Example for add free form key and value (max 3).
 711++
 712++if (/^To:.*@example.com/)
 713++{
 714++ xfilter "formail -I \"X-OTRS-ArticleKey1: Test\""
 715++ xfilter "formail -I \"X-OTRS-ArticleValue1: True!\""
 716++}
 717++
 718++
 719++# Backup of all incoming emails.
 720++# It's always better to have a backup of all incoming emails!
 721++
 722++cc ${SYS_HOME}/var/INBOX.Backup.${MONTHFOLDER}
 723++
 724++
 725++# Pipe all email into the PostMaster process.
 726++
 727++xfilter "${SYS_HOME}/bin/PostMaster.pl"
 728++
 729++
 730++# spool all the rest (which the PostMaster.pl can't process!)
 731++# If the database is down or the PostMaster.pl exit was not '0'!
 732++
 733++to $DEFAULT
 734++
 735++
 736++# end of .mailfilter
 737++
 738++
 739+Index: trunk/home/.procmailrc.dist
 740+===================================================================
 741+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
 742+@@ -0,0 +1,86 @@
 743++# --
 744++# .procmailrc - procmailrc of the OTRS user
 745++# Copyright (C) 2001-2008 OTRS AG, http://otrs.org/
 746++# --
 747++# $Id: .procmailrc.dist,v 1.4 2008/10/15 17:19:21 martin Exp $
 748++# --
 749++# This software comes with ABSOLUTELY NO WARRANTY. For details, see
 750++# the enclosed file COPYING for license information (GPL). If you
 751++# did not receive this file, see http://www.gnu.org/licenses/gpl-2.0.txt.
 752++# --
 753++
 754++#SYS_HOME=/opt/otrs/
 755++SYS_HOME="$HOME/.."
 756++
 757++SHELL=/bin/sh
 758++PATH=/bin:/usr/bin:/usr/local/bin
 759++MONTHFOLDER=`date +%Y-%m`
 760++YEARFOLDER=`date +%Y`
 761++LOGFILE=$SYS_HOME/var/log/procmail-$MONTHFOLDER.log
 762++VERBOSE=on
 763++
 764++
 765++# Remove all X-OTRS Header (allow this only for trusted email)
 766++# e. g. from *@example.com
 767++
 768++:0 fhw :
 769++* !^From.*@example.com
 770++| grep -vi '^X-OTRS-'
 771++
 772++# or just not emails with "X-OTRS-Ident: ahfiw2Fw32r230dddl2foeo3r" header!
 773++#:0 fhw :
 774++#* !^X-OTRS-Ident: ahfiw2Fw32r230dddl2foeo3r
 775++#| grep -vi '^X-OTRS-'
 776++
 777++
 778++
 779++# Examples for queue presorting.
 780++
 781++:0 fhw :
 782++* TO:.*@example.com
 783++| formail -I "X-OTRS-Queue: example"
 784++
 785++:0 fhw :
 786++* ^List-Id:.*OpenAntiVirus
 787++| formail -I "X-OTRS-Queue: OpenAntiVirus"
 788++
 789++
 790++# Example for add free form key and value (max 3).
 791++
 792++:0 fhw :
 793++* TO:.*@example.com
 794++| formail -I "X-OTRS-ArticleKey1: Test" | formail -I "X-OTRS-ArticleValue1: True!"
 795++
 796++
 797++# Example for assigning the "email domain as customer ID" automaticaly.
 798++
 799++#:0hc
 800++#CUSTOMERID=|formail -X "From:"|perl -e '$i=<STDIN>; $i=~s/^From: //;$i=~s/\(.*?\)//;$i=~s/<(.*?)>/$1/;$i=~s/ //g;$i=~s/.*@(.*)/$1/;print $i'
 801++#
 802++#:0 fhw :
 803++#| formail -I "X-OTRS-CustomerNo: $CUSTOMERID"
 804++
 805++
 806++# Backup of all incoming emails.
 807++# It's always better to have a backup of all incoming emails!
 808++
 809++#:0 c :
 810++#$SYS_HOME/var/INBOX.Backup.$MONTHFOLDER
 811++
 812++
 813++# Pipe all email into the PostMaster process.
 814++
 815++:0 :
 816++| $SYS_HOME/bin/PostMaster.pl
 817++
 818++
 819++# spool all the rest (which the PostMaster.pl can't process!)
 820++# If the database is down or the PostMaster.pl exit was not '0'!
 821++
 822++:0 :
 823++$SYS_HOME/var/spool/.
 824++
 825++
 826++# end of .procmailrc
 827++
 828++
 829+Index: trunk/scripts/DBUpdate-to-2.3.pl
 830+===================================================================
 831+--- trunk.orig/scripts/DBUpdate-to-2.3.pl 2009-01-28 15:46:53.000000000 +1100
 832+@@ -82,7 +82,7 @@
 833+
 834+ # error handling
 835+ if ( !$Success ) {
 836+- print STDOUT "Can't write config files! Please run the SetPermissions.sh and try it again.";
 837++ print STDOUT "Can't write config files! Please run the SetPermissions.pl and try it again.";
 838+ exit 0;
 839+ }
 840+
 841+Index: trunk/var/cron/aaa_base.dist
 842+===================================================================
 843+--- trunk.orig/var/cron/aaa_base.dist 2009-01-28 15:51:30.000000000 +1100
 844+@@ -11,4 +11,5 @@
 845+
 846+ # Who gets the cron emails?
 847+ MAILTO="root@localhost"
 848++OTRS_HOME=/opt/otrs
 849+
 850+Index: trunk/var/cron/generic_agent-database.dist
 851+===================================================================
 852+--- trunk.orig/var/cron/generic_agent-database.dist 2009-01-28 15:51:30.000000000 +1100
 853+@@ -10,5 +10,5 @@
 854+ # --
 855+
 856+ # start generic agent every 10 minutes
 857+-*/10 * * * * $HOME/bin/GenericAgent.pl -c db >> /dev/null
 858++*/10 * * * * $OTRS_HOME/bin/GenericAgent.pl -c db >> /dev/null
 859+
 860+Index: trunk/var/cron/generic_agent.dist
 861+===================================================================
 862+--- trunk.orig/var/cron/generic_agent.dist 2009-01-28 15:51:30.000000000 +1100
 863+@@ -10,9 +10,9 @@
 864+ # --
 865+
 866+ # start generic agent every 20 minutes
 867+-*/20 * * * * $HOME/bin/GenericAgent.pl >> /dev/null
 868++*/20 * * * * $OTRS_HOME/bin/GenericAgent.pl >> /dev/null
 869+
 870+ # example to execute GenericAgent.pl on 23:00 with
 871+ # Kernel::Config::GenericAgentMove job file
 872+-#0 23 * * * $HOME/bin/GenericAgent.pl -c "Kernel::Config::GenericAgentMove" >> /dev/null
 873++#0 23 * * * $OTRS_HOME/bin/GenericAgent.pl -c "Kernel::Config::GenericAgentMove" >> /dev/null
 874+
 875+Index: trunk/var/cron/pending_jobs.dist
 876+===================================================================
 877+--- trunk.orig/var/cron/pending_jobs.dist 2009-01-28 15:51:30.000000000 +1100
 878+@@ -10,5 +10,5 @@
 879+ # --
 880+
 881+ # check every 120 min the pending jobs
 882+-45 */2 * * * $HOME/bin/PendingJobs.pl >> /dev/null
 883++45 */2 * * * $OTRS_HOME/bin/PendingJobs.pl >> /dev/null
 884+
 885+Index: trunk/var/cron/postmaster.dist
 886+===================================================================
 887+--- trunk.orig/var/cron/postmaster.dist 2009-01-28 15:51:30.000000000 +1100
 888+@@ -11,5 +11,5 @@
 889+
 890+ # check daily the spool directory of OTRS
 891+ #10 0 * * * * [ -e /etc/init.d/otrs ] && /etc/init.d/otrs cleanup >> /dev/null; [ -e /etc/rc.d/init.d/otrs ] && /etc/rc.d/init.d/otrs cleanup >> /dev/null
 892+-10 0 * * * $HOME/bin/otrs.cleanup >> /dev/null
 893++10 0 * * * $OTRS_HOME/bin/otrs.cleanup >> /dev/null
 894+
 895+Index: trunk/var/cron/postmaster_mailbox.dist
 896+===================================================================
 897+--- trunk.orig/var/cron/postmaster_mailbox.dist 2009-01-28 15:51:30.000000000 +1100
 898+@@ -10,5 +10,5 @@
 899+ # --
 900+
 901+ # fetch emails every 10 minutes
 902+-*/10 * * * * $HOME/bin/PostMasterMailbox.pl >> /dev/null
 903++*/10 * * * * $OTRS_HOME/bin/PostMasterMailbox.pl >> /dev/null
 904+
 905+Index: trunk/var/cron/rebuild_ticket_index.dist
 906+===================================================================
 907+--- trunk.orig/var/cron/rebuild_ticket_index.dist 2009-01-28 15:51:30.000000000 +1100
 908+@@ -10,5 +10,5 @@
 909+ # --
 910+
 911+ # just every day
 912+-01 01 * * * $HOME/bin/RebuildTicketIndex.pl >> /dev/null
 913++01 01 * * * $OTRS_HOME/bin/RebuildTicketIndex.pl >> /dev/null
 914+
 915+Index: trunk/var/cron/session.dist
 916+===================================================================
 917+--- trunk.orig/var/cron/session.dist 2009-01-28 15:51:30.000000000 +1100
 918+@@ -10,5 +10,5 @@
 919+ # --
 920+
 921+ # delete every 120 minutes old/idle session ids
 922+-55 */2 * * * $HOME/bin/DeleteSessionIDs.pl --expired >> /dev/null
 923++55 */2 * * * $OTRS_HOME/bin/DeleteSessionIDs.pl --expired >> /dev/null
 924+
 925+Index: trunk/var/cron/unlock.dist
 926+===================================================================
 927+--- trunk.orig/var/cron/unlock.dist 2009-01-28 15:51:30.000000000 +1100
 928+@@ -10,5 +10,5 @@
 929+ # --
 930+
 931+ # unlock every hour old locked tickets
 932+-35 * * * * $HOME/bin/UnlockTickets.pl --timeout >> /dev/null
 933++35 * * * * $OTRS_HOME/bin/UnlockTickets.pl --timeout >> /dev/null
 934+
Property changes on: trunk/otrs/patches/60-really-secure-mode.patch
___________________________________________________________________
Added: svn:eol-style
1935 + native
Index: trunk/otrs/patches/50-one-click-spam.patch
@@ -0,0 +1,176 @@
 2+Index: trunk/var/httpd/htdocs/oneclick.js
 3+===================================================================
 4+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
 5+@@ -0,0 +1,91 @@
 6++var TicketCount = 0;
 7++
 8++function createXMLHttpRequest() {
 9++ try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
 10++ try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
 11++ try { return new XMLHttpRequest(); } catch(e) {}
 12++ alert("XMLHttpRequest is not supported by your browser.");
 13++ return null;
 14++}
 15++
 16++function moveTicket( ticketdiv, DestQueueID ) {
 17++ function a( statusbar, xhReq, RevertURL ) {
 18++ var i=3;
 19++ return function() {
 20++ if ( xhReq.readyState != 4 ) {
 21++ statusbar.innerHTML+='<img src="' + ImagePath + 'notready.png" alt="."> ';
 22++ return;
 23++ } else {
 24++ statusbar.innerHTML = '<img src="' + ImagePath + 'ready.png" alt="OK">'+
 25++ ' <a href="' + RevertURL + '">Undo</a>';
 26++ TicketCount --;
 27++ if ( TicketCount == 0 ) {
 28++ document.firstChild.innerHTML = xhReq.responseText;
 29++ makeOneclickVisible();
 30++ }
 31++ }
 32++ }
 33++ }
 34++ var FormDivs = ticketdiv.getElementsByTagName( 'form' );
 35++ var MoveForm;
 36++ for( var i=0; i<FormDivs.length; i++ ) {
 37++ if ( FormDivs[i].name == "ChangeQueue" ) {
 38++ MoveForm = FormDivs[i];
 39++ break;
 40++ }
 41++ }
 42++ // Read variables from the "ChangeQueue" form
 43++ var Action = MoveForm.elements["Action"].value;
 44++ var TicketID = MoveForm.elements["TicketID"].value;
 45++ var QueueID = MoveForm.elements["QueueID"].value;
 46++ var ActionURL = MoveForm.action +
 47++ '?Action=' + Action +
 48++ '&QueueID=' + QueueID +
 49++ '&TicketID=' + TicketID +
 50++ '&DestQueueID=' + DestQueueID;
 51++ var RevertURL = MoveForm.action +
 52++ '?Action=' + Action +
 53++ '&QueueID=' + DestQueueID +
 54++ '&TicketID=' + TicketID +
 55++ '&DestQueueID=' + QueueID;
 56++ // hide the ticket display, but keep the first, black, bar
 57++ p = ticketdiv.firstChild;
 58++ while ( p.className != 'ticketview2' ) {
 59++ p = p.nextSibling;
 60++ }
 61++ p.style.display='none';
 62++ while ( p.className != 'ticketview3' ) {
 63++ p = p.nextSibling;
 64++ }
 65++ var newnode = document.createElement("div");
 66++ newnode.setAttribute( "style", "-moz-border-radius:0 0 1em 1em; background-color:white;padding-left:1em;" );
 67++ newnode.innerHTML='<img src="' + ImagePath + 'notready.png" alt=".">'
 68++ ticketdiv.replaceChild( newnode, p );
 69++ // Do the async XML call
 70++ xhReq = createXMLHttpRequest();
 71++ xhReq.open( "GET", ActionURL, true);
 72++ xhReq.onreadystatechange = a( newnode, xhReq, RevertURL );
 73++ xhReq.send( null );
 74++}
 75++
 76++function makeOneclickVisible() {
 77++ var OneclickDivs = document.getElementsByName("oneclick");
 78++ function a(x) {
 79++ return function() {
 80++ p = x.parentNode;
 81++ while ( p.className != 'ticketoverview' ) {
 82++ p = p.parentNode;
 83++ }
 84++ moveTicket( p, SpamQueueID );
 85++ };
 86++ }
 87++ TicketCount = OneclickDivs.length;
 88++ for ( var i=0; i<TicketCount; i++ ) {
 89++ OneclickDivs[i].style.display='inline';
 90++ OneclickDivs[i].style.cursor='pointer';
 91++ OneclickDivs[i].onclick=a(OneclickDivs[i]);
 92++ }
 93++}
 94++
 95++window.onload = makeOneclickVisible;
 96++
 97+Index: trunk/Kernel/Output/HTML/Standard/AgentTicketOverviewPreview.dtl
 98+===================================================================
 99+--- trunk.orig/Kernel/Output/HTML/Standard/AgentTicketOverviewPreview.dtl 2009-01-28 13:50:07.000000000 +1100
 100+@@ -9,7 +9,8 @@
 101+ # did not receive this file, see http://www.gnu.org/licenses/gpl-2.0.txt.
 102+ # --
 103+ <!-- start ticket -->
 104+-<table border="0" width="100%" cellspacing="0" cellpadding="3">
 105++<div class="ticketoverview">
 106++<table border="0" width="100%" cellspacing="0" cellpadding="3" class="ticketview">
 107+ <tr>
 108+ <td align="left" width="1%" class="mainhead">
 109+ <!-- dtl:block:Bulk -->
 110+@@ -27,7 +28,7 @@
 111+ </td>
 112+ </tr>
 113+ </table>
 114+-<table border="0" width="100%" cellspacing="0" cellpadding="3">
 115++<table border="0" width="100%" cellspacing="0" cellpadding="3" class="ticketview2">
 116+ <tr>
 117+ <td align="left" width="60%" class="menu">
 118+ <!-- dtl:block:Menu -->
 119+@@ -49,9 +50,26 @@
 120+ </td>
 121+ </tr>
 122+ </table>
 123+-<table border="0" width="100%" cellspacing="0" cellpadding="3">
 124++<table border="0" width="100%" cellspacing="0" cellpadding="3" class="ticketview3">
 125+ <tr>
 126+ <td width="75%" class="mainbody">
 127++ <div name="oneclick" style="display:none; float:right; padding: 0.5em; -moz-border-radius: 1em; background-color:#dddddd;">
 128++ <table border="0">
 129++ <tr>
 130++ <td valign="middle">
 131++ <img src="$Env{"Images"}edittrash.png" alt="" >
 132++ </td>
 133++ <td valign="middle">
 134++ 1-click<br />$Text{"Spam"}
 135++ </td>
 136++ </tr>
 137++ </table>
 138++ </div>
 139++ <script type="text/javascript">
 140++ var SpamQueueID = "$Config{"SpamQueueID"}";
 141++ var ImagePath = "$Env{"Images"}";
 142++ </script>
 143++ <script type="text/javascript" src="$Env{"Images"}../../oneclick.js"></script>
 144+ <table border="0" width="100%" cellspacing="0" cellpadding="1">
 145+ # From:, To:, Cc:
 146+ <!-- dtl:block:Row -->
 147+@@ -304,7 +322,7 @@
 148+ <!-- dtl:block:Move -->
 149+ <b>$Text{"Change queue"}:</b>
 150+ <br/>
 151+- <form action="$Env{"CGIHandle"}" method="get">
 152++ <form action="$Env{"CGIHandle"}" method="get" name="ChangeQueue">
 153+ <input type="hidden" name="Action" value="AgentTicketMove"/>
 154+ <input type="hidden" name="QueueID" value="$QData{"QueueID"}"/>
 155+ <input type="hidden" name="TicketID" value="$QData{"TicketID"}"/>
 156+@@ -319,4 +337,5 @@
 157+ </td>
 158+ </tr>
 159+ </table>
 160++</div>
 161+ <!-- end ticket -->
 162+Index: trunk/Kernel/Output/HTML/TicketOverviewPreview.pm
 163+===================================================================
 164+--- trunk.orig/Kernel/Output/HTML/TicketOverviewPreview.pm 2009-01-28 13:50:11.000000000 +1100
 165+@@ -142,6 +142,9 @@
 166+ TicketID => $Param{TicketID},
 167+ );
 168+
 169++ # Set QueueID (needed for one-click spam patch)
 170++ $Param{QueueID} = $Article{QueueID};
 171++
 172+ # run article modules
 173+ if ( ref $Self->{ConfigObject}->Get('Ticket::Frontend::ArticlePreViewModule') eq 'HASH' ) {
 174+ my %Jobs = %{ $Self->{ConfigObject}->Get('Ticket::Frontend::ArticlePreViewModule') };
Property changes on: trunk/otrs/patches/50-one-click-spam.patch
___________________________________________________________________
Added: svn:eol-style
1175 + native
Index: trunk/otrs/var/httpd/htdocs/22px-Wikimedia-logo.svg.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: trunk/otrs/var/httpd/htdocs/22px-Wikimedia-logo.svg.png
___________________________________________________________________
Added: svn:mime-type
2176 + image/png
Index: trunk/otrs/var/httpd/htdocs/22px-Wikimedia_Community_Logo.svg.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: trunk/otrs/var/httpd/htdocs/22px-Wikimedia_Community_Logo.svg.png
___________________________________________________________________
Added: svn:mime-type
3177 + image/png
Index: trunk/otrs/var/httpd/htdocs/images/Standard/ready.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: trunk/otrs/var/httpd/htdocs/images/Standard/ready.png
___________________________________________________________________
Added: svn:mime-type
4178 + image/png
Index: trunk/otrs/var/httpd/htdocs/images/Standard/notready.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: trunk/otrs/var/httpd/htdocs/images/Standard/notready.png
___________________________________________________________________
Added: svn:mime-type
5179 + image/png
Index: trunk/otrs/var/httpd/htdocs/images/Standard/edittrash.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: trunk/otrs/var/httpd/htdocs/images/Standard/edittrash.png
___________________________________________________________________
Added: svn:mime-type
6180 + image/png
Index: trunk/otrs/var/httpd/htdocs/images/Standard/clock.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/otrs/var/httpd/htdocs/images/Standard/clock.gif
___________________________________________________________________
Added: svn:mime-type
7181 + application/octet-stream
Index: trunk/otrs/var/httpd/htdocs/images/Standard/searchX.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/otrs/var/httpd/htdocs/images/Standard/searchX.gif
___________________________________________________________________
Added: svn:mime-type
8182 + application/octet-stream
Index: trunk/otrs/var/httpd/htdocs/images/Standard/user.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: trunk/otrs/var/httpd/htdocs/images/Standard/user.gif
___________________________________________________________________
Added: svn:mime-type
9183 + application/octet-stream
Index: trunk/otrs/var/httpd/htdocs/120px-Wikimedia_logo_text_RGB.svg.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: trunk/otrs/var/httpd/htdocs/120px-Wikimedia_logo_text_RGB.svg.png
___________________________________________________________________
Added: svn:mime-type
10184 + image/png
Index: trunk/otrs/README.wikimedia
@@ -0,0 +1,47 @@
 2+Patches against OTRS 2.4 CVS can be found in the patches directory, these can
 3+be applied using quilt push -a. Since quilt does not support binary files, the
 4+images are distributed separately in the var directory.
 5+
 6+10-tooltips.patch
 7+-----------------
 8+Adds Walter Zorn's tooltip library, which is required by 30-wm-brand and
 9+40-user-tooltips.
 10+
 11+20-ticket-number-search.patch
 12+-----------------------------
 13+Adds a button which uses JavaScript to search for a given ticket number and
 14+jump directly to the zoom page.
 15+
 16+Needs searchX.gif.
 17+
 18+30-wm-brand.patch
 19+-----------------
 20+Adds Wikimedia-specific logos, links and layout.
 21+
 22+Needs 120px-Wikimedia_logo_text_RGB.svg.png,
 23+22px-Wikimedia_Community_Logo.svg.png, 22px-Wikimedia-logo.svg.png
 24+
 25+40-user-tooltips.patch
 26+----------------------
 27+Adds tooltips in the online agent list, showing more information about each
 28+agent.
 29+
 30+Needs clock.gif, user.gif.
 31+
 32+Upstream may be interested.
 33+
 34+50-one-click-spam.patch
 35+-----------------------
 36+Adds a button to the "large" queue view that, when clicked, moves the given
 37+ticket to the spam queue, using XHR.
 38+
 39+Needs edittrash.png, notready.png, ready.png.
 40+
 41+Upstream may be interested if the patch was improved a bit.
 42+
 43+60-really-secure-mode.patch
 44+---------------------------
 45+Modifies the definition of the SecureMode configuration variable, causing it to
 46+eliminate escalation from web admins to arbitrary shell execution. Has been
 47+submitted upstream.
 48+
Property changes on: trunk/otrs/README.wikimedia
___________________________________________________________________
Added: svn:eol-style
149 + native

Status & tagging log