Release 2.32 (#5411)

* bump packages
* dynamic invoice options
* make sure that invoice previews can be detected
* support for mpdf associated files
* do not include any future times in work contract calculation
* re-add username column in Excel spreadsheet
* deactivate internal rate editing
* show if plugin update exists
* shorten name to Kimai only, without Time-Tracking
* remove check for existing id in work contract
* fix metafield already defined in search
* helper methods to unlock months
* new translation
* send event on unlock month
This commit is contained in:
Kevin Papst
2025-04-06 09:53:48 +02:00
committed by GitHub
parent 2a75cd6230
commit 2e6b700b43
58 changed files with 749 additions and 437 deletions

View File

@@ -18,22 +18,29 @@ use Mpdf\Output\Destination;
final class MPdfConverter implements HtmlToPdfConverter
{
public function __construct(private FileHelper $fileHelper, private string $cacheDirectory)
public function __construct(
private readonly FileHelper $fileHelper,
private readonly string $cacheDirectory
)
{
}
/**
* @param array<string, mixed|array<string, mixed>> $options
* @return array<string, mixed|array<string, mixed>>
*/
private function sanitizeOptions(array $options): array
{
$configs = new ConfigVariables();
$fonts = new FontVariables();
$allowed = [
'mode', 'format', 'default_font_size', 'default_font', 'margin_left', 'margin_right', 'margin_top',
'margin_bottom', 'margin_header', 'margin_footer', 'orientation', 'fonts',
];
$filtered = array_filter($options, function ($key) use ($allowed, $configs, $fonts): bool {
$filtered = array_filter($options, function ($key): bool {
$allowed = [
'mode', 'format', 'default_font_size', 'default_font', 'margin_left', 'margin_right', 'margin_top',
'margin_bottom', 'margin_header', 'margin_footer', 'orientation', 'fonts', 'associated_files'
];
if (!\in_array($key, $allowed)) {
$configs = new ConfigVariables();
if (!\array_key_exists($key, $configs->getDefaults())) {
$fonts = new FontVariables();
return \array_key_exists($key, $fonts->getDefaults());
}
}
@@ -49,10 +56,7 @@ final class MPdfConverter implements HtmlToPdfConverter
}
/**
* @param string $html
* @param array $options
* @return string
* @throws \Mpdf\MpdfException
* @param array<string, mixed|array<string, mixed>> $options
*/
public function convertToPdf(string $html, array $options = []): string
{
@@ -93,17 +97,26 @@ final class MPdfConverter implements HtmlToPdfConverter
}
/**
* @param array<string, array<mixed>> $options
* @return Mpdf
* @param array<string, mixed|array<string, mixed>> $options
*/
private function initMpdf(array $options): Mpdf
{
$options['fontDir'] = $this->getFontDirectories();
$options['fontdata'] = $this->mergeFontData($options);
$associatedFiles = [];
if (\array_key_exists('associated_files', $options) && \is_array($options['associated_files'])) {
$associatedFiles = $options['associated_files'];
unset($options['associated_files']);
}
$mpdf = new Mpdf($options);
$mpdf->creator = Constants::SOFTWARE;
if (\count($associatedFiles) > 0) {
$mpdf->SetAssociatedFiles($associatedFiles);
}
return $mpdf;
}
@@ -120,8 +133,8 @@ final class MPdfConverter implements HtmlToPdfConverter
}
/**
* @param array<string, array<mixed>> $options
* @return array<string, array<mixed>>
* @param array<string, mixed|array<string, mixed>> $options
* @return array<string, mixed|array<string, mixed>>
*/
private function mergeFontData(array $options): array
{