Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public function serialize($expand = null, array $fields = [], array $relations =
if(in_array("moderator_id",$fields))
$values['moderator_id'] = $presentation->getModerator()->getId();
if(in_array("moderator_full_name",$fields))
$values['moderator_full_name'] = $presentation->getModerator()->getFullName();
$values['moderator_full_name'] = $presentation->getModerator()->getFullName(true);
if(in_array("moderator_email",$fields))
$values['moderator_email'] = $presentation->getModerator()->getEmail();
if(in_array("moderator_title",$fields))
Expand Down Expand Up @@ -122,7 +122,7 @@ public function serialize($expand = null, array $fields = [], array $relations =

foreach ($presentation->getSpeakers() as $speaker) {
$speaker_ids[] = $speaker->getId();
$speaker_fullnames[] = $speaker->getFullName();
$speaker_fullnames[] = $speaker->getFullName(true);
$speaker_emails[] = $speaker->getEmail();
$speaker_titles[] = trim($speaker->getTitle());
$speaker_companies[] = trim($speaker->getCompany());
Expand Down Expand Up @@ -164,7 +164,7 @@ public function serialize($expand = null, array $fields = [], array $relations =
if(in_array("submitter_id",$fields))
$values['submitter_id'] = $submitter->getId();
if(in_array("submitter_full_name",$fields))
$values['submitter_full_name'] = $submitter->getFullName();
$values['submitter_full_name'] = $submitter->getFullName(true);
if(in_array("submitter_email",$fields))
$values['submitter_email'] = $submitter->getEmail();
if(in_array("submitter_title",$fields))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public function serialize($expand = null, array $fields = [], array $relations =

if ($presentation->hasModerator()) {
$values['moderator_id'] = $presentation->getModerator()->getId();
$values['moderator_full_name'] = $presentation->getModerator()->getFullName();
$values['moderator_full_name'] = $presentation->getModerator()->getFullName(true);
$values['moderator_email'] = $presentation->getModerator()->getEmail();
$values['moderator_title'] = trim($presentation->getModerator()->getTitle());
$values['moderator_company'] = trim($presentation->getModerator()->getCompany());
Expand All @@ -119,7 +119,7 @@ public function serialize($expand = null, array $fields = [], array $relations =

foreach ($presentation->getSpeakers() as $speaker) {
$speaker_ids[] = $speaker->getId();
$speaker_fullnames[] = $speaker->getFullName();
$speaker_fullnames[] = $speaker->getFullName(true);
$speaker_emails[] = $speaker->getEmail();
$speaker_titles[] = trim($speaker->getTitle());
$speaker_companies[] = trim($speaker->getCompany());
Expand All @@ -145,7 +145,7 @@ public function serialize($expand = null, array $fields = [], array $relations =
if ($creator->hasSpeaker()) {
$submitter = $creator->getSpeaker();
$values['submitter_id'] = $submitter->getId();
$values['submitter_full_name'] = $submitter->getFullName();
$values['submitter_full_name'] = $submitter->getFullName(true);
$values['submitter_email'] = $submitter->getEmail();
$values['submitter_title'] = $submitter->getTitle();
$values['submitter_company'] = $submitter->getCompany();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public function serialize($expand = null, array $fields = [], array $relations =
$owner_name = [];
$owner_email = [];
foreach($code->getOwners() as $owner){
$owner_name[] = $owner->getSpeaker()->getFullName();
$owner_name[] = $owner->getSpeaker()->getFullName(true);
$owner_email[] = $owner->getSpeaker()->getEmail();

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public function serialize($expand = null, array $fields = [], array $relations =
$owner_name = [];
$owner_email = [];
foreach($code->getOwners() as $owner){
$owner_name[] = $owner->getSpeaker()->getFullName();
$owner_name[] = $owner->getSpeaker()->getFullName(true);
$owner_email[] = $owner->getSpeaker()->getEmail();

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@ public function serialize($expand = null, array $fields = [], array $relations =
if(!$speaker instanceof PresentationSpeaker) return [];

$values = parent::serialize($expand, $fields, $relations, $params);

if(in_array('first_name', $fields)) {
$values['first_name'] = $speaker->getFirstName(true);
}

if(in_array('last_name', $fields)) {
$values['last_name'] = $speaker->getLastName(true);
}

if(in_array("email", $fields))
$values['email'] = JsonUtils::toJsonString($speaker->getEmail());

Expand Down Expand Up @@ -92,4 +101,4 @@ public function serialize($expand = null, array $fields = [], array $relations =

return $values;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ final class AdminPresentationSpeakerSerializer extends PresentationSpeakerSerial
'summit_assistance',
'registration_code',
];

protected function checkDataPermissions(PresentationSpeaker $speaker, array $values):array{
return $values;
}
Expand All @@ -64,6 +64,15 @@ public function serialize($expand = null, array $fields = [], array $relations =
$values = parent::serialize($expand, $fields, $relations, $params);
$summit = isset($params['summit'])? $params['summit']:null;


if(in_array('first_name', $fields)) {
$values['first_name'] = $speaker->getFirstName(true);
}

if(in_array('last_name', $fields)) {
$values['last_name'] = $speaker->getLastName(true);
}

if(in_array("email", $fields)) {
$application_type = $this->resource_server_context->getApplicationType();
// choose email serializer depending on user permissions
Expand Down Expand Up @@ -214,4 +223,4 @@ public function serialize($expand = null, array $fields = [], array $relations =
}
return $values;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,23 +83,6 @@ public function serialize($expand = null, array $fields = [], array $relations =

$values = parent::serialize($expand, $fields, $relations, $params);

if (
(empty($values['first_name']) || empty($values['last_name']))
&& in_array('first_name', $fields) && in_array('last_name', $fields)
) {

$first_name = '';
$last_name = '';
if ($speaker->hasMember()) {
$member = $speaker->getMember();
$first_name = $member->getFirstName();
$last_name = $member->getLastName();
}
$values['first_name'] = $first_name;
$values['last_name'] = $last_name;
}


if(in_array("email", $fields)) {
$application_type = $this->resource_server_context->getApplicationType();
// choose email serializer depending on user permissions
Expand All @@ -111,4 +94,4 @@ public function serialize($expand = null, array $fields = [], array $relations =

return $values;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -350,54 +350,15 @@ public function serialize($expand = null, array $fields = [], array $relations =
protected function checkDataPermissions(PresentationSpeaker $speaker, array $values):array{

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The rationale for dropping the isPublicProfileShowBio() block is that these are fields the speaker populated themselves. I verified that holds for bio, company, state, country, title, languages, other_presentation_links, areas_of_expertise, travel_preferences, active_involvements, organizational_roles, irc and twitter — no Member fallback in their getters.

But three of the now-unmasked keys are read straight off the linked Member, not the speaker:

These are borrowed account data, the same category the second commit gates behind Rule 9 for name and photo, yet they received no equivalent gate — so they are now returned unmasked regardless of the account toggle. testBioGatedSpeakerFieldsAreNotMaskedWhenAccountBioToggleIsOff locks that in with assertSame('Female', $values['gender']).

// permissions check

if(!$speaker->isPublicProfileShowBio())
{
if(isset($values['bio'])) $values['bio'] = '';
if(isset($values['gender'])) $values['gender'] = '';
if(isset($values['company'])) $values['company'] = '';
if(isset($values['state'])) $values['state'] = '';
if(isset($values['country'])) $values['country'] = '';
if(isset($values['title'])) $values['title'] = '';

if(isset($values['affiliations'])) $values['affiliations'] = [];
if(isset($values['languages'])) $values['languages'] = [];
if(isset($values['other_presentation_links'])) $values['other_presentation_links'] = [];
if(isset($values['areas_of_expertise'])) $values['areas_of_expertise'] = [];
if(isset($values['travel_preferences'])) $values['travel_preferences'] = [];
if(isset($values['active_involvements'])) $values['active_involvements'] = [];
if(isset($values['organizational_roles'])) $values['organizational_roles'] = [];
if(isset($values['badge_features'])) $values['badge_features'] = [];
}

if(!$speaker->isPublicProfileShowEmail())
{
if(isset($values['email'])) $values['email'] = '';
}

if(!$speaker->isPublicProfileShowSocialMediaInfo())
{
if(isset($values['irc'])) $values['irc'] = '';
if(isset($values['twitter'])) $values['twitter'] = '';
}

if(!$speaker->isPublicProfileShowPhoto())
{
if(isset($values['pic'])) $values['pic'] = Config::get("app.default_profile_image", null);
if(isset($values['big_pic'])) $values['big_pic'] = Config::get("app.default_profile_image", null);
}

/*
* relax full name restriction for signage
if(!$speaker->isPublicProfileShowFullname())
{
if(isset($values['last_name'])) $values['last_name'] = '';
}
*/

// phone_number is never public regardless of the target speaker's own account
// visibility toggle - see policy/profile-data-handling.md Rule 4.
if(isset($values['phone_number'])) $values['phone_number'] = '';

return $values;
}
}
}
20 changes: 11 additions & 9 deletions app/Models/Foundation/Summit/Speakers/PresentationSpeaker.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,10 +207,10 @@ class PresentationSpeaker extends SilverstripeBaseModel
/**
* @return string|null
*/
public function getFirstName():?string
public function getFirstName(bool $override_permission=false):?string
{
$res = $this->first_name;
if(empty($res) && $this->hasMember()){
if(empty($res) && ($this->isPublicProfileShowFullname() || $override_permission) && $this->hasMember()){
$res = $this->member->getFirstName();
}
return $res;
Expand All @@ -225,12 +225,13 @@ public function setFirstName(string $first_name):void
}

/**
* @param bool $override_permission
* @return string|null
*/
public function getLastName():?string
public function getLastName(bool $override_permission=false):?string
{
$res = $this->last_name;
if(empty($res) && $this->hasMember()){
if(empty($res) && ($this->isPublicProfileShowFullname() || $override_permission) && $this->hasMember()){
$res = $this->member->getLastName();
}
return $res;
Expand Down Expand Up @@ -1792,16 +1793,17 @@ public function setRegistrationRequest($registration_request)
}

/**
* @return string
* @param bool $override_permission
* @return string|null
*/
public function getFullName(): ?string
public function getFullName(bool $override_permission=false): ?string
{
$fullname = $this->first_name;
if (!empty($this->last_name)) {
if (!empty($fullname)) $fullname .= ' ';
$fullname .= $this->last_name;
}
if (empty($fullname) && $this->hasMember()) {
if (empty($fullname) && ($this->isPublicProfileShowFullname() || $override_permission) && $this->hasMember()) {
$fullname = $this->member->getFullName();
}

Expand Down Expand Up @@ -2342,7 +2344,7 @@ public function getBigProfilePhotoUrl(): ?string
if ($this->hasBigPhoto() && $photo = $this->getBigPhoto()) {
$photoUrl = $photo->getUrl();
}
if (empty($photoUrl) && $this->hasMember() && $this->member->hasPhoto() && $photo = $this->member->getPhoto()) {
if (empty($photoUrl) && $this->isPublicProfileShowPhoto() && $this->hasMember() && $this->member->hasPhoto() && $photo = $this->member->getPhoto()) {
$photoUrl = $photo->getUrl();
}

Expand All @@ -2367,7 +2369,7 @@ public function getProfilePhotoUrl(): ?string
if ($this->hasPhoto() && $photo = $this->getPhoto()) {
$photoUrl = $photo->getUrl();
}
if (empty($photoUrl) && $this->hasMember() && $this->member->hasPhoto() && $photo = $this->member->getPhoto()) {
if (empty($photoUrl) && $this->isPublicProfileShowPhoto() && $this->hasMember() && $this->member->hasPhoto() && $photo = $this->member->getPhoto()) {
$photoUrl = $photo->getUrl();
}
} catch (\Exception $ex) {
Expand Down
Loading
Loading