Modulentwicklung mit zip-Funktion

Hilfe zu OTRS Problemen aller Art
Post Reply
strikegun
Znuny newbie
Posts: 26
Joined: 28 Aug 2013, 14:23
Znuny Version: 4.0.8

Modulentwicklung mit zip-Funktion

Post by strikegun »

Hallo, ich bin noch recht neu in perl scripting in OTRS und brauche mal etwas Hilfe.

Ich möchte mir schreibe ein Modul schreiben um Teile eines Ticket zu zippen.
Soweit gut, aber stecke fest einen Anhang zu zippen und an den User zu leiten.
Ich verwende Archive::Zip::SimpleZip und lese den Anhang aus mit

Code: Select all

my %Data = $Self->{TicketObject}->ArticleAttachment(
				ArticleID => $Article{ArticleID},
				FileID    => $AttachmentID,
				UserID    => $Self->{UserID},
			);
dann versuche ich diesen ins ZIP zu packen:

Code: Select all

$buffer = $zip->add($Self->{LayoutObject}->Attachment(%Data), Name => $Filename);
Hinein geht was, nur wie bekomme ich das als zip-Datei zum runterladen?

Mein Versuch ist dieser:

Code: Select all

	return $Self->{LayoutObject}->Attachment(
            Filename    => $Self->{TicketID} . ".zip",
            ContentType => "application/zip",
            Content     => $buffer,
            Type        => 'inline',
        );
Zum Runterladen kommt was, aber nicht wirklich ein Archive als ZIP.

Kann mich jemand einen Tip geben? oder bin ich auf dem Holzweg?
Danke
OTRS 4.0.8 + ITSM + KIX4OTRS
on Ubuntu 14.04 LTS
chohman
Znuny newbie
Posts: 17
Joined: 03 May 2013, 15:40
Znuny Version: 4.0.7
Company: GetCon GmbH

Re: Modulentwicklung mit zip-Funktion

Post by chohman »

hat ->add überhaupt das doc als rückgabewert? die bibliotheks-doku sieht mir nicht danach aus.
aber der konstruktor mit filhandle ($z = new Archive::Zip::SimpleZip $filehandle [, OPTIONS] ; ) lässt mich vermuten, dass du filehandle anschließend übergeben solltest oder auslesen und übergeben.
otrs 4.0.7, ITSM, Mysql. Ubuntu
strikegun
Znuny newbie
Posts: 26
Joined: 28 Aug 2013, 14:23
Znuny Version: 4.0.8

Re: Modulentwicklung mit zip-Funktion

Post by strikegun »

Ich habe es soweit nun mit einigen Änderungen geschafft eine ZIP zu erstellen, leere Dateien einzufügen und dann als Zip datei zum runterladen.
Mein Problem besteht nur noch daran, das Attachement auch mit zugeben.

Code: Select all

			
			my %Data = $Self->{TicketObject}->ArticleAttachment(
				ArticleID => $Article{ArticleID},
				FileID    => $AttachmentID,
				UserID    => $Self->{UserID},
			);
			$atttemp = $Self->{LayoutObject}->Attachment(%Data);
			$zip->add($atttemp,Name => $Filename);
			
Dies schein nicht zu klappen. Irgendwie muss ich den Context aus %Data bekommen. Ist LayoutObject->Attachment der falsche Weg?
Wie kann ich also ein Attachment in ein Filehandle bekommen und dies dann ins zip zu legen?

Danke
OTRS 4.0.8 + ITSM + KIX4OTRS
on Ubuntu 14.04 LTS
RStraub
Znuny guru
Posts: 2210
Joined: 13 Mar 2014, 09:16
Znuny Version: 6.0.14
Real Name: Rolf Straub

Re: Modulentwicklung mit zip-Funktion

Post by RStraub »

Du könntest mal in die AgentTicketAttachment schauen, dort werden temp-files geschrieben. Evtl. hilft dir das beim Aufbau deiner zip.

Anscheinend reicht es den Content zu übergeben. Auszug daraus:

Code: Select all

        # write tmp file
        my $FileTempObject = Kernel::System::FileTemp->new( %{$Self} );
        my ( $FH, $Filename ) = $FileTempObject->TempFile();
        if ( open( my $ViewerDataFH, '>', $Filename ) ) {    ## no critic
            print $ViewerDataFH $Data{Content};
            close $ViewerDataFH;
        }

Currently using: OTRS 6.0.14 -- MariaDB -- Ubuntu 16 LTS
chohman
Znuny newbie
Posts: 17
Joined: 03 May 2013, 15:40
Znuny Version: 4.0.7
Company: GetCon GmbH

Re: Modulentwicklung mit zip-Funktion

Post by chohman »

probier mal die einzelwerte der data-variable (evtl auch als addString? add sieht mir nach nur für files aus).
$zip->add($Data{Content},Name => $Data{Filename});
otrs 4.0.7, ITSM, Mysql. Ubuntu
strikegun
Znuny newbie
Posts: 26
Joined: 28 Aug 2013, 14:23
Znuny Version: 4.0.8

Re: Modulentwicklung mit zip-Funktion

Post by strikegun »

Ich glaub ich bin so dicht dran, aber es klappt nicht.

Mein Loader
$ziptemp ist mein Ziparchiv und das Ziel von $zip

Code: Select all

			my %Data = $Self->{TicketObject}->ArticleAttachment(
				ArticleID => $Article{ArticleID},
				FileID    => $AttachmentID,
				UserID    => $Self->{UserID},
			);
#simplezip
        my $FileTempObject = Kernel::System::FileTemp->new( %{$Self} );
        my ( $FH, $Filename2 ) = $FileTempObject->TempFile();
        if ( open( my $ViewerDataFH, '>', $Filename2 ) ) {    ## no critic
            print $ViewerDataFH $Data{Content};
            close $ViewerDataFH;
		}
			$zip->add( $Filename2,Name => $Data{Filename});
#$zip hat als Ziel $ziptemp
Dann mit output als Datei runterladen:

Code: Select all

	return $Self->{LayoutObject}->Attachment(
            Filename    => $Self->{TicketID} . ".zip",
            ContentType => "application/x-download",
            Content     => $ziptemp,
            Type        => 'inline',
        );
Ich bekomme jetzt ein Zip file, das ich auch öffnen kann und ich sehe auch die richtigen Dateien, aber CRC ist 000000 also quasi leer.
Naja die Zip ist auch nur 76KB groß, sollte aber min. 500KB groß sein.
Ich bekommen also den Content nicht ins zip.
OTRS 4.0.8 + ITSM + KIX4OTRS
on Ubuntu 14.04 LTS
strikegun
Znuny newbie
Posts: 26
Joined: 28 Aug 2013, 14:23
Znuny Version: 4.0.8

Re: Modulentwicklung mit zip-Funktion

Post by strikegun »

Es klappt jetzt.
hatte nur vergessen das Zip zu schliessen bevor ich es runterlade ;-)
Mit eurer Hilfe läuft es jetzt.

Danke
OTRS 4.0.8 + ITSM + KIX4OTRS
on Ubuntu 14.04 LTS
wurzel
Znuny guru
Posts: 3230
Joined: 08 Jul 2010, 22:25
Znuny Version: x.x.x
Real Name: Florian

Re: Modulentwicklung mit zip-Funktion

Post by wurzel »

Hi,

magst Du das veröffentlichen als opm?

viele Grüße
Florian
OTRS 8 SILVER (Prod)
OTRS 8 auf Debian 11 (Test)
Znuny 7.x latest version testing auf Debian 11

-- Ich beantworte keine Forums-Fragen PN - No PN please

I won't answer to unfriendly users any more. A greeting and regards are just polite.
strikegun
Znuny newbie
Posts: 26
Joined: 28 Aug 2013, 14:23
Znuny Version: 4.0.8

Re: Modulentwicklung mit zip-Funktion

Post by strikegun »

Wenn es fertig ist, kann ich es mal versuchen. Jetzt fehlt mir nur noch eine PDF Export Funktion um die Ticket Artikel mit ins ZIP zu legen.
Und dann noch Quellcode aufräumen.
OTRS 4.0.8 + ITSM + KIX4OTRS
on Ubuntu 14.04 LTS
wurzel
Znuny guru
Posts: 3230
Joined: 08 Jul 2010, 22:25
Znuny Version: x.x.x
Real Name: Florian

Re: Modulentwicklung mit zip-Funktion

Post by wurzel »

Hi,

so 'n Teil Bereich rauszippen is was, das interessiert mich. Ich kann's halt nur nicht selber programmieren :(

Freue mich, wenn Du das veröffentlichst :)

Flo
OTRS 8 SILVER (Prod)
OTRS 8 auf Debian 11 (Test)
Znuny 7.x latest version testing auf Debian 11

-- Ich beantworte keine Forums-Fragen PN - No PN please

I won't answer to unfriendly users any more. A greeting and regards are just polite.
Post Reply