/** * * @param IssueSelection $iSel * @param type $projectid * @param type $odtTemplate * @return string filepath complete path to generated ODT file */ private function generateODT(IssueSelection $iSel, $projectid, $odtTemplate) { self::$logger->debug("genProjectODT(): project {$projectid} template {$odtTemplate}"); $project = ProjectCache::getInstance()->getProject($projectid); $odf = new odf($odtTemplate); try { $odf->setVars('today', date('Y-m-d')); } catch (Exception $e) { } try { $odf->setVars('selectionName', $project->getName()); } catch (Exception $e) { } try { $session_user = UserCache::getInstance()->getUser($this->session_userid); $odf->setVars('sessionUser', $session_user->getRealname()); } catch (Exception $e) { } $issueList = $iSel->getIssueList(); if (self::$logger->isDebugEnabled()) { self::$logger->debug("nb issues = " . count($issueList)); } $q_id = 0; try { $issueSegment = $odf->setSegment('issueSelection'); } catch (Exception $e) { self::$logger->error("generateODT: TAG 'issueSelection'"); self::$logger->error("generateODT: " + $e->getMessage()); return "FAILED: error on segment 'issueSelection'."; } if (self::$logger->isDebugEnabled()) { self::$logger->debug('XML=' . $issueSegment->getXml()); } foreach ($issueList as $issue) { $q_id += 1; if (0 == $issue->getHandlerId()) { $userName = T_('unknown'); } else { $user = UserCache::getInstance()->getUser($issue->getHandlerId()); $userName = utf8_decode($user->getRealname()); if (empty($userName)) { $userName = "******" . $issue->getHandlerId(); } } if (self::$logger->isDebugEnabled()) { self::$logger->debug("issue " . $issue->getId() . ": handlerName = " . $userName); } if (0 == $issue->getReporterId()) { $reporterName = T_('unknown'); } else { $reporter = UserCache::getInstance()->getUser($issue->getReporterId()); $reporterName = utf8_decode($reporter->getRealname()); if (empty($reporterName)) { $reporterName = "user_" . $issue->getReporterId(); } } if (self::$logger->isDebugEnabled()) { self::$logger->debug("issue " . $issue->getId() . ": reporterName = " . $reporterName); } // add issue try { $issueSegment->setVars('q_id', $q_id); } catch (Exception $e) { } try { $issueSegment->setVars('bugId', $issue->getId()); } catch (Exception $e) { $this->logException($e); } try { $issueSegment->setVars('summary', utf8_decode($issue->getSummary())); } catch (Exception $e) { $this->logException($e); } try { $issueSegment->setVars('dateSubmission', date('d/m/Y', $issue->getDateSubmission())); } catch (Exception $e) { } try { $timestamp = $issue->getLatestStatusOccurrence($issue->getBugResolvedStatusThreshold()); if (is_null($timestamp)) { $issueSegment->setVars('dateResolved', ''); } else { $issueSegment->setVars('dateResolved', date('d/m/Y', $timestamp)); } } catch (Exception $e) { } try { $timestamp = $issue->getDeadLine(); $deadline = 0 == $timestamp ? '' : date('d/m/Y', $issue->getDeadLine()); $issueSegment->setVars('deadline', $deadline); } catch (Exception $e) { $this->logException($e); } try { $issueSegment->setVars('currentStatus', Constants::$statusNames[$issue->getCurrentStatus()]); } catch (Exception $e) { } try { $issueSegment->setVars('handlerId', $userName); } catch (Exception $e) { } try { $issueSegment->setVars('reporterId', $reporterName); } catch (Exception $e) { } try { $issueSegment->setVars('reporterName', $reporterName); } catch (Exception $e) { } try { $issueSegment->setVars('description', utf8_decode($issue->getDescription())); } catch (Exception $e) { } #try { $issueSegment->setVars('description', utf8_decode(Tools::convertToUTF8($issue->getDescription()))); } catch (Exception $e) { }; try { $issueSegment->setVars('category', $issue->getCategoryName()); } catch (Exception $e) { } try { $issueSegment->setVars('severity', $issue->getSeverityName()); } catch (Exception $e) { } try { $issueSegment->setVars('status', Constants::$statusNames[$issue->getStatus()]); } catch (Exception $e) { } try { $issueSegment->setVars('extId', $issue->getTcId()); } catch (Exception $e) { } // add issueNotes $issueNotes = $issue->getIssueNoteList(); $noteId = 0; foreach ($issueNotes as $id => $issueNote) { $noteId += 1; if (self::$logger->isDebugEnabled()) { self::$logger->debug("issue " . $issue->getId() . ": note {$id} = " . $issueNote->getNote()); } $noteReporter = UserCache::getInstance()->getUser($issueNote->getReporterId()); try { $noteReporterName = utf8_decode($noteReporter->getRealname()); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteId($noteId); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteReporter($noteReporterName); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteDateSubmission(date('d/m/Y', $issueNote->getDateSubmitted())); } catch (Exception $e) { } try { $issueSegment->bugnotes->note(utf8_decode($issueNote->getNote())); } catch (Exception $e) { } try { $issueSegment->bugnotes->merge(); } catch (Exception $e) { } } $issueSegment->merge(); } $odf->mergeSegment($issueSegment); // INFO: the following line is MANDATORY and fixes the following error: // "wrong .odt file encoding" #ob_end_clean(); #$odf->exportAsAttachedFile(); // 2nd solution : show link in page $odtFilename = basename($odtTemplate, ".odt") . '_' . $project->getName() . '_' . date('Ymd') . '.odt'; $filepath = Constants::$codevOutputDir . '/reports/' . $odtFilename; if (self::$logger->isDebugEnabled()) { self::$logger->debug("save odt file " . $filepath); } $odf->saveToDisk($filepath); return $filepath; }
/** * Function to build a document on disk using the generic odt module. * * @param Propale $object Object source to build document * @param Translate $outputlangs Lang output object * @param string $srctemplatepath Full path of source filename for generator using a template file * @param int $hidedetails Do not show line details * @param int $hidedesc Do not show desc * @param int $hideref Do not show ref * @return int 1 if OK, <=0 if KO */ function write_file($object, $outputlangs, $srctemplatepath, $hidedetails = 0, $hidedesc = 0, $hideref = 0) { global $user, $langs, $conf, $mysoc, $hookmanager; if (empty($srctemplatepath)) { dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); return -1; } // Add odtgeneration hook if (!is_object($hookmanager)) { include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php'; $hookmanager = new HookManager($this->db); } $hookmanager->initHooks(array('odtgeneration')); global $action; if (!is_object($outputlangs)) { $outputlangs = $langs; } $sav_charset_output = $outputlangs->charset_output; $outputlangs->charset_output = 'UTF-8'; $outputlangs->load("main"); $outputlangs->load("dict"); $outputlangs->load("companies"); $outputlangs->load("bills"); if ($conf->supplier_proposal->dir_output) { // If $object is id instead of object if (!is_object($object)) { $id = $object; $object = new SupplierProposal($this->db); $result = $object->fetch($id); if ($result < 0) { dol_print_error($this->db, $object->error); return -1; } } $dir = $conf->supplier_proposal->dir_output; $objectref = dol_sanitizeFileName($object->ref); if (!preg_match('/specimen/i', $objectref)) { $dir .= "/" . $objectref; } $file = $dir . "/" . $objectref . ".odt"; if (!file_exists($dir)) { if (dol_mkdir($dir) < 0) { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } if (file_exists($dir)) { //print "srctemplatepath=".$srctemplatepath; // Src filename $newfile = basename($srctemplatepath); $newfiletmp = preg_replace('/\\.od(t|s)/i', '', $newfile); $newfiletmp = preg_replace('/template_/i', '', $newfiletmp); $newfiletmp = preg_replace('/modele_/i', '', $newfiletmp); $newfiletmp = $objectref . '_' . $newfiletmp; // Get extension (ods or odt) $newfileformat = substr($newfile, strrpos($newfile, '.') + 1); if (!empty($conf->global->MAIN_DOC_USE_TIMING)) { $filename = $newfiletmp . '.' . dol_print_date(dol_now(), '%Y%m%d%H%M%S') . '.' . $newfileformat; } else { $filename = $newfiletmp . '.' . $newfileformat; } $file = $dir . '/' . $filename; //print "newdir=".$dir; //print "newfile=".$newfile; //print "file=".$file; //print "conf->propal->dir_temp=".$conf->propal->dir_temp; dol_mkdir($conf->supplier_proposal->dir_temp); // If BILLING contact defined on invoice, we use it $usecontact = false; $arrayidcontact = $object->getIdContact('external', 'BILLING'); if (count($arrayidcontact) > 0) { $usecontact = true; $result = $object->fetch_contact($arrayidcontact[0]); } // Recipient name if (!empty($usecontact)) { // On peut utiliser le nom de la societe du contact if (!empty($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT)) { $socobject = $object->contact; } else { $socobject = $object->client; } } else { $socobject = $object->client; } // Make substitution $substitutionarray = array('__FROM_NAME__' => $this->emetteur->name, '__FROM_EMAIL__' => $this->emetteur->email, '__TOTAL_TTC__' => $object->total_ttc, '__TOTAL_HT__' => $object->total_ht, '__TOTAL_VAT__' => $object->total_vat); complete_substitutions_array($substitutionarray, $langs, $object); // Call the ODTSubstitution hook $parameters = array('file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$substitutionarray); $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks // Line of free text $newfreetext = ''; $paramfreetext = 'SUPPLIER_PROPOSAL_FREE_TEXT'; if (!empty($conf->global->{$paramfreetext})) { $newfreetext = make_substitutions($conf->global->{$paramfreetext}, $substitutionarray); } // Open and load template require_once ODTPHP_PATH . 'odf.php'; try { $odfHandler = new odf($srctemplatepath, array('PATH_TO_TMP' => $conf->supplier_proposal->dir_temp, 'ZIP_PROXY' => 'PclZipProxy', 'DELIMITER_LEFT' => '{', 'DELIMITER_RIGHT' => '}')); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } // After construction $odfHandler->contentXml contains content and // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by // [!-- BEGIN lines --]*[!-- END lines --] //print html_entity_decode($odfHandler->__toString()); //print exit; // Make substitutions into odt of freetext try { $odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8'); } catch (OdfException $e) { } // Make substitutions into odt $array_user = $this->get_substitutionarray_user($user, $outputlangs); $array_soc = $this->get_substitutionarray_mysoc($mysoc, $outputlangs); $array_thirdparty = $this->get_substitutionarray_thirdparty($socobject, $outputlangs); $array_objet = $this->get_substitutionarray_object($object, $outputlangs); $array_other = $this->get_substitutionarray_other($outputlangs); $tmparray = array_merge($array_user, $array_soc, $array_thirdparty, $array_objet, $array_other); complete_substitutions_array($tmparray, $outputlangs, $object); // Call the ODTSubstitution hook $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray); $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Replace tags of lines try { $listlines = $odfHandler->setSegment('lines'); foreach ($object->lines as $line) { $tmparray = $this->get_substitutionarray_lines($line, $outputlangs); complete_substitutions_array($tmparray, $outputlangs, $object, $line, "completesubstitutionarray_lines"); // Call the ODTSubstitutionLine hook $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray, 'line' => $line); $reshook = $hookmanager->executeHooks('ODTSubstitutionLine', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlines->merge(); } $odfHandler->mergeSegment($listlines); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } // Replace labels translated $tmparray = $outputlangs->get_translations_for_substitutions(); foreach ($tmparray as $key => $value) { try { $odfHandler->setVars($key, $value, true, 'UTF-8'); } catch (OdfException $e) { } } // Call the beforeODTSave hook $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray); $reshook = $hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks // Write new file if (!empty($conf->global->MAIN_ODT_AS_PDF)) { try { $odfHandler->exportAsAttachedPDF($file); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } } else { try { $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } } $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray); $reshook = $hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if (!empty($conf->global->MAIN_UMASK)) { @chmod($file, octdec($conf->global->MAIN_UMASK)); } $odfHandler = null; // Destroy object return 1; // Success } else { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } return -1; }
$article->setImage('pic', $pic, 4); //name if ($result[2] == NULL) { $article->nameArticle(" " . $result[0] . " " . $result[1] . " " . $result[3]); } else { $article->nameArticle(" " . $result[0] . " " . $result[2] . " " . $result[2] . " " . $result[3]); } //department if ($result[5] == NULL) { $article->deptArticle($result[4] . ", " . $result[6]); } else { $article->deptArticle($result[4] . ", " . $result[5]); } $article->merge(); } $odf->mergeSegment($article); // We save the file $odf->saveToDisk("cert.odt"); //copying the file to be converted copy("cert.odt", "../../Convert/cde-root/home/sukhdeep/Desktop/certificate.odt"); //changing Directory chdir('../../Convert/cde-root/home/sukhdeep'); //Command for conversion to PDF $myCommand = "./libreoffice.cde --headless -convert-to pdf Desktop/certificate.odt -outdir Desktop/"; exec($myCommand); //Copying the converted file to the PDF folder copy("Desktop/" . str_replace(".odt", ".pdf", "certificate.odt"), "../../../../Demo/test.wdout.db/pdf/" . str_replace(".odt", ".pdf", "certificate.odt")); echo '<h1>Your Certificate has been Generated!<h/1> <body background="html/bck.jpg"> <center> <form action="cert.odt">
/** * Function to build a document on disk using the generic odt module. * * @param Project $object Object source to build document * @param Translate $outputlangs Lang output object * @param string $srctemplatepath Full path of source filename for generator using a template file * @return int 1 if OK, <=0 if KO */ function write_file($object, $outputlangs, $srctemplatepath) { global $user, $langs, $conf, $mysoc, $hookmanager; if (empty($srctemplatepath)) { dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); return -1; } // Add odtgeneration hook if (!is_object($hookmanager)) { include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php'; $hookmanager = new HookManager($this->db); } $hookmanager->initHooks(array('odtgeneration')); global $action; if (!is_object($outputlangs)) { $outputlangs = $langs; } $sav_charset_output = $outputlangs->charset_output; $outputlangs->charset_output = 'UTF-8'; $outputlangs->load("main"); $outputlangs->load("dict"); $outputlangs->load("companies"); $outputlangs->load("projects"); if ($conf->projet->dir_output) { // If $object is id instead of object if (!is_object($object)) { $id = $object; $object = new Project($this->db); $result = $object->fetch($id); if ($result < 0) { dol_print_error($this->db, $object->error); return -1; } } $dir = $conf->projet->dir_output; $objectref = dol_sanitizeFileName($object->ref); if (!preg_match('/specimen/i', $objectref)) { $dir .= "/" . $objectref; } $file = $dir . "/" . $objectref . ".odt"; if (!file_exists($dir)) { if (dol_mkdir($dir) < 0) { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } if (file_exists($dir)) { //print "srctemplatepath=".$srctemplatepath; // Src filename $newfile = basename($srctemplatepath); $newfiletmp = preg_replace('/\\.od(t|s)/i', '', $newfile); $newfiletmp = preg_replace('/template_/i', '', $newfiletmp); $newfiletmp = preg_replace('/modele_/i', '', $newfiletmp); $newfiletmp = $objectref . '_' . $newfiletmp; //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt'; // Get extension (ods or odt) $newfileformat = substr($newfile, strrpos($newfile, '.') + 1); if (!empty($conf->global->MAIN_DOC_USE_TIMING)) { $filename = $newfiletmp . '.' . dol_print_date(dol_now(), '%Y%m%d%H%M%S') . '.' . $newfileformat; } else { $filename = $newfiletmp . '.' . $newfileformat; } $file = $dir . '/' . $filename; //print "newdir=".$dir; //print "newfile=".$newfile; //print "file=".$file; //print "conf->societe->dir_temp=".$conf->societe->dir_temp; dol_mkdir($conf->projet->dir_temp); $socobject = $object->thirdparty; // Make substitution $substitutionarray = array('__FROM_NAME__' => $this->emetteur->nom, '__FROM_EMAIL__' => $this->emetteur->email); complete_substitutions_array($substitutionarray, $langs, $object); // Open and load template require_once ODTPHP_PATH . 'odf.php'; try { $odfHandler = new odf($srctemplatepath, array('PATH_TO_TMP' => $conf->projet->dir_temp, 'ZIP_PROXY' => 'PclZipProxy', 'DELIMITER_LEFT' => '{', 'DELIMITER_RIGHT' => '}')); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } // After construction $odfHandler->contentXml contains content and // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by // [!-- BEGIN lines --]*[!-- END lines --] //print html_entity_decode($odfHandler->__toString()); //print exit; // Make substitutions into odt of user info $tmparray = $this->get_substitutionarray_user($user, $outputlangs); foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { //var_dump($value);exit; if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Make substitutions into odt of mysoc $tmparray = $this->get_substitutionarray_mysoc($mysoc, $outputlangs); //var_dump($tmparray); exit; foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { //var_dump($value);exit; if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Make substitutions into odt of thirdparty $tmparray = $this->get_substitutionarray_thirdparty($socobject, $outputlangs); foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Replace tags of object + external modules $tmparray = $this->get_substitutionarray_object($object, $outputlangs); complete_substitutions_array($tmparray, $outputlangs, $object); // Call the ODTSubstitution hook $parameters = array('file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray); $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Replace tags of lines for tasks try { $listlines = $odfHandler->setSegment('tasks'); $taskstatic = new Task($this->db); // Security check $socid = 0; if (!empty($object->fk_soc)) { $socid = $object->fk_soc; } $tasksarray = $taskstatic->getTasksArray(0, 0, $object->id, $socid, 0); foreach ($tasksarray as $task) { $tmparray = $this->get_substitutionarray_tasks($task, $outputlangs); //complete_substitutions_array($tmparray, $outputlangs, $object, $task, "completesubstitutionarray_lines"); foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $taskobj = new Task($this->db); $taskobj->fetch($task->id); // Replace tags of lines for contacts task $sourcearray = array('internal', 'external'); $contact_arrray = array(); foreach ($sourcearray as $source) { $contact_temp = $taskobj->liste_contact(-1, $source); if (is_array($contact_temp) && count($contact_temp) > 0) { $contact_arrray = array_merge($contact_arrray, $contact_temp); } } if (is_array($contact_arrray) && count($contact_arrray) > 0) { $listlinestaskres = $listlines->__get('tasksressources'); foreach ($contact_arrray as $contact) { if ($contact['source'] == 'internal') { $objectdetail = new User($this->db); $objectdetail->fetch($contact['id']); $contact['socname'] = $mysoc->name; } elseif ($contact['source'] == 'external') { $objectdetail = new Contact($this->db); $objectdetail->fetch($contact['id']); $soc = new Societe($this->db); $soc->fetch($contact['socid']); $contact['socname'] = $soc->name; } $contact['fullname'] = $objectdetail->getFullName($outputlangs, 1); $tmparray = $this->get_substitutionarray_tasksressource($contact, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlinestaskres->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlinestaskres->merge(); } } //Time ressources $sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note"; $sql .= ", u.lastname, u.firstname"; $sql .= " FROM " . MAIN_DB_PREFIX . "projet_task_time as t"; $sql .= " , " . MAIN_DB_PREFIX . "user as u"; $sql .= " WHERE t.fk_task =" . $task->id; $sql .= " AND t.fk_user = u.rowid"; $sql .= " ORDER BY t.task_date DESC"; $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); $i = 0; $tasks = array(); $listlinestasktime = $listlines->__get('taskstimes'); while ($i < $num) { $row = $this->db->fetch_array($resql); if (!empty($row['fk_user'])) { $objectdetail = new User($this->db); $objectdetail->fetch($row['fk_user']); $row['fullcivname'] = $objectdetail->getFullName($outputlangs, 1); } else { $row['fullcivname'] = ''; } $tmparray = $this->get_substitutionarray_taskstime($row, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlinestasktime->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlinestasktime->merge(); $i++; } $this->db->free($resql); } // Replace tags of project files $listtasksfiles = $listlines->__get('tasksfiles'); $upload_dir = $conf->projet->dir_output . '/' . dol_sanitizeFileName($object->ref) . '/' . dol_sanitizeFileName($task->ref); $filearray = dol_dir_list($upload_dir, "files", 0, '', '(\\.meta|_preview\\.png)$', 'name', SORT_ASC, 1); foreach ($filearray as $filedetail) { $tmparray = $this->get_substitutionarray_task_file($filedetail, $outputlangs); //dol_syslog(get_class($this).'::main $tmparray'.var_export($tmparray,true)); foreach ($tmparray as $key => $val) { try { $listtasksfiles->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listtasksfiles->merge(); } $listlines->merge(); } $odfHandler->mergeSegment($listlines); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } // Replace tags of project files try { $listlines = $odfHandler->setSegment('projectfiles'); $upload_dir = $conf->projet->dir_output . '/' . dol_sanitizeFileName($object->ref); $filearray = dol_dir_list($upload_dir, "files", 0, '', '(\\.meta|_preview\\.png)$', 'name', SORT_ASC, 1); foreach ($filearray as $filedetail) { //dol_syslog(get_class($this).'::main $filedetail'.var_export($filedetail,true)); $tmparray = $this->get_substitutionarray_project_file($filedetail, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlines->merge(); } $odfHandler->mergeSegment($listlines); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } // Replace tags of lines for contacts $sourcearray = array('internal', 'external'); $contact_arrray = array(); foreach ($sourcearray as $source) { $contact_temp = $object->liste_contact(-1, $source); if (is_array($contact_temp) && count($contact_temp) > 0) { $contact_arrray = array_merge($contact_arrray, $contact_temp); } } if (is_array($contact_arrray) && count($contact_arrray) > 0) { try { $listlines = $odfHandler->setSegment('projectcontacts'); foreach ($contact_arrray as $contact) { if ($contact['source'] == 'internal') { $objectdetail = new User($this->db); $objectdetail->fetch($contact['id']); $contact['socname'] = $mysoc->name; } elseif ($contact['source'] == 'external') { $objectdetail = new Contact($this->db); $objectdetail->fetch($contact['id']); $soc = new Societe($this->db); $soc->fetch($contact['socid']); $contact['socname'] = $soc->name; } $contact['fullname'] = $objectdetail->getFullName($outputlangs, 1); $tmparray = $this->get_substitutionarray_project_contacts($contact, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlines->merge(); } $odfHandler->mergeSegment($listlines); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } } //List of referent $listofreferent = array('propal' => array('title' => "ListProposalsAssociatedProject", 'class' => 'Propal', 'table' => 'propal', 'test' => $conf->propal->enabled && $user->rights->propale->lire), 'order' => array('title' => "ListOrdersAssociatedProject", 'class' => 'Commande', 'table' => 'commande', 'test' => $conf->commande->enabled && $user->rights->commande->lire), 'invoice' => array('title' => "ListInvoicesAssociatedProject", 'class' => 'Facture', 'table' => 'facture', 'test' => $conf->facture->enabled && $user->rights->facture->lire), 'invoice_predefined' => array('title' => "ListPredefinedInvoicesAssociatedProject", 'class' => 'FactureRec', 'table' => 'facture_rec', 'test' => $conf->facture->enabled && $user->rights->facture->lire), 'order_supplier' => array('title' => "ListSupplierOrdersAssociatedProject", 'table' => 'commande_fournisseur', 'class' => 'CommandeFournisseur', 'test' => $conf->fournisseur->enabled && $user->rights->fournisseur->commande->lire), 'invoice_supplier' => array('title' => "ListSupplierInvoicesAssociatedProject", 'table' => 'facture_fourn', 'class' => 'FactureFournisseur', 'test' => $conf->fournisseur->enabled && $user->rights->fournisseur->facture->lire), 'contract' => array('title' => "ListContractAssociatedProject", 'class' => 'Contrat', 'table' => 'contrat', 'test' => $conf->contrat->enabled && $user->rights->contrat->lire), 'intervention' => array('title' => "ListFichinterAssociatedProject", 'class' => 'Fichinter', 'table' => 'fichinter', 'disableamount' => 1, 'test' => $conf->ficheinter->enabled && $user->rights->ficheinter->lire), 'trip' => array('title' => "ListTripAssociatedProject", 'class' => 'Deplacement', 'table' => 'deplacement', 'disableamount' => 1, 'test' => $conf->deplacement->enabled && $user->rights->deplacement->lire), 'agenda' => array('title' => "ListActionsAssociatedProject", 'class' => 'ActionComm', 'table' => 'actioncomm', 'disableamount' => 1, 'test' => $conf->agenda->enabled && $user->rights->agenda->allactions->lire)); //Insert reference try { $listlines = $odfHandler->setSegment('projectrefs'); foreach ($listofreferent as $keyref => $valueref) { $title = $valueref['title']; $tablename = $valueref['table']; $classname = $valueref['class']; $qualified = $valueref['test']; if ($qualified) { $elementarray = $object->get_element_list($keyref, $tablename); if (count($elementarray) > 0 && is_array($elementarray)) { $var = true; $total_ht = 0; $total_ttc = 0; $num = count($elementarray); for ($i = 0; $i < $num; $i++) { $ref_array = array(); $ref_array['type'] = $langs->trans($classname); $element = new $classname($this->db); $element->fetch($elementarray[$i]); $element->fetch_thirdparty(); //Ref object $ref_array['ref'] = $element->ref; //Date object $dateref = $element->date; if (empty($dateref)) { $dateref = $element->datep; } if (empty($dateref)) { $dateref = $element->date_contrat; } $ref_array['date'] = $dateref; //Soc object if (is_object($element->thirdparty)) { $ref_array['socname'] = $element->thirdparty->name; } else { $ref_array['socname'] = ''; } //Amount object if (empty($valueref['disableamount'])) { if (!empty($element->total_ht)) { $ref_array['amountht'] = $element->total_ht; $ref_array['amountttc'] = $element->total_ttc; } else { $ref_array['amountht'] = 0; $ref_array['amountttc'] = 0; } } else { $ref_array['amountht'] = ''; $ref_array['amountttc'] = ''; } $ref_array['status'] = $element->getLibStatut(0); $tmparray = $this->get_substitutionarray_project_reference($ref_array, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlines->merge(); } } } $odfHandler->mergeSegment($listlines); } } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } // Replace labels translated $tmparray = $outputlangs->get_translations_for_substitutions(); foreach ($tmparray as $key => $value) { try { $odfHandler->setVars($key, $value, true, 'UTF-8'); } catch (OdfException $e) { } } // Call the beforeODTSave hook $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs); $reshook = $hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks // Write new file if (!empty($conf->global->MAIN_ODT_AS_PDF)) { try { $odfHandler->exportAsAttachedPDF($file); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } } else { try { $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } } if (!empty($conf->global->MAIN_UMASK)) { @chmod($file, octdec($conf->global->MAIN_UMASK)); } $odfHandler = null; // Destroy object return 1; // Success } else { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } return -1; }
/** * Function to build a document on disk using the generic odt module. * * @param Societe $object Object source to build document * @param Translate $outputlangs Lang output object * @param string $srctemplatepath Full path of source filename for generator using a template file * @param int $hidedetails Do not show line details * @param int $hidedesc Do not show desc * @param int $hideref Do not show ref * @return int 1 if OK, <=0 if KO */ function write_file($object, $outputlangs, $srctemplatepath, $hidedetails = 0, $hidedesc = 0, $hideref = 0) { global $user, $langs, $conf, $mysoc, $hookmanager; if (empty($srctemplatepath)) { dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); return -1; } // Add odtgeneration hook if (!is_object($hookmanager)) { include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php'; $hookmanager = new HookManager($this->db); } $hookmanager->initHooks(array('odtgeneration')); global $action; if (!is_object($outputlangs)) { $outputlangs = $langs; } $sav_charset_output = $outputlangs->charset_output; $outputlangs->charset_output = 'UTF-8'; $outputlangs->load("main"); $outputlangs->load("dict"); $outputlangs->load("companies"); $outputlangs->load("projects"); if ($conf->societe->multidir_output[$object->entity]) { $dir = $conf->societe->multidir_output[$object->entity]; $objectref = dol_sanitizeFileName($object->id); if (!preg_match('/specimen/i', $objectref)) { $dir .= "/" . $objectref; } if (!file_exists($dir)) { if (dol_mkdir($dir) < 0) { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } if (file_exists($dir)) { //print "srctemplatepath=".$srctemplatepath; // Src filename $newfile = basename($srctemplatepath); $newfiletmp = preg_replace('/\\.od(s|t)/i', '', $newfile); $newfiletmp = preg_replace('/template_/i', '', $newfiletmp); $newfiletmp = preg_replace('/modele_/i', '', $newfiletmp); // Get extension (ods or odt) $newfileformat = substr($newfile, strrpos($newfile, '.') + 1); if (!empty($conf->global->MAIN_DOC_USE_TIMING)) { $filename = $newfiletmp . '.' . dol_print_date(dol_now(), '%Y%m%d%H%M%S') . '.' . $newfileformat; } else { $filename = $newfiletmp . '.' . $newfileformat; } $file = $dir . '/' . $filename; $object->builddoc_filename = $filename; // For triggers //print "newfileformat=".$newfileformat; //print "newdir=".$dir; //print "newfile=".$newfile; //print "file=".$file; //print "conf->societe->dir_temp=".$conf->societe->dir_temp; //exit; dol_mkdir($conf->societe->multidir_temp[$object->entity]); // Open and load template require_once ODTPHP_PATH . 'odf.php'; try { $odfHandler = new odf($srctemplatepath, array('PATH_TO_TMP' => $conf->societe->multidir_temp[$object->entity], 'ZIP_PROXY' => 'PclZipProxy', 'DELIMITER_LEFT' => '{', 'DELIMITER_RIGHT' => '}')); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } //print $odfHandler->__toString()."\n"; // Make substitutions into odt of user info $tmparray = $this->get_substitutionarray_user($user, $outputlangs); //var_dump($tmparray); exit; foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { //var_dump($value);exit; if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { //print $key.' '.$value;exit; $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { // setVars failed, probably because key not found } } // Make substitutions into odt of mysoc info $tmparray = $this->get_substitutionarray_mysoc($mysoc, $outputlangs); //var_dump($tmparray); exit; foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { //var_dump($value);exit; if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { // setVars failed, probably because key not found } } // Replace tags of lines for contacts $contact_arrray = array(); $sql = "SELECT p.rowid"; $sql .= " FROM " . MAIN_DB_PREFIX . "socpeople as p"; $sql .= " WHERE p.fk_soc = " . $object->id; $result = $this->db->query($sql); $num = $this->db->num_rows($result); $var = true; if ($num) { $i = 0; $contactstatic = new Contact($this->db); while ($i < $num) { $obj = $this->db->fetch_object($result); $contact_arrray[$i] = $obj->rowid; $i++; } } if (is_array($contact_arrray) && count($contact_arrray) > 0) { try { $listlines = $odfHandler->setSegment('companycontacts'); foreach ($contact_arrray as $array_key => $contact_id) { $res_contact = $contactstatic->fetch($contact_id); $tmparray = $this->get_substitutionarray_contact($contactstatic, $outputlangs, 'contact'); foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlines->merge(); } $odfHandler->mergeSegment($listlines); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); //return -1; } } // Make substitutions into odt of thirdparty + external modules $tmparray = $this->get_substitutionarray_thirdparty($object, $outputlangs); complete_substitutions_array($tmparray, $outputlangs, $object); // Call the ODTSubstitution hook $parameters = array('file' => $file, 'object' => $object, 'outputlangs' => $outputlangs, 'substitutionarray' => &$tmparray); $reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks // Replace variables into document foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { // setVars failed, probably because key not found } } // Replace labels translated $tmparray = $outputlangs->get_translations_for_substitutions(); foreach ($tmparray as $key => $value) { try { $odfHandler->setVars($key, $value, true, 'UTF-8'); } catch (OdfException $e) { } } // Call the beforeODTSave hook $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs); $reshook = $hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks // Write new file if (!empty($conf->global->MAIN_ODT_AS_PDF)) { try { $odfHandler->exportAsAttachedPDF($file); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } } else { try { $odfHandler->creator = $user->getFullName($outputlangs); $odfHandler->title = $object->builddoc_filename; $odfHandler->subject = $object->builddoc_filename; if (!empty($conf->global->ODT_ADD_DOLIBARR_ID)) { $odfHandler->userdefined['dol_id'] = $object->id; $odfHandler->userdefined['dol_element'] = $object->element; } $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } } $reshook = $hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if (!empty($conf->global->MAIN_UMASK)) { @chmod($file, octdec($conf->global->MAIN_UMASK)); } $odfHandler = null; // Destroy object return 1; // Success } else { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } $this->error = 'UnknownError'; return -1; }
/** * Function to build a document on disk using the generic odt module. * * @param Commande $object Object source to build document * @param Translate $outputlangs Lang output object * @param string $srctemplatepath Full path of source filename for generator using a template file * @return int 1 if OK, <=0 if KO */ function write_file($object, $outputlangs, $srctemplatepath) { global $user, $langs, $conf, $mysoc, $hookmanager; if (empty($srctemplatepath)) { dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); return -1; } if (!is_object($outputlangs)) { $outputlangs = $langs; } $sav_charset_output = $outputlangs->charset_output; $outputlangs->charset_output = 'UTF-8'; $outputlangs->load("main"); $outputlangs->load("dict"); $outputlangs->load("companies"); $outputlangs->load("projects"); if ($conf->projet->dir_output) { // If $object is id instead of object if (!is_object($object)) { $id = $object; $object = new Task($this->db); $result = $object->fetch($id); if ($result < 0) { dol_print_error($this->db, $object->error); return -1; } } $project = new Project($this->db); $project->fetch($object->fk_project); $dir = $conf->projet->dir_output . "/" . $project->ref . "/"; $objectref = dol_sanitizeFileName($object->ref); if (!preg_match('/specimen/i', $objectref)) { $dir .= "/" . $objectref; } $file = $dir . "/" . $objectref . ".odt"; if (!file_exists($dir)) { print '$dir' . $dir; if (dol_mkdir($dir) < 0) { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } if (file_exists($dir)) { //print "srctemplatepath=".$srctemplatepath; // Src filename $newfile = basename($srctemplatepath); $newfiletmp = preg_replace('/\\.(ods|odt)/i', '', $newfile); $newfiletmp = preg_replace('/template_/i', '', $newfiletmp); $newfiletmp = preg_replace('/modele_/i', '', $newfiletmp); $newfiletmp = $objectref . '_' . $newfiletmp; //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt'; $file = $dir . '/' . $newfiletmp . '.odt'; //print "newdir=".$dir; //print "newfile=".$newfile; //print "file=".$file; //print "conf->societe->dir_temp=".$conf->societe->dir_temp; dol_mkdir($conf->projet->dir_temp); $socobject = $object->thirdparty; // Make substitution $substitutionarray = array('__FROM_NAME__' => $this->emetteur->name, '__FROM_EMAIL__' => $this->emetteur->email); complete_substitutions_array($substitutionarray, $langs, $object); // Open and load template require_once ODTPHP_PATH . 'odf.php'; try { $odfHandler = new odf($srctemplatepath, array('PATH_TO_TMP' => $conf->projet->dir_temp, 'ZIP_PROXY' => 'PclZipProxy', 'DELIMITER_LEFT' => '{', 'DELIMITER_RIGHT' => '}')); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } // After construction $odfHandler->contentXml contains content and // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by // [!-- BEGIN lines --]*[!-- END lines --] //print html_entity_decode($odfHandler->__toString()); //print exit; // Make substitutions into odt of user info $array_user = $this->get_substitutionarray_user($user, $outputlangs); $array_soc = $this->get_substitutionarray_mysoc($mysoc, $outputlangs); $array_thirdparty = $this->get_substitutionarray_thirdparty($socobject, $outputlangs); $array_objet = $this->get_substitutionarray_object($project, $outputlangs); $array_other = $this->get_substitutionarray_other($outputlangs); $tmparray = array_merge($array_user, $array_soc, $array_thirdparty, $array_objet, $array_other); complete_substitutions_array($tmparray, $outputlangs, $object); foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Replace tags of lines for tasks try { // Security check $socid = 0; if (!empty($project->fk_soc)) { $socid = $project->fk_soc; } $tmparray = $this->get_substitutionarray_tasks($object, $outputlangs); complete_substitutions_array($tmparray, $outputlangs, $object); foreach ($tmparray as $key => $val) { try { $odfHandler->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } // Replace tags of lines for contacts task $sourcearray = array('internal', 'external'); $contact_arrray = array(); foreach ($sourcearray as $source) { $contact_temp = $object->liste_contact(-1, $source); if (is_array($contact_temp) && count($contact_temp) > 0) { $contact_arrray = array_merge($contact_arrray, $contact_temp); } } if (is_array($contact_arrray) && count($contact_arrray) > 0) { $listlinestaskres = $odfHandler->setSegment('tasksressources'); foreach ($contact_arrray as $contact) { if ($contact['source'] == 'internal') { $objectdetail = new User($this->db); $objectdetail->fetch($contact['id']); $contact['socname'] = $mysoc->name; } elseif ($contact['source'] == 'external') { $objectdetail = new Contact($this->db); $objectdetail->fetch($contact['id']); $soc = new Societe($this->db); $soc->fetch($contact['socid']); $contact['socname'] = $soc->name; } $contact['fullname'] = $objectdetail->getFullName($outputlangs, 1); $tmparray = $this->get_substitutionarray_tasksressource($contact, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlinestaskres->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlinestaskres->merge(); } $odfHandler->mergeSegment($listlinestaskres); } //Time ressources $sql = "SELECT t.rowid, t.task_date, t.task_duration, t.fk_user, t.note"; $sql .= ", u.name, u.firstname"; $sql .= " FROM " . MAIN_DB_PREFIX . "projet_task_time as t"; $sql .= " , " . MAIN_DB_PREFIX . "user as u"; $sql .= " WHERE t.fk_task =" . $object->id; $sql .= " AND t.fk_user = u.rowid"; $sql .= " ORDER BY t.task_date DESC"; $resql = $this->db->query($sql); if ($resql) { $num = $this->db->num_rows($resql); $i = 0; $tasks = array(); $listlinestasktime = $odfHandler->setSegment('taskstimes'); while ($i < $num) { $row = $this->db->fetch_array($resql); if (!empty($row['fk_user'])) { $objectdetail = new User($this->db); $objectdetail->fetch($row['fk_user']); $row['fullcivname'] = $objectdetail->getFullName($outputlangs, 1); } else { $row['fullcivname'] = ''; } $tmparray = $this->get_substitutionarray_taskstime($row, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlinestasktime->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlinestasktime->merge(); $i++; } $this->db->free($resql); $odfHandler->mergeSegment($listlinestasktime); } // Replace tags of project files $listtasksfiles = $odfHandler->setSegment('tasksfiles'); $upload_dir = $conf->projet->dir_output . '/' . dol_sanitizeFileName($project->ref) . '/' . dol_sanitizeFileName($object->ref); $filearray = dol_dir_list($upload_dir, "files", 0, '', '(\\.meta|_preview\\.png)$', 'name', SORT_ASC, 1); foreach ($filearray as $filedetail) { $tmparray = $this->get_substitutionarray_task_file($filedetail, $outputlangs); //dol_syslog(get_class($this).'::main $tmparray'.var_export($tmparray,true)); foreach ($tmparray as $key => $val) { try { $listtasksfiles->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listtasksfiles->merge(); } //$listlines->merge(); $odfHandler->mergeSegment($listtasksfiles); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } // Replace tags of project files try { $listlines = $odfHandler->setSegment('projectfiles'); $upload_dir = $conf->projet->dir_output . '/' . dol_sanitizeFileName($object->ref); $filearray = dol_dir_list($upload_dir, "files", 0, '', '(\\.meta|_preview\\.png)$', 'name', SORT_ASC, 1); foreach ($filearray as $filedetail) { //dol_syslog(get_class($this).'::main $filedetail'.var_export($filedetail,true)); $tmparray = $this->get_substitutionarray_project_file($filedetail, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlines->merge(); } $odfHandler->mergeSegment($listlines); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } // Replace tags of lines for contacts $sourcearray = array('internal', 'external'); $contact_arrray = array(); foreach ($sourcearray as $source) { $contact_temp = $project->liste_contact(-1, $source); if (is_array($contact_temp) && count($contact_temp) > 0) { $contact_arrray = array_merge($contact_arrray, $contact_temp); } } if (is_array($contact_arrray) && count($contact_arrray) > 0) { try { $listlines = $odfHandler->setSegment('projectcontacts'); foreach ($contact_arrray as $contact) { if ($contact['source'] == 'internal') { $objectdetail = new User($this->db); $objectdetail->fetch($contact['id']); $contact['socname'] = $mysoc->name; } elseif ($contact['source'] == 'external') { $objectdetail = new Contact($this->db); $objectdetail->fetch($contact['id']); $soc = new Societe($this->db); $soc->fetch($contact['socid']); $contact['socname'] = $soc->name; } $contact['fullname'] = $objectdetail->getFullName($outputlangs, 1); $tmparray = $this->get_substitutionarray_project_contacts($contact, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlines->merge(); } $odfHandler->mergeSegment($listlines); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } } // Call the beforeODTSave hook $parameters = array('odfHandler' => &$odfHandler, 'file' => $file, 'object' => $object, 'outputlangs' => $outputlangs); $reshook = $hookmanager->executeHooks('beforeODTSave', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks // Write new file if (!empty($conf->global->MAIN_ODT_AS_PDF)) { try { $odfHandler->exportAsAttachedPDF($file); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } } else { try { $odfHandler->saveToDisk($file); } catch (Exception $e) { $this->error = $e->getMessage(); return -1; } } $reshook = $hookmanager->executeHooks('afterODTCreation', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks if (!empty($conf->global->MAIN_UMASK)) { @chmod($file, octdec($conf->global->MAIN_UMASK)); } $odfHandler = null; // Destroy object return 1; // Success } else { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } return -1; }
* Tutoriel file * Description : Imbricating several segments * You need PHP 5.2 at least * You need Zip Extension or PclZip library * * @copyright GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com) * @license http://www.gnu.org/copyleft/gpl.html GPL License * @version 1.3 */ // Make sure you have Zip extension or PclZip library loaded // First : include the librairy require_once '../library/odf.php'; $odf = new odf("tutoriel4.odt"); $odf->setVars('titre', 'Articles disponibles :'); $categorie = $odf->setSegment('categories'); for ($j = 1; $j <= 2; $j++) { $categorie->setVars('TitreCategorie', 'Catégorie ' . $j); for ($i = 1; $i <= 3; $i++) { $categorie->articles->titreArticle('Article ' . $i); $categorie->articles->date(date('d/m/Y')); $categorie->articles->merge(); } for ($i = 1; $i <= 4; $i++) { $categorie->commentaires->texteCommentaire('Commentaire ' . $i); $categorie->commentaires->merge(); } $categorie->merge(); } $odf->mergeSegment($categorie); // We export the file $odf->exportAsAttachedFile();
/** * Function to build a document on disk using the generic odt module. * * @param Facture $object Object source to build document * @param Translate $outputlangs Lang output object * @param string $srctemplatepath Full path of source filename for generator using a template file * @return int 1 if OK, <=0 if KO */ function write_file($object, $outputlangs, $srctemplatepath) { global $user, $langs, $conf, $mysoc; if (empty($srctemplatepath)) { dol_syslog("doc_generic_odt::write_file parameter srctemplatepath empty", LOG_WARNING); return -1; } if (!is_object($outputlangs)) { $outputlangs = $langs; } $sav_charset_output = $outputlangs->charset_output; $outputlangs->charset_output = 'UTF-8'; $outputlangs->load("main"); $outputlangs->load("dict"); $outputlangs->load("companies"); $outputlangs->load("bills"); if ($conf->facture->dir_output) { // If $object is id instead of object if (!is_object($object)) { $id = $object; $object = new Facture($this->db); $result = $object->fetch($id); if ($result < 0) { dol_print_error($this->db, $object->error); return -1; } } $dir = $conf->facture->dir_output; $objectref = dol_sanitizeFileName($object->ref); if (!preg_match('/specimen/i', $objectref)) { $dir .= "/" . $objectref; } $file = $dir . "/" . $objectref . ".odt"; if (!file_exists($dir)) { if (dol_mkdir($dir) < 0) { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } if (file_exists($dir)) { //print "srctemplatepath=".$srctemplatepath;exit; // Src filename $newfile = basename($srctemplatepath); $newfiletmp = preg_replace('/\\.odt/i', '', $newfile); $newfiletmp = preg_replace('/template_/i', '', $newfiletmp); $newfiletmp = preg_replace('/modele_/i', '', $newfiletmp); $newfiletmp = $objectref . '_' . $newfiletmp; //$file=$dir.'/'.$newfiletmp.'.'.dol_print_date(dol_now(),'%Y%m%d%H%M%S').'.odt'; $file = $dir . '/' . $newfiletmp . '.odt'; //print "newdir=".$dir; //print "newfile=".$newfile; //print "file=".$file; //print "conf->societe->dir_temp=".$conf->societe->dir_temp; dol_mkdir($conf->facture->dir_temp); // If BILLING contact defined on invoice, we use it $usecontact = false; $arrayidcontact = $object->getIdContact('external', 'BILLING'); if (count($arrayidcontact) > 0) { $usecontact = true; $result = $object->fetch_contact($arrayidcontact[0]); } // Recipient name if (!empty($usecontact)) { // On peut utiliser le nom de la societe du contact if ($conf->global->MAIN_USE_COMPANY_NAME_OF_CONTACT) { $socobject = $object->contact; } else { $socobject = $object->client; } } else { $socobject = $object->client; } // Make substitution $substitutionarray = array('__FROM_NAME__' => $this->emetteur->nom, '__FROM_EMAIL__' => $this->emetteur->email, '__TOTAL_TTC__' => $object->total_ttc, '__TOTAL_HT__' => $object->total_ht, '__TOTAL_VAT__' => $object->total_vat); complete_substitutions_array($substitutionarray, $langs, $object); // Line of free text $newfreetext = ''; $paramfreetext = 'FACTURE_FREE_TEXT'; if (!empty($conf->global->{$paramfreetext})) { $newfreetext = make_substitutions($conf->global->{$paramfreetext}, $substitutionarray); } // Open and load template require_once ODTPHP_PATH . 'odf.php'; $odfHandler = new odf($srctemplatepath, array('PATH_TO_TMP' => $conf->facture->dir_temp, 'ZIP_PROXY' => 'PclZipProxy', 'DELIMITER_LEFT' => '{', 'DELIMITER_RIGHT' => '}')); // After construction $odfHandler->contentXml contains content and // [!-- BEGIN row.lines --]*[!-- END row.lines --] has been replaced by // [!-- BEGIN lines --]*[!-- END lines --] //print html_entity_decode($odfHandler->__toString()); //print exit; // Make substitutions into odt of freetext try { $odfHandler->setVars('free_text', $newfreetext, true, 'UTF-8'); } catch (OdfException $e) { } // Make substitutions into odt of user info $tmparray = $this->get_substitutionarray_user($user, $outputlangs); //var_dump($tmparray); exit; foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { //var_dump($value);exit; if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Make substitutions into odt of mysoc $tmparray = $this->get_substitutionarray_mysoc($mysoc, $outputlangs); //var_dump($tmparray); exit; foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { //var_dump($value);exit; if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Make substitutions into odt of thirdparty $tmparray = $this->get_substitutionarray_thirdparty($socobject, $outputlangs); foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Replace tags of object + external modules $tmparray = $this->get_substitutionarray_object($object, $outputlangs); complete_substitutions_array($tmparray, $outputlangs, $object); foreach ($tmparray as $key => $value) { try { if (preg_match('/logo$/', $key)) { if (file_exists($value)) { $odfHandler->setImage($key, $value); } else { $odfHandler->setVars($key, 'ErrorFileNotFound', true, 'UTF-8'); } } else { $odfHandler->setVars($key, $value, true, 'UTF-8'); } } catch (OdfException $e) { } } // Replace tags of lines try { $listlines = $odfHandler->setSegment('lines'); foreach ($object->lines as $line) { $tmparray = $this->get_substitutionarray_lines($line, $outputlangs); foreach ($tmparray as $key => $val) { try { $listlines->setVars($key, $val, true, 'UTF-8'); } catch (OdfException $e) { } catch (SegmentException $e) { } } $listlines->merge(); } $odfHandler->mergeSegment($listlines); } catch (OdfException $e) { $this->error = $e->getMessage(); dol_syslog($this->error, LOG_WARNING); return -1; } // Write new file //$result=$odfHandler->exportAsAttachedFile('toto'); $odfHandler->saveToDisk($file); if (!empty($conf->global->MAIN_UMASK)) { @chmod($file, octdec($conf->global->MAIN_UMASK)); } $odfHandler = null; // Destroy object return 1; // Success } else { $this->error = $langs->transnoentities("ErrorCanNotCreateDir", $dir); return -1; } } return -1; }
/** * * @global type $logger * @param Project $project * @param type $odtTemplate * @param type $userid * @param type $session_userid */ function genProjectODT(Project $project, $odtTemplate, $session_userid, $userid = 0) { global $logger; $logger->debug("genProjectODT(): project " . $project->getName() . " template {$odtTemplate} user {$userid}"); $odf = new odf($odtTemplate); try { $odf->setVars('today', date('Y-m-d')); } catch (Exception $e) { } try { $odf->setVars('selectionName', $project->getName()); } catch (Exception $e) { } try { $session_user = UserCache::getInstance()->getUser($session_userid); $odf->setVars('sessionUser', $session_user->getRealname()); } catch (Exception $e) { } $isHideResolved = true; $issueList = $project->getIssues($userid, $isHideResolved); if ($logger->isDebugEnabled()) { $logger->debug("nb issues = " . count($issueList)); } $q_id = 0; $issueSegment = $odf->setSegment('issueSelection'); if ($logger->isDebugEnabled()) { $logger->debug('XML=' . $issueSegment->getXml()); } foreach ($issueList as $issue) { $q_id += 1; if (0 == $issue->getHandlerId()) { $userName = T_('unknown'); } else { $user = UserCache::getInstance()->getUser($issue->getHandlerId()); $userName = utf8_decode($user->getRealname()); if (empty($userName)) { $userName = "******" . $issue->getHandlerId(); } } if ($logger->isDebugEnabled()) { $logger->debug("issue " . $issue->getId() . ": handlerName = " . $userName); } if (0 == $issue->getReporterId()) { $reporterName = T_('unknown'); } else { $reporter = UserCache::getInstance()->getUser($issue->getReporterId()); $reporterName = utf8_decode($reporter->getRealname()); if (empty($reporterName)) { $reporterName = "user_" . $issue->getReporterId(); } } if ($logger->isDebugEnabled()) { $logger->debug("issue " . $issue->getId() . ": reporterName = " . $reporterName); } // add issue try { $issueSegment->setVars('q_id', $q_id); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('bugId', $issue->getId()); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('summary', utf8_decode($issue->getSummary())); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('dateSubmission', date('d/m/Y', $issue->getDateSubmission())); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $timestamp = $issue->getDeadLine(); $deadline = 0 == $timestamp ? '' : date('d/m/Y', $issue->getDeadLine()); $issueSegment->setVars('deadline', $deadline); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('currentStatus', Constants::$statusNames[$issue->getCurrentStatus()]); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('handlerId', $userName); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('reporterId', $reporterName); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('reporterName', $reporterName); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('description', utf8_decode($issue->getDescription())); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('category', $issue->getCategoryName()); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('severity', $issue->getSeverityName()); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('status', Constants::$statusNames[$issue->getStatus()]); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } try { $issueSegment->setVars('extId', $issue->getTcId()); } catch (Exception $e) { $logger->error("EXCEPTION " . $e->getMessage()); $logger->error("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } // add issueNotes $issueNotes = $issue->getIssueNoteList(); $noteId = 0; foreach ($issueNotes as $id => $issueNote) { $noteId += 1; if ($logger->isDebugEnabled()) { $logger->debug("issue " . $issue->getId() . ": note {$id} = {$issueNote->note}"); } $noteReporter = UserCache::getInstance()->getUser($issueNote->reporter_id); try { $noteReporterName = utf8_decode($noteReporter->getRealname()); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteId($noteId); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteReporter($noteReporterName); } catch (Exception $e) { } try { $issueSegment->bugnotes->noteDateSubmission(date('d/m/Y', $issueNote->date_submitted)); } catch (Exception $e) { } try { $issueSegment->bugnotes->note(utf8_decode($issueNote->note)); } catch (Exception $e) { } try { $issueSegment->bugnotes->merge(); } catch (Exception $e) { } } $issueSegment->merge(); } $odf->mergeSegment($issueSegment); // INFO: the following line is MANDATORY and fixes the following error: // "wrong .odt file encoding" //ob_end_clean(); //$odf->exportAsAttachedFile(); $myFile = Constants::$codevOutputDir . '/reports/odtphp_test_' . time() . '.odt'; if ($logger->isDebugEnabled()) { $logger->debug("save odt file " . $myFile); } $odf->saveToDisk($myFile); echo "<br>"; echo "<br>"; echo "<span style='padding-left: 3em'><a tatget='blank' href='../include/download.php?f=" . basename($myFile) . "'>" . basename($myFile) . "</a></span>"; }
static function generateOdt($params) { global $LANG; $config = array('PATH_TO_TMP' => GLPI_DOC_DIR . '/_tmp'); if (PluginMreportingPreference::atLeastOneTemplateExists()) { $template = PluginMreportingPreference::checkPreferenceTemplateValue(Session::getLoginUserID()); $withdatas = $params[0]["withdata"]; if ($withdatas == 0) { $odf = new odf("../templates/withoutdata.odt", $config); } else { $odf = new odf("../templates/{$template}", $config); } $titre = ''; $short_classname = str_replace('PluginMreporting', '', $params[0]['class']); if (isset($LANG['plugin_mreporting'][$short_classname]['title'])) { $titre = $LANG['plugin_mreporting'][$short_classname]['title']; } $odf->setVars('titre', $titre, true, 'UTF-8'); $newpage = $odf->setSegment('newpage'); foreach ($params as $result => $page) { // Default values of parameters $title = ""; $f_name = ""; $raw_datas = array(); foreach ($page as $key => $val) { ${$key} = $val; } $datas = $raw_datas['datas']; $labels2 = array(); if (isset($raw_datas['labels2'])) { $labels2 = $raw_datas['labels2']; } $configs = PluginMreportingConfig::initConfigParams($f_name, $class); foreach ($configs as $k => $v) { ${$k} = $v; } if ($unit == '%') { $datas = PluginMreportingCommon::compileDatasForUnit($datas, $unit); } $newpage->setVars('message', $title, true, 'UTF-8'); $path = GLPI_PLUGIN_DOC_DIR . "/mreporting/" . $f_name . ".png"; if ($show_graph) { $newpage->setImage('image', $path); } else { $newpage->setVars('image', "", true, 'UTF-8'); } if ($withdatas > 0) { $simpledatas = false; //simple array if (!$labels2) { $labels2 = array(); $simpledatas = true; } if ($flip_data == true) { $labels2 = array_flip($labels2); } $types = array(); foreach ($datas as $k => $v) { if (is_array($v)) { foreach ($v as $key => $val) { if (isset($labels2[$key])) { $types[$key][$k] = $val; } } } else { $types[$k] = $v; } } if ($flip_data != true) { $tmp = $datas; $datas = $types; $types = $tmp; } //simple array if ($simpledatas) { $label = $LANG['plugin_mreporting']["export"][1]; if ($template == "word.odt") { $newpage->data0->label_0(utf8_decode($label)); $newpage->data0->merge(); } else { $newpage->csvdata->setVars('TitreCategorie', $label, true, 'UTF-8'); } if ($template == "word.odt") { foreach ($types as $label2 => $cols) { $newpage->csvdata->label1->label_1(utf8_decode($label2)); $newpage->csvdata->label1->merge(); if (!empty($unit)) { $cols = $cols . " " . $unit; } $newpage->csvdata->data1->data_1($cols); $newpage->csvdata->merge(); } } else { foreach ($types as $label2 => $cols) { if (!empty($unit)) { $cols = $cols . " " . $unit; } $newpage->csvdata->csvdata2->label_1(utf8_decode($label2)); $newpage->csvdata->csvdata2->data_1($cols); $newpage->csvdata->csvdata2->merge(); } $newpage->csvdata->merge(); } } else { if ($template == "word.odt") { foreach ($datas as $label => $val) { $newpage->data0->label_0(utf8_decode($label)); $newpage->data0->merge(); } foreach ($types as $label2 => $cols) { $newpage->csvdata->label1->label_1(utf8_decode($label2)); $newpage->csvdata->label1->merge(); foreach ($cols as $date => $nb) { if (!empty($unit)) { $nb = $nb . " " . $unit; } if (!is_array($nb)) { $newpage->csvdata->data1->data_1(utf8_decode($nb)); } $newpage->csvdata->data1->merge(); } $newpage->csvdata->merge(); } } else { foreach ($types as $label2 => $cols) { foreach ($cols as $label1 => $nb) { if (!empty($unit)) { $nb = $nb . " " . $unit; } $newpage->csvdata->setVars('TitreCategorie', $label2, true, 'UTF-8'); $newpage->csvdata->csvdata2->setVars('label_1', utf8_decode($label1), true, 'UTF-8'); if (!is_array($nb)) { $newpage->csvdata->csvdata2->setVars('data_1', utf8_decode($nb), true, 'UTF-8'); } $newpage->csvdata->csvdata2->merge(); } $newpage->csvdata->merge(); } } } } $newpage->merge(); } $odf->mergeSegment($newpage); // We export the file $odf->exportAsAttachedFile(); unset($_SESSION['glpi_plugin_mreporting_odtarray']); } }
if (isset($EndDate)) { $end_sql = strftime("%Y-%m-%d ", $EndDate) . $EndTime; } if (count($sql_filter) > 0) { $req = "SELECT * FROM " . $cfg_syslog["db_table_logs_merge"] . " WHERE datetime > '{$start_sql}' AND datetime <= '{$end_sql}' AND " . $req_sql_filter . " ORDER BY datetime"; } else { $req = "SELECT * FROM " . $cfg_syslog["db_table_logs_merge"] . " WHERE datetime > '{$start_sql}' AND datetime <= '{$end_sql}' ORDER BY datetime"; } $nom = "syslog_events"; $DBRESULT =& $pearSyslogDB->query($req); if (PEAR::isError($DBRESULT)) { print "Mysql Error : " . $DBRESULT->getMessage() . "\n"; } $odf->setVars('tdatetime', _("Date / Time"), true, 'UTF-8'); $odf->setVars('thost', _("Host"), true, 'UTF-8'); $odf->setVars('tfacility', _("Facility"), true, 'UTF-8'); $odf->setVars('tseverity', _("Severity"), true, 'UTF-8'); $odf->setVars('tprogram', _("Program"), true, 'UTF-8'); $odf->setVars('tmessage', _("Message")); $resource = $odf->setSegment('s'); while ($DBRESULT->fetchInto($data)) { $resource->setVars('datetime', $data["datetime"], true, 'UTF-8'); $resource->setVars('host', $data["host"], true, 'UTF-8'); $resource->setVars('facility', $data["facility"], true, 'UTF-8'); $resource->setVars('severity', $data["priority"], true, 'UTF-8'); $resource->setVars('program', $data["program"], true, 'UTF-8'); $resource->setVars('message', utf8_decode($data["msg"])); $resource->merge(); } $odf->mergeSegment($resource); $odf->exportAsAttachedFile("syslog_events.odt");