- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / kernel / pdf / edit.php
1 <?php
2 //
3 // eZSetup - init part initialization
4 //
5 // Created on: <29-Oct-2003 14:49:54 kk>
6 //
7 // ## BEGIN COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
8 // SOFTWARE NAME: eZ Publish
9 // SOFTWARE RELEASE: 4.1.x
10 // COPYRIGHT NOTICE: Copyright (C) 1999-2010 eZ Systems AS
11 // SOFTWARE LICENSE: GNU General Public License v2.0
12 // NOTICE: >
13 //   This program is free software; you can redistribute it and/or
14 //   modify it under the terms of version 2.0  of the GNU General
15 //   Public License as published by the Free Software Foundation.
16 //
17 //   This program is distributed in the hope that it will be useful,
18 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
19 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 //   GNU General Public License for more details.
21 //
22 //   You should have received a copy of version 2.0 of the GNU General
23 //   Public License along with this program; if not, write to the Free
24 //   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 //   MA 02110-1301, USA.
26 //
27 //
28 // ## END COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
29 //
30
31 require_once( 'kernel/common/template.php' );
32 $Module = $Params['Module'];
33 $http = eZHTTPTool::instance();
34
35 if ( isset( $Params['PDFGenerate'] ) && $Params['PDFGenerate'] == 'generate' )
36 {
37     $pdfExport = eZPDFExport::fetch( $Params['PDFExportID'] );
38     if ( $pdfExport && $pdfExport->attribute( 'status' ) == eZPDFExport::CREATE_ONFLY ) // only generate OnTheFly if status set correctly
39     {
40         generatePDF( $pdfExport );
41         eZExecution::cleanExit();
42     }
43     return;
44 }
45
46 if ( isset( $Params['PDFExportID'] ) )
47 {
48     $pdfExport = eZPDFExport::fetch( $Params['PDFExportID'], true, eZPDFExport::VERSION_DRAFT );
49
50     if ( $pdfExport )
51     {
52         $user = eZUser::currentUser();
53         $contentIni = eZINI::instance( 'content.ini' );
54         $timeOut = $contentIni->variable( 'PDFExportSettings', 'DraftTimeout' );
55         if ( $pdfExport->attribute( 'modifier_id' ) != $user->attribute( 'contentobject_id' ) &&
56              $pdfExport->attribute( 'modified' ) + $timeOut > time() )
57         {
58             // TODO: In 3.6
59             // // locked editing
60             // $tpl = templateInit();
61             // $tpl->setVariable ...
62             // $Result = array();
63             // $Result['content'] = $tpl->fetch( 'design:pdf/edit_denied.tpl' );
64             // $Result['path'] = ...
65             // return $Result;
66         }
67         else if ( $timeOut > 0 && $pdfExport->attribute( 'modified' ) + $timeOut < time() )
68         {
69             $pdfExport->remove();
70             $pdfExport = false;
71         }
72     }
73     if ( !$pdfExport )
74     {
75         $pdfExport = eZPDFExport::fetch( $Params['PDFExportID'] );
76         if( !$pdfExport ) // user requested a non existent export
77         {
78             return $Module->handleError( eZError::KERNEL_NOT_AVAILABLE, 'kernel' );
79         }
80         $pdfExport->setAttribute( 'version', eZPDFExport::VERSION_DRAFT );
81         $pdfExport->store();
82     }
83 }
84 else
85 {
86     $user = eZUser::currentUser();
87
88     $pdfExport = eZPDFExport::create( $user->attribute( 'contentobject_id' ) );
89     $pdfExport->store();
90 }
91
92 if ( $http->hasPostVariable( 'SelectedNodeIDArray' ) && !$http->hasPostVariable( 'BrowseCancelButton' ) ) // Get Source node ID from browse
93 {
94     $selectedNodeIDArray = $http->postVariable( 'SelectedNodeIDArray' );
95     $pdfExport->setAttribute( 'source_node_id', $selectedNodeIDArray[0] );
96     $pdfExport->store();
97 }
98
99 $validation = array();
100 $inputValidated = true;
101
102 if ( $Module->isCurrentAction( 'BrowseSource' ) || // Store PDF export objects
103      $Module->isCurrentAction( 'Export' ) )
104 {
105     $pdfExport->setAttribute( 'title', $Module->actionParameter( 'Title' ) );
106     $pdfExport->setAttribute( 'show_frontpage', $Module->hasActionParameter( 'DisplayFrontpage' ) ? 1 : 0 );
107     $pdfExport->setAttribute( 'intro_text', $Module->actionParameter( 'IntroText' ) );
108     $pdfExport->setAttribute( 'sub_text', $Module->actionParameter( 'SubText' ) );
109     $pdfExport->setAttribute( 'export_structure', $Module->actionParameter( 'ExportType' ) );
110     if ( $Module->actionParameter( 'ExportType' ) == 'tree' && $Module->hasActionParameter( 'ClassList' ) )
111         $pdfExport->setAttribute( 'export_classes', implode( ':', $Module->actionParameter( 'ClassList' ) ) );
112     $pdfExport->setAttribute( 'pdf_filename', basename( $Module->actionParameter( 'DestinationFile' ) ) );
113     $pdfExport->setAttribute( 'status', ( basename( $Module->actionParameter( 'DestinationType' ) ) != 'download' ) ?
114                               eZPDFExport::CREATE_ONCE : eZPDFExport::CREATE_ONFLY );
115
116     if ( $Module->isCurrentAction( 'Export' ) )
117     {
118         $pdfExport->setAttribute( 'source_node_id', $Module->actionParameter( 'SourceNode' ) );
119
120         if ( $pdfExport->attribute( 'status' ) == eZPDFExport::CREATE_ONCE
121              && $pdfExport->countGeneratingOnceExports() > 0 )
122         {
123             $validation[ 'placement' ][] = array( 'text' => ezpI18n::translate( 'kernel/pdf', 'An export with such filename already exists.' ) );
124             $validation[ 'processed' ] = true;
125             $inputValidated = false;
126         }
127     }
128
129     if ( $inputValidated )
130     {
131         $pdfExport->store();
132     }
133 }
134
135 $setWarning = false; // used to set missing options during export
136
137 if ( $Module->isCurrentAction( 'BrowseSource' ) )
138 {
139     eZContentBrowse::browse( array( 'action_name' => 'ExportSourceBrowse',
140                                     'description_template' => 'design:content/browse_export.tpl',
141                                     'from_page' => '/pdf/edit/'. $pdfExport->attribute( 'id' ) ),
142                              $Module );
143 }
144 else if ( $Module->isCurrentAction( 'Export' ) && $inputValidated )
145 {
146     // remove the old file ( user may changed the filename )
147     $originalPdfExport = eZPDFExport::fetch( $Params['PDFExportID'] );
148     if ( $originalPdfExport && $originalPdfExport->attribute( 'status' ) == eZPDFExport::CREATE_ONCE )
149     {
150         $filename = $originalPdfExport->attribute( 'filepath' );
151         if ( file_exists( $filename ) )
152         {
153             unlink( $filename );
154         }
155     }
156
157     if ( $pdfExport->attribute( 'status' ) == eZPDFExport::CREATE_ONCE )
158     {
159         generatePDF( $pdfExport, $pdfExport->attribute( 'filepath' ) );
160         $pdfExport->store( true );
161         return $Module->redirect( 'pdf', 'list' );
162     }
163     else
164     {
165         $pdfExport->store( true );
166         return $Module->redirect( 'pdf', 'list' );
167     }
168 }
169 else if ( $Module->isCurrentAction( 'Discard' ) )
170 {
171     $pdfExport->remove();
172     return $Module->redirect( 'pdf', 'list' );
173 }
174
175 $tpl = templateInit();
176
177 $tpl->setVariable( 'set_warning', $setWarning );
178
179 // Get Classes and class attributes
180 $classArray = eZContentClass::fetchList();
181
182 $tpl->setVariable( 'pdf_export', $pdfExport );
183 $tpl->setVariable( 'export_type' , $pdfExport->attribute( 'status' ) );
184 $tpl->setVariable( 'export_class_array', $classArray );
185 $tpl->setVariable( 'pdfexport_list', eZPDFExport::fetchList() );
186
187 if ( !$inputValidated )
188 {
189     $tpl->setVariable( 'validation', $validation );
190 }
191
192 $Result = array();
193 $Result['content'] = $tpl->fetch( 'design:pdf/edit.tpl' );
194 $Result['path'] = array( array( 'url' => false,
195                                 'text' => ezpI18n::translate( 'pdf/edit', 'PDF Export' ) ) );
196
197 /*!
198  \generate and output PDF data, either to file or stream
199
200  \param PDF export object
201  \param toFile, false if generate to stream, $
202                 filename if generate to file
203 */
204 function generatePDF( $pdfExport, $toFile = false )
205 {
206     if ( $pdfExport == null )
207         return;
208
209     $node = $pdfExport->attribute( 'source_node' );
210     if ( $node )
211     {
212         $object = $node->attribute( 'object' );
213
214         $tpl = templateInit();
215
216         $tpl->setVariable( 'node', $node );
217         $tpl->setVariable( 'generate_toc', 1 );
218
219         $tpl->setVariable( 'tree_traverse',
220                            $pdfExport->attribute( 'export_structure' ) == 'tree' ? 1 : 0 );
221         $tpl->setVariable( 'class_array', explode( ':', $pdfExport->attribute( 'export_classes' ) ) );
222         $tpl->setVariable( 'show_frontpage', $pdfExport->attribute( 'show_frontpage' ) );
223         if ( $pdfExport->attribute( 'show_frontpage' ) == 1 )
224         {
225             $tpl->setVariable( 'intro_text', $pdfExport->attribute( 'intro_text' ) );
226             $tpl->setVariable( 'sub_intro_text', $pdfExport->attribute( 'sub_text' ) );
227         }
228
229         if ( $toFile === false )
230         {
231             $tpl->setVariable( 'generate_stream', 1 );
232         }
233         else
234         {
235             $tpl->setVariable( 'generate_file', 1 );
236             $tpl->setVariable( 'filename', $toFile );
237         }
238
239         $res = eZTemplateDesignResource::instance();
240         $res->setKeys( array( array( 'object', $object->attribute( 'id' ) ),
241                               array( 'node', $node->attribute( 'node_id' ) ),
242                               array( 'parent_node', $node->attribute( 'parent_node_id' ) ),
243                               array( 'class', $object->attribute( 'contentclass_id' ) ),
244                               array( 'class_identifier', $object->attribute( 'class_identifier' ) ),
245                               array( 'depth', $node->attribute( 'depth' ) ),
246                               array( 'url_alias', $node->attribute( 'url_alias' ) )
247                               ) );
248
249         $textElements = array();
250         $uri = 'design:node/view/pdf.tpl';
251         $tpl->setVariable( 'pdf_root_template', 1 );
252         eZTemplateIncludeFunction::handleInclude( $textElements, $uri, $tpl, '', '' );
253         $pdf_definition = implode( '', $textElements );
254
255         $pdf_definition = str_replace( array( ' ',
256                                               "\r\n",
257                                               "\t",
258                                               "\n" ),
259                                        '',
260                                        $pdf_definition );
261
262         $tpl->setVariable( 'pdf_definition', $pdf_definition );
263
264         $uri = 'design:node/view/execute_pdf.tpl';
265         $textElements = '';
266         eZTemplateIncludeFunction::handleInclude( $textElements, $uri, $tpl, '', '' );
267     }
268 }
269
270 ?>