diff --git a/website/client/src/assets/images/g1g1-notif.png b/website/client/src/assets/images/g1g1-notif.png new file mode 100644 index 0000000000..398b4861f3 Binary files /dev/null and b/website/client/src/assets/images/g1g1-notif.png differ diff --git a/website/client/src/assets/images/g1g1-send.png b/website/client/src/assets/images/g1g1-send.png new file mode 100644 index 0000000000..b92b753402 Binary files /dev/null and b/website/client/src/assets/images/g1g1-send.png differ diff --git a/website/client/src/assets/images/subscriber-food.png b/website/client/src/assets/images/subscriber-food.png new file mode 100644 index 0000000000..88fc52f7cc Binary files /dev/null and b/website/client/src/assets/images/subscriber-food.png differ diff --git a/website/client/src/assets/scss/typography.scss b/website/client/src/assets/scss/typography.scss index 9dceb3ed35..a9caa6b285 100644 --- a/website/client/src/assets/scss/typography.scss +++ b/website/client/src/assets/scss/typography.scss @@ -61,7 +61,7 @@ h3 { font-size: 16px; line-height: 1.5; color: $gray-50; - margin-bottom: 9px; + margin-bottom: 4px; } h4 { diff --git a/website/client/src/assets/svg/apple-pay-logo.svg b/website/client/src/assets/svg/apple-pay-logo.svg new file mode 100644 index 0000000000..a84fe5dd4a --- /dev/null +++ b/website/client/src/assets/svg/apple-pay-logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/client/src/assets/svg/calendar-purple.svg b/website/client/src/assets/svg/calendar-purple.svg new file mode 100644 index 0000000000..337daf1535 --- /dev/null +++ b/website/client/src/assets/svg/calendar-purple.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/website/client/src/assets/svg/close-teal.svg b/website/client/src/assets/svg/close-teal.svg new file mode 100644 index 0000000000..e098940af2 --- /dev/null +++ b/website/client/src/assets/svg/close-teal.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/website/client/src/assets/svg/gift-purple.svg b/website/client/src/assets/svg/gift-purple.svg new file mode 100644 index 0000000000..42753ce9c0 --- /dev/null +++ b/website/client/src/assets/svg/gift-purple.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/website/client/src/assets/svg/google-pay-logo.svg b/website/client/src/assets/svg/google-pay-logo.svg new file mode 100644 index 0000000000..572b49dfb2 --- /dev/null +++ b/website/client/src/assets/svg/google-pay-logo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/website/client/src/assets/svg/group.svg b/website/client/src/assets/svg/group.svg deleted file mode 100644 index 4bfabce2e3..0000000000 --- a/website/client/src/assets/svg/group.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/website/client/src/assets/svg/habitica-logo-purple.svg b/website/client/src/assets/svg/habitica-logo-purple.svg new file mode 100644 index 0000000000..eb32b8caaf --- /dev/null +++ b/website/client/src/assets/svg/habitica-logo-purple.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/website/client/src/assets/svg/paypal-logo.svg b/website/client/src/assets/svg/paypal-logo.svg new file mode 100644 index 0000000000..e478d8a310 --- /dev/null +++ b/website/client/src/assets/svg/paypal-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/website/client/src/assets/svg/subscriber-gems.svg b/website/client/src/assets/svg/subscriber-gems.svg new file mode 100644 index 0000000000..d3d3b57558 --- /dev/null +++ b/website/client/src/assets/svg/subscriber-gems.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/client/src/assets/svg/subscriber-hourglasses.svg b/website/client/src/assets/svg/subscriber-hourglasses.svg new file mode 100644 index 0000000000..f2a1aac016 --- /dev/null +++ b/website/client/src/assets/svg/subscriber-hourglasses.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/client/src/components/header/menu.vue b/website/client/src/components/header/menu.vue index 2084768eab..6d311bdd69 100644 --- a/website/client/src/components/header/menu.vue +++ b/website/client/src/components/header/menu.vue @@ -4,6 +4,7 @@ + {{ userGems }} @@ -719,6 +720,7 @@ import notificationMenu from './notificationsDropdown'; import profileModal from '../userMenu/profileModal'; import reportFlagModal from '../chat/reportFlagModal'; import sendGemsModal from '@/components/payments/sendGemsModal'; +import selectUserModal from '@/components/payments/selectUserModal'; import sync from '@/mixins/sync'; import userDropdown from './userDropdown'; @@ -730,6 +732,7 @@ export default { profileModal, reportFlagModal, sendGemsModal, + selectUserModal, userDropdown, }, mixins: [sync], @@ -787,9 +790,7 @@ export default { openPartyModal () { this.$root.$emit('bv::show::modal', 'create-party-modal'); }, - showBuyGemsModal (startingPage) { - this.$store.state.gemModalOptions.startingPage = startingPage; - + showBuyGemsModal () { Analytics.track({ hitType: 'event', eventCategory: 'button', diff --git a/website/client/src/components/header/notifications/g1g1.vue b/website/client/src/components/header/notifications/g1g1.vue new file mode 100644 index 0000000000..8149f0aac1 --- /dev/null +++ b/website/client/src/components/header/notifications/g1g1.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/website/client/src/components/header/notificationsDropdown.vue b/website/client/src/components/header/notificationsDropdown.vue index 0b8cd95546..e98daeff4e 100644 --- a/website/client/src/components/header/notificationsDropdown.vue +++ b/website/client/src/components/header/notificationsDropdown.vue @@ -147,6 +147,7 @@ import ACHIEVEMENT_JUST_ADD_WATER from './notifications/justAddWater'; import ACHIEVEMENT_LOST_MASTERCLASSER from './notifications/lostMasterclasser'; import ACHIEVEMENT_MIND_OVER_MATTER from './notifications/mindOverMatter'; import ONBOARDING_COMPLETE from './notifications/onboardingComplete'; +import GIFT_ONE_GET_ONE from './notifications/g1g1'; import OnboardingGuide from './onboardingGuide'; export default { @@ -176,6 +177,7 @@ export default { VERIFY_USERNAME, OnboardingGuide, ONBOARDING_COMPLETE, + GIFT_ONE_GET_ONE, }, data () { return { @@ -195,7 +197,7 @@ export default { // listed in the order they should appear in the notifications panel. // NOTE: Those not listed here won't be shown in the notification panel! handledNotifications: [ - 'NEW_STUFF', 'GROUP_TASK_NEEDS_WORK', + 'NEW_STUFF', 'GIFT_ONE_GET_ONE', 'GROUP_TASK_NEEDS_WORK', 'GUILD_INVITATION', 'PARTY_INVITATION', 'CHALLENGE_INVITATION', 'QUEST_INVITATION', 'GROUP_TASK_ASSIGNED', 'GROUP_TASK_APPROVAL', 'GROUP_TASK_APPROVED', 'GROUP_TASK_CLAIMED', 'NEW_MYSTERY_ITEMS', 'CARD_RECEIVED', diff --git a/website/client/src/components/header/userDropdown.vue b/website/client/src/components/header/userDropdown.vue index a07f5ae787..fc0ae7edb5 100644 --- a/website/client/src/components/header/userDropdown.vue +++ b/website/client/src/components/header/userDropdown.vue @@ -75,7 +75,7 @@ >{{ $t('logout') }}
  • - -
    -
    -
    -

    - {{ $t('subscriptionAlreadySubscribedLeadIn') }} -

    -
    -
    -
    -

    {{ $t("gemsPurchaseNote") }}

    -
    -
    -
    +

    - {{ $t('gemBenefitLeadin') }} + {{ $t('subscriptionAlreadySubscribedLeadIn') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('gemBenefit1') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('gemBenefit2') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('gemBenefit3') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('gemBenefit4') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - 20 -
    -
    - {{ $t('gems') }} -
    -
    - -
    -
    -
    -

    - {{ $t('choosePaymentMethod') }} -

    -
    -
    - - - -
    -
    -
    -
    -
    - {{ $t('buyGemsSupportsDevs') }} +

    {{ $t("gemsPurchaseNote") }}

    -
    -
    -
    -

    - {{ $t('subscriptionAlreadySubscribedLeadIn') }} -

    +
    +

    + {{ $t('gemBenefitLeadin') }} +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    {{ $t('gemBenefit1') }}

    +
    -
    -
    -

    +
    +
    +
    +
    +
    +
    +
    +

    {{ $t('gemBenefit2') }}

    -
    -
    -

    - {{ $t('subscriptionBenefitLeadin') }} -

    +
    +
    +
    +
    +
    +
    +
    +
    +

    {{ $t('gemBenefit3') }}

    +
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('subscriptionBenefit1') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('subscriptionBenefit2') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('subscriptionBenefit3') }}

    -
    +
    +
    +
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('subscriptionBenefit4') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('subscriptionBenefit5') }}

    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {{ $t('subscriptionBenefit6') }}

    -
    -
    +
    +

    {{ $t('gemBenefit4') }}

    -
    +
    +
    +
    +
    +
    -
    -
    - $ - 5 - .00 -
    -
    - {{ $t('everyMonth') }} -
    -
    -

    -
    - -
    -
    -
    -
    -
    - $ - 15 - .00 -
    -
    - {{ $t('everyXMonths', {interval: 3}) }} -
    -
    -

    -

    - -
    -
    -
    -
    -
    - $ - 30 - .00 -
    -
    - {{ $t('everyXMonths', {interval: 6}) }} -
    -
    -

    -

    - -
    -
    -
    -
    -
    - $ - 48 - .00 -
    -
    - {{ $t('everyYear') }} -
    -
    -

    -

    - -
    -
    -
    -
    -

    - {{ $t('choosePaymentMethod') }} -

    -
    - -
    - - - -
    -
    -
    -
    -
    - {{ $t('subscribeSupportsDevs') }} +
    +
    + 20
    +
    + {{ $t('gems') }} +
    +
    +
    +
    +

    + {{ $t('choosePaymentMethod') }} +

    +
    +
    + + + +
    +
    +
    +
    +
    +
    + {{ $t('buyGemsSupportsDevs') }} +
    +
    @@ -522,10 +210,6 @@ font-size: 16px; } - .benefits { - font-size: 14px; - } - .bubble { width: 32px; height: 32px; @@ -579,46 +263,6 @@ height: 56px; } - .muted { - color: #c3c0c7; - } - - .nav { - font-weight: bold; - background-color: $gray-600; - } - - .nav-item { - box-sizing: border-box; - display: inline-block; - font-size: 16px; - margin: 0rem; - padding: 1rem; - width: 7.5rem; - } - - .nav-item:hover, .nav-item.active { - color: #4f2a93; - border-bottom: 4px solid $purple-300; - cursor: pointer; - } - - .spacer { - height: 4em; - } - - .subscription-price { - font-family: Roboto Condensed; - font-size: 48px; - font-weight: bold; - color: #1ca372; - } - - .superscript { - font-size: 24px; - vertical-align: super; - } - .svg-icon.check { color: #bda8ff; width: 1rem; @@ -696,9 +340,6 @@ export default { }, computed: { ...mapState({ user: 'user.data' }), - startingPageOption () { - return this.$store.state.gemModalOptions.startingPage; - }, hasSubscription () { return Boolean(this.user.purchased.plan.customerId); }, @@ -708,11 +349,6 @@ export default { >= (this.user.purchased.plan.consecutive.gemCapExtra + this.planGemLimits.convCap); }, }, - watch: { - startingPageOption () { - this.selectedPage = this.$store.state.gemModalOptions.startingPage; - }, - }, methods: { close () { this.$root.$emit('bv::hide::modal', 'buy-gems'); diff --git a/website/client/src/components/payments/selectUserModal.vue b/website/client/src/components/payments/selectUserModal.vue new file mode 100644 index 0000000000..77f76a6e8d --- /dev/null +++ b/website/client/src/components/payments/selectUserModal.vue @@ -0,0 +1,220 @@ + + + + + + + diff --git a/website/client/src/components/payments/successModal.vue b/website/client/src/components/payments/successModal.vue index c2c04c410f..8d33203d8d 100644 --- a/website/client/src/components/payments/successModal.vue +++ b/website/client/src/components/payments/successModal.vue @@ -2,7 +2,6 @@ @@ -102,6 +101,10 @@ diff --git a/website/client/src/components/settings/subscriptionOptions.vue b/website/client/src/components/settings/subscriptionOptions.vue new file mode 100644 index 0000000000..a6f6b9deab --- /dev/null +++ b/website/client/src/components/settings/subscriptionOptions.vue @@ -0,0 +1,178 @@ + + + + + + + + diff --git a/website/client/src/mixins/payments.js b/website/client/src/mixins/payments.js index a1e900d47a..8d812aa080 100644 --- a/website/client/src/mixins/payments.js +++ b/website/client/src/mixins/payments.js @@ -284,6 +284,7 @@ export default { this.amazonPayments.group = null; }, cancelSubscriptionConfirm (config) { + if (config.canCancel === false) return; this.$root.$emit('habitica:cancel-subscription-confirm', config); }, async cancelSubscription (config) { diff --git a/website/client/src/store/actions/members.js b/website/client/src/store/actions/members.js index a9e80d55c3..d35e979043 100644 --- a/website/client/src/store/actions/members.js +++ b/website/client/src/store/actions/members.js @@ -31,6 +31,12 @@ export async function fetchMember (store, payload) { return response; } +export async function fetchMemberByUsername (store, payload) { + const url = `${apiv4Prefix}/members/username/${payload.username}`; + const response = await axios.get(url); + return response; +} + export async function getGroupInvites (store, payload) { let url = `${apiv4Prefix}/groups/${payload.groupId}/invites`; if (payload.includeAllPublicFields) { diff --git a/website/client/src/store/index.js b/website/client/src/store/index.js index 21bd4d58d8..1fe936a89d 100644 --- a/website/client/src/store/index.js +++ b/website/client/src/store/index.js @@ -114,9 +114,6 @@ export default function () { profileOptions: { startingPage: '', }, - gemModalOptions: { - startingPage: '', - }, rageModalOptions: { npc: '', }, diff --git a/website/common/locales/en/groups.json b/website/common/locales/en/groups.json index 8e788a6445..ee7280939d 100644 --- a/website/common/locales/en/groups.json +++ b/website/common/locales/en/groups.json @@ -176,7 +176,9 @@ "messageWroteIn": "<%= user %> wrote in <%= group %>", "msgPreviewHeading": "Message Preview", "leaderOnlyChallenges": "Only group leader can create challenges", - "sendGift": "Send Gift", + "sendGift": "Send a Gift", + "selectGift": "Select Gift", + "sendGiftToWhom": "Who would you like to send a gift to?", "inviteFriends": "Invite Friends", "partyMembersInfo": "Your Party currently has <%= memberCount %> members and <%= invitationCount %> pending invitations. The limit of members in a Party is <%= limitMembers %>. Invitations above this limit cannot be sent.", "inviteByEmail": "Invite by Email", @@ -245,6 +247,8 @@ "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party. ", "userWithIDNotFound": "User with id \"<%= userId %>\" not found.", "userWithUsernameNotFound": "User with username \"<%= username %>\" not found.", + "usernameOrUserId": "Username or User ID", + "userWithUsernameOrUserIdNotFound": "Username or User ID not found.", "userHasNoLocalRegistration": "User does not have a local registration (username, email, password).", "uuidsMustBeAnArray": "User ID invites must be an array.", "emailsMustBeAnArray": "Email address invites must be an array.", @@ -346,7 +350,7 @@ "aboutToJoinCancelledGroupPlan": "You are about to join a group with a canceled plan. You will NOT receive a free subscription.", "cannotChangeLeaderWithActiveGroupPlan": "You can not change the leader while the group has an active plan.", "leaderCannotLeaveGroupWithActiveGroup": "A leader can not leave a group while the group has an active plan", - "youHaveGroupPlan": "You have a free subscription because you are a member of a group that has a Group Plan. This will end when you are no longer in the group that has a Group Plan. Any months of extra subscription credit you have will be applied at the end of the Group Plan.", + "youHaveGroupPlan": "You have a free subscription because you are a member of a Group Plan. Your subscription will end when you are no longer a member of the Group Plan.", "cancelGroupSub": "Cancel Group Plan", "confirmCancelGroupPlan": "Are you sure you want to cancel your Group Plan? All Group members will lose their subscription and benefits.", "canceledGroupPlan": "Group Plan Canceled", @@ -490,5 +494,5 @@ "singleCompletion": "Single - Completes when any assigned user finishes", "allAssignedCompletion": "All - Completes when all assigned users finish", "suggestedGroup": "Suggested because you’re new to Habitica.", - "groupActivityNotificationTitle": "<%= user %> posted in <%= group %>" + "groupActivityNotificationTitle": "<%= user %> posted in <%= group %>" } diff --git a/website/common/locales/en/npc.json b/website/common/locales/en/npc.json index 89ff25574d..c6f56ad52a 100644 --- a/website/common/locales/en/npc.json +++ b/website/common/locales/en/npc.json @@ -120,6 +120,7 @@ "paymentYouSentGems": "You sent <%= name %>:", "paymentYouSentSubscription": "You sent <%= name %> a <%= months %>-months Habitica subscription.", "paymentSubBilling": "Your subscription will be billed $<%= amount %> every <%= months %> months.", + "paymentSubBillingWithMethod": "Your subscription will be billed $<%= amount %> every <%= months %> months via <%= paymentMethod %>.", "paymentAutoRenew": "This subscription will auto-renew until it is canceled. If you need to cancel this subscription, you can do so from your settings.", "paymentCanceledDisputes": "We’ve sent a cancelation confirmation to your email. If you don’t see the email, please contact us to prevent future billing disputes.", "success": "Success!", diff --git a/website/common/locales/en/settings.json b/website/common/locales/en/settings.json index c60c370c98..1e7bec50e1 100644 --- a/website/common/locales/en/settings.json +++ b/website/common/locales/en/settings.json @@ -138,7 +138,7 @@ "unsubscribeAllEmailsText": "By checking this box, I certify that I understand that by unsubscribing from all emails, Habitica will never be able to notify me via email about important changes to the site or my account.", "unsubscribeAllPush": "Check to Unsubscribe from all Push Notifications", "correctlyUnsubscribedEmailType": "Correctly unsubscribed from \"<%= emailType %>\" emails.", - "subscriptionRateText": "Recurring $<%= price %> USD every <%= months %> months", + "subscriptionRateText": "Recurring $<%= price %> USD every <%= months %> months", "recurringText": "recurring", "benefits": "Benefits", "coupon": "Coupon", @@ -175,14 +175,15 @@ "pushDeviceAlreadyAdded": "The user already has the push device", "pushDeviceNotFound": "The user has no push device with this id.", "pushDeviceRemoved": "Push device removed successfully.", - "buyGemsGoldCap": "Cap raised to <%= amount %>", + "buyGemsGoldCapBase": "Gem cap at <%= amount %>", + "buyGemsGoldCap": "Gem cap raised to <%= amount %>", "mysticHourglass": "<%= amount %> Mystic Hourglass", "mysticHourglassText": "Mystic Hourglasses allow purchasing a previous month's Mystery Item set.", "purchasedPlanId": "Recurring $<%= price %> USD each <%= months %> Month(s) (<%= plan %>)", - "purchasedPlanExtraMonths": "You have <%= months %> months of extra subscription credit.", + "purchasedPlanExtraMonths": "You have <%= months %> months of extra subscription credit.", "consecutiveSubscription": "Consecutive Subscription", "consecutiveMonths": "Consecutive Months:", - "gemCapExtra": "Gem Cap Extra:", + "gemCapExtra": "Gem Cap Bonus", "mysticHourglasses": "Mystic Hourglasses:", "mysticHourglassesTooltip": "Mystic Hourglasses", "paypal": "PayPal", diff --git a/website/common/locales/en/subscriber.json b/website/common/locales/en/subscriber.json index fba3c07486..ecbe84ef61 100644 --- a/website/common/locales/en/subscriber.json +++ b/website/common/locales/en/subscriber.json @@ -19,7 +19,8 @@ "supportDevsText": "Your subscription helps keep Habitica thriving and helps fund the development of new features. Thank you for your generosity!", "exclusiveJackalopePet": "Exclusive pet", "exclusiveJackalopePetText": "Get the Royal Purple Jackalope pet, available only to subscribers!", - "giftSubscription": "Want to gift a subscription to someone?", + "giftSubscription": "Want to gift the benefits of a subscription to someone else?", + "giftASubscription": "Gift a Subscription", "giftSubscriptionText1": "Open their profile! You can do this by clicking on their avatar in your party header or by clicking on their name in chat.", "giftSubscriptionText2": "Click on the gift icon in the top right of their profile.", "giftSubscriptionText3": "Select \"subscription\" and enter your payment information.", @@ -42,8 +43,8 @@ "manageSub": "Click to manage subscription", "cancelSub": "Cancel Subscription", "cancelSubInfoGoogle": "Please go to the \"Account\" > \"Subscriptions\" section of the Google Play Store app to cancel your subscription or to see your subscription's termination date if you have already cancelled it. This screen is not able to show you whether your subscription has been cancelled.", - "cancelSubInfoApple": "Please follow Apple's official instructions to cancel your subscription or to see your subscription's termination date if you have already cancelled it. This screen is not able to show you whether your subscription has been cancelled.", - "cancelSubInfoGroupPlan": "Because you have a free subscription from a Group Plan, you cannot cancel it. It will end when you are no longer in the Group. If you are the Group leader and want to cancel the entire Group Plan, you can do that from the group's \"Payment Details\" tab.", + "cancelSubInfoApple": "Please follow Apple's official instructions to cancel your subscription or to see your subscription's termination date if you have already cancelled it. This screen is not able to show you whether your subscription has been cancelled.", + "cancelSubInfoGroupPlan": "Because you have a free subscription from a Group Plan, you cannot cancel it. It will end when you are no longer a member of the Group Plan. If you are the Group leader and want to cancel the Group Plan, you can do that from the Group Plan’s “Group Billing” tab.", "canceledSubscription": "Canceled Subscription", "cancelingSubscription": "Canceling the subscription", "adminSub": "Administrator Subscriptions", @@ -177,7 +178,7 @@ "mysterySetwondercon": "Wondercon", - "subUpdateCard": "Update Card", + "subUpdateCard": "Update Credit Card", "subUpdateTitle": "Update", "subUpdateDescription": "Update the card to be charged.", "notEnoughHourglasses": "You don't have enough Mystic Hourglasses.", @@ -222,17 +223,29 @@ "gemBenefit3": "Exciting Quest chains that drop pet eggs.", "gemBenefit4": "Reset your avatar's Stat Points and change its Class.", "subscriptionBenefitLeadin": "Support Habitica by becoming a subscriber and you'll receive these useful benefits!", - "subscriptionBenefit1": "Alexander the Merchant will sell you Gems, for 20 Gold each!", + "subscriptionBenefit1": "Alexander the Merchant will now sell you Gems from the Market for 20 Gold each!", "subscriptionBenefit2": "Completed To-Dos and task history are available for longer.", - "subscriptionBenefit3": "Discover more items in Habitica with a doubled daily drop cap.", - "subscriptionBenefit4": "Unique cosmetic items for your avatar each month.", - "subscriptionBenefit5": "Receive the exclusive Royal Purple Jackalope pet!", - "subscriptionBenefit6": "Earn Mystic Hourglasses for use in the Time Travelers' Shop!", + "subscriptionBenefit3": "Discover even more items in Habitica with a 2x daily drop-cap.", + "subscriptionBenefit4": "Unique cosmetic item for you to decorate your avatar each month.", + "subscriptionBenefit5": "Receive the Royal Purple Jackalope pet when you become a new subscriber.", + "subscriptionBenefit6": "Earn Mystic Hourglasses to purchase items in the Time Traveler’s Shop!", "haveCouponCode": "Do you have a coupon code?", "subscriptionAlreadySubscribedLeadIn": "Thanks for subscribing!", "subscriptionAlreadySubscribed1": "To see your subscription details and cancel, renew, or change your subscription, please go to User icon > Settings > Subscription.", "purchaseAll": "Purchase Set", - "gemsPurchaseNote": "Subscribers can buy gems for gold in the Market! For easy access, you can also pin the gem to your Rewards column.", - "gemsRemaining": "gems remaining", - "notEnoughGemsToBuy": "You are unable to buy that amount of gems" + "gemsPurchaseNote": "Subscribers can buy Gems for Gold in the Market! For easy access, you can also pin the Gem to your Rewards column.", + "gemsRemaining": "Gems remaining", + "notEnoughGemsToBuy": "You are unable to buy that amount of Gems", + "subscribersReceiveBenefits": "Subscribers receive these useful benefits!", + "monthlyMysteryItems": "Monthly Mystery Items", + "doubleDropCap": "Double the Drops", + "youAreSubscribed": "You are subscribed to Habitica", + "subscriptionCanceled": "Your subscription is canceled", + "subscriptionInactiveDate": "Your subscription benefits will become inactive on <%= date %>", + "subscriptionStats": "Subscription Stats", + "subMonths": "Sub Months", + "needToUpdateCard": "Need to update your card?", + "readyToResubscribe": "Are you ready to resubscribe?", + "cancelYourSubscription": "Cancel your subscription?", + "cancelSubAlternatives": "If you're having technical problems or Habitica doesn't seem to be working out for you, please consider contacting us. We want to help you get the most from Habitica." } diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js index 6e28ed2777..15423ce8a3 100644 --- a/website/server/models/userNotification.js +++ b/website/server/models/userNotification.js @@ -22,6 +22,7 @@ const NOTIFICATION_TYPES = [ 'GROUP_INVITE_ACCEPTED', 'SCORED_TASK', 'BOSS_DAMAGE', // Not used currently but kept to avoid validation errors + 'GIFT_ONE_GET_ONE', 'GUILD_PROMPT', 'GUILD_JOINED_ACHIEVEMENT', 'CHALLENGE_JOINED_ACHIEVEMENT',