mirror of https://github.com/sualko/cloud_bbb
feat: render activities with markup
parent
3fbd815d3f
commit
0ad1b499d9
Binary file not shown.
After Width: | Height: | Size: 554 B |
|
@ -0,0 +1,72 @@
|
||||||
|
<?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"
|
||||||
|
height="32"
|
||||||
|
width="32"
|
||||||
|
version="1.0"
|
||||||
|
viewBox="0 0 32 32"
|
||||||
|
id="svg4"
|
||||||
|
sodipodi:docname="app-dark.svg"
|
||||||
|
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||||
|
<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" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</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="1479"
|
||||||
|
inkscape:window-height="997"
|
||||||
|
id="namedview6"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="7.375"
|
||||||
|
inkscape:cx="13.46269"
|
||||||
|
inkscape:cy="7.070207"
|
||||||
|
inkscape:window-x="2110"
|
||||||
|
inkscape:window-y="585"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg4" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.48244119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="M 6.140625,2 C 3.8448872,2 2,3.9362265 2,6.2421875 V 25.757812 C 2,28.063773 3.8448872,30 6.140625,30 h 19.71875 C 28.155113,30 30,28.063773 30,25.757812 V 6.2421875 C 30,3.9362265 28.155113,2 25.859375,2 Z m 0,2.4824219 h 19.71875 c 0.917462,0 1.658203,0.7417266 1.658203,1.7597656 V 25.757812 c 0,1.01804 -0.740741,1.759766 -1.658203,1.759766 H 6.140625 c -0.9174623,0 -1.6582031,-0.741726 -1.6582031,-1.759766 V 6.2421875 c 0,-1.018039 0.7407408,-1.7597656 1.6582031,-1.7597656 z"
|
||||||
|
id="rect817"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<g
|
||||||
|
id="g891"
|
||||||
|
transform="matrix(0.72859037,0,0,0.72859037,4.3425539,7.2153805)"
|
||||||
|
style="fill:#000000">
|
||||||
|
<path
|
||||||
|
id="path819"
|
||||||
|
d="m 16,16.40625 a 9.4915257,9.4915257 0 0 0 -9.4921875,9.492188 9.4915257,9.4915257 0 0 0 0.3574219,2.576171 H 25.126953 A 9.4915257,9.4915257 0 0 0 25.492188,25.898438 9.4915257,9.4915257 0 0 0 16,16.40625 Z"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.37037015;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<circle
|
||||||
|
r="6.2372885"
|
||||||
|
cy="12.338983"
|
||||||
|
cx="16"
|
||||||
|
id="path819-1"
|
||||||
|
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.21481466;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers stroke fill" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 666 B |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 9.3 KiB |
|
@ -6,6 +6,11 @@ use OCA\BigBlueButton\AppInfo\Application;
|
||||||
use OCP\Activity\IProvider;
|
use OCP\Activity\IProvider;
|
||||||
use OCP\Activity\IEvent;
|
use OCP\Activity\IEvent;
|
||||||
use OCP\Activity\IManager;
|
use OCP\Activity\IManager;
|
||||||
|
use OCP\IL10N;
|
||||||
|
use OCP\IUserManager;
|
||||||
|
use OCP\IURLGenerator;
|
||||||
|
use OCP\L10N\IFactory;
|
||||||
|
use OCP\IUser;
|
||||||
|
|
||||||
class Provider implements IProvider {
|
class Provider implements IProvider {
|
||||||
|
|
||||||
|
@ -15,13 +20,31 @@ class Provider implements IProvider {
|
||||||
/** @var string */
|
/** @var string */
|
||||||
public const ROOM_DELETED = 'room_deleted';
|
public const ROOM_DELETED = 'room_deleted';
|
||||||
|
|
||||||
|
/** @var IL10N */
|
||||||
|
protected $l;
|
||||||
|
|
||||||
/** @var IManager */
|
/** @var IManager */
|
||||||
protected $activityManager;
|
protected $activityManager;
|
||||||
|
|
||||||
|
/** @var IUserManager */
|
||||||
|
protected $userManager;
|
||||||
|
|
||||||
|
/** @var IURLGenerator */
|
||||||
|
protected $url;
|
||||||
|
|
||||||
|
/** @var IFactory */
|
||||||
|
protected $languageFactory;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
IManager $manager
|
IManager $manager,
|
||||||
|
IUserManager $userManager,
|
||||||
|
IURLGenerator $url,
|
||||||
|
IFactory $languageFactory
|
||||||
) {
|
) {
|
||||||
$this->activityManager = $manager;
|
$this->activityManager = $manager;
|
||||||
|
$this->userManager = $userManager;
|
||||||
|
$this->url = $url;
|
||||||
|
$this->languageFactory = $languageFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parse($language, IEvent $event, IEvent $previousEvent = null) {
|
public function parse($language, IEvent $event, IEvent $previousEvent = null) {
|
||||||
|
@ -29,19 +52,86 @@ class Provider implements IProvider {
|
||||||
throw new \InvalidArgumentException();
|
throw new \InvalidArgumentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->l = $this->languageFactory->get(Application::ID, $language);
|
||||||
|
|
||||||
$subject = $event->getSubject();
|
$subject = $event->getSubject();
|
||||||
$params = $event->getSubjectParameters();
|
|
||||||
|
|
||||||
if ($subject === self::ROOM_CREATED) {
|
if ($subject === self::ROOM_CREATED) {
|
||||||
$event->setParsedSubject('You created the room ' . $params['name']);
|
$this->parseRoomCreated($event);
|
||||||
} elseif ($subject === self::ROOM_DELETED) {
|
} elseif ($subject === self::ROOM_DELETED) {
|
||||||
if ($this->activityManager->getCurrentUserId() === $event->getAffectedUser()) {
|
$this->parseRoomDeleted($event);
|
||||||
$event->setParsedSubject('You deleted the room ' . $params['name']);
|
} else {
|
||||||
} else {
|
$event->setParsedSubject('Unknown subject: ' . $subject);
|
||||||
$event->setParsedSubject($event->getAffectedUser() . ' deleted the room ' . $params['name']);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $event;
|
return $event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function parseRoomCreated(IEvent $event) {
|
||||||
|
$params = $event->getSubjectParameters();
|
||||||
|
|
||||||
|
$event->setParsedSubject($this->l->t('You created the room %s.', [$params['name']]));
|
||||||
|
|
||||||
|
$this->setIcon($event, 'room-created');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function parseRoomDeleted(IEvent $event) {
|
||||||
|
$params = $event->getSubjectParameters();
|
||||||
|
|
||||||
|
if ($this->activityManager->getCurrentUserId() === $event->getAuthor()) {
|
||||||
|
$event->setParsedSubject($this->l->t('You deleted the room %s.', [$params['name']]));
|
||||||
|
} else {
|
||||||
|
$subject = $this->l->t('{user} deleted the room %s', [$params['name']]);
|
||||||
|
|
||||||
|
$this->setSubjects($event, $subject, [
|
||||||
|
'user' => $this->getUser($event->getAuthor()),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setIcon($event, 'room-deleted');
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setIcon(IEvent $event, string $baseName) {
|
||||||
|
if ($this->activityManager->getRequirePNG()) {
|
||||||
|
$imagePath = $this->url->imagePath(Application::ID, 'actions/'.$baseName.'.png');
|
||||||
|
} else {
|
||||||
|
$imagePath = $this->url->imagePath(Application::ID, 'actions/'.$baseName.'.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
$event->setIcon($this->url->getAbsoluteURL($imagePath));
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setSubjects(IEvent $event, $subject, array $parameters) {
|
||||||
|
$placeholders = $replacements = [];
|
||||||
|
|
||||||
|
foreach ($parameters as $placeholder => $parameter) {
|
||||||
|
$placeholders[] = '{' . $placeholder . '}';
|
||||||
|
if ($parameter['type'] === 'file') {
|
||||||
|
$replacements[] = $parameter['path'];
|
||||||
|
} else {
|
||||||
|
$replacements[] = $parameter['name'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
|
||||||
|
->setRichSubject($subject, $parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getUser($uid) {
|
||||||
|
$user = $this->userManager->get($uid);
|
||||||
|
|
||||||
|
if ($user instanceof IUser) {
|
||||||
|
return [
|
||||||
|
'type' => 'user',
|
||||||
|
'id' => $user->getUID(),
|
||||||
|
'name' => $user->getDisplayName(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'type' => 'user',
|
||||||
|
'id' => $uid,
|
||||||
|
'name' => $uid,
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ use \OCP\AppFramework\App;
|
||||||
use \OCP\EventDispatcher\IEventDispatcher;
|
use \OCP\EventDispatcher\IEventDispatcher;
|
||||||
use \OCA\BigBlueButton\Middleware\JoinMiddleware;
|
use \OCA\BigBlueButton\Middleware\JoinMiddleware;
|
||||||
use \OCA\BigBlueButton\Event\RoomCreatedEvent;
|
use \OCA\BigBlueButton\Event\RoomCreatedEvent;
|
||||||
|
use \OCA\BigBlueButton\Event\RoomDeletedEvent;
|
||||||
use \OCA\BigBlueButton\Activity\RoomListener;
|
use \OCA\BigBlueButton\Activity\RoomListener;
|
||||||
|
|
||||||
if ((@include_once __DIR__ . '/../../vendor/autoload.php') === false) {
|
if ((@include_once __DIR__ . '/../../vendor/autoload.php') === false) {
|
||||||
|
|
|
@ -111,6 +111,7 @@ class RoomService {
|
||||||
public function delete($id) {
|
public function delete($id) {
|
||||||
try {
|
try {
|
||||||
$room = $this->mapper->find($id);
|
$room = $this->mapper->find($id);
|
||||||
|
|
||||||
$this->mapper->delete($room);
|
$this->mapper->delete($room);
|
||||||
|
|
||||||
$this->eventDispatcher->dispatch(RoomDeletedEvent::class, new RoomDeletedEvent($room));
|
$this->eventDispatcher->dispatch(RoomDeletedEvent::class, new RoomDeletedEvent($room));
|
||||||
|
|
Loading…
Reference in New Issue