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

doc_generic_supplier_order_odt::write_file()   F

Complexity

Conditions 41
Paths > 20000

Size

Total Lines 284
Code Lines 184

Duplication

Lines 0
Ratio 0 %

Importance

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