Release 1.30 (#3651)
* exclude all 403 and 404 from logs * bump version * cleanup tag handling * prevent mandatory user preferences turning null
This commit is contained in:
@@ -942,7 +942,7 @@ final class KimaiImporterCommand extends Command
|
||||
$user->addPreference($newPref);
|
||||
}
|
||||
|
||||
// set default values if they were not set in the the user preferences
|
||||
// set default values if they were not set in the user preferences
|
||||
$defaults = ['language' => $language, 'timezone' => $timezone];
|
||||
foreach ($defaults as $key => $default) {
|
||||
if (null === $user->getPreferenceValue($key)) {
|
||||
|
||||
@@ -17,11 +17,11 @@ class Constants
|
||||
/**
|
||||
* The current release version
|
||||
*/
|
||||
public const VERSION = '1.29.1';
|
||||
public const VERSION = '1.30.0';
|
||||
/**
|
||||
* The current release: major * 10000 + minor * 100 + patch
|
||||
*/
|
||||
public const VERSION_ID = 12901;
|
||||
public const VERSION_ID = 13000;
|
||||
/**
|
||||
* The current release status, either "stable" or "dev"
|
||||
*/
|
||||
|
||||
@@ -32,7 +32,7 @@ class HomepageController extends AbstractController
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = $this->getUser();
|
||||
$userRoute = $user->getPreferenceValue('login.initial_view', InitialViewType::DEFAULT_VIEW);
|
||||
$userRoute = $user->getPreferenceValue('login.initial_view', InitialViewType::DEFAULT_VIEW, false);
|
||||
$userLanguage = $user->getLanguage();
|
||||
$requestLanguage = $request->getLocale();
|
||||
|
||||
|
||||
@@ -262,7 +262,7 @@ final class ProfileController extends AbstractController
|
||||
// switch locale ONLY if updated profile is the current user
|
||||
$locale = $request->getLocale();
|
||||
if ($this->getUser()->getId() === $profile->getId()) {
|
||||
$locale = $profile->getPreferenceValue('language', $locale);
|
||||
$locale = $profile->getPreferenceValue('language', $locale, false);
|
||||
}
|
||||
|
||||
return $this->redirectToRoute('user_profile_preferences', [
|
||||
|
||||
@@ -32,7 +32,7 @@ final class ReportingController extends AbstractController
|
||||
$user = $this->getUser();
|
||||
$route = null;
|
||||
|
||||
$defaultReport = $user->getPreferenceValue('reporting.initial_view', ReportingService::DEFAULT_VIEW);
|
||||
$defaultReport = $user->getPreferenceValue('reporting.initial_view', ReportingService::DEFAULT_VIEW, false);
|
||||
$allReports = $reportingService->getAvailableReports($user);
|
||||
|
||||
foreach ($allReports as $report) {
|
||||
@@ -43,7 +43,7 @@ final class ReportingController extends AbstractController
|
||||
}
|
||||
|
||||
// fallback, if the configured report could not be found
|
||||
// eg. when it was deleted or replaced by an enhanced version with a new id
|
||||
// e.g. when it was deleted or replaced by an enhanced version with a new id
|
||||
if ($route === null && \count($allReports) > 0) {
|
||||
$report = $allReports[array_keys($allReports)[0]];
|
||||
$route = $report->getRoute();
|
||||
|
||||
@@ -535,7 +535,7 @@ abstract class TimesheetAbstractController extends AbstractController
|
||||
|
||||
protected function includeSummary(): bool
|
||||
{
|
||||
return (bool) $this->getUser()->getPreferenceValue('timesheet.daily_stats', false);
|
||||
return (bool) $this->getUser()->getPreferenceValue('timesheet.daily_stats', false, false);
|
||||
}
|
||||
|
||||
protected function includeUserInForms(string $formName): bool
|
||||
|
||||
@@ -116,7 +116,7 @@ class TimesheetTeamController extends TimesheetAbstractController
|
||||
$tags = [];
|
||||
/** @var Tag $tag */
|
||||
foreach ($entry->getTags() as $tag) {
|
||||
$tag->removeTimesheet($entry);
|
||||
$entry->addTag($tag);
|
||||
$tags[] = $tag;
|
||||
}
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@ class TimesheetFixtures extends Fixture implements FixtureGroupInterface
|
||||
{
|
||||
$start = $this->getRandomFirstDay();
|
||||
$start = $start->modify('- ' . (rand(1, 86400)) . ' seconds');
|
||||
$start->setTimezone(new \DateTimeZone($user->getPreferenceValue(UserPreference::TIMEZONE, date_default_timezone_get())));
|
||||
$start->setTimezone(new \DateTimeZone($user->getTimezone()));
|
||||
|
||||
$entry = new Timesheet();
|
||||
$entry
|
||||
|
||||
@@ -545,7 +545,6 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
|
||||
return $this;
|
||||
}
|
||||
$this->tags->add($tag);
|
||||
$tag->addTimesheet($this);
|
||||
|
||||
return $this;
|
||||
}
|
||||
@@ -559,7 +558,6 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
|
||||
return;
|
||||
}
|
||||
$this->tags->removeElement($tag);
|
||||
$tag->removeTimesheet($this);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -481,17 +481,17 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
|
||||
public function is24Hour(): bool
|
||||
{
|
||||
return (bool) $this->getPreferenceValue(UserPreference::HOUR_24, true);
|
||||
return (bool) $this->getPreferenceValue(UserPreference::HOUR_24, true, false);
|
||||
}
|
||||
|
||||
public function getLocale(): string
|
||||
{
|
||||
return $this->getPreferenceValue(UserPreference::LOCALE, User::DEFAULT_LANGUAGE);
|
||||
return $this->getPreferenceValue(UserPreference::LOCALE, User::DEFAULT_LANGUAGE, false);
|
||||
}
|
||||
|
||||
public function getTimezone(): string
|
||||
{
|
||||
return $this->getPreferenceValue(UserPreference::TIMEZONE, date_default_timezone_get());
|
||||
return $this->getPreferenceValue(UserPreference::TIMEZONE, date_default_timezone_get(), false);
|
||||
}
|
||||
|
||||
public function getLanguage(): string
|
||||
@@ -514,17 +514,17 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
|
||||
public function getFirstDayOfWeek(): string
|
||||
{
|
||||
return $this->getPreferenceValue(UserPreference::FIRST_WEEKDAY, User::DEFAULT_FIRST_WEEKDAY);
|
||||
return $this->getPreferenceValue(UserPreference::FIRST_WEEKDAY, User::DEFAULT_FIRST_WEEKDAY, false);
|
||||
}
|
||||
|
||||
public function isSmallLayout(): bool
|
||||
{
|
||||
return $this->getPreferenceValue('theme.layout', 'fixed') === 'boxed';
|
||||
return $this->getPreferenceValue('theme.layout', 'fixed', false) === 'boxed';
|
||||
}
|
||||
|
||||
public function isExportDecimal(): bool
|
||||
{
|
||||
return (bool) $this->getPreferenceValue('timesheet.export_decimal', false);
|
||||
return (bool) $this->getPreferenceValue('timesheet.export_decimal', false, false);
|
||||
}
|
||||
|
||||
public function setTimezone(?string $timezone)
|
||||
@@ -538,16 +538,19 @@ class User implements UserInterface, EquatableInterface, \Serializable
|
||||
/**
|
||||
* @param string $name
|
||||
* @param mixed $default
|
||||
* @param bool $allowNull
|
||||
* @return bool|int|string|null
|
||||
*/
|
||||
public function getPreferenceValue(string $name, $default = null)
|
||||
public function getPreferenceValue(string $name, $default = null, bool $allowNull = true)
|
||||
{
|
||||
$preference = $this->getPreference($name);
|
||||
if (null === $preference) {
|
||||
return $default;
|
||||
}
|
||||
|
||||
return $preference->getValue();
|
||||
$value = $preference->getValue();
|
||||
|
||||
return $allowNull ? $value : ($value ?? $default);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -65,7 +65,7 @@ final class RateService implements RateServiceInterface
|
||||
|
||||
if (null !== $fixedRate) {
|
||||
if (null === $fixedInternalRate) {
|
||||
$fixedInternalRate = (float) $record->getUser()->getPreferenceValue(UserPreference::INTERNAL_RATE, $fixedRate);
|
||||
$fixedInternalRate = (float) $record->getUser()->getPreferenceValue(UserPreference::INTERNAL_RATE, $fixedRate, false);
|
||||
}
|
||||
|
||||
return new Rate($fixedRate, $fixedInternalRate, null, $fixedRate);
|
||||
@@ -73,16 +73,11 @@ final class RateService implements RateServiceInterface
|
||||
|
||||
// user preferences => fallback if nothing else was configured
|
||||
if (null === $hourlyRate) {
|
||||
$hourlyRate = (float) $record->getUser()->getPreferenceValue(UserPreference::HOURLY_RATE, 0.00);
|
||||
$hourlyRate = (float) $record->getUser()->getPreferenceValue(UserPreference::HOURLY_RATE, 0.00, false);
|
||||
}
|
||||
|
||||
if (null === $internalRate) {
|
||||
$internalRate = $record->getUser()->getPreferenceValue(UserPreference::INTERNAL_RATE, 0.00);
|
||||
if (null === $internalRate) {
|
||||
$internalRate = $hourlyRate;
|
||||
} else {
|
||||
$internalRate = (float) $internalRate;
|
||||
}
|
||||
$internalRate = (float) $record->getUser()->getPreferenceValue(UserPreference::INTERNAL_RATE, $hourlyRate, false);
|
||||
}
|
||||
|
||||
$factor = 1.00;
|
||||
|
||||
Reference in New Issue
Block a user