Passed
Push — main ( f1540e...02d90d )
by Rafael
45:15
created

doc_generic_supplier_proposal_odt::write_file()   F

Complexity

Conditions 41
Paths > 20000

Size

Total Lines 289
Code Lines 185

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 41
eloc 185
nc 10949913
nop 6
dl 0
loc 289
rs 0
c 0
b 0
f 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/* Copyright (C) 2010-2012  Laurent Destailleur <[email protected]>
4
 * Copyright (C) 2012		Juanjo Menent		<[email protected]>
5
 * Copyright (C) 2016		Charlie Benke		<[email protected]>
6
 * Copyright (C) 2018       Frédéric France     <[email protected]>
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation; either version 3 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program. If not, see <https://www.gnu.org/licenses/>.
20
* or see https://www.gnu.org/
21
*/
22
23
/**
24
 *  \file       htdocs/core/modules/propale/doc/doc_generic_proposal_odt.modules.php
25
 *  \ingroup    societe
26
 *  \brief      File of class to build ODT documents for third parties
27
 */
28
29
require_once DOL_DOCUMENT_ROOT . '/core/modules/supplier_proposal/modules_supplier_proposal.php';
30
require_once BASE_PATH . '/../Dolibarr/Lib/Company.php';
31
require_once BASE_PATH . '/../Dolibarr/Lib/Functions2.php';
32
require_once BASE_PATH . '/../Dolibarr/Lib/Files.php';
33
require_once BASE_PATH . '/../Dolibarr/Lib/Doc.php';
34
35
36
/**
37
 *  Class to build documents using ODF templates generator
38
 */
39
class doc_generic_supplier_proposal_odt extends ModelePDFSupplierProposal
40
{
41
    /**
42
     * Dolibarr version of the loaded document
43
     * @var string
44
     */
45
    public $version = 'dolibarr';
46
47
48
    /**
49
     *  Constructor
50
     *
51
     *  @param      DoliDB      $db      Database handler
52
     */
53
    public function __construct($db)
54
    {
55
        global $conf, $langs, $mysoc;
56
57
        // Load translation files required by the page
58
        $langs->loadLangs(array("main", "companies"));
59
60
        $this->db = $db;
61
        $this->name = "ODT templates";
62
        $this->description = $langs->trans("DocumentModelOdt");
63
        $this->scandir = 'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH'; // Name of constant that is used to save list of directories to scan
64
65
        // Page size for A4 format
66
        $this->type = 'odt';
67
        $this->page_largeur = 0;
68
        $this->page_hauteur = 0;
69
        $this->format = array($this->page_largeur, $this->page_hauteur);
70
        $this->marge_gauche = 0;
71
        $this->marge_droite = 0;
72
        $this->marge_haute = 0;
73
        $this->marge_basse = 0;
74
75
        $this->option_logo = 1; // Display logo
76
        $this->option_tva = 0; // Manage the vat option PROPALE_TVAOPTION
77
        $this->option_modereg = 0; // Display payment mode
78
        $this->option_condreg = 0; // Display payment terms
79
        $this->option_multilang = 1; // Available in several languages
80
        $this->option_escompte = 0; // Displays if there has been a discount
81
        $this->option_credit_note = 0; // Support credit notes
82
        $this->option_freetext = 1; // Support add of a personalised text
83
        $this->option_draft_watermark = 0; // Support add of a watermark on drafts
84
85
        // Recupere emetteur
86
        $this->emetteur = $mysoc;
87
        if (!$this->emetteur->country_code) {
88
            $this->emetteur->country_code = substr($langs->defaultlang, -2); // By default if not defined
89
        }
90
    }
91
92
93
    /**
94
     *  Return description of a module
95
     *
96
     *  @param  Translate   $langs      Lang object to use for output
97
     *  @return string                  Description
98
     */
99
    public function info($langs)
100
    {
101
        global $langs;
102
103
        // Load translation files required by the page
104
        $langs->loadLangs(array('companies', 'errors'));
105
106
        $form = new Form($this->db);
107
108
        $odtChosen = getDolGlobalInt('MAIN_SUPPLIER_PROPOSAL_CHOOSE_ODT_DOCUMENT') > 0;
109
        $odtPath = trim(getDolGlobalString('SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH'));
110
111
        $texte = $this->description . ".<br>\n";
112
        $texte .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="POST">';
113
        $texte .= '<input type="hidden" name="token" value="' . newToken() . '">';
114
        $texte .= '<input type="hidden" name="page_y" value="">';
115
        $texte .= '<input type="hidden" name="action" value="setModuleOptions">';
116
        $texte .= '<input type="hidden" name="param1" value="SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH">';
117
        if ($odtChosen) {
118
            $texte .= '<input type="hidden" name="param2" value="SUPPLIER_PROPOSAL_ADDON_PDF_ODT_DEFAULT">';
119
            $texte .= '<input type="hidden" name="param3" value="SUPPLIER_PROPOSAL_ADDON_PDF_ODT_TOBILL">';
120
            $texte .= '<input type="hidden" name="param4" value="SUPPLIER_PROPOSAL_ADDON_PDF_ODT_CLOSED">';
121
        }
122
        $texte .= '<table class="nobordernopadding" width="100%">';
123
124
        // List of directories area
125
        $texte .= '<tr><td>';
126
        $texttitle = $langs->trans("ListOfDirectories");
127
        $listofdir = explode(',', preg_replace('/[\r\n]+/', ',', $odtPath));
128
        $listoffiles = array();
129
        foreach ($listofdir as $key => $tmpdir) {
130
            $tmpdir = trim($tmpdir);
131
            $tmpdir = preg_replace('/DOL_DATA_ROOT/', DOL_DATA_ROOT, $tmpdir);
132
            if (!$tmpdir) {
133
                unset($listofdir[$key]);
134
                continue;
135
            }
136
            if (!is_dir($tmpdir)) {
137
                $texttitle .= img_warning($langs->trans("ErrorDirNotFound", $tmpdir), 0);
138
            } else {
139
                $tmpfiles = dol_dir_list($tmpdir, 'files', 0, '\.(ods|odt)');
140
                if (count($tmpfiles)) {
141
                    $listoffiles = array_merge($listoffiles, $tmpfiles);
142
                }
143
            }
144
        }
145
        $texthelp = $langs->trans("ListOfDirectoriesForModelGenODT");
146
        $texthelp .= '<br><br><span class="opacitymedium">' . $langs->trans("ExampleOfDirectoriesForModelGen") . '</span>';
147
        // Add list of substitution keys
148
        $texthelp .= '<br>' . $langs->trans("FollowingSubstitutionKeysCanBeUsed") . '<br>';
149
        $texthelp .= $langs->transnoentitiesnoconv("FullListOnOnlineDocumentation"); // This contains an url, we don't modify it
150
151
        $texte .= $form->textwithpicto($texttitle, $texthelp, 1, 'help', '', 1, 3, $this->name);
152
        $texte .= '<div><div style="display: inline-block; min-width: 100px; vertical-align: middle;">';
153
        $texte .= '<textarea class="flat" cols="60" name="value1">';
154
        $texte .= $odtPath;
155
        $texte .= '</textarea>';
156
        $texte .= '</div><div style="display: inline-block; vertical-align: middle;">';
157
        $texte .= '<input type="submit" class="button button-edit reposition smallpaddingimp" name="modify" value="' . dol_escape_htmltag($langs->trans("Modify")) . '">';
158
        $texte .= '<br></div></div>';
159
160
        // Scan directories
161
        $nbofiles = count($listoffiles);
162
        if (!empty($odtPath)) {
163
            $texte .= $langs->trans("NumberOfModelFilesFound") . ': <b>';
164
            //$texte.=$nbofiles?'<a id="a_'.get_class($this).'" href="#">':'';
165
            $texte .= count($listoffiles);
166
            //$texte.=$nbofiles?'</a>':'';
167
            $texte .= '</b>';
168
        }
169
170
        if ($nbofiles) {
171
            $texte .= '<div id="div_' . get_class($this) . '" class="hiddenx">';
172
            // Show list of found files
173
            foreach ($listoffiles as $file) {
174
                $texte .= '- ' . $file['name'] . ' <a href="' . DOL_URL_ROOT . '/document.php?modulepart=doctemplates&file=supplier_proposal/' . urlencode(basename($file['name'])) . '">' . img_picto('', 'listlight') . '</a>';
175
                $texte .= ' &nbsp; <a class="reposition" href="' . $_SERVER['PHP_SELF'] . '?modulepart=doctemplates&keyforuploaddir=SUPPLIER_PROPOSAL_ADDON_PDF_ODT_PATH&action=deletefile&token=' . newToken() . '&file=' . urlencode(basename($file['name'])) . '">' . img_picto('', 'delete') . '</a>';
176
                $texte .= '<br>';
177
            }
178
            $texte .= '</div>';
179
180
            if ($odtChosen) {
181
                // Model for creation
182
                $list = ModelePDFSupplierProposal::liste_modeles($this->db);
183
                $texte .= '<table width="50%;">';
184
                $texte .= '<tr>';
185
                $texte .= '<td width="60%;">' . $langs->trans("DefaultModelSupplierProposalCreate") . '</td>';
186
                $texte .= '<td colspan="">';
187
                $texte .= $form->selectarray('value2', $list, getDolGlobalString('SUPPLIER_PROPOSAL_ADDON_PDF_ODT_DEFAULT'));
188
                $texte .= "</td></tr>";
189
190
                $texte .= '<tr>';
191
                $texte .= '<td width="60%;">' . $langs->trans("DefaultModelSupplierProposalToBill") . '</td>';
192
                $texte .= '<td colspan="">';
193
                $texte .= $form->selectarray('value3', $list, getDolGlobalString('SUPPLIER_PROPOSAL_ADDON_PDF_ODT_TOBILL'));
194
                $texte .= "</td></tr>";
195
                $texte .= '<tr>';
196
197
                $texte .= '<td width="60%;">' . $langs->trans("DefaultModelSupplierProposalClosed") . '</td>';
198
                $texte .= '<td colspan="">';
199
                $texte .= $form->selectarray('value4', $list, getDolGlobalString('SUPPLIER_PROPOSAL_ADDON_PDF_ODT_CLOSED'));
200
                $texte .= "</td></tr>";
201
                $texte .= '</table>';
202
            }
203
        }
204
205
        $texte .= '</td>';
206
207
        $texte .= '</tr>';
208
209
        $texte .= '</table>';
210
        $texte .= '</form>';
211
212
        return $texte;
213
    }
214
215
	// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
216
    /**
217
     *  Function to build a document on disk using the generic odt module.
218
     *
219
     *  @param      Propal      $object             Object source to build document
220
     *  @param      Translate   $outputlangs        Lang output object
221
     *  @param      string      $srctemplatepath    Full path of source filename for generator using a template file
222
     *  @param      int         $hidedetails        Do not show line details
223
     *  @param      int         $hidedesc           Do not show desc
224
     *  @param      int         $hideref            Do not show ref
225
     *  @return     int                             1 if OK, <=0 if KO
226
     */
227
    public function write_file($object, $outputlangs, $srctemplatepath, $hidedetails = 0, $hidedesc = 0, $hideref = 0)
228
    {
229
		// phpcs:enable
230
        global $user, $langs, $conf, $mysoc, $hookmanager;
231
232
        if (empty($srctemplatepath)) {
233
            dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING);
234
            return -1;
235
        }
236
237
        // Add odtgeneration hook
238
        if (!is_object($hookmanager)) {
239
            include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php';
240
            $hookmanager = new HookManager($this->db);
241
        }
242
        $hookmanager->initHooks(array('odtgeneration'));
243
        global $action;
244
245
        if (!is_object($outputlangs)) {
246
            $outputlangs = $langs;
247
        }
248
        $sav_charset_output = $outputlangs->charset_output;
249
        $outputlangs->charset_output = 'UTF-8';
250
251
        // Load translation files required by the page
252
        $outputlangs->loadLangs(array("main", "companies", "bills", "dict"));
253
254
        if ($conf->supplier_proposal->dir_output) {
255
            // If $object is id instead of object
256
            if (!is_object($object)) {
257
                $id = $object;
258
                $object = new SupplierProposal($this->db);
259
                $result = $object->fetch($id);
260
                if ($result < 0) {
261
                    dol_print_error($this->db, $object->error);
262
                    return -1;
263
                }
264
            }
265
266
            $object->fetch_thirdparty();
267
268
            $dir = $conf->supplier_proposal->dir_output;
269
            $objectref = dol_sanitizeFileName($object->ref);
270
            if (!preg_match('/specimen/i', $objectref)) {
271
                $dir .= "/" . $objectref;
272
            }
273
            $file = $dir . "/" . $objectref . ".odt";
274
275
            if (!file_exists($dir)) {
276
                if (dol_mkdir($dir) < 0) {
277
                    $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir);
278
                    return -1;
279
                }
280
            }
281
282
            if (file_exists($dir)) {
283
                //print "srctemplatepath=".$srctemplatepath;    // Src filename
284
                $newfile = basename($srctemplatepath);
285
                $newfiletmp = preg_replace('/\.od[ts]/i', '', $newfile);
286
                $newfiletmp = preg_replace('/template_/i', '', $newfiletmp);
287
                $newfiletmp = preg_replace('/modele_/i', '', $newfiletmp);
288
289
                $newfiletmp = $objectref . '_' . $newfiletmp;
290
291
                // Get extension (ods or odt)
292
                $newfileformat = substr($newfile, strrpos($newfile, '.') + 1);
293
                if (getDolGlobalString('MAIN_DOC_USE_TIMING')) {
294
                    $format = getDolGlobalString('MAIN_DOC_USE_TIMING');
295
                    if ($format == '1') {
296
                        $format = '%Y%m%d%H%M%S';
297
                    }
298
                    $filename = $newfiletmp . '-' . dol_print_date(dol_now(), $format) . '.' . $newfileformat;
299
                } else {
300
                    $filename = $newfiletmp . '.' . $newfileformat;
301
                }
302
                $file = $dir . '/' . $filename;
303
                //print "newdir=".$dir;
304
                //print "newfile=".$newfile;
305
                //print "file=".$file;
306
                //print "conf->propal->dir_temp=".$conf->propal->dir_temp;
307
308
                dol_mkdir($conf->supplier_proposal->dir_temp);
309
                if (!is_writable($conf->supplier_proposal->dir_temp)) {
310
                    $this->error = $langs->transnoentities("ErrorFailedToWriteInTempDirectory", $conf->supplier_proposal->dir_temp);
311
                    dol_syslog('Error in write_file: ' . $this->error, LOG_ERR);
312
                    return -1;
313
                }
314
315
                // If BILLING contact defined on invoice, we use it
316
                $usecontact = false;
317
                $arrayidcontact = $object->getIdContact('external', 'BILLING');
318
                if (count($arrayidcontact) > 0) {
319
                    $usecontact = true;
320
                    $result = $object->fetch_contact($arrayidcontact[0]);
321
                }
322
323
                // Recipient name
324
                $contactobject = null;
325
                if (!empty($usecontact)) {
326
                    // We can use the company of contact instead of thirdparty company
327
                    if ($object->contact->socid != $object->thirdparty->id && (!isset($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT) || getDolGlobalString('MAIN_USE_COMPANY_NAME_OF_CONTACT'))) {
328
                        $object->contact->fetch_thirdparty();
329
                        $socobject = $object->contact->thirdparty;
330
                        $contactobject = $object->contact;
331
                    } else {
332
                        $socobject = $object->thirdparty;
333
                        // if we have a CUSTOMER contact and we don't use it as thirdparty recipient we store the contact object for later use
334
                        $contactobject = $object->contact;
335
                    }
336
                } else {
337
                    $socobject = $object->thirdparty;
338
                }
339
340
                // Make substitution
341
                $substitutionarray = array(
342
                '__FROM_NAME__' => $this->emetteur->name,
343
                '__FROM_EMAIL__' => $this->emetteur->email,
344
                '__TOTAL_TTC__' => $object->total_ttc,
345
                '__TOTAL_HT__' => $object->total_ht,
346
                '__TOTAL_VAT__' => $object->total_tva
347
                );
348
                complete_substitutions_array($substitutionarray, $langs, $object);
349
                // Call the ODTSubstitution hook
350
                $parameters = array('file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$substitutionarray);
351
                $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
352
353
                // Line of free text
354
                $newfreetext = '';
355
                $paramfreetext = 'SUPPLIER_PROPOSAL_FREE_TEXT';
356
                if (!empty($conf->global->$paramfreetext)) {
357
                    $newfreetext = make_substitutions(getDolGlobalString($paramfreetext), $substitutionarray);
358
                }
359
360
                // Open and load template
361
                require_once ODTPHP_PATH . 'odf.php';
0 ignored issues
show
Bug introduced by
The constant ODTPHP_PATH was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
362
                try {
363
                    $odfHandler = new Odf(
364
                        $srctemplatepath,
365
                        array(
366
                            'PATH_TO_TMP'     => $conf->supplier_proposal->dir_temp,
367
                            'ZIP_PROXY'       => 'PclZipProxy', // PhpZipProxy or PclZipProxy. Got "bad compression method" error when using PhpZipProxy.
368
                            'DELIMITER_LEFT'  => '{',
369
                            'DELIMITER_RIGHT' => '}'
370
                        )
371
                    );
372
                } catch (Exception $e) {
373
                    $this->error = $e->getMessage();
374
                    dol_syslog($e->getMessage(), LOG_INFO);
375
                    return -1;
376
                }
377
                // After construction $odfHandler->contentXml contains content and
378
                // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by
379
                // [!-- BEGIN lines --]*[!-- END lines --]
380
                //print html_entity_decode($odfHandler->__toString());
381
                //print exit;
382
383
384
                // Make substitutions into odt of freetext
385
                try {
386
                    $odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8');
387
                } catch (OdfException $e) {
388
                    dol_syslog($e->getMessage(), LOG_INFO);
389
                }
390
391
                // Define substitution array
392
                $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object);
393
                $array_objet = $this->get_substitutionarray_object($object, $outputlangs);
394
                $array_user = $this->get_substitutionarray_user($user, $outputlangs);
395
                $array_soc = $this->get_substitutionarray_mysoc($mysoc, $outputlangs);
396
                $array_thirdparty = $this->get_substitutionarray_thirdparty($socobject, $outputlangs);
397
                $array_other = $this->get_substitutionarray_other($outputlangs);
398
399
                $array_thirdparty_contact = array();
400
                if ($usecontact && is_object($contactobject)) {
401
                    $array_thirdparty_contact = $this->get_substitutionarray_contact($contactobject, $outputlangs, 'contact');
402
                }
403
404
                $tmparray = array_merge($substitutionarray, $array_user, $array_soc, $array_thirdparty, $array_objet, $array_other, $array_thirdparty_contact);
405
                complete_substitutions_array($tmparray, $outputlangs, $object);
406
407
                // Call the ODTSubstitution hook
408
                $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray);
409
                $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
410
411
                foreach ($tmparray as $key => $value) {
412
                    try {
413
                        if (preg_match('/logo$/', $key)) { // Image
414
                            if (file_exists($value)) {
415
                                $odfHandler->setImage($key, $value);
416
                            } else {
417
                                $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8');
418
                            }
419
                        } else { // Text
420
                            $odfHandler->setVars($key, $value, true, 'UTF-8');
421
                        }
422
                    } catch (OdfException $e) {
423
                        dol_syslog($e->getMessage(), LOG_INFO);
424
                    }
425
                }
426
                // Replace tags of lines
427
                try {
428
                    $foundtagforlines = 1;
429
                    try {
430
                        $listlines = $odfHandler->setSegment('lines');
431
                    } catch (OdfExceptionSegmentNotFound $e) {
432
                        // We may arrive here if tags for lines not present into template
433
                        $foundtagforlines = 0;
434
                        dol_syslog($e->getMessage(), LOG_INFO);
435
                    } catch (OdfException $e) {
436
                        $foundtagforlines = 0;
437
                        dol_syslog($e->getMessage(), LOG_INFO);
438
                    }
439
                    if ($foundtagforlines) {
440
                        $linenumber = 0;
441
                        foreach ($object->lines as $line) {
442
                            $linenumber++;
443
                            $tmparray = $this->get_substitutionarray_lines($line, $outputlangs, $linenumber);
444
                            complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines");
445
                            // Call the ODTSubstitutionLine hook
446
                            $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray, 'line' => $line);
447
                            $reshook = $hookmanager->executeHooks('ODTSubstitutionLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
448
                            foreach ($tmparray as $key => $val) {
449
                                try {
450
                                    $listlines->setVars($key, $val, true, 'UTF-8');
451
                                } catch (OdfException $e) {
452
                                    dol_syslog($e->getMessage(), LOG_INFO);
453
                                } catch (SegmentException $e) {
454
                                    dol_syslog($e->getMessage(), LOG_INFO);
455
                                }
456
                            }
457
                            $listlines->merge();
458
                        }
459
                        $odfHandler->mergeSegment($listlines);
460
                    }
461
                } catch (OdfException $e) {
462
                    $this->error = $e->getMessage();
463
                    dol_syslog($this->error, LOG_WARNING);
464
                    return -1;
465
                }
466
467
                // Replace labels translated
468
                $tmparray = $outputlangs->get_translations_for_substitutions();
469
                foreach ($tmparray as $key => $value) {
470
                    try {
471
                        $odfHandler->setVars($key, $value, true, 'UTF-8');
472
                    } catch (OdfException $e) {
473
                        dol_syslog($e->getMessage(), LOG_INFO);
474
                    }
475
                }
476
477
                // Call the beforeODTSave hook
478
                $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray);
479
                $reshook = $hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
480
481
                // Write new file
482
                if (getDolGlobalString('MAIN_ODT_AS_PDF')) {
483
                    try {
484
                        $odfHandler->exportAsAttachedPDF($file);
485
                    } catch (Exception $e) {
486
                        $this->error = $e->getMessage();
487
                        dol_syslog($e->getMessage(), LOG_INFO);
488
                        return -1;
489
                    }
490
                } else {
491
                    try {
492
                        $odfHandler->saveToDisk($file);
493
                    } catch (Exception $e) {
494
                        $this->error = $e->getMessage();
495
                        dol_syslog($e->getMessage(), LOG_INFO);
496
                        return -1;
497
                    }
498
                }
499
                $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray);
500
                $reshook = $hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
501
502
                dolChmod($file);
503
504
                $odfHandler = null; // Destroy object
505
506
                $this->result = array('fullpath' => $file);
507
508
                return 1; // Success
509
            } else {
510
                $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir);
511
                return -1;
512
            }
513
        }
514
515
        return -1;
516
    }
517
}
518