Update von 3.0.11 auf 3.2.10 - CustomerZoom.pm redirect

Hilfe zu Znuny Problemen aller Art
Locked
SteamboatWillie
Znuny newbie
Posts: 7
Joined: 25 Jul 2012, 15:03
Znuny Version: 3.2.10

Update von 3.0.11 auf 3.2.10 - CustomerZoom.pm redirect

Post by SteamboatWillie »

Hallo,

ich habe ein OTRS von 3.0.11 auf 3.2.10 aktualisiert. Bereits mit OTRS 3.1 scheint das Modul CustomerZoom entfernt worden zu sein.
Wenn Kunden nun aber auf alte Mailbenachrichtigungen klicken mit dem Link "/otrs/customer.pl?Action=CustomerZoom&TicketID=XXX" erzeugt dies einen Fehler:

Code: Select all

Fehlermeldung: Module Kernel/Modules/CustomerZoom.pm not found!
Fehlerdetails
Backend ERROR: OTRS-CGI-10 Perl: 5.8.8 OS: linux Time: Fri Sep 27 11:22:18 2013 Message: Module Kernel/Modules/CustomerZoom.pm not found! RemoteAddress: 10.0.0.220 RequestURI: /otrs/customer.pl?Action=CustomerZoom&TicketID=7395 Traceback (20764): Module: Kernel::System::Web::InterfaceCustomer::Run (OTRS 3.2.10) Line: 189 Module: ModPerl::ROOT::ModPerl::Registry::opt_otrs_bin_cgi_2dbin_customer_2epl::handler (unknown version) Line: 41 Module: (eval) (v1.99) Line: 204 Module: ModPerl::RegistryCooker::run (v1.99) Line: 204 Module: ModPerl::RegistryCooker::default_handler (v1.99) Line: 170 Module: ModPerl::Registry::handler (v1.99) Line: 31 
Besteht eine Option einen Redirect nach CustomerTicketZoom einzurichten?

Ich habe es mit einer RewriteRule in der apache otrs.conf versucht, nur scheint der Apache der diese dort zu ignorieren.

Grüße!
reneeb
Znuny guru
Posts: 5018
Joined: 13 Mar 2011, 09:54
Znuny Version: 6.0.x
Real Name: Renée Bäcker
Company: Perl-Services.de
Contact:

Re: Update von 3.0.11 auf 3.2.10 - CustomerZoom.pm redirect

Post by reneeb »

Wenn Du es mit OTRS-Bordmitteln machen willst, probiere

Code: Select all

package Kernel::Modules::CustomerTicketZoomRedirect;

use strict;
use warnings;

our $VERSION =  0.01;

sub new {
    my ( $Type, %Param ) = @_;

    # allocate new hash for object
    my $Self = {%Param};
    bless( $Self, $Type );

    # check needed objects
    for (qw(ParamObject DBObject TicketObject LayoutObject LogObject QueueObject ConfigObject))
    {
        if ( !$Self->{$_} ) {
            $Self->{LayoutObject}->FatalError( Message => "Got no $_!" );
        }
    }

    return $Self;
}

sub PreRun {
    my ( $Self, %Param ) = @_;

    # check action
    return if $Self->{Action} ne "CustomerZoom";

    $Self->{RequestedURL} =~ s/CustomerZoom/CustomerTicketZoom/g;

    return $Self->{LayoutObject}->Redirect(
        OP => "$Self->{RequestedURL}",
    );
}

1;
Und in der Kernel/Config.pm:

Code: Select all


$Self->{CustomerPanelPreApplicationModule}->{ZoomRedirect} = "Kernel::Modules::CustomerTicketZoomRedirect";
Das ist aber alles ungetestet...
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
SteamboatWillie
Znuny newbie
Posts: 7
Joined: 25 Jul 2012, 15:03
Znuny Version: 3.2.10

Re: Update von 3.0.11 auf 3.2.10 - CustomerZoom.pm redirect

Post by SteamboatWillie »

Super! Danke!
Das ist jetzt aber irgendwie unschön und nicht grade lesbar.

Ich habe noch mal mit modrewrite unter apache gearbeitet.
Gemäß Doku (und auch in meinem Fall) wird die OTRS spezifische Apache Config unter /etc/apache2/conf.d/otrs.conf, und damit in der globalen Konfiguration eingebunden.
Wenn man noch einen virtuellen Host konfiguriert hat, kann man nun nicht einfach eine Rewrite Regel in die otrs.conf setzen. mod_rewrite übernimmt keine Regeln von übergeordneten Objekten.
Das kann man mit der Option "RewriteOptions inherit" in der vhost Config zwar aktivieren, funktionieren tut es bei mir dennoch nicht.
Meine Vermutung ist, dass die gobale ScriptAlias Direktive in otrs.conf die vhost rewrite Direktive überlagert und damit letztere nicht angewendet wird.

Ich bin wie folgt zum Erfolg gekommen:
* Entfernen der otrs.conf aus der globalen Konfig ( verschieben der otrs.conf aus conf.d in einen neuen Ordner zB includes)
* Einbinden der otrs.conf in der vhost Konfig (zB via include includes/otrs.conf)
* Entfernen der Direktive "MaxRequestsPerChild 4000" aus der otrs.conf
* Einbinden der Direktive "MaxRequestsPerChild 4000" ans Ende der globalen Konfig ( zB in apache2.conf)
* Setzen der Nachfolgenden Rewrite Rule in der vhost Konfig oder in der otrs.conf vor dem include oder dem ScriptAlias)

Code: Select all

 RewriteEngine on
 RewriteCond %{QUERY_STRING} ^Action=CustomerZoom&TicketID=(.*)
 RewriteRule /otrs/customer.pl$ /otrs/customer.pl?Action=CustomerTicketZoom&TicketID=%1 [R]
Die Regel schriebt den Parameter CustomerZoom in CustomerTicketZoom um bei Beibehaltung der TicketID.

Man kann jetzt drüber streiten ob das einfacher ist als die Variante über die OTRS Bordmittel. Wohl abhängig davon, ob man sich mit dem Innenleben von OTRS oder apache besser auskennt.

Grüße!
Locked