UI improvement (#1829)

* open "create new project/activity" form in modal
* re-use action translation for create action title
* do not pre-select first customer in list - fixes #1828
* sort user preferences in sections for better visual grouping
* show comment date only in hover of user avatar
This commit is contained in:
Kevin Papst
2020-07-17 20:32:11 +02:00
committed by GitHub
parent c843dba29a
commit 7907b43ef7
15 changed files with 149 additions and 42 deletions

View File

@@ -261,10 +261,20 @@ class ProfileController extends AbstractController
]);
}
$sections = [];
/** @var UserPreference $pref */
foreach ($profile->getPreferences() as $pref) {
if ($pref->isEnabled()) {
$sections[$pref->getSection()] = $pref->getSection();
}
}
return $this->render('user/form.html.twig', [
'tab' => 'preferences',
'user' => $profile,
'form' => $form->createView(),
'sections' => $sections
]);
}

View File

@@ -83,11 +83,12 @@ class UserPreference
* @var int
*/
private $order = 1000;
/**
* @return int
* @var string
*/
public function getId()
private $section = 'default';
public function getId(): ?int
{
return $this->id;
}
@@ -264,4 +265,16 @@ class UserPreference
return $this;
}
public function setSection(string $section): UserPreference
{
$this->section = $section;
return $this;
}
public function getSection(): string
{
return $this->section;
}
}

View File

@@ -106,6 +106,7 @@ class UserPreferenceSubscriber implements EventSubscriberInterface
->setName(UserPreference::HOURLY_RATE)
->setValue(0)
->setOrder(100)
->setSection('rate')
->setType(MoneyType::class)
->setEnabled($enableHourlyRate)
->setOptions($hourlyRateOptions)
@@ -115,6 +116,7 @@ class UserPreferenceSubscriber implements EventSubscriberInterface
->setName(UserPreference::INTERNAL_RATE)
->setValue(null)
->setOrder(101)
->setSection('rate')
->setType(MoneyType::class)
->setEnabled($enableHourlyRate)
->setOptions(array_merge($hourlyRateOptions, ['label' => 'label.rate_internal', 'required' => false]))
@@ -124,54 +126,63 @@ class UserPreferenceSubscriber implements EventSubscriberInterface
->setName(UserPreference::TIMEZONE)
->setValue($this->getDefaultTimezone())
->setOrder(200)
->setSection('locale')
->setType(TimezoneType::class),
(new UserPreference())
->setName(UserPreference::LOCALE)
->setValue($this->getDefaultLanguage())
->setOrder(300)
->setSection('locale')
->setType(LanguageType::class),
(new UserPreference())
->setName(UserPreference::SKIN)
->setValue($this->getDefaultTheme())
->setOrder(400)
->setSection('theme')
->setType(SkinType::class),
(new UserPreference())
->setName('theme.layout')
->setValue('fixed')
->setOrder(450)
->setSection('theme')
->setType(ThemeLayoutType::class),
(new UserPreference())
->setName('theme.collapsed_sidebar')
->setValue(false)
->setOrder(500)
->setSection('theme')
->setType(CheckboxType::class),
(new UserPreference())
->setName('calendar.initial_view')
->setValue(CalendarViewType::DEFAULT_VIEW)
->setOrder(600)
->setSection('behaviour')
->setType(CalendarViewType::class),
(new UserPreference())
->setName('login.initial_view')
->setValue(InitialViewType::DEFAULT_VIEW)
->setOrder(700)
->setSection('behaviour')
->setType(InitialViewType::class),
(new UserPreference())
->setName('timesheet.daily_stats')
->setValue(false)
->setOrder(800)
->setSection('behaviour')
->setType(CheckboxType::class),
(new UserPreference())
->setName('timesheet.export_decimal')
->setValue(false)
->setOrder(900)
->setSection('behaviour')
->setType(CheckboxType::class),
];
}
@@ -195,6 +206,7 @@ class UserPreferenceSubscriber implements EventSubscriberInterface
->setEnabled($preference->isEnabled())
->setOptions($preference->getOptions())
->setOrder($preference->getOrder())
->setSection($preference->getSection())
;
} else {
$user->addPreference($preference);

View File

@@ -78,6 +78,7 @@ class ProjectEditForm extends AbstractType
'required' => false,
]))
->add('customer', CustomerType::class, [
'placeholder' => (null === $id && null === $customer) ? '' : false,
'query_builder' => function (CustomerRepository $repo) use ($builder, $customer) {
$query = new CustomerFormTypeQuery($customer);
$query->setUser($builder->getOption('user'));