From ae6ed3f23f1ab49187acf5d209e9ef6fb7a44cf6 Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Mon, 7 Oct 2019 16:04:19 +0200 Subject: [PATCH] Bugfixes for Kimai 1.4.1 (#1158) * fix missing translation for preset datatable headers * better dependency check for avatar service * show only own teams to teamleads --- src/Controller/DoctorController.php | 11 +++++++---- src/Controller/TeamController.php | 1 + src/Repository/TeamRepository.php | 22 ++++++++++++++++++++++ src/Utils/AvatarService.php | 7 ++++++- templates/macros/datatables.html.twig | 3 ++- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/Controller/DoctorController.php b/src/Controller/DoctorController.php index 77b51044..14872c67 100644 --- a/src/Controller/DoctorController.php +++ b/src/Controller/DoctorController.php @@ -48,11 +48,8 @@ class DoctorController extends AbstractController /** * @var string */ - protected $projectDirectory; + private $projectDirectory; - /** - * @param string $projectDirectory - */ public function __construct(string $projectDirectory) { $this->projectDirectory = $projectDirectory; @@ -92,6 +89,12 @@ class DoctorController extends AbstractController } } + $results['Freetype Support'] = true; + // @see AvatarService::hasDependencies() + if (!function_exists('imagettfbbox')) { + $results['Freetype Support'] = false; + } + return $results; } diff --git a/src/Controller/TeamController.php b/src/Controller/TeamController.php index 6b830f22..4c79a632 100644 --- a/src/Controller/TeamController.php +++ b/src/Controller/TeamController.php @@ -53,6 +53,7 @@ class TeamController extends AbstractController { $query = new TeamQuery(); $query->setPage($page); + $query->setCurrentUser($this->getUser()); $form = $this->getToolbarForm($query); $form->setData($query); diff --git a/src/Repository/TeamRepository.php b/src/Repository/TeamRepository.php index 80600bd0..bfcecd91 100644 --- a/src/Repository/TeamRepository.php +++ b/src/Repository/TeamRepository.php @@ -11,6 +11,7 @@ namespace App\Repository; use App\Entity\Team; use App\Entity\Timesheet; +use App\Entity\User; use App\Repository\Loader\TeamLoader; use App\Repository\Paginator\LoaderPaginator; use App\Repository\Paginator\PaginatorInterface; @@ -128,6 +129,27 @@ class TeamRepository extends EntityRepository $qb->setParameter('likeContains', '%' . $query->getSearchTerm() . '%'); } + $this->addPermissionCriteria($qb, $query->getCurrentUser(), $query->getTeams()); + return $qb; } + + private function addPermissionCriteria(QueryBuilder $qb, ?User $user = null, array $teams = []) + { + // make sure that all queries without a user see all user + if (null === $user && empty($teams)) { + return; + } + + // make sure that admins see all user + if (null !== $user && ($user->isSuperAdmin() || $user->isAdmin())) { + return; + } + + if (null !== $user) { + $qb + ->andWhere('t.teamlead = :id') + ->setParameter('id', $user); + } + } } diff --git a/src/Utils/AvatarService.php b/src/Utils/AvatarService.php index 79ff4c1b..cff35f07 100644 --- a/src/Utils/AvatarService.php +++ b/src/Utils/AvatarService.php @@ -122,7 +122,7 @@ class AvatarService public function generateAvatar(User $profile, bool $regenerate = false): bool { - if (!extension_loaded('gd')) { + if (!$this->hasDependencies()) { return false; } @@ -152,4 +152,9 @@ class AvatarService return $this->getAvatarUrl($profile); } + + public function hasDependencies(): bool + { + return extension_loaded('gd') && function_exists('imagettfbbox'); + } } diff --git a/templates/macros/datatables.html.twig b/templates/macros/datatables.html.twig index fbafc723..487027fb 100644 --- a/templates/macros/datatables.html.twig +++ b/templates/macros/datatables.html.twig @@ -13,9 +13,10 @@ {% if not headerOptions is iterable %} {% set headerOptions = {'class': headerOptions} %} {% endif %} - {% set headerTitle = ('label.' ~ title)|trans %} {% if headerOptions.title is defined %} {% set headerTitle = headerOptions.title %} + {% else %} + {% set headerTitle = ('label.' ~ title)|trans %} {% endif %} {% if 'alwaysVisible' not in headerOptions.class %}