diff --git a/src/Controller/ExportController.php b/src/Controller/ExportController.php index 0ce11099..d989567d 100644 --- a/src/Controller/ExportController.php +++ b/src/Controller/ExportController.php @@ -120,7 +120,6 @@ class ExportController extends AbstractController $entries = $this->getEntries($query); $response = $renderer->render($entries, $query); - // TODO check entries if user is allowed to update export state - see https://github.com/kevinpapst/kimai2/issues/1473 if ($query->isMarkAsExported()) { $this->export->setExported($entries); } @@ -163,6 +162,7 @@ class ExportController extends AbstractController return $this->createForm(ExportToolbarForm::class, $query, [ 'action' => $this->generateUrl('export', []), 'include_user' => $this->isGranted('view_other_timesheet'), + 'include_export' => $this->isGranted('edit_export_other_timesheet'), 'method' => $method, 'timezone' => $this->getDateTimeFactory()->getTimezone()->getName(), 'attr' => [ diff --git a/src/Controller/InvoiceController.php b/src/Controller/InvoiceController.php index e15f1ca2..885ce926 100644 --- a/src/Controller/InvoiceController.php +++ b/src/Controller/InvoiceController.php @@ -669,6 +669,7 @@ final class InvoiceController extends AbstractController 'action' => $this->generateUrl('invoice', []), 'method' => 'GET', 'include_user' => $this->isGranted('view_other_timesheet'), + 'include_export' => $this->isGranted('edit_export_other_timesheet'), 'timezone' => $this->getDateTimeFactory()->getTimezone()->getName(), 'attr' => [ 'id' => 'invoice-print-form' diff --git a/src/Form/Toolbar/ExportToolbarForm.php b/src/Form/Toolbar/ExportToolbarForm.php index 3f43e004..da2f5b57 100644 --- a/src/Form/Toolbar/ExportToolbarForm.php +++ b/src/Form/Toolbar/ExportToolbarForm.php @@ -9,8 +9,8 @@ namespace App\Form\Toolbar; +use App\Form\Type\MarkAsExportedType; use App\Repository\Query\ExportQuery; -use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -38,10 +38,9 @@ class ExportToolbarForm extends AbstractToolbarForm $this->addActivityMultiChoice($builder, [], true); $this->addExportRenderer($builder); $this->addTagInputField($builder); - $builder->add('markAsExported', CheckboxType::class, [ - 'label' => 'label.mark_as_exported', - 'required' => false, - ]); + if ($options['include_export']) { + $builder->add('markAsExported', MarkAsExportedType::class); + } } /** @@ -61,6 +60,7 @@ class ExportToolbarForm extends AbstractToolbarForm 'data_class' => ExportQuery::class, 'csrf_protection' => false, 'include_user' => true, + 'include_export' => true, 'timezone' => date_default_timezone_get(), ]); } diff --git a/src/Form/Toolbar/InvoiceToolbarSimpleForm.php b/src/Form/Toolbar/InvoiceToolbarSimpleForm.php index 55a9aa14..ba3bcfda 100644 --- a/src/Form/Toolbar/InvoiceToolbarSimpleForm.php +++ b/src/Form/Toolbar/InvoiceToolbarSimpleForm.php @@ -10,8 +10,8 @@ namespace App\Form\Toolbar; use App\Form\Type\InvoiceTemplateType; +use App\Form\Type\MarkAsExportedType; use App\Repository\Query\InvoiceQuery; -use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -29,10 +29,9 @@ class InvoiceToolbarSimpleForm extends AbstractToolbarForm $this->addDateRange($builder, ['timezone' => $options['timezone']]); $this->addCustomerMultiChoice($builder, ['required' => false, 'start_date_param' => null, 'end_date_param' => null, 'ignore_date' => true, 'placeholder' => ''], true); $this->addProjectMultiChoice($builder, ['ignore_date' => true], true, true); - $builder->add('markAsExported', CheckboxType::class, [ - 'label' => 'label.mark_as_exported', - 'required' => false, - ]); + if ($options['include_export']) { + $builder->add('markAsExported', MarkAsExportedType::class); + } } protected function addTemplateChoice(FormBuilderInterface $builder) @@ -52,6 +51,7 @@ class InvoiceToolbarSimpleForm extends AbstractToolbarForm 'data_class' => InvoiceQuery::class, 'csrf_protection' => false, 'include_user' => true, + 'include_export' => true, 'timezone' => date_default_timezone_get(), ]); } diff --git a/src/Form/Type/MarkAsExportedType.php b/src/Form/Type/MarkAsExportedType.php new file mode 100644 index 00000000..4c0368c6 --- /dev/null +++ b/src/Form/Type/MarkAsExportedType.php @@ -0,0 +1,30 @@ +setDefaults([ + 'label' => 'label.mark_as_exported', + 'required' => false, + ]); + } + + public function getParent(): string + { + return CheckboxType::class; + } +} diff --git a/templates/export/index.html.twig b/templates/export/index.html.twig index 8058f682..f36feb2a 100644 --- a/templates/export/index.html.twig +++ b/templates/export/index.html.twig @@ -50,7 +50,9 @@ {{ form_row(form.billable) }} {{ form_row(form.exported) }} {{ form_row(form.state) }} - {{ form_row(form.markAsExported) }} + {% if form.markAsExported is defined %} + {{ form_row(form.markAsExported) }} + {% endif %} {% endblock %} {% block box_footer%} {{ search.searchButton(form) }} diff --git a/templates/invoice/index.html.twig b/templates/invoice/index.html.twig index f96857a3..39e3f31f 100644 --- a/templates/invoice/index.html.twig +++ b/templates/invoice/index.html.twig @@ -53,7 +53,9 @@ {{ form_row(form.exported) }} {% endif %} {{ form_row(form.template) }} - {{ form_row(form.markAsExported) }} + {% if form.markAsExported is defined %} + {{ form_row(form.markAsExported) }} + {% endif %} {% endblock %} {% block box_footer%} {{ search.searchButton(form) }}