Skip to content

Commit

Permalink
Add api to load additional section in profile page
Browse files Browse the repository at this point in the history
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
  • Loading branch information
CarlSchwan committed Sep 12, 2022
1 parent 52d962b commit b4745c9
Show file tree
Hide file tree
Showing 7 changed files with 96 additions and 6 deletions.
8 changes: 7 additions & 1 deletion core/Controller/ProfilePageController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -44,6 +45,7 @@ class ProfilePageController extends Controller {
private IUserManager $userManager;
private IUserSession $userSession;
private IUserStatusManager $userStatusManager;
private IEventDispatcher $EventDispatcher;

public function __construct(
$appName,
Expand All @@ -53,7 +55,8 @@ public function __construct(
IShareManager $shareManager,
IUserManager $userManager,
IUserSession $userSession,
IUserStatusManager $userStatusManager
IUserStatusManager $userStatusManager,
IEventDispatcher $EventDispatcher
) {
parent::__construct($appName, $request);
$this->initialStateService = $initialStateService;
Expand All @@ -62,6 +65,7 @@ public function __construct(
$this->userManager = $userManager;
$this->userSession = $userSession;
$this->userStatusManager = $userStatusManager;
$this->eventDispatcher = $eventDispatcher;
}

/**
Expand Down Expand Up @@ -111,6 +115,8 @@ public function index(string $targetUserId): TemplateResponse {
$this->profileManager->getProfileParams($targetUser, $visitingUser),
);

$this->eventDispatcher->dispatch(new BeforeTemplateRenderedEvent($targetUserId);)

\OCP\Util::addScript('core', 'profile');

return new TemplateResponse(
Expand Down
15 changes: 13 additions & 2 deletions core/src/profile.js
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down
42 changes: 42 additions & 0 deletions core/src/profile/ProfileSections.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@

/**
* @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @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 <http://www.gnu.org/licenses/>.
*
*/

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
}
}
9 changes: 9 additions & 0 deletions core/src/views/Profile.vue
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,14 @@
<div v-if="biography" class="profile__blocks-biography">
<p>{{ biography }}</p>
</div>

<!-- additional entries, use it with cautious -->
<div v-for="(section, index) in sections"
:ref="'section-' + index"
:key="index"
class="profile__additionalContent">
<component :is="section($refs['section-'+index], userId)" :userId="userId" />
</div>
</template>
<template v-else>
<div class="profile__blocks-empty-info">
Expand Down Expand Up @@ -204,6 +212,7 @@ export default {
biography,
actions,
isUserAvatarVisible,
sections: OCA.Core.ProfileSections.getSections(),
}
},
Expand Down
4 changes: 2 additions & 2 deletions dist/core-profile.js

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions dist/core-profile.js.LICENSE.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,25 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

/**
* @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @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 <http://www.gnu.org/licenses/>.
*
*/
2 changes: 1 addition & 1 deletion dist/core-profile.js.map

Large diffs are not rendered by default.

0 comments on commit b4745c9

Please sign in to comment.