support multiple teamleads in each team (#2702)

* fix jumping avatars
* fix line-break after color dot for long names
This commit is contained in:
Kevin Papst
2021-08-07 18:05:41 +02:00
committed by GitHub
parent e9986c92d6
commit b2d3272151
101 changed files with 1952 additions and 649 deletions

View File

@@ -265,7 +265,7 @@ final class ActivityController extends AbstractController
$defaultTeam = new Team();
$defaultTeam->setName($activity->getName());
$defaultTeam->setTeamLead($this->getUser());
$defaultTeam->addTeamlead($this->getUser());
$defaultTeam->addActivity($activity);
try {

View File

@@ -227,7 +227,7 @@ final class CustomerController extends AbstractController
$defaultTeam = new Team();
$defaultTeam->setName($customer->getName());
$defaultTeam->setTeamLead($this->getUser());
$defaultTeam->addTeamlead($this->getUser());
$defaultTeam->addCustomer($customer);
try {

View File

@@ -9,6 +9,7 @@
namespace App\Controller;
use App\Entity\TeamMember;
use App\Entity\User;
use App\Entity\UserPreference;
use App\Event\PrepareUserEvent;
@@ -21,6 +22,7 @@ use App\Form\UserTeamsType;
use App\Repository\TimesheetRepository;
use App\Timesheet\TimesheetStatisticService;
use App\User\UserService;
use Doctrine\Common\Collections\ArrayCollection;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Form\FormInterface;
@@ -179,13 +181,27 @@ final class ProfileController extends AbstractController
* @Route(path="/{username}/teams", name="user_profile_teams", methods={"GET", "POST"})
* @Security("is_granted('teams', profile)")
*/
public function teamsAction(User $profile, Request $request): Response
public function teamsAction(User $profile, Request $request, UserService $service): Response
{
$originalMembers = new ArrayCollection();
foreach ($profile->getMemberships() as $member) {
$originalMembers->add($member);
}
$form = $this->createTeamsForm($profile);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->getDoctrine()->getManager();
/** @var TeamMember $member */
foreach ($originalMembers as $member) {
if (!$profile->hasMembership($member)) {
$member->getTeam()->removeMember($member);
$entityManager->remove($profile);
}
}
$entityManager->persist($profile);
$entityManager->flush();

View File

@@ -249,7 +249,7 @@ final class ProjectController extends AbstractController
$defaultTeam = new Team();
$defaultTeam->setName($project->getName());
$defaultTeam->setTeamLead($this->getUser());
$defaultTeam->addTeamlead($this->getUser());
$defaultTeam->addProject($project);
try {

View File

@@ -86,25 +86,10 @@ final class TeamController extends AbstractController
*/
public function duplicateTeam(Team $team, Request $request)
{
$newTeam = new Team();
$newTeam = clone $team;
$newTeam->setName($team->getName() . ' [COPY]');
$newTeam->setTeamLead($team->getTeamLead());
foreach ($team->getUsers() as $user) {
$newTeam->addUser($user);
}
foreach ($team->getCustomers() as $customer) {
$newTeam->addCustomer($customer);
}
foreach ($team->getProjects() as $project) {
$newTeam->addProject($project);
}
try {
// make sure that the teamlead is always part of the team, otherwise permission checks
// and filtering might not work as expected!
$team->addUser($team->getTeamLead());
$this->repository->saveTeam($newTeam);
$this->flashSuccess('action.update.success');
@@ -140,10 +125,6 @@ final class TeamController extends AbstractController
if ($editForm->isSubmitted() && $editForm->isValid()) {
try {
// make sure that the teamlead is always part of the team, otherwise permission checks
// and filtering might not work as expected!
$team->addUser($team->getTeamLead());
$this->repository->saveTeam($team);
$this->flashSuccess('action.update.success');
@@ -175,22 +156,16 @@ final class TeamController extends AbstractController
'method' => 'POST',
]);
if ($request->isMethod('POST') && (null !== ($editFormValues = $request->get($editForm->getName())))) {
$editForm->submit($editFormValues, true);
$editForm->handleRequest($request);
if ($editForm->isValid()) {
try {
// make sure that the teamlead is always part of the team, otherwise permission checks
// and filtering might not work as expected!
$team->addUser($team->getTeamLead());
if ($editForm->isSubmitted() && $editForm->isValid()) {
try {
$this->repository->saveTeam($team);
$this->flashSuccess('action.update.success');
$this->repository->saveTeam($team);
$this->flashSuccess('action.update.success');
return $this->redirectToRoute('admin_team_edit', ['id' => $team->getId()]);
} catch (\Exception $ex) {
$this->flashUpdateException($ex);
}
return $this->redirectToRoute('admin_team_edit', ['id' => $team->getId()]);
} catch (\Exception $ex) {
$this->flashUpdateException($ex);
}
}
@@ -198,10 +173,9 @@ final class TeamController extends AbstractController
$customerForm = $this->createForm(TeamCustomerForm::class, $team, [
'method' => 'POST',
]);
$customerForm->handleRequest($request);
if ($request->isMethod('POST') && (null !== ($customerFormValues = $request->get($customerForm->getName())))) {
$customerForm->submit($customerFormValues, true);
if ($customerForm->isSubmitted() && $customerForm->isValid()) {
if ($customerForm->isValid()) {
try {
$this->repository->saveTeam($team);
@@ -217,10 +191,9 @@ final class TeamController extends AbstractController
$projectForm = $this->createForm(TeamProjectForm::class, $team, [
'method' => 'POST',
]);
$projectForm->handleRequest($request);
if ($request->isMethod('POST') && (null !== ($projectFormValues = $request->get($projectForm->getName())))) {
$projectForm->submit($projectFormValues, true);
if ($projectForm->isSubmitted() && $projectForm->isValid()) {
if ($projectForm->isValid()) {
try {
$this->repository->saveTeam($team);

View File

@@ -12,6 +12,7 @@ namespace App\Controller;
use App\Entity\Tag;
use App\Entity\Team;
use App\Entity\Timesheet;
use App\Entity\User;
use App\Event\TimesheetMetaDisplayEvent;
use App\Form\Model\MultiUserTimesheet;
use App\Form\TimesheetAdminEditForm;
@@ -101,14 +102,15 @@ class TimesheetTeamController extends TimesheetAbstractController
if ($createForm->isSubmitted() && $createForm->isValid()) {
try {
/** @var ArrayCollection $users */
/** @var ArrayCollection<User> $users */
$users = $createForm->get('users')->getData();
/** @var ArrayCollection $teams */
/** @var ArrayCollection<Team> $teams */
$teams = $createForm->get('teams')->getData();
$allUsers = $users->toArray();
/** @var Team $team */
foreach ($teams as $team) {
$allUsers = array_merge($allUsers, $team->getUsers()->toArray());
$allUsers = array_merge($allUsers, $team->getUsers());
}
$allUsers = array_unique($allUsers);