original_string: protected static function can_contact_user(int $recipientid, int $senderid) : bool {
          if (has_capability('moodle/site:messageanyuser', \context_system::instance(), $senderid) ||
              $recipientid == $senderid) {
              // The sender has the ability to contact any user across the entire site or themselves.
              return true;
          }
  
          // The initial value of $cancontact is null to indicate that a value has not been determined.
          $cancontact = null;
  
          if (self::is_blocked($recipientid, $senderid)) {
              // The recipient has specifically blocked this sender.
              $cancontact = false;
          }
  
          $sharedcourses = null;
          if (null === $cancontact) {
              // There are three user preference options:
              // - Site: Allow anyone not explicitly blocked to contact me;
              // - Course members: Allow anyone I am in a course with to contact me; and
              // - Contacts: Only allow my contacts to contact me.
              //
              // The Site option is only possible when the messagingallusers site setting is also enabled.
  
              $privacypreference = self::get_user_privacy_messaging_preference($recipientid);
              if (self::MESSAGE_PRIVACY_SITE === $privacypreference) {
                  // The user preference is to allow any user to contact them.
                  // No need to check anything else.
                  $cancontact = true;
              } else {
                  // This user only allows their own contacts, and possibly course peers, to contact them.
                  // If the users are contacts then we can avoid the more expensive shared courses check.
                  $cancontact = self::is_contact($senderid, $recipientid);
  
                  if (!$cancontact && self::MESSAGE_PRIVACY_COURSEMEMBER === $privacypreference) {
                      // The users are not contacts and the user allows course member messaging.
                      // Check whether these two users share any course together.
                      $sharedcourses = enrol_get_shared_courses($recipientid, $senderid, true);
                      $cancontact = (!empty($sharedcourses));
                  }
              }
          }
  
          if (false === $cancontact) {
              // At the moment the users cannot contact one another.
              // Check whether the messageanyuser capability applies in any of the shared courses.
              // This is intended to allow teachers to message students regardless of message settings.
  
              // Note: You cannot use empty($sharedcourses) here because this may be an empty array.
              if (null === $sharedcourses) {
                  $sharedcourses = enrol_get_shared_courses($recipientid, $senderid, true);
              }
  
              foreach ($sharedcourses as $course) {
                  // Note: enrol_get_shared_courses will preload any shared context.
                  if (has_capability('moodle/site:messageanyuser', \context_course::instance($course->id), $senderid)) {
                      $cancontact = true;
                      break;
                  }
              }
          }
  
          return $cancontact;
      }
code: protected static function can_contact_user(int $recipientid, int $senderid) : bool {
          if (has_capability('moodle/site:messageanyuser', \context_system::instance(), $senderid) ||
              $recipientid == $senderid) {
              // The sender has the ability to contact any user across the entire site or themselves.
              return true;
          }
  
          // The initial value of $cancontact is null to indicate that a value has not been determined.
          $cancontact = null;
  
          if (self::is_blocked($recipientid, $senderid)) {
              // The recipient has specifically blocked this sender.
              $cancontact = false;
          }
  
          $sharedcourses = null;
          if (null === $cancontact) {
              // There are three user preference options:
              // - Site: Allow anyone not explicitly blocked to contact me;
              // - Course members: Allow anyone I am in a course with to contact me; and
              // - Contacts: Only allow my contacts to contact me.
              //
              // The Site option is only possible when the messagingallusers site setting is also enabled.
  
              $privacypreference = self::get_user_privacy_messaging_preference($recipientid);
              if (self::MESSAGE_PRIVACY_SITE === $privacypreference) {
                  // The user preference is to allow any user to contact them.
                  // No need to check anything else.
                  $cancontact = true;
              } else {
                  // This user only allows their own contacts, and possibly course peers, to contact them.
                  // If the users are contacts then we can avoid the more expensive shared courses check.
                  $cancontact = self::is_contact($senderid, $recipientid);
  
                  if (!$cancontact && self::MESSAGE_PRIVACY_COURSEMEMBER === $privacypreference) {
                      // The users are not contacts and the user allows course member messaging.
                      // Check whether these two users share any course together.
                      $sharedcourses = enrol_get_shared_courses($recipientid, $senderid, true);
                      $cancontact = (!empty($sharedcourses));
                  }
              }
          }
  
          if (false === $cancontact) {
              // At the moment the users cannot contact one another.
              // Check whether the messageanyuser capability applies in any of the shared courses.
              // This is intended to allow teachers to message students regardless of message settings.
  
              // Note: You cannot use empty($sharedcourses) here because this may be an empty array.
              if (null === $sharedcourses) {
                  $sharedcourses = enrol_get_shared_courses($recipientid, $senderid, true);
              }
  
              foreach ($sharedcourses as $course) {
                  // Note: enrol_get_shared_courses will preload any shared context.
                  if (has_capability('moodle/site:messageanyuser', \context_course::instance($course->id), $senderid)) {
                      $cancontact = true;
                      break;
                  }
              }
          }
  
          return $cancontact;
      }
code_tokens: protected static function can_contact_user ( int $ recipientid , int $ senderid ) : bool { if ( has_capability ( 'moodle/site:messageanyuser' , \ context_system :: instance ( ) , $ senderid ) || $ recipientid == $ senderid ) { // The sender has the ability to contact any user across the entire site or themselves. return true ; } // The initial value of $cancontact is null to indicate that a value has not been determined. $ cancontact = null ; if ( self :: is_blocked ( $ recipientid , $ senderid ) ) { // The recipient has specifically blocked this sender. $ cancontact = false ; } $ sharedcourses = null ; if ( null === $ cancontact ) { // There are three user preference options: // - Site: Allow anyone not explicitly blocked to contact me; // - Course members: Allow anyone I am in a course with to contact me; and // - Contacts: Only allow my contacts to contact me. // // The Site option is only possible when the messagingallusers site setting is also enabled. $ privacypreference = self :: get_user_privacy_messaging_preference ( $ recipientid ) ; if ( self :: MESSAGE_PRIVACY_SITE === $ privacypreference ) { // The user preference is to allow any user to contact them. // No need to check anything else. $ cancontact = true ; } else { // This user only allows their own contacts, and possibly course peers, to contact them. // If the users are contacts then we can avoid the more expensive shared courses check. $ cancontact = self :: is_contact ( $ senderid , $ recipientid ) ; if ( ! $ cancontact && self :: MESSAGE_PRIVACY_COURSEMEMBER === $ privacypreference ) { // The users are not contacts and the user allows course member messaging. // Check whether these two users share any course together. $ sharedcourses = enrol_get_shared_courses ( $ recipientid , $ senderid , true ) ; $ cancontact = ( ! empty ( $ sharedcourses ) ) ; } } } if ( false === $ cancontact ) { // At the moment the users cannot contact one another. // Check whether the messageanyuser capability applies in any of the shared courses. // This is intended to allow teachers to message students regardless of message settings. // Note: You cannot use empty($sharedcourses) here because this may be an empty array. if ( null === $ sharedcourses ) { $ sharedcourses = enrol_get_shared_courses ( $ recipientid , $ senderid , true ) ; } foreach ( $ sharedcourses as $ course ) { // Note: enrol_get_shared_courses will preload any shared context. if ( has_capability ( 'moodle/site:messageanyuser' , \ context_course :: instance ( $ course -> id ) , $ senderid ) ) { $ cancontact = true ; break ; } } } return $ cancontact ; }
docstring: Checks if the sender can message the recipient.
  
  @param int $recipientid
  @param int $senderid
  @return bool true if recipient hasn't blocked sender and sender can contact to recipient, false otherwise.
docstring_tokens: Checks if the sender can message the recipient .