Skip to content

Commit a508344

Browse files
committed
Add support for images in recent activities
1 parent 4eaa3d7 commit a508344

File tree

5 files changed

+112
-7
lines changed

5 files changed

+112
-7
lines changed

com.woltlab.wcf/templates/recentActivityListItem.tpl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
<div class="
33
recentActivityListItem
44
{if $event->isIgnoredContent()}ignoredUserContent{/if}
5-
{if !$event->getDescription()}recentActivityListItem--compact{/if}
5+
{if $event->getDescription()}recentActivityListItem--withDescription{/if}
6+
{if $event->getImage()}recentActivityListItem--withImage{/if}
67
">
78
<div class="recentActivityListItem__avatar">
89
{user object=$event->getUserProfile() type='avatar48' ariaHidden='true' tabindex='-1'}
@@ -22,6 +23,12 @@
2223
</div>
2324
{/if}
2425

26+
{if $event->getImage()}
27+
<div class="recentActivityListItem__image">
28+
<img src="{$event->getImage()}" loading="lazy">
29+
</div>
30+
{/if}
31+
2532
<div class="recentActivityListItem__time">
2633
{time time=$event->time}
2734
</div>

wcfsetup/install/files/lib/data/user/activity/event/ViewableUserActivityEvent.class.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ class ViewableUserActivityEvent extends DatabaseObjectDecorator
6666
*/
6767
protected string $link = '';
6868

69+
/**
70+
* @since 6.2
71+
*/
72+
protected string $image = '';
73+
6974
/**
7075
* Marks this event as accessible for current user.
7176
*/
@@ -213,4 +218,20 @@ public function isIgnoredContent(): bool
213218
{
214219
return UserProfileHandler::getInstance()->getUserProfile()->isIgnoredUser($this->getUserProfile()->userID, 2);
215220
}
221+
222+
/**
223+
* @since 6.2
224+
*/
225+
public function setImage(string $image): void
226+
{
227+
$this->image = $image;
228+
}
229+
230+
/**
231+
* @since 6.2
232+
*/
233+
public function getImage(): string
234+
{
235+
return $this->image;
236+
}
216237
}

wcfsetup/install/files/lib/system/message/embedded/object/MessageEmbeddedObjectManager.class.php

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ public function getActiveMessageID(): ?int
371371
}
372372

373373
/**
374-
* Returns all embedded objects of a specific type.
374+
* Returns all embedded objects of a specific type in the active message.
375375
*
376376
* @param string $embeddedObjectType
377377
* @return array
@@ -392,6 +392,29 @@ public function getObjects($embeddedObjectType)
392392
return $returnValue;
393393
}
394394

395+
/**
396+
* Returns all embedded objects of a specific type in a specific message.
397+
*
398+
* @since 6.2
399+
*/
400+
public function getObjectsForMessage(string $embeddedObjectType, string $messageObjectType, int $messageID): array
401+
{
402+
$embeddedObjectTypeID = ObjectTypeCache::getInstance()
403+
->getObjectTypeIDByName('com.woltlab.wcf.message.embeddedObject', $embeddedObjectType);
404+
$messageObjectTypeID = ObjectTypeCache::getInstance()
405+
->getObjectTypeIDByName('com.woltlab.wcf.message', $messageObjectType);
406+
$returnValue = [];
407+
if (!empty($this->messageEmbeddedObjects[$messageObjectTypeID][$messageID][$embeddedObjectTypeID])) {
408+
foreach ($this->messageEmbeddedObjects[$messageObjectTypeID][$messageID][$embeddedObjectTypeID] as $embeddedObjectID) {
409+
if (isset($this->embeddedObjects[$embeddedObjectTypeID][$embeddedObjectID])) {
410+
$returnValue[] = $this->embeddedObjects[$embeddedObjectTypeID][$embeddedObjectID];
411+
}
412+
}
413+
}
414+
415+
return $returnValue;
416+
}
417+
395418
/**
396419
* Returns a specific embedded object.
397420
*

wcfsetup/install/files/lib/system/user/activity/event/ArticleUserActivityEvent.class.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ public function prepare(array $events)
4747
));
4848
$event->setDescription(\strip_tags($article->getFormattedTeaser()), true);
4949
$event->setLink($article->getLink());
50+
if ($article->getTeaserImage()) {
51+
$event->setImage($article->getTeaserImage()->getThumbnailLink('medium'));
52+
}
5053
}
5154
} else {
5255
$event->setIsOrphaned();

wcfsetup/install/files/style/ui/recentActivityList.scss

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,62 @@
1010

1111
.recentActivityListItem {
1212
display: grid;
13+
column-gap: 15px;
14+
row-gap: 5px;
15+
position: relative;
1316
grid-template-areas:
1417
"avatar title"
15-
"avatar description"
1618
"avatar time";
1719
grid-template-columns: min-content 1fr;
18-
column-gap: 15px;
19-
row-gap: 5px;
20-
position: relative;
20+
grid-template-rows: min-content 1fr;
2121

22-
&.recentActivityListItem--compact {
22+
&.recentActivityListItem--withDescription {
2323
grid-template-areas:
2424
"avatar title"
25+
"avatar description"
2526
"avatar time";
27+
grid-template-rows: min-content min-content 1fr;
2628
}
2729

2830
&:not(:last-child) {
2931
padding-bottom: 20px;
3032
border-bottom: 1px solid var(--wcfContentBorderInner);
3133
}
34+
35+
@include screen-md-up {
36+
&.recentActivityListItem--withImage {
37+
grid-template-areas:
38+
"avatar title image"
39+
"avatar time image";
40+
grid-template-columns: min-content 1fr min-content;
41+
}
42+
43+
&.recentActivityListItem--withDescription.recentActivityListItem--withImage {
44+
grid-template-areas:
45+
"avatar title image"
46+
"avatar description image"
47+
"avatar time image";
48+
}
49+
}
50+
51+
@include screen-sm-down {
52+
&.recentActivityListItem--withImage {
53+
grid-template-areas:
54+
"avatar title"
55+
"avatar image"
56+
"avatar time";
57+
grid-template-rows: min-content min-content 1fr;
58+
}
59+
60+
&.recentActivityListItem--withDescription.recentActivityListItem--withImage {
61+
grid-template-areas:
62+
"avatar title"
63+
"avatar image"
64+
"avatar description"
65+
"avatar time";
66+
grid-template-rows: min-content min-content min-content 1fr;
67+
}
68+
}
3269
}
3370

3471
.recentActivityListItem__avatar {
@@ -53,6 +90,20 @@
5390
@include wcfFontSmall;
5491
}
5592

93+
.recentActivityListItem__image {
94+
grid-area: image;
95+
align-self: center;
96+
}
97+
98+
.recentActivityListItem__image img {
99+
border-radius: var(--wcfBorderRadius);
100+
max-width: 300px;
101+
102+
@include screen-sm-down {
103+
max-width: 100%;
104+
}
105+
}
106+
56107
.recentActivityListItem__link {
57108
color: inherit;
58109

0 commit comments

Comments
 (0)