Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new email domains should have a default profile visibility #7088

Merged
Merged
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
@@ -1,15 +1,18 @@
package org.orcid.core.manager.v3.impl;


import org.orcid.core.manager.ProfileEntityCacheManager;
import org.orcid.core.manager.v3.ProfileEmailDomainManager;
import org.orcid.core.manager.v3.read_only.impl.ProfileEmailDomainManagerReadOnlyImpl;
import org.orcid.jaxb.model.v3.release.common.Visibility;
import org.orcid.persistence.dao.EmailDao;
import org.orcid.persistence.dao.EmailDomainDao;
import org.orcid.persistence.dao.ProfileDao;
import org.orcid.persistence.dao.ProfileEmailDomainDao;
import org.orcid.persistence.jpa.entities.EmailDomainEntity;
import org.orcid.persistence.jpa.entities.EmailEntity;
import org.orcid.persistence.jpa.entities.ProfileEmailDomainEntity;
import org.orcid.persistence.jpa.entities.ProfileEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -34,7 +37,8 @@ public class ProfileEmailDomainManagerImpl extends ProfileEmailDomainManagerRead
@Resource(name = "emailDaoReadOnly")
protected EmailDao emailDaoReadOnly;

private static final String DEFAULT_DOMAIN_VISIBILITY = Visibility.PRIVATE.toString().toUpperCase();
@Resource
private ProfileEntityCacheManager profileEntityCacheManager;

@Transactional
public void updateEmailDomains(String orcid, org.orcid.pojo.ajaxForm.Emails newEmails) {
Expand Down Expand Up @@ -71,47 +75,16 @@ public void updateEmailDomains(String orcid, org.orcid.pojo.ajaxForm.Emails newE
public void processDomain(String orcid, String email) {
String domain = email.split("@")[1];
EmailDomainEntity domainInfo = emailDomainDao.findByEmailDomain(domain);
String domainVisibility = DEFAULT_DOMAIN_VISIBILITY;
// Check if email is professional
if (domainInfo != null && domainInfo.getCategory().equals(EmailDomainEntity.DomainCategory.PROFESSIONAL)) {
ProfileEmailDomainEntity existingDomain = profileEmailDomainDao.findByEmailDomain(orcid, domain);
// ADD NEW DOMAIN IF ONE DOESN'T EXIST
if (existingDomain == null) {
// Verify the user doesn't have more emails with that domain
List<EmailEntity> existingEmails = emailDaoReadOnly.findByOrcid(orcid, System.currentTimeMillis());
if(existingEmails != null && existingEmails.size() > 1) {
for(EmailEntity emailEntity : existingEmails) {
//If it is not the same emails that is being verified and it is verified
if(!email.equals(emailEntity.getEmail()) && emailEntity.getVerified()) {
try {
String emailEntityDomain = (emailEntity.getEmail() == null) ? null : (email.split("@")[1]);
// If one of the existing emails have the same domain as the email being verified check the visibility and select the less restrictive
if(domain.equals(emailEntityDomain)){
String entityVisibility = emailEntity.getVisibility();
domainVisibility = getLessRestrictiveVisibility(domainVisibility, entityVisibility);
}
} catch (Exception e) {
LOGGER.warn("Could not get email domain from email entity " + emailEntity.getEmail(), e);
}
}
}
}
ProfileEntity profile = profileEntityCacheManager.retrieve(orcid);
String domainVisibility = profile.getActivitiesVisibilityDefault();
profileEmailDomainDao.addEmailDomain(orcid, domain, domainVisibility);
}
}
}

private String getLessRestrictiveVisibility(String a, String b) {
String visibility = DEFAULT_DOMAIN_VISIBILITY;
if(Visibility.PUBLIC.name().equals(a) || Visibility.PUBLIC.name().equals(b)) {
visibility = Visibility.PUBLIC.name();
} else if(a.equals(b)) {
visibility = a;
} else if(Visibility.PRIVATE.name().equals(a)) {
visibility = b;
} else if(Visibility.PRIVATE.name().equals(b)) {
visibility = a;
}
return visibility;
}
}
Loading