mirror of
https://github.com/nextcloud/server.git
synced 2026-04-15 22:11:17 -04:00
override default dashboard background with theming one
fix getAppValue default value in theming app fix cacheBuster value injection Signed-off-by: Julien Veyssier <eneiluj@posteo.net> Signed-off-by: npmbuildbot-nextcloud[bot] <npmbuildbot-nextcloud[bot]@users.noreply.github.com>
This commit is contained in:
parent
35be4fdb01
commit
f5ef2d7d58
11 changed files with 40 additions and 20 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -35,6 +35,7 @@ use OCP\AppFramework\Http\FileDisplayResponse;
|
|||
use OCP\AppFramework\Http\JSONResponse;
|
||||
use OCP\AppFramework\Http\NotFoundResponse;
|
||||
use OCP\AppFramework\Http\TemplateResponse;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\Dashboard\IManager;
|
||||
use OCP\Dashboard\IWidget;
|
||||
use OCP\Dashboard\RegisterWidgetEvent;
|
||||
|
|
@ -49,6 +50,8 @@ class DashboardController extends Controller {
|
|||
private $inititalStateService;
|
||||
/** @var IEventDispatcher */
|
||||
private $eventDispatcher;
|
||||
/** @var IAppManager */
|
||||
private $appManager;
|
||||
/** @var IManager */
|
||||
private $dashboardManager;
|
||||
/** @var IConfig */
|
||||
|
|
@ -65,6 +68,7 @@ class DashboardController extends Controller {
|
|||
IRequest $request,
|
||||
IInitialStateService $initialStateService,
|
||||
IEventDispatcher $eventDispatcher,
|
||||
IAppManager $appManager,
|
||||
IManager $dashboardManager,
|
||||
IConfig $config,
|
||||
BackgroundService $backgroundService,
|
||||
|
|
@ -74,6 +78,7 @@ class DashboardController extends Controller {
|
|||
|
||||
$this->inititalStateService = $initialStateService;
|
||||
$this->eventDispatcher = $eventDispatcher;
|
||||
$this->appManager = $appManager;
|
||||
$this->dashboardManager = $dashboardManager;
|
||||
$this->config = $config;
|
||||
$this->backgroundService = $backgroundService;
|
||||
|
|
@ -109,6 +114,11 @@ class DashboardController extends Controller {
|
|||
// It does not matter if some statuses are missing from the array, missing ones are considered enabled
|
||||
$statuses = ($statuses && count($statuses) > 0) ? $statuses : ['weather' => true];
|
||||
|
||||
// if theming app is enabled and wants to override default, we pass it
|
||||
$themingDefaultBackground = $this->appManager->isEnabledForUser('theming')
|
||||
? $this->config->getAppValue('theming', 'backgroundMime', '')
|
||||
: '';
|
||||
$this->inititalStateService->provideInitialState('dashboard', 'themingDefaultBackground', $themingDefaultBackground);
|
||||
$this->inititalStateService->provideInitialState('dashboard', 'panels', $widgets);
|
||||
$this->inititalStateService->provideInitialState('dashboard', 'statuses', $statuses);
|
||||
$this->inititalStateService->provideInitialState('dashboard', 'layout', $userLayout);
|
||||
|
|
|
|||
|
|
@ -68,7 +68,9 @@
|
|||
<a v-if="isAdmin" :href="appStoreUrl" class="button">{{ t('dashboard', 'Get more widgets from the app store') }}</a>
|
||||
|
||||
<h3>{{ t('dashboard', 'Change background image') }}</h3>
|
||||
<BackgroundSettings :background="background" @update:background="updateBackground" />
|
||||
<BackgroundSettings :background="background"
|
||||
:theming-default-background="themingDefaultBackground"
|
||||
@update:background="updateBackground" />
|
||||
|
||||
<h3>{{ t('dashboard', 'Weather service') }}</h3>
|
||||
<p>
|
||||
|
|
@ -95,11 +97,11 @@ import { generateUrl } from '@nextcloud/router'
|
|||
import isMobile from './mixins/isMobile'
|
||||
import BackgroundSettings from './components/BackgroundSettings'
|
||||
import getBackgroundUrl from './helpers/getBackgroundUrl'
|
||||
import prefixWithBaseUrl from './helpers/prefixWithBaseUrl'
|
||||
|
||||
const panels = loadState('dashboard', 'panels')
|
||||
const firstRun = loadState('dashboard', 'firstRun')
|
||||
const background = loadState('dashboard', 'background')
|
||||
const themingDefaultBackground = loadState('dashboard', 'themingDefaultBackground')
|
||||
const version = loadState('dashboard', 'version')
|
||||
const shippedBackgroundList = loadState('dashboard', 'shippedBackgrounds')
|
||||
const statusInfo = {
|
||||
|
|
@ -142,16 +144,17 @@ export default {
|
|||
appStoreUrl: generateUrl('/settings/apps/dashboard'),
|
||||
statuses: {},
|
||||
background,
|
||||
themingDefaultBackground,
|
||||
version,
|
||||
defaultBackground: window.OCA.Accessibility?.theme === 'dark' ? prefixWithBaseUrl('flickr-148302424@N05-36591009215.jpg?v=1') : prefixWithBaseUrl('flickr-paszczak000-8715851521.jpg?v=1'),
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
backgroundImage() {
|
||||
return getBackgroundUrl(this.background, this.version)
|
||||
return getBackgroundUrl(this.background, this.version, this.themingDefaultBackground)
|
||||
},
|
||||
backgroundStyle() {
|
||||
if (this.background.match(/#[0-9A-Fa-f]{6}/g)) {
|
||||
if ((this.background === 'default' && this.themingDefaultBackground === 'backgroundColor')
|
||||
|| this.background.match(/#[0-9A-Fa-f]{6}/g)) {
|
||||
return null
|
||||
}
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -66,6 +66,10 @@ export default {
|
|||
type: String,
|
||||
default: 'default',
|
||||
},
|
||||
themingDefaultBackground: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -88,8 +92,8 @@ export default {
|
|||
methods: {
|
||||
async update(data) {
|
||||
const background = data.type === 'custom' || data.type === 'default' ? data.type : data.value
|
||||
this.backgroundImage = getBackgroundUrl(background, data.version)
|
||||
if (data.type === 'color') {
|
||||
this.backgroundImage = getBackgroundUrl(background, data.version, this.themingDefaultBackground)
|
||||
if (data.type === 'color' || (data.type === 'default' && this.themingDefaultBackground === 'backgroundColor')) {
|
||||
this.$emit('update:background', data)
|
||||
this.loading = false
|
||||
return
|
||||
|
|
|
|||
|
|
@ -23,8 +23,11 @@
|
|||
import { generateUrl } from '@nextcloud/router'
|
||||
import prefixWithBaseUrl from './prefixWithBaseUrl'
|
||||
|
||||
export default (background, time = 0) => {
|
||||
export default (background, time = 0, themingDefaultBackground = '') => {
|
||||
if (background === 'default') {
|
||||
if (themingDefaultBackground && themingDefaultBackground !== 'backgroundColor') {
|
||||
return generateUrl('/apps/theming/image/background') + '?v=' + window.OCA.Theming.cacheBuster
|
||||
}
|
||||
if (window.OCA.Accessibility.theme === 'dark') {
|
||||
return prefixWithBaseUrl('eduardo-neves-pedra-azul.jpg')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ class Capabilities implements IPublicCapability {
|
|||
* @return array
|
||||
*/
|
||||
public function getCapabilities() {
|
||||
$backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime', false);
|
||||
$backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime', '');
|
||||
$color = $this->theming->getColorPrimary();
|
||||
return [
|
||||
'theming' => [
|
||||
|
|
@ -82,10 +82,10 @@ class Capabilities implements IPublicCapability {
|
|||
'color-element-bright' => $this->util->elementColor($color),
|
||||
'color-element-dark' => $this->util->elementColor($color, false),
|
||||
'logo' => $this->url->getAbsoluteURL($this->theming->getLogo()),
|
||||
'background' => $backgroundLogo === 'backgroundColor' || ($backgroundLogo === false && $this->theming->getColorPrimary() !== '#0082c9') ?
|
||||
'background' => $backgroundLogo === 'backgroundColor' || ($backgroundLogo === '' && $this->theming->getColorPrimary() !== '#0082c9') ?
|
||||
$this->theming->getColorPrimary() :
|
||||
$this->url->getAbsoluteURL($this->theming->getBackground()),
|
||||
'background-plain' => $backgroundLogo === 'backgroundColor' || ($backgroundLogo === false && $this->theming->getColorPrimary() !== '#0082c9'),
|
||||
'background-plain' => $backgroundLogo === 'backgroundColor' || ($backgroundLogo === '' && $this->theming->getColorPrimary() !== '#0082c9'),
|
||||
'background-default' => !$this->util->isBackgroundThemed(),
|
||||
'logoheader' => $this->url->getAbsoluteURL($this->theming->getLogo()),
|
||||
'favicon' => $this->url->getAbsoluteURL($this->theming->getLogo()),
|
||||
|
|
|
|||
|
|
@ -101,9 +101,9 @@ class ImageManager {
|
|||
* @throws NotPermittedException
|
||||
*/
|
||||
public function getImage(string $key, bool $useSvg = true): ISimpleFile {
|
||||
$logo = $this->config->getAppValue('theming', $key . 'Mime', false);
|
||||
$logo = $this->config->getAppValue('theming', $key . 'Mime', '');
|
||||
$folder = $this->appData->getFolder('images');
|
||||
if ($logo === false || !$folder->fileExists($key)) {
|
||||
if ($logo === '' || !$folder->fileExists($key)) {
|
||||
throw new NotFoundException();
|
||||
}
|
||||
if (!$useSvg && $this->shouldReplaceIcons()) {
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ class JSDataService implements \JsonSerializable {
|
|||
'imprintUrl' => $this->themingDefaults->getImprintUrl(),
|
||||
'privacyUrl' => $this->themingDefaults->getPrivacyUrl(),
|
||||
'inverted' => $this->util->invertTextColor($this->themingDefaults->getColorPrimary()),
|
||||
'cacheBuster' => $this->appConfig->getAppValue(Application::class, 'cachebuster', '0'),
|
||||
'cacheBuster' => $this->appConfig->getAppValue(Application::APP_ID, 'cachebuster', '0'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -223,7 +223,7 @@ class ThemingDefaults extends \OC_Defaults {
|
|||
* @return string
|
||||
*/
|
||||
public function getLogo($useSvg = true): string {
|
||||
$logo = $this->config->getAppValue('theming', 'logoMime', false);
|
||||
$logo = $this->config->getAppValue('theming', 'logoMime', '');
|
||||
|
||||
// short cut to avoid setting up the filesystem just to check if the logo is there
|
||||
//
|
||||
|
|
@ -309,13 +309,13 @@ class ThemingDefaults extends \OC_Defaults {
|
|||
$variables['image-login-background'] = "url('".$this->imageManager->getImageUrl('background')."')";
|
||||
$variables['image-login-plain'] = 'false';
|
||||
|
||||
if ($this->config->getAppValue('theming', 'color', null) !== null) {
|
||||
if ($this->config->getAppValue('theming', 'color', '') !== '') {
|
||||
$variables['color-primary'] = $this->getColorPrimary();
|
||||
$variables['color-primary-text'] = $this->getTextColorPrimary();
|
||||
$variables['color-primary-element'] = $this->util->elementColor($this->getColorPrimary());
|
||||
}
|
||||
|
||||
if ($this->config->getAppValue('theming', 'backgroundMime', null) === 'backgroundColor') {
|
||||
if ($this->config->getAppValue('theming', 'backgroundMime', '') === 'backgroundColor') {
|
||||
$variables['image-login-plain'] = 'true';
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ class Util {
|
|||
}
|
||||
|
||||
public function isBackgroundThemed() {
|
||||
$backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime',false);
|
||||
$backgroundLogo = $this->config->getAppValue('theming', 'backgroundMime', '');
|
||||
|
||||
$backgroundExists = true;
|
||||
try {
|
||||
|
|
|
|||
Loading…
Reference in a new issue