@@ -255,9 +255,8 @@ public function schedule(Message $iTipMessage) {
255255		$ this addSubjectAndHeading ($ template$ l10n$ method$ summary
256256		$ this addBulletList ($ template$ l10n$ vevent
257257
258- 
259258		// Only add response buttons to invitation requests: Fix Issue #11230 
260- 		if  (($ methodself ::METHOD_REQUEST ) && $ this getAttendeeRSVP ($ attendee
259+ 		if  (($ methodself ::METHOD_REQUEST ) && $ this getAttendeeRsvpOrReqParticipant ($ attendee
261260
262261			/* 
263262			** Only offer invitation accept/reject buttons, which link back to the 
@@ -395,12 +394,18 @@ private function getAttendeeLangOrDefault($default, Property $attendee = null) {
395394	 * @param Property|null $attendee 
396395	 * @return bool 
397396	 */ 
398- 	private  function  getAttendeeRSVP (Property $ attendeenull ) {
397+ 	private  function  getAttendeeRsvpOrReqParticipant (Property $ attendeenull ) {
399398		if  ($ attendeenull ) {
400399			$ rsvp$ attendeeoffsetGet ('RSVP ' );
401400			if  (($ rsvpinstanceof  Parameter) && (strcasecmp ($ rsvpgetValue (), 'TRUE ' ) === 0 )) {
402401				return  true ;
403402			}
403+ 			$ role$ attendeeoffsetGet ('ROLE ' );
404+ 			// @see https://datatracker.ietf.org/doc/html/rfc5545#section-3.2.16 
405+ 			// Attendees without a role are assumed required and should receive an invitation link even if they have no RSVP set 
406+ 			if ($ rolenull  || (($ rsvpinstanceof  Parameter) && (strcasecmp ($ rolegetValue (), 'REQ-PARTICIPANT ' ) === 0 ))) {
407+ 				return  true ;
408+ 			}
404409		}
405410		// RFC 5545 3.2.17: default RSVP is false 
406411		return  false ;
0 commit comments