kopia lustrzana https://github.com/nextcloud/social
add social to contacts menu
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>pull/747/head
rodzic
95c3d8555b
commit
033fc41aba
|
@ -65,6 +65,10 @@
|
|||
<command>OCA\Social\Command\QueueProcess</command>
|
||||
</commands>
|
||||
|
||||
<contactsmenu>
|
||||
<provider>OCA\Social\Providers\ContactsMenuProvider</provider>
|
||||
</contactsmenu>
|
||||
|
||||
<navigations>
|
||||
<navigation>
|
||||
<name>Social</name>
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="32"
|
||||
height="32"
|
||||
viewBox="0 0 32 32"
|
||||
id="svg4"
|
||||
sodipodi:docname="social.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1046"
|
||||
id="namedview6"
|
||||
showgrid="false"
|
||||
inkscape:zoom="7.375"
|
||||
inkscape:cx="-35.79661"
|
||||
inkscape:cy="16"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="34"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4" />
|
||||
<path
|
||||
d="M 16,29 13.97,27.152 C 6.76,20.614 2,16.288 2,11.01 2,6.684 5.388,3.31 9.7,3.31 c 2.436,0 4.774,1.134 6.3,2.912 1.526,-1.778 3.864,-2.912 6.3,-2.912 4.312,0 7.7,3.374 7.7,7.7 0,5.278 -4.76,9.604 -11.97,16.142 z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#000000;stroke-width:1.39999998" />
|
||||
</svg>
|
Po Szerokość: | Wysokość: | Rozmiar: 1.7 KiB |
|
@ -0,0 +1,140 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
/**
|
||||
* Nextcloud - Social Support
|
||||
*
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later. See the COPYING file.
|
||||
*
|
||||
* @author Maxence Lange <maxence@artificial-owl.com>
|
||||
* @copyright 2018, Maxence Lange <maxence@artificial-owl.com>
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* 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/>.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
namespace OCA\Social\Providers;
|
||||
|
||||
|
||||
use Exception;
|
||||
use OC\User\NoUserException;
|
||||
use OCA\Social\Service\AccountService;
|
||||
use OCP\Contacts\ContactsMenu\IActionFactory;
|
||||
use OCP\Contacts\ContactsMenu\IEntry;
|
||||
use OCP\Contacts\ContactsMenu\IProvider;
|
||||
use OCP\IL10N;
|
||||
use OCP\IURLGenerator;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
|
||||
|
||||
/**
|
||||
* Class ContactsMenuProvider
|
||||
*
|
||||
* @package OCA\Social\Providers
|
||||
*/
|
||||
class ContactsMenuProvider implements IProvider {
|
||||
|
||||
|
||||
/** @var IActionFactory */
|
||||
private $actionFactory;
|
||||
|
||||
/** @var IURLGenerator */
|
||||
private $urlGenerator;
|
||||
|
||||
/** @var IUserManager */
|
||||
private $userManager;
|
||||
|
||||
/** @var IL10N */
|
||||
private $l10n;
|
||||
|
||||
/** @var AccountService */
|
||||
private $accountService;
|
||||
|
||||
|
||||
/**
|
||||
* ContactsMenuProvider constructor.
|
||||
*
|
||||
* @param IActionFactory $actionFactory
|
||||
* @param IURLGenerator $urlGenerator
|
||||
* @param IUserManager $userManager
|
||||
* @param IL10N $l10n
|
||||
* @param AccountService $accountService
|
||||
*/
|
||||
public function __construct(
|
||||
IActionFactory $actionFactory, IURLGenerator $urlGenerator, IUserManager $userManager, IL10N $l10n,
|
||||
AccountService $accountService
|
||||
) {
|
||||
$this->actionFactory = $actionFactory;
|
||||
$this->urlGenerator = $urlGenerator;
|
||||
$this->userManager = $userManager;
|
||||
$this->l10n = $l10n;
|
||||
$this->accountService = $accountService;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param IEntry $entry
|
||||
*/
|
||||
public function process(IEntry $entry): void {
|
||||
try {
|
||||
$user = $this->getUserFromEntry($entry);
|
||||
$actor = $this->accountService->getActorFromUserId($user->getUID());
|
||||
|
||||
$action = $this->l10n->t('Follow %s on Social', [$user->getDisplayName()]);
|
||||
$icon = $this->urlGenerator->getAbsoluteURL(
|
||||
$this->urlGenerator->imagePath('social', 'social-dark.svg')
|
||||
);
|
||||
$link = $this->urlGenerator->linkToRouteAbsolute(
|
||||
'social.ActivityPub.actorAlias', ['username' => $actor->getPreferredUsername()]
|
||||
);
|
||||
|
||||
$action = $this->actionFactory->newLinkAction($icon, $action, $link);
|
||||
$entry->addAction($action);
|
||||
} catch (Exception $e) {
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param IEntry $entry
|
||||
*
|
||||
* @return IUser
|
||||
* @throws NoUserException
|
||||
*/
|
||||
private function getUserFromEntry(IEntry $entry): IUser {
|
||||
$userId = $entry->getProperty('UID');
|
||||
if ($userId === null) {
|
||||
throw new NoUserException();
|
||||
}
|
||||
|
||||
if ($entry->getProperty('isLocalSystemBook') !== true) {
|
||||
throw new NoUserException();
|
||||
}
|
||||
|
||||
$user = $this->userManager->get($userId);
|
||||
if (!$user instanceof IUser) {
|
||||
throw new NoUserException();
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
}
|
Ładowanie…
Reference in New Issue