urlGenerator = $app['media_accessor.subdef_url_generator']; $this->printer = $printer; $this->pdfTitle = $pdfTitle; $this->pdfDescription = $pdfDescription; $this->canDownload = $canDownload; $this->showRecordInfo = $showRecordInfo; $this->descriptionFontSize = $descriptionFontSize; $this->fieldTitleColor = $fieldTitleColor; $this->downloadSubdef = $downloadSubdef; $this->thumbnailName = $printer->getThumbnailName(); $this->previewName = $printer->getPreviewName(); if (!empty($userPassword)) { $this->pdf->SetProtection([], $userPassword); } $this->pdf->setPrintOwnerUser($app->getAuthenticatedUser()); $this->pdf->setApp($app); $records = $printer->get_elements(); $aclUser = $this->app->getAclForUser($this->app->getAuthenticatedUser()); $list = []; foreach ($records as $record) { switch ($layout) { default: throw new \Exception('Unknown layout'); break; case self::LAYOUT_FEEDBACK: case self::LAYOUT_FEEDBACKONLY: case self::LAYOUT_PREVIEW: case self::LAYOUT_PREVIEWCAPTION: case self::LAYOUT_PREVIEWCAPTIONTDM: try { $subdef = $record->get_subdef($this->previewName); // fallback to thumbnail ( video, sound, doc ) .. if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { $subdef = $record->get_subdef($this->thumbnailName); } // if (!$subdef->is_physically_present()) { // continue 2; // } // check access right on the subdef if ( ($subdef->get_name() != 'document' && !$aclUser->has_access_to_subdef($record, $subdef->get_name())) || ($subdef->get_name() == 'document' && !$aclUser->has_right_on_base($record->getBaseId(), \ACL::CANDWNLDHD)) ) { continue 2; } // if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { // continue 2; // } } catch (\Exception $e) { // use substitution image if the subdef is not available //continue 2; } break; case self::LAYOUT_THUMBNAILLIST: case self::LAYOUT_THUMBNAILGRID: try { $subdef = $record->get_subdef($this->thumbnailName); // if (!$subdef->is_physically_present()) { // continue 2; // } // check access right on the subdef if ( ($subdef->get_name() != 'document' && !$aclUser->has_access_to_subdef($record, $subdef->get_name())) || ($subdef->get_name() == 'document' && !$aclUser->has_right_on_base($record->getBaseId(), \ACL::CANDWNLDHD)) ) { continue 2; } // if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { // continue 2; // } } catch (\Exception $e) { // use substitution image if the subdef is not available //continue 2; } break; case self::LAYOUT_CAPTION: break; } $record->setNumber(count($list) + 1); $list[] = $record; } $this->records = $list; switch ($layout) { case self::LAYOUT_FEEDBACK: $this->print_preview(false, true, true); break; case self::LAYOUT_FEEDBACKONLY: $this->print_preview(false, false, true); break; case self::LAYOUT_PREVIEW: $this->print_preview(false, false, false); break; case self::LAYOUT_PREVIEWCAPTION: $this->print_preview(false, true, false); break; case self::LAYOUT_PREVIEWCAPTIONTDM: $this->print_preview(true, true, false); break; case self::LAYOUT_THUMBNAILLIST: $this->print_thumbnailList(); break; case self::LAYOUT_THUMBNAILGRID: $this->print_thumbnailGrid(); break; case self::LAYOUT_CAPTION: $this->print_caption(); break; } } protected function print_thumbnailGrid($links = false) { $this->addUserInput(); $NDiapoW = 3; $NDiapoH = 4; $this->pdf->AddPage(); $oldMargins = $this->pdf->getMargins(); $tmargin = $oldMargins['top']; $lmargin = $oldMargins['left']; $bmargin = $oldMargins['bottom']; $rmargin = $oldMargins['right']; $this->pdf->SetLeftMargin($lmargin + 55); $clientW = $this->pdf->getPageWidth() - $lmargin - $rmargin; $clientH = $this->pdf->getPageHeight() - $tmargin - $bmargin; $DiapoW = floor($clientW / $NDiapoW); $DiapoH = floor($clientH / $NDiapoH); $TitleH = 5; $ImgSize = min($DiapoW, ($DiapoH - $TitleH)) - 5; $npages = ceil(count($this->records) / ($NDiapoW * $NDiapoH)); $irow = $ipage = 0; $icol = -1; foreach ($this->records as $rec) { /* @var \record_adapter $rec */ if (++$icol >= $NDiapoW) { $icol = 0; if (++$irow >= $NDiapoH) { $irow = 0; $ipage++; $this->pdf->AddPage(); } } $fimg = null; $wimg = $himg = $ImgSize; $subdef = null; if ($rec->has_subdef($this->thumbnailName)) { $subdef = $rec->get_subdef($this->thumbnailName); } if ($subdef == null || ($subdef != null && ($subdef->get_type() !== \media_subdef::TYPE_IMAGE || !$subdef->is_physically_present()) && $rec->has_subdef('thumbnail'))) { $subdef = $rec->get_subdef('thumbnail'); } if ($subdef == null || ($subdef !== null && ($subdef->get_type() !== \media_subdef::TYPE_IMAGE || !$subdef->is_physically_present()))) { $fimg = sprintf('%s/assets/common/images/icons/substitution/%s.png', $this->app['root.path']."/www", str_replace('/', '_', $rec->getMimeType()) ); if ($size = @getimagesize($fimg)) { $wmm = (int) $size[0] ; $hmm = (int) $size[1] ; if ($wmm > $hmm) { $himg = $wimg * $hmm / $wmm; } else { $wimg = $himg * $wmm / $hmm; } } } else { $fimg = $subdef->getRealPath(); if (!$this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::NOWATERMARK) && $subdef->get_type() == \media_subdef::TYPE_IMAGE) { $fimg = \recordutils_image::watermark($this->app, $subdef); } if ($subdef->get_height() > 0 && $subdef->get_width() > 0) { if ($subdef->get_width() > $subdef->get_height()) { $himg = $wimg * $subdef->get_height() / $subdef->get_width(); } else { $wimg = $himg * $subdef->get_width() / $subdef->get_height(); } } } if ($fimg) { $x = $lmargin + ($icol * $DiapoW); $y = $tmargin + ($irow * $DiapoH); $this->pdf->SetDrawColor(0); $this->pdf->Rect($x, $y, $DiapoW, $DiapoH, "D"); $this->pdf->SetXY($x, $y + 1); $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); if ($links) { $lk = $this->pdf->AddLink(); $this->pdf->SetLink($lk, 0, ($this->pdf->getPage() - 1) + ($npages - $ipage) + $rec->getNumber()); $this->pdf->Image( $fimg , $x + (($DiapoW - $wimg) / 2) , $TitleH + $y + (($DiapoH - $TitleH - $himg) / 2) , $wimg, $himg , null, $lk ); } else { $this->pdf->Image($fimg , $x + (($DiapoW - $wimg) / 2) , $TitleH + $y + (($DiapoH - $TitleH - $himg) / 2) , $wimg, $himg ); } $downloadLink = $rec->get_title(); if ($this->canDownload && !empty($this->downloadSubdef) && $rec->has_subdef($this->downloadSubdef) && (($rec->get_subdef($this->downloadSubdef)->get_name() != 'document' && $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::CANDWNLDPREVIEW)) || ($rec->get_subdef($this->downloadSubdef)->get_name() == 'document' && $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::CANDWNLDHD))) ) { $sd = $rec->get_subdef($this->downloadSubdef); if ($sd->is_physically_present()) { $url = $this->getDownloadUrl($sd); $downloadLink = sprintf('%s', $url, $rec->get_title()); } } $this->pdf->MultiCell($DiapoW, $TitleH, $downloadLink, '0', 'C', false, 1, '', '', true, 0, true); $this->pdf->Circle($x + 6, $y + $DiapoH - 6, 5, 0, 360, "F", [], [200, 200, 200]); // center num in the cercle switch (strlen($rec->getNumber())) { case 1: $xNum = $x + 4; break; case 2: $xNum = $x + 3; break; case 3: $xNum = $x + 2; break; default: $xNum = $x + 1; } $this->pdf->SetXY($xNum, $y + $DiapoH - 10); $this->pdf->Write('8', $rec->getNumber()); } } $this->pdf->SetLeftMargin($oldMargins['left']); } protected function print_thumbnailList() { $this->addUserInput(); $this->pdf->AddPage(); $oldMargins = $this->pdf->getMargins(); $lmargin = $oldMargins['left']; $rmargin = $oldMargins['right']; $this->pdf->SetLeftMargin($lmargin + 55); $ndoc = 0; /* @var \record_adapter $rec */ foreach ($this->records as $rec) { $subdef = null; if ($rec->has_subdef($this->thumbnailName)) { $subdef = $rec->get_subdef($this->thumbnailName); } if ($subdef == null || ($subdef != null && ($subdef->get_type() !== \media_subdef::TYPE_IMAGE || !$subdef->is_physically_present()) && $rec->has_subdef('thumbnail'))) { $subdef = $rec->get_subdef('thumbnail'); } $wimg = $himg = 50; $fimg = null; if ($subdef == null || ($subdef !== null && ($subdef->get_type() !== \media_subdef::TYPE_IMAGE || !$subdef->is_physically_present()))) { $fimg = sprintf('%s/assets/common/images/icons/substitution/%s.png', $this->app['root.path']."/www", str_replace('/', '_', $rec->getMimeType()) ); if ($size = @getimagesize($fimg)) { $wi = (int) $size[0] ; $hi = (int) $size[1] ; } } else { $fimg = $subdef->getRealPath(); $wi = $subdef->get_width(); $hi = $subdef->get_height(); } // 1px = 3.77952 mm $finalWidth = round($wi / 3.779528, 2); $finalHeight = round($hi / 3.779528, 2); $aspectH = $finalWidth/$finalHeight; $aspectW = $finalHeight/$finalWidth; if ($finalWidth > 0 && $finalHeight > 0) { if ($finalWidth > $finalHeight && $finalWidth > $wimg) { $finalWidth = $wimg; $finalHeight = $wimg * $aspectW; } else if ($finalHeight > $finalWidth && $finalHeight > $himg) { $finalHeight = $himg; $finalWidth = $himg * $aspectH; } else if ($finalHeight == $finalWidth & $finalWidth > $wimg) { $finalHeight = $wimg; $finalWidth = $himg; } } if ($this->pdf->GetY() > $this->pdf->getPageHeight() - (6 + $finalHeight + 20)) $this->pdf->AddPage(); $title = "record : " . $rec->get_title(); $y = $this->pdf->GetY(); $t = \phrasea::bas_labels($rec->getBaseId(), $this->app); $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); $this->pdf->SetFillColor(220, 220, 220); $this->pdf->SetLeftMargin($lmargin); $this->pdf->SetRightMargin($rmargin); $this->pdf->SetX($lmargin); $this->pdf->SetY($y); $this->pdf->out = false; $this->pdf->MultiCell(140, 4, $title, "LTR", "L", 1); $y2 = $this->pdf->GetY(); $h = $y2 - $y; $this->pdf->out = true; $this->pdf->SetX($lmargin); $this->pdf->SetY($y); $this->pdf->Cell(0, $h, "", "LTR", 1, "R", 1); $this->pdf->SetX($lmargin); $this->pdf->SetY($y); $this->pdf->Cell(0, 4, $t, "", 1, "R"); $this->pdf->SetX($lmargin); $this->pdf->SetY($y); $this->pdf->MultiCell(140, 4, $title, "", "L"); $this->pdf->SetX($lmargin); $this->pdf->SetY($y = $y2); $this->pdf->SetLeftMargin($lmargin + 55); $this->pdf->SetY($y + 2); if ($fimg) { $y = $this->pdf->GetY(); $this->pdf->Image($fimg, $lmargin, $y, $finalWidth, $finalHeight); $this->pdf->SetY($y + 3); } $nf = 0; $this->pdf->SetX($lmargin + 55); $p0 = $this->pdf->PageNo(); $y0 = $this->pdf->GetY(); if ($this->canDownload && !empty($this->downloadSubdef) && $rec->has_subdef($this->downloadSubdef) && (($rec->get_subdef($this->downloadSubdef)->get_name() != 'document' && $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::CANDWNLDPREVIEW)) || ($rec->get_subdef($this->downloadSubdef)->get_name() == 'document' && $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::CANDWNLDHD))) ) { $sd = $rec->get_subdef($this->downloadSubdef); if ($sd->is_physically_present()) { $url = $this->getDownloadUrl($sd); $downloadLink = sprintf('%s', $url, $this->app->trans("print:: download")); $this->pdf->writeHTML($downloadLink, true, false, false, true); } } $this->pdf->SetY($this->pdf->GetY() + 2); if ($this->showRecordInfo) { $this->showRecordInfoBloc($rec); $this->pdf->Write(6, "\n"); } $r = $g = $b = 0; if (!empty($this->fieldTitleColor)) { list($r, $g, $b) = sscanf($this->fieldTitleColor, "#%02x%02x%02x"); } foreach ($rec->get_caption()->get_fields() as $field) { /* @var $field caption_field */ if (!empty($this->fieldTitleColor)) { $this->pdf->SetTextColor($r, $g, $b); } $this->pdf->SetFont(PhraseaPDF::FONT, 'B', $this->descriptionFontSize); $this->pdf->Write(5, $field->get_databox_field()->get_label($this->app['locale']) . " : "); $this->pdf->SetTextColor(0); $this->pdf->SetFont(PhraseaPDF::FONT, '', $this->descriptionFontSize); $this->pdf->Write(5, $field->get_serialized_values()); $this->pdf->Write(6, "\n"); $nf++; } if ($this->pdf->PageNo() == $p0 && ($this->pdf->GetY() - $y0) < $finalHeight) $this->pdf->SetY($y0 + $finalHeight); $ndoc++; } $this->pdf->SetLeftMargin($lmargin); } protected function print_caption() { $this->addUserInput(); $this->pdf->AddPage(); $oldMargins = $this->pdf->getMargins(); $lmargin = $oldMargins['left']; $rmargin = $oldMargins['right']; /* @var \record_adapter $rec */ foreach ($this->records as $rec) { $title = "record : " . $rec->get_title(); $y = $this->pdf->GetY(); if($this->pdf->getPageHeight() - $y < 30){ // height of the footer is 15 $this->pdf->AddPage(); $y = $oldMargins['top']; } $t = \phrasea::bas_labels($rec->getBaseId(), $this->app); $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); $this->pdf->SetFillColor(220, 220, 220); $this->pdf->SetLeftMargin($lmargin); $this->pdf->SetRightMargin($rmargin); $this->pdf->SetX($lmargin); $this->pdf->SetY($y); $this->pdf->out = false; $this->pdf->MultiCell(140, 4, $title, "LTR", "L", 1); $y2 = $this->pdf->GetY(); $h = $y2 - $y; $this->pdf->out = true; $this->pdf->SetX($lmargin); $this->pdf->SetY($y); $this->pdf->Cell(0, $h, "", "LTR", 1, "R", 1); $this->pdf->SetX($lmargin); $this->pdf->SetY($y); $this->pdf->Cell(0, 4, $t, "", 1, "R"); $this->pdf->SetX($lmargin); $this->pdf->SetY($y); $this->pdf->MultiCell(140, 4, $title, "", "L"); $this->pdf->SetX($lmargin); $this->pdf->SetY($y = $y2); $this->pdf->SetY($y + 2); if ($this->canDownload && !empty($this->downloadSubdef) && $rec->has_subdef($this->downloadSubdef) && ((($rec->get_subdef($this->downloadSubdef)->get_name() != 'document' && $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::CANDWNLDPREVIEW)) || ($rec->get_subdef($this->downloadSubdef)->get_name() == 'document' && $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::CANDWNLDHD))) ) ) { $sd = $rec->get_subdef($this->downloadSubdef); if ($sd->is_physically_present()) { $url = $this->getDownloadUrl($sd); $downloadLink = sprintf('%s', $url, $this->app->trans("print:: download")); $this->pdf->writeHTML($downloadLink, true, false, false, true); } } $this->pdf->SetY($this->pdf->GetY() + 2); if ($this->showRecordInfo) { $this->showRecordInfoBloc($rec); $this->pdf->Write(6, "\n"); } foreach ($rec->get_caption()->get_fields() as $field) { if ($field->get_databox_field()->get_printable()) { if (!empty($this->fieldTitleColor)) { list($r, $g, $b) = sscanf($this->fieldTitleColor, "#%02x%02x%02x"); $this->pdf->SetTextColor($r, $g, $b); } $this->pdf->SetFont(PhraseaPDF::FONT, 'B', $this->descriptionFontSize); $this->pdf->Write(5, $field->get_databox_field()->get_label($this->app['locale']) . " : "); $this->pdf->SetTextColor(0); $this->pdf->SetFont(PhraseaPDF::FONT, '', $this->descriptionFontSize); $t = str_replace( ["<", ">", "&"] , ["<", ">", "&"] , strip_tags($field->get_serialized_values()) ); $this->pdf->Write(5, $t); $this->pdf->Write(6, "\n"); } } $this->pdf->SetY($this->pdf->GetY() + 10); } } protected function print_preview($withtdm, $write_caption, $withfeedback) { $basket = null; $this->addUserInput(); if($this->printer->is_basket()) { $basket = $this->printer->get_original_basket(); if($withfeedback) { // first page : validation informations $this->pdf->AddPage(); $this->pdf->SetY(20); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 14); $this->pdf->Cell(0, 0, $this->app->trans("print_feedback:: Feedback on basket %name%", ['%name%'=>$basket->getName()]), '', 1, 'C', false); $this->pdf->SetY($this->pdf->GetY()+10); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); $this->pdf->Write(5, $this->app->trans("print_feedback:: Document generated on : ") . " "); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); $this->pdf->Write(5, $this->formatDate(new \DateTime('now'))); $this->pdf->Write(12, "\n"); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback initiated by : ") . " "); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); $this->pdf->Write(5, $this->getDisplayName($basket->getVoteInitiator())); $this->pdf->Write(6, "\n"); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback initiated on : ") . " "); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); $this->pdf->Write(5, $this->formatDate($basket->getVoteCreated())); $this->pdf->Write(6, "\n"); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback expiring on : ") . " "); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); $this->pdf->Write(5, $this->formatDate($basket->getVoteExpires())); $this->pdf->Write(12, "\n"); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); $basket->isVoteFinished() ? $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback expired")) : $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback active")); $this->pdf->Write(12, "\n"); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); $this->pdf->Write(5, $this->app->trans("print_feedback:: Participants : ")); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); foreach ($basket->getParticipants() as $participant) { $this->pdf->Write(5, "\n - " . $this->getDisplayName($participant->getUser())); } } } if ($withtdm === true) { $this->print_thumbnailGrid(true); } foreach ($this->records as $krec => $rec) { /* @var \record_adapter $rec */ $this->pdf->AddPage(); if ($withtdm === "CALCPAGES") { $rec->setNumber($this->pdf->PageNo()); } $lmargin = $this->pdf->GetX(); $himg = 0; $y = 0; $miniConv = NULL; $LEFT__TEXT = ""; $LEFT__IMG = NULL; $RIGHT_TEXT = ""; $RIGHT_IMG = NULL; $LEFT__IMG = $this->app['root.path'] . "/config/minilogos/logopdf_" . $rec->getDataboxId() . ".jpg"; if (!is_file($LEFT__IMG)) { $databox = $rec->getDatabox(); $str = $databox->get_sxml_structure(); $vn = (string) ($str->pdfPrintLogo); if (($vn * 1) == 1) { $LEFT__TEXT = $databox->get_label($this->app['locale']); } } $collection = \collection::getByBaseId($this->app, $rec->getBaseId()); $vn = ""; if (false !== $str = simplexml_load_string($collection->get_prefs())) { $vn = (string) ($str->pdfPrintappear); } if ($vn == "" || $vn == "1") { $RIGHT_TEXT = \phrasea::bas_labels($rec->getBaseId(), $this->app); } elseif ($vn == "2") { $RIGHT_IMG = $this->app['root.path'] . "/config/minilogos/" . $rec->getBaseId(); } $xtmp = $this->pdf->GetX(); $ytmp = $this->pdf->GetY(); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); $this->pdf->SetFillColor(220, 220, 220); $y = $this->pdf->GetY(); $this->pdf->MultiCell(95, 7, $LEFT__TEXT, "LTB", "L", 1); $y2 = $this->pdf->GetY(); $h = $y2 - $y; $this->pdf->SetY($y); $this->pdf->SetX(105); $this->pdf->Cell(95, $h, $RIGHT_TEXT, "TBR", 1, "R", 1); if ($basket) { $ord = $basket->getElementByRecord($this->app, $rec)->getOrd(); $this->pdf->SetY($y); $this->pdf->SetX(10); $this->pdf->Cell(190, $h, $ord, "", 1, "C", 0); } else { $this->pdf->SetY($y); $this->pdf->write(7, $rec->getNumber(), '', false, 'C'); $this->pdf->SetY($y2); } if ($LEFT__TEXT == "" && is_file($LEFT__IMG)) { if ($size = @getimagesize($LEFT__IMG)) { $wmm = (int) $size[0] * 25.4 / 72; $hmm = (int) $size[1] * 25.4 / 72; if ($hmm > 6) { $coeff = $hmm / 6; $wmm = (int) $wmm / $coeff; $hmm = (int) $hmm / $coeff; } $this->pdf->Image($LEFT__IMG, $xtmp + 0.5, $ytmp + 0.5, $wmm, $hmm); } } if ($RIGHT_IMG != NULL && is_file($RIGHT_IMG)) { if ($size = @getimagesize($RIGHT_IMG)) { if ($size[2] == '1') { if (!isset($miniConv[$RIGHT_IMG])) { $tmp_filename = tempnam('minilogos/', 'gif4fpdf'); $img = imagecreatefromgif($RIGHT_IMG); imageinterlace($img, 0); imagepng($img, $tmp_filename); rename($tmp_filename, $tmp_filename . '.png'); $miniConv[$RIGHT_IMG] = $tmp_filename . '.png'; $RIGHT_IMG = $tmp_filename . '.png'; } else $RIGHT_IMG = $miniConv[$RIGHT_IMG]; $wmm = (int) $size[0] * 25.4 / 72; $hmm = (int) $size[1] * 25.4 / 72; if ($hmm > 6) { $coeff = $hmm / 6; $wmm = (int) $wmm / $coeff; $hmm = (int) $hmm / $coeff; } $tt = 0; if ($hmm < 6) $tt = (6 - $hmm) / 2; $this->pdf->Image($RIGHT_IMG, 200 - 0.5 - $wmm, $ytmp + 0.5 + $tt); } else { $wmm = (int) $size[0] * 25.4 / 72; $hmm = (int) $size[1] * 25.4 / 72; if ($hmm > 6) { $coeff = $hmm / 6; $wmm = (int) $wmm / $coeff; $hmm = (int) $hmm / $coeff; } $this->pdf->Image($RIGHT_IMG, 200 - 0.5 - $wmm, $ytmp + 0.5); } } } $y = $this->pdf->GetY() + 5; $subdef = null; if ($rec->has_subdef($this->previewName)) { /* @var \record_adapter $rec */ $subdef = $rec->get_subdef($this->previewName); } if ($subdef == null || ($subdef != null && ($subdef->get_type() !== \media_subdef::TYPE_IMAGE || !$subdef->is_physically_present()) && $rec->has_subdef('thumbnail'))) { $subdef = $rec->get_subdef('thumbnail'); } // original height / original width x new width = new height $wimg = $himg = 150; // preview dans un carre de 150 mm if ($subdef == null || ($subdef !== null && ($subdef->get_type() !== \media_subdef::TYPE_IMAGE || !$subdef->is_physically_present()))) { $f = sprintf('%s/assets/common/images/icons/substitution/%s.png', $this->app['root.path']."/www", str_replace('/', '_', $rec->getMimeType()) ); if ($size = @getimagesize($f)) { $wi = (int) $size[0] ; $hi = (int) $size[1] ; } } else { $f = $subdef->getRealPath(); if (!$this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::NOWATERMARK) && $subdef->get_type() == \media_subdef::TYPE_IMAGE) { $f = \recordutils_image::watermark($this->app, $subdef); } $wi = $subdef->get_width(); $hi = $subdef->get_height(); } // 1px = 3.77952 mm $finalWidth = round($wi / 3.779528, 2); $finalHeight = round($hi / 3.779528, 2); $aspectH = $finalWidth/$finalHeight; $aspectW = $finalHeight/$finalWidth; if ($finalWidth > 0 && $finalHeight > 0) { if ($finalWidth > $finalHeight && $finalWidth > $wimg) { $finalWidth = $wimg; $finalHeight = $wimg * $aspectW; } else if ($finalHeight > $finalWidth && $finalHeight > $himg) { $finalHeight = $himg; $finalWidth = $himg * $aspectH; } else if ($finalHeight == $finalWidth & $finalWidth > $wimg) { $finalHeight = $wimg; $finalWidth = $himg; } } $this->pdf->Image($f, (210 - $finalWidth) / 2, $y, $finalWidth, $finalHeight); if ($miniConv != NULL) { foreach ($miniConv as $oneF) unlink($oneF); } $this->pdf->SetXY($lmargin, $y += ( $finalHeight + 5)); if ($this->canDownload && !empty($this->downloadSubdef) && $rec->has_subdef($this->downloadSubdef) && ((($rec->get_subdef($this->downloadSubdef)->get_name() != 'document' && $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::CANDWNLDPREVIEW)) || ($rec->get_subdef($this->downloadSubdef)->get_name() == 'document' && $this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::CANDWNLDHD)))) ) { $sd = $rec->get_subdef($this->downloadSubdef); if ($sd->is_physically_present()) { $url = $this->getDownloadUrl($sd); $downloadLink = sprintf('%s', $url, $this->app->trans("print:: download")); $this->pdf->writeHTML($downloadLink, true, false, false, true); } } if ($this->showRecordInfo) { $this->showRecordInfoBloc($rec); } $nf = 0; if ($basket && $basket->isVoteBasket()) { /** @var ValidationParticipant $participant */ if ($nf > 0) { $this->pdf->Write(6, "\n"); } $this->pdf->Write(12, "\n"); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); $this->pdf->Write(5, $this->app->trans("print_feedback:: Votes :")); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); $basketElement = $basket->getElementByRecord($this->app, $rec); $iparticipant = 0; foreach ($basket->getParticipants() as $participant) { $this->pdf->Write(6, "\n"); // if ($iparticipant++ > 0) { // $this->pdf->SetY($this->pdf->GetY()+1); // } try { $basketElementVote = $basketElement->getUserVote($participant->getUser(), true); } catch (\Exception $e) { continue; } $this->pdf->Write(5, '- ' . $this->getDisplayName($participant->getUser(), true). " : "); $r = $basketElementVote->getAgreement(); $this->pdf->SetX(100); if ($r === null) { $this->pdf->Write(0, $this->app->trans("print_feedback:: non voté")); } else { if($r) { $this->pdf->SetTextColor(0, 127, 0); $this->pdf->Write(0, $this->app->trans("print_feedback:: Oui")); } else { $this->pdf->SetTextColor(200, 0, 0); $this->pdf->Write(0, $this->app->trans("print_feedback:: Non")); } $this->pdf->SetTextColor(0); $this->pdf->Write(0, " (" . $this->formatDate($basketElementVote->getUpdated()) . ")"); } if (($note = (string)($basketElementVote->getNote())) !== '') { $this->pdf->SetFont(PhraseaPDF::FONT, 'I', 11); $this->pdf->Write(5,"\n"); $this->pdf->SetX(100); $this->pdf->MultiCell(95, 0, $note, '', "L", false); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); } $nf++; } } if ($write_caption) { $this->pdf->Write(6, "\n"); foreach ($rec->get_caption()->get_fields() as $field) { /* @var $field caption_field */ if ($field->get_databox_field()->get_printable()) { if ($nf > 0) { $this->pdf->Write(6, "\n"); } if (!empty($this->fieldTitleColor)) { list($r, $g, $b) = sscanf($this->fieldTitleColor, "#%02x%02x%02x"); $this->pdf->SetTextColor($r, $g, $b); } $this->pdf->SetFont(PhraseaPDF::FONT, 'B', $this->descriptionFontSize); $this->pdf->Write(5, $field->get_databox_field()->get_label($this->app['locale']) . " : "); $this->pdf->SetTextColor(0); $this->pdf->SetFont(PhraseaPDF::FONT, '', $this->descriptionFontSize); $t = str_replace( ["<", ">", "&"] , ["<", ">", "&"] , strip_tags($field->get_serialized_values()) ); $this->pdf->Write(5, $t); $nf++; } } } } return; } private function showRecordInfoBloc(\record_adapter $rec) { $r = $g = $b = 0; if (!empty($this->fieldTitleColor)) { list($r, $g, $b) = sscanf($this->fieldTitleColor, "#%02x%02x%02x"); $this->pdf->SetTextColor($r, $g, $b); } $this->pdf->SetFont(PhraseaPDF::FONT, 'B', $this->descriptionFontSize); $this->pdf->Write(5, $this->app->trans("print_feedback:: record title: ") . " "); $this->pdf->SetTextColor(0); $this->pdf->SetFont(PhraseaPDF::FONT, '', $this->descriptionFontSize); $this->pdf->Write(5, $rec->get_title()); $this->pdf->Write(6, "\n"); if (!empty($this->fieldTitleColor)) { $this->pdf->SetTextColor($r, $g, $b); } $this->pdf->SetFont(PhraseaPDF::FONT, 'B', $this->descriptionFontSize); $this->pdf->Write(5, $this->app->trans("print_feedback:: record id: ") . " "); $this->pdf->SetTextColor(0); $this->pdf->SetFont(PhraseaPDF::FONT, '', $this->descriptionFontSize); $this->pdf->Write(5, $rec->getRecordId()); $this->pdf->Write(6, "\n"); if (!empty($this->fieldTitleColor)) { $this->pdf->SetTextColor($r, $g, $b); } $this->pdf->SetFont(PhraseaPDF::FONT, 'B', $this->descriptionFontSize); $this->pdf->Write(5, $this->app->trans("print_feedback:: base name: ") . " "); $this->pdf->SetTextColor(0); $this->pdf->SetFont(PhraseaPDF::FONT, '', $this->descriptionFontSize); $this->pdf->Write(5, $rec->getDatabox()->get_label($this->app['locale'])); $this->pdf->Write(6, "\n"); if (!empty($this->fieldTitleColor)) { $this->pdf->SetTextColor($r, $g, $b); } $this->pdf->SetFont(PhraseaPDF::FONT, 'B', $this->descriptionFontSize); $this->pdf->Write(5, $this->app->trans("print_feedback:: originale filename: ") . " "); $this->pdf->SetTextColor(0); $this->pdf->SetFont(PhraseaPDF::FONT, '', $this->descriptionFontSize); $this->pdf->Write(5, $rec->get_original_name()); $this->pdf->Write(6, "\n"); if (!empty($this->fieldTitleColor)) { $this->pdf->SetTextColor($r, $g, $b); } $this->pdf->SetFont(PhraseaPDF::FONT, 'B', $this->descriptionFontSize); $this->pdf->Write(5, $this->app->trans("print_feedback:: document Uuid: ") . " "); $this->pdf->SetTextColor(0); $this->pdf->SetFont(PhraseaPDF::FONT, '', $this->descriptionFontSize); $this->pdf->Write(5, $rec->getUUID()); $this->pdf->Write(6, "\n"); } private function formatDate(\DateTime $date) { $locale = $this->app['locale']; switch ($locale) { case 'fr': $fmt = new DateFormatter( 'fr_FR', DateFormatter::LONG, DateFormatter::NONE ); $date_formated = $fmt->format($date); break; case 'en': $fmt = new DateFormatter( 'en_EN', DateFormatter::LONG, DateFormatter::NONE ); $date_formated = $fmt->format($date); break; case 'de': $fmt = new DateFormatter( 'de_DE', DateFormatter::LONG, DateFormatter::NONE ); $date_formated = $fmt->format($date); break; default: $fmt = new DateFormatter( 'en_EN', DateFormatter::LONG, DateFormatter::NONE , null, null, 'yyyy/mm/dd' ); $date_formated = $fmt->format($date); break; } return $date_formated; } private function getDisplayName($user, $short = false) { $displayName = ''; if (trim($user->getLastName()) !== '' || trim($user->getFirstName()) !== '') { $displayName = $user->getFirstName() . ('' !== $user->getFirstName() && '' !== $user->getLastName() ? ' ' : '') . $user->getLastName() ; if ($short) { return $displayName; } } $email = trim($user->getEmail()); if ($email === '') { $email = $user->getLogin(); } if ($displayName !== '') { return $displayName . ", " . $email; } else { return $email; } } private function addUserInput() { if (!$this->isUserInputPrinted && (!empty($this->pdfTitle) || !empty($this->pdfDescription))) { $this->pdf->AddPage(); $this->pdf->SetY(50); $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 14); $this->pdf->Cell(0, 0, $this->pdfTitle, '', 1, 'C', false); $this->pdf->SetY($this->pdf->GetY() + 15); $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); $this->pdf->writeHTML($this->pdfDescription); $this->isUserInputPrinted = true; } } private function getDownloadUrl(\media_subdef $subdef) { $url = (string)$this->urlGenerator->generate($this->app->getAuthenticatedUser(), $subdef, $this->printer->getUrlTtl())."?download=1"; $infos = pathinfo($subdef->getRealPath()); if ($this->printer->getTitleAsDownloadName()) { $filename = mb_strtolower(mb_substr($subdef->get_record()->get_title(['removeExtension' => true]), 0, self::$maxFilenameLength), 'UTF-8'); } else { $originalName = $subdef->get_record()->get_original_name(true); $originalName = empty($originalName) ? $subdef->get_record()->getId() : $originalName; $filename = $subdef->get_name() == 'document' ? $originalName : $originalName . '_' . $subdef->get_name() ; } $url = $url . "&filename=" . urlencode($filename) . '.' . $infos['extension']; return $url; } }