diff --git a/core/Controller/ProfilePageController.php b/core/Controller/ProfilePageController.php index 61573f43753df..4b710911482e4 100644 --- a/core/Controller/ProfilePageController.php +++ b/core/Controller/ProfilePageController.php @@ -27,6 +27,7 @@ namespace OC\Core\Controller; use OC\Profile\ProfileManager; +use OCP\Profile\BeforeTemplateRenderedEvent; use OCP\AppFramework\Controller; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Services\IInitialState; @@ -36,6 +37,7 @@ use OCP\IUserSession; use OCP\Share\IManager as IShareManager; use OCP\UserStatus\IManager as IUserStatusManager; +use OCP\EventDispatcher\IEventDispatcher; class ProfilePageController extends Controller { private IInitialState $initialStateService; @@ -44,6 +46,7 @@ class ProfilePageController extends Controller { private IUserManager $userManager; private IUserSession $userSession; private IUserStatusManager $userStatusManager; + private IEventDispatcher $eventDispatcher; public function __construct( $appName, @@ -53,7 +56,8 @@ public function __construct( IShareManager $shareManager, IUserManager $userManager, IUserSession $userSession, - IUserStatusManager $userStatusManager + IUserStatusManager $userStatusManager, + IEventDispatcher $eventDispatcher ) { parent::__construct($appName, $request); $this->initialStateService = $initialStateService; @@ -62,6 +66,7 @@ public function __construct( $this->userManager = $userManager; $this->userSession = $userSession; $this->userStatusManager = $userStatusManager; + $this->eventDispatcher = $eventDispatcher; } /** @@ -111,6 +116,8 @@ public function index(string $targetUserId): TemplateResponse { $this->profileManager->getProfileParams($targetUser, $visitingUser), ); + $this->eventDispatcher->dispatchTyped(new BeforeTemplateRenderedEvent($targetUserId)); + \OCP\Util::addScript('core', 'profile'); return new TemplateResponse( diff --git a/core/src/profile.js b/core/src/profile.js index 5e3711841a643..15367f29aa456 100644 --- a/core/src/profile.js +++ b/core/src/profile.js @@ -25,12 +25,23 @@ import { getRequestToken } from '@nextcloud/auth' import { translate as t } from '@nextcloud/l10n' import VTooltip from 'v-tooltip' -import logger from './logger' +import logger from './logger.js' -import Profile from './views/Profile' +import Profile from './views/Profile.vue' +import ProfileSections from './profile/ProfileSections.js' __webpack_nonce__ = btoa(getRequestToken()) +if (!window.OCA) { + window.OCA = {} +} + +if (!window.OCA.Core) { + window.OCA.Core = {} +} +Object.assign(window.OCA.Core, { ProfileSections: new ProfileSections() }) +console.debug('Core', window.OCA.Core) + Vue.use(VTooltip) Vue.mixin({ diff --git a/core/src/profile/ProfileSections.js b/core/src/profile/ProfileSections.js new file mode 100644 index 0000000000000..03241b0c0c5d5 --- /dev/null +++ b/core/src/profile/ProfileSections.js @@ -0,0 +1,42 @@ + +/** + * @copyright Copyright (c) 2019 Julius Härtl + * + * @author Julius Härtl + * + * @license AGPL-3.0-or-later + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +export default class ProfileSections { + + _sections + + constructor() { + this._sections = [] + } + + /** + * @param {registerSectionCallback} section To be called to mount the section to the profile page + */ + registerSection(section) { + this._sections.push(section) + } + + getSections() { + return this._sections + } +} diff --git a/core/src/views/Profile.vue b/core/src/views/Profile.vue index 93b8316e4da45..c7571fff14804 100644 --- a/core/src/views/Profile.vue +++ b/core/src/views/Profile.vue @@ -118,13 +118,21 @@

-