Release 1.16 (#2929)
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca> Co-authored-by: Yaron Shahrabani <sh.yaron@gmail.com> Co-authored-by: Wellington Terumi Uemura <wellingtonuemura@gmail.com> Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com> Co-authored-by: SC <lalocas@protonmail.com> Co-authored-by: dkstiler <dkstiler@gmail.com> Co-authored-by: Milo Ivir <mail@milotype.de>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
unreleased=true
|
||||
future-release=1.15.6
|
||||
future-release=1.16
|
||||
exclude-labels=duplicate,support,question,invalid,wontfix,release,waiting for feedback,documentation
|
||||
enhancement_labels=>enhancement,Enhancement,feature request,translation i18n,technical debt,documentation
|
||||
issues-wo-labels=false
|
||||
|
||||
@@ -7,8 +7,8 @@ As announced in the [README](README.md) I only support the latest available rele
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| master | :white_check_mark: |
|
||||
| 1.15 | :white_check_mark: |
|
||||
| < 1.15 | :x: |
|
||||
| 1.16 | :white_check_mark: |
|
||||
| < 1.16 | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ class Constants
|
||||
/**
|
||||
* The current release status, either "stable" or "dev"
|
||||
*/
|
||||
public const STATUS = 'dev';
|
||||
public const STATUS = 'prod';
|
||||
/**
|
||||
* The software name
|
||||
*/
|
||||
|
||||
@@ -56,6 +56,9 @@ class ExportServiceCompilerPass implements CompilerPassInterface
|
||||
|
||||
foreach (glob($path . $exportPath . '/*.html.twig') as $htmlTpl) {
|
||||
$tplName = basename($htmlTpl);
|
||||
if (stripos($tplName, '-bundle') !== false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$serviceId = 'exporter_renderer.' . str_replace('.', '_', $tplName);
|
||||
|
||||
@@ -70,6 +73,9 @@ class ExportServiceCompilerPass implements CompilerPassInterface
|
||||
|
||||
foreach (glob($path . $exportPath . '/*.pdf.twig') as $pdfHtml) {
|
||||
$tplName = basename($pdfHtml);
|
||||
if (stripos($tplName, '-bundle') !== false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$serviceId = 'exporter_renderer.' . str_replace('.', '_', $tplName);
|
||||
|
||||
|
||||
@@ -120,33 +120,26 @@ class Kernel extends BaseKernel
|
||||
}
|
||||
} else {
|
||||
// ... or we load them dynamically from the plugins directory
|
||||
foreach ($this->getBundleDirectories() as $bundleDir) {
|
||||
$bundleName = $bundleDir->getRelativePathname();
|
||||
$pluginClass = 'KimaiPlugin\\' . $bundleName . '\\' . $bundleName;
|
||||
foreach ($this->getBundleClasses() as $pluginClass) {
|
||||
yield new $pluginClass();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function getBundleDirectories(): array
|
||||
private function getBundleClasses(): array
|
||||
{
|
||||
$pluginsDir = $this->getProjectDir() . '/var/plugins';
|
||||
if (!file_exists($pluginsDir)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$directories = [];
|
||||
$plugins = [];
|
||||
$finder = new Finder();
|
||||
$finder->ignoreUnreadableDirs()->directories()->name('*Bundle');
|
||||
/** @var SplFileInfo $bundleDir */
|
||||
foreach ($finder->in($pluginsDir) as $bundleDir) {
|
||||
$bundleName = $bundleDir->getRelativePathname();
|
||||
|
||||
$bundleFilename = $bundleDir->getRealPath() . '/' . $bundleName . '.php';
|
||||
if (!file_exists($bundleFilename)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (file_exists($bundleDir->getRealPath() . '/.disabled')) {
|
||||
continue;
|
||||
}
|
||||
@@ -156,10 +149,10 @@ class Kernel extends BaseKernel
|
||||
continue;
|
||||
}
|
||||
|
||||
$directories[] = $bundleDir;
|
||||
$plugins[] = $pluginClass;
|
||||
}
|
||||
|
||||
return $directories;
|
||||
return $plugins;
|
||||
}
|
||||
|
||||
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader)
|
||||
@@ -223,7 +216,11 @@ class Kernel extends BaseKernel
|
||||
|
||||
foreach ($this->bundles as $bundle) {
|
||||
if (strpos(\get_class($bundle), 'KimaiPlugin\\') !== false) {
|
||||
if (is_dir($bundle->getPath() . '/Resources/config/')) {
|
||||
$routes->import($bundle->getPath() . '/Resources/config/routes' . self::CONFIG_EXTS, '/', 'glob');
|
||||
} elseif (is_dir($bundle->getPath() . '/config/')) {
|
||||
$routes->import($bundle->getPath() . '/config/routes' . self::CONFIG_EXTS, '/', 'glob');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ final class LocaleFormatExtensions extends AbstractExtension
|
||||
|
||||
public function dateWeekday(DateTime $date): string
|
||||
{
|
||||
return $this->dayName($date, true) . ', ' . $this->getFormatter()->dateFormat($date, 'd');
|
||||
return $this->dayName($date, true) . ' ' . $this->getFormatter()->dateFormat($date, 'd');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
<source>invoice.paid</source>
|
||||
<target>Rechnung bezahlt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Rechnung stornieren</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<source>filter</source>
|
||||
<target>Φιλτράρισμα δεδομένων</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Ακύρωση τιμολογίου</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
<source>invoice.paid</source>
|
||||
<target>Invoice paid</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Cancel invoice</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<source>filter</source>
|
||||
<target>Filtrer les données</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Annuler la facture</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<source>filter</source>
|
||||
<target>סינון נתונים</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>ביטול חשבונית</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
|
||||
<file source-language="en" target-language="hr" datatype="plaintext" original="actions.en.xlf">
|
||||
<body>
|
||||
@@ -98,6 +98,10 @@
|
||||
<source>filter</source>
|
||||
<target>Filtriraj podatke</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Prekini račun</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<source>filter</source>
|
||||
<target>Filtra i dati</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Annulla la fattura</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<source>filter</source>
|
||||
<target>Filtrar por data</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Cancelar fatura</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<source>filter</source>
|
||||
<target>Filtre por data</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Cancelar fatura</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
<source>filter</source>
|
||||
<target>Verileri filtrele</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="7d1V9FU" resname="invoice.cancel">
|
||||
<trans-unit id="SEyZupT" resname="invoice.cancel">
|
||||
<source>invoice.cancel</source>
|
||||
<target>Faturayı iptal et</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -1083,7 +1083,7 @@
|
||||
<source>status.paid</source>
|
||||
<target>Bezahlt</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Storniert</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -1206,7 +1206,7 @@
|
||||
<source>label.budgetType_full</source>
|
||||
<target>Lebenszyklus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Storniert</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -1268,10 +1268,14 @@
|
||||
<source>quick_entry.title</source>
|
||||
<target>Εβδομαδιαίες ώρες εργασίας</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Ακυρώθηκε</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="61p_ckr" resname="label.hours_24">
|
||||
<source>label.hours_24</source>
|
||||
<target>24 ώρες</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -333,7 +333,7 @@
|
||||
<source>label.skin</source>
|
||||
<target>Display: colors</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="O40d_3K" resname="Display: layout">
|
||||
<trans-unit id="O40d_3K" resname="theme.layout">
|
||||
<source>Display: layout</source>
|
||||
<target state="needs-translation">Display: layout</target>
|
||||
</trans-unit>
|
||||
@@ -1083,7 +1083,7 @@
|
||||
<source>status.paid</source>
|
||||
<target>Paid</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Canceled</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -1256,7 +1256,7 @@
|
||||
<source>default_value_new</source>
|
||||
<target>Valores predeterminados para entradas nuevas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Cancelado</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -1268,10 +1268,14 @@
|
||||
<source>label.budgetType_full</source>
|
||||
<target>Cycle de vie</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Annulée</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="61p_ckr" resname="label.hours_24">
|
||||
<source>label.hours_24</source>
|
||||
<target>24 heures</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1201,10 +1201,14 @@
|
||||
<source>label.budgetType_full</source>
|
||||
<target>מחזור חיים</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>בוטל</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="61p_ckr" resname="label.hours_24">
|
||||
<source>label.hours_24</source>
|
||||
<target>24 שעות</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1272,6 +1272,14 @@
|
||||
<source>label.budgetType_full</source>
|
||||
<target>Životni ciklus</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="61p_ckr" resname="label.hours_24">
|
||||
<source>label.hours_24</source>
|
||||
<target>24 sata</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Prekinuti</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1271,7 +1271,7 @@
|
||||
<source>label.includeBudgetType_full</source>
|
||||
<target>Mostra le voci con «ciclo di vita» bilancio</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Annullata</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -1268,10 +1268,14 @@
|
||||
<source>label.budgetType_full</source>
|
||||
<target>Ciclo de vida</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Cancelado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="61p_ckr" resname="label.hours_24">
|
||||
<source>label.hours_24</source>
|
||||
<target>24 horas</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1271,10 +1271,14 @@
|
||||
<source>label.includeBudgetType_full</source>
|
||||
<target>Mostre as entradas com orçamento com "ciclo de vida"</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>Cancelado</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="61p_ckr" resname="label.hours_24">
|
||||
<source>label.hours_24</source>
|
||||
<target>24 horas</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -1271,10 +1271,14 @@
|
||||
<source>label.includeBudgetType_month</source>
|
||||
<target>"Aylık" bütçeli kayıtları göster</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Z1s7pAw" resname="status.canceled">
|
||||
<trans-unit id="gT9W2pZ" resname="status.canceled">
|
||||
<source>status.canceled</source>
|
||||
<target>İptal edildi</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="61p_ckr" resname="label.hours_24">
|
||||
<source>label.hours_24</source>
|
||||
<target>24 saat</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target>Einstellungen</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target state="translated">Zeiterfassung</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target>Ρυθμίσεις</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target state="translated">Παρακολούθηση Χρόνου</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target>Settings</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target>Time tracking</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
<source>title</source>
|
||||
<target>Paramètres</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target>Suivi du temps</target>
|
||||
<target>Feuille d'heures</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="PLggHn." resname="theme">
|
||||
<source>theme</source>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target>הגדרות</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target>מעקב אחר שעות</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<source>subtitle</source>
|
||||
<target>Promijeni globalne konfiguracije evidentiranja vremena</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target>Praćenje vremena</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target>Impostazioni</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target>Rilevamento del tempo</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target>Configurações</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target>Rastreamento de tempo</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target>Configurações</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target>Rastreamento de tempo</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target>Setari</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target>Monitorizarea timpului</target>
|
||||
</trans-unit>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source>title</source>
|
||||
<target state="translated">Ayarlar</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="lt2Y2LO" resname="timesheet">
|
||||
<trans-unit id="ycErWZK" resname="timesheet">
|
||||
<source>Time tracking</source>
|
||||
<target state="translated">Zaman izleme</target>
|
||||
</trans-unit>
|
||||
|
||||
Reference in New Issue
Block a user