Update to Symfony 4.1 #149 (#160)

* updated to Symfony 4.1 #149
* updated to phpunit 7 #149
* downgrade ocramius/proxy-manager for PHP 7.1 compatibility #149
* fixed symfony deprecations #149
* replaced AdvancedUserInterface with custom user checker
* code sniffer fixes
This commit is contained in:
Kevin Papst
2018-06-18 22:26:00 +02:00
committed by GitHub
parent 4e629fcaf8
commit bfa32a90db
14 changed files with 869 additions and 801 deletions

View File

@@ -63,14 +63,21 @@ class CreateUserCommand extends Command
*/
protected function configure()
{
$roles = implode(',', [User::DEFAULT_ROLE, User::ROLE_ADMIN]);
$this
->setName('kimai:create-user')
->setDescription('Create a new user')
->setHelp('This command allows you to create a new user.')
->addArgument('username', InputArgument::REQUIRED, 'The username of the user to be created (must be unique)')
->addArgument('email', InputArgument::REQUIRED, 'Email address of the user to be created (must be unique)')
->addArgument('role', InputArgument::OPTIONAL, 'A comma separated list of roles to assign. Examples: "ROLE_USER,ROLE_SUPER_ADMIN"', User::DEFAULT_ROLE)
->addArgument('password', InputArgument::OPTIONAL, 'Password for the user to be created')
->addArgument('username', InputArgument::REQUIRED, 'A name for the new user (must be unique)')
->addArgument('email', InputArgument::REQUIRED, 'Email address of the new user (must be unique)')
->addArgument(
'role',
InputArgument::OPTIONAL,
'A comma separated list of user roles, e.g. "'.$roles.'"',
User::DEFAULT_ROLE
)
->addArgument('password', InputArgument::OPTIONAL, 'Password for the new user (requested if not provided)')
;
}

View File

@@ -35,8 +35,8 @@ class SidebarController extends AbstractController
$user = $this->getUser();
return $this->render('sidebar/settings.html.twig', [
'user' => $user,
]);
'user' => $user,
]);
/*

View File

@@ -134,9 +134,9 @@ trait TimesheetControllerTrait
}
}
// TODO validate that end is not before begin
// TODO validate that end is not before begin
$entityManager = $this->getDoctrine()->getManager();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($entry);
$entityManager->flush();

View File

@@ -25,7 +25,7 @@ use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
* @UniqueEntity("username")
* @UniqueEntity("email")
*/
class User implements UserInterface, AdvancedUserInterface
class User implements UserInterface
{
const ROLE_CUSTOMER = 'ROLE_CUSTOMER';
const ROLE_USER = 'ROLE_USER';
@@ -405,30 +405,6 @@ class User implements UserInterface, AdvancedUserInterface
return $this;
}
/**
* @inheritdoc
*/
public function isAccountNonExpired()
{
return true;
}
/**
* @inheritdoc
*/
public function isAccountNonLocked()
{
return true;
}
/**
* @inheritdoc
*/
public function isCredentialsNonExpired()
{
return true;
}
/**
* @return bool
*/

View File

@@ -43,10 +43,10 @@ class TimesheetEditForm extends AbstractType
$builder->add('begin', DateTimeType::class, [
'label' => 'label.begin',
'widget' => 'single_text',
'html5' => false,
'format' => 'yyyy-MM-dd H:m',
'with_seconds' => false,
'attr' => ['data-datetimepicker' => 'on'],
'html5' => false,
'format' => 'yyyy-MM-dd H:m',
'with_seconds' => false,
'attr' => ['data-datetimepicker' => 'on'],
]);
}
@@ -57,10 +57,10 @@ class TimesheetEditForm extends AbstractType
'label' => 'label.end',
'widget' => 'single_text',
'required' => false,
'html5' => false,
'format' => 'yyyy-MM-dd H:m',
'with_seconds' => false,
'attr' => ['data-datetimepicker' => 'on'],
'html5' => false,
'format' => 'yyyy-MM-dd H:m',
'with_seconds' => false,
'attr' => ['data-datetimepicker' => 'on'],
]);
}

View File

@@ -110,7 +110,7 @@ abstract class AbstractToolbarForm extends AbstractType
'widget' => 'single_text',
'html5' => false,
'required' => false,
'attr' => ['data-datepicker' => 'on'],
'attr' => ['data-datepicker' => 'on'],
]);
}
@@ -122,9 +122,9 @@ abstract class AbstractToolbarForm extends AbstractType
$builder->add('end', DateType::class, [
'label' => 'label.end',
'widget' => 'single_text',
'html5' => false,
'html5' => false,
'required' => false,
'attr' => ['data-datepicker' => 'on'],
'attr' => ['data-datepicker' => 'on'],
]);
}

View File

@@ -41,7 +41,7 @@ class ActivityRepository extends AbstractRepository
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('t', 'a', 'p', 'c')
->distinct()
->distinct()
->from(Timesheet::class, 't')
->join('t.activity', 'a')
->join('a.project', 'p')
@@ -50,7 +50,7 @@ class ActivityRepository extends AbstractRepository
->andWhere('a.visible = 1')
->andWhere('p.visible = 1')
->andWhere('c.visible = 1')
->groupBy('a.id', 't.id')
->groupBy('a.id', 't.id')
->orderBy('t.end', 'DESC')
->setMaxResults(10)
;

View File

@@ -0,0 +1,37 @@
<?php
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\Security;
use App\Entity\User;
use Symfony\Component\Security\Core\Exception\LockedException;
use Symfony\Component\Security\Core\User\UserCheckerInterface;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* Advanced checks during aithentication to make sure the user is allowed to use Kimai.
*/
class UserChecker implements UserCheckerInterface
{
public function checkPreAuth(UserInterface $user)
{
}
public function checkPostAuth(UserInterface $user)
{
if (!$user instanceof User) {
return;
}
// user account is not enabled, the user may be notified
if (!$user->isEnabled()) {
throw new LockedException();
}
}
}

View File

@@ -79,22 +79,22 @@ class UserVoter extends AbstractVoter
case self::ROLES:
return $this->canAdminUsers($token);
case self::PREFERENCES:
return $this->canEditPreferences($subject, $user, $token);
return $this->canEditPreferences($subject, $user, $token);
}
return false;
}
/**
* @param User $profile
* @param User $user
* @param TokenInterface $token
* @return bool
*/
/**
* @param User $profile
* @param User $user
* @param TokenInterface $token
* @return bool
*/
protected function canEditPreferences(User $profile, User $user, TokenInterface $token)
{
return $profile->getId() == $user->getId();
}
{
return $profile->getId() == $user->getId();
}
/**
* @param User $profile