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

Fix error when inviting already invited user #2433

Merged
merged 9 commits into from
Jun 22, 2017
123 changes: 59 additions & 64 deletions server/methods/accounts/accounts.js
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,64 @@ export function inviteShopMember(shopId, email, name) {
currentUserName = "Admin";
}

// Compile Email with SSR
const tpl = "accounts/inviteShopMember";
const subject = "accounts/inviteShopMember/subject";
SSR.compileTemplate(tpl, Reaction.Email.getTemplate(tpl));
SSR.compileTemplate(subject, Reaction.Email.getSubject(tpl));

// Get shop logo, if available. If not, use default logo from file-system
let emailLogo;
if (Array.isArray(shop.brandAssets)) {
const brandAsset = _.find(shop.brandAssets, (asset) => asset.type === "navbarBrandImage");
const mediaId = Media.findOne(brandAsset.mediaId);
emailLogo = path.join(Meteor.absoluteUrl(), mediaId.url());
} else {
emailLogo = Meteor.absoluteUrl() + "resources/email-templates/shop-logo.png";
}

const token = Random.id();

const dataForEmail = {
// Shop Data
shop: shop,
contactEmail: shop.emails[0].address,
homepage: Meteor.absoluteUrl(),
emailLogo: emailLogo,
copyrightDate: moment().format("YYYY"),
legalName: shop.addressBook[0].company,
physicalAddress: {
address: shop.addressBook[0].address1 + " " + shop.addressBook[0].address2,
city: shop.addressBook[0].city,
region: shop.addressBook[0].region,
postal: shop.addressBook[0].postal
},
shopName: shop.name,
socialLinks: {
display: true,
facebook: {
display: true,
icon: Meteor.absoluteUrl() + "resources/email-templates/facebook-icon.png",
link: "https://www.facebook.com"
},
googlePlus: {
display: true,
icon: Meteor.absoluteUrl() + "resources/email-templates/google-plus-icon.png",
link: "https://plus.google.com"
},
twitter: {
display: true,
icon: Meteor.absoluteUrl() + "resources/email-templates/twitter-icon.png",
link: "https://www.twitter.com"
}
},
// Account Data
user: Meteor.user(),
currentUserName,
invitedUserName: name,
url: MeteorAccounts.urls.enrollAccount(token)
};

const user = Meteor.users.findOne({
"emails.address": email
});
Expand All @@ -499,84 +557,21 @@ export function inviteShopMember(shopId, email, name) {
throw new Error("Can't find user");
}

const token = Random.id();

Meteor.users.update(userId, {
$set: {
"services.password.reset": { token, email, when: new Date() },
"name": name
}
});

// Get shop logo, if available. If not, use default logo from file-system
let emailLogo;
if (Array.isArray(shop.brandAssets)) {
const brandAsset = _.find(shop.brandAssets, (asset) => asset.type === "navbarBrandImage");
const mediaId = Media.findOne(brandAsset.mediaId);
emailLogo = path.join(Meteor.absoluteUrl(), mediaId.url());
} else {
emailLogo = Meteor.absoluteUrl() + "resources/email-templates/shop-logo.png";
}

const dataForEmail = {
// Shop Data
shop: shop,
contactEmail: shop.emails[0].address,
homepage: Meteor.absoluteUrl(),
emailLogo: emailLogo,
copyrightDate: moment().format("YYYY"),
legalName: shop.addressBook[0].company,
physicalAddress: {
address: shop.addressBook[0].address1 + " " + shop.addressBook[0].address2,
city: shop.addressBook[0].city,
region: shop.addressBook[0].region,
postal: shop.addressBook[0].postal
},
shopName: shop.name,
socialLinks: {
display: true,
facebook: {
display: true,
icon: Meteor.absoluteUrl() + "resources/email-templates/facebook-icon.png",
link: "https://www.facebook.com"
},
googlePlus: {
display: true,
icon: Meteor.absoluteUrl() + "resources/email-templates/google-plus-icon.png",
link: "https://plus.google.com"
},
twitter: {
display: true,
icon: Meteor.absoluteUrl() + "resources/email-templates/twitter-icon.png",
link: "https://www.twitter.com"
}
},
// Account Data
user: Meteor.user(),
currentUserName,
invitedUserName: name,
url: MeteorAccounts.urls.enrollAccount(token)
};

// Compile Email with SSR
const tpl = "accounts/inviteShopMember";
const subject = "accounts/inviteShopMember/subject";
SSR.compileTemplate(tpl, Reaction.Email.getTemplate(tpl));
SSR.compileTemplate(subject, Reaction.Email.getSubject(tpl));

Reaction.Email.send({
to: email,
from: `${shop.name} <${shop.emails[0].address}>`,
subject: SSR.render(subject, dataForEmail),
html: SSR.render(tpl, dataForEmail)
});
} else {
Reaction.Email.send({
to: email,
from: `${shop.name} <${shop.emails[0].address}>`,
subject: SSR.render(subject, dataForEmail),
html: SSR.render(tpl, dataForEmail)
});
throw new Meteor.Error(409, "User already exists");
Copy link
Collaborator

Choose a reason for hiding this comment

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

Needs i18n

}
return true;
}
Expand Down