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>
|
<command>OCA\Social\Command\QueueProcess</command>
|
||||||
</commands>
|
</commands>
|
||||||
|
|
||||||
|
<contactsmenu>
|
||||||
|
<provider>OCA\Social\Providers\ContactsMenuProvider</provider>
|
||||||
|
</contactsmenu>
|
||||||
|
|
||||||
<navigations>
|
<navigations>
|
||||||
<navigation>
|
<navigation>
|
||||||
<name>Social</name>
|
<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