11<?php
22
3- use wcf \form \ConversationAddForm ;
3+ use wcf \data \DatabaseObject ;
4+ use wcf \data \user \UserProfile ;
45use wcf \system \event \EventHandler ;
56use wcf \system \request \LinkHandler ;
6- use wcf \system \view \user \profile \UserProfileHeaderViewInteractionOption ;
77use wcf \system \WCF ;
8+ use wcf \util \StringUtil ;
89
910return static function (): void {
1011 $ eventHandler = EventHandler::getInstance ();
@@ -18,23 +19,41 @@ static function (\wcf\event\worker\RebuildWorkerCollecting $event) {
1819 }
1920 );
2021
21- $ eventHandler ->register (
22- \wcf \event \user \profile \UserProfileHeaderInteractionOptionCollecting::class,
23- static function (\wcf \event \user \profile \UserProfileHeaderInteractionOptionCollecting $ event ) {
24- if (
25- MODULE_CONVERSATION
26- && WCF ::getUser ()->userID
27- && WCF ::getSession ()->getPermission ('user.conversation.canUseConversation ' )
28- && WCF ::getSession ()->getPermission ('user.conversation.canStartConversation ' )
29- && WCF ::getUser ()->userID != $ event ->user ->userID
30- ) {
31- $ event ->register (UserProfileHeaderViewInteractionOption::forLink (
32- WCF ::getLanguage ()->get ('wcf.conversation.button.add ' ),
33- LinkHandler::getInstance ()->getControllerLink (ConversationAddForm::class, ['userID ' => $ event ->user ->userID ])
34- ));
22+ if (
23+ \MODULE_CONVERSATION
24+ && WCF ::getUser ()->userID
25+ && WCF ::getSession ()->getPermission ('user.conversation.canUseConversation ' )
26+ && WCF ::getSession ()->getPermission ('user.conversation.canStartConversation ' )
27+ ) {
28+ $ eventHandler ->register (
29+ \wcf \event \interaction \user \UserProfileInteractionCollecting::class,
30+ static function (\wcf \event \interaction \user \UserProfileInteractionCollecting $ event ) {
31+ $ event ->provider ->addInteraction (
32+ new class (
33+ 'start-conversation ' ,
34+ isAvailableCallback: static fn (UserProfile $ user ) => WCF ::getUser ()->userID !== $ user ->userID
35+ ) extends \wcf \system \interaction \AbstractInteraction {
36+ #[\Override]
37+ public function render (DatabaseObject $ object ): string
38+ {
39+ \assert ($ object instanceof UserProfile);
40+
41+ return \sprintf (
42+ '<a href="%s">%s</a> ' ,
43+ StringUtil::encodeHTML (
44+ LinkHandler::getInstance ()->getControllerLink (
45+ \wcf \form \ConversationAddForm::class,
46+ ['userID ' => $ object ->userID ]
47+ )
48+ ),
49+ WCF ::getLanguage ()->get ('wcf.conversation.button.add ' )
50+ );
51+ }
52+ }
53+ );
3554 }
36- }
37- );
55+ );
56+ }
3857
3958 $ eventHandler ->register (
4059 \wcf \event \endpoint \ControllerCollecting::class,
0 commit comments