From 547c87dee74cfa5b46f373e0bd3bab6d77e3207f Mon Sep 17 00:00:00 2001 From: Sabe Jones Date: Fri, 19 May 2017 14:45:11 -0500 Subject: [PATCH] Guild A/B test and Achievement (#8740) * WIP(guilds): AB test pester modal * WIP(AB-test): guild pester cont'd * fix(style): linting error * fix(AB-test): markModified and notif enum * fix(tests): update AB expectations * fix(modal): remove extra includes * feat(achievements): add Joined Guild cheevo Also removes unused achievement sprites, and properly saves counter used in A/B testing * fix(style): linting error from conflict --- .../v3/integration/groups/POST-groups.test.js | 12 +++++++ .../groups/POST-groups_groupId_join.test.js | 16 +++++++-- ...POST-group_tasks_id_approve_userId.test.js | 6 ++-- ...OST-group_tasks_id_score_direction.test.js | 16 ++++----- .../user/auth/POST-register_local.test.js | 1 - .../user/auth/POST-user_auth_social.test.js | 4 +-- .../achievements/achievement-armor.png | Bin 1383 -> 0 bytes .../achievements/achievement-bewilder.png | Bin 3427 -> 0 bytes .../achievements/achievement-birthday.png | Bin 3350 -> 0 bytes .../achievements/achievement-boot.png | Bin 1382 -> 0 bytes .../achievements/achievement-bow.png | Bin 1361 -> 0 bytes .../achievements/achievement-burnout.png | Bin 720 -> 0 bytes .../achievements/achievement-cactus.png | Bin 1352 -> 0 bytes .../achievements/achievement-cake.png | Bin 1362 -> 0 bytes .../achievements/achievement-cave.png | Bin 1301 -> 0 bytes .../achievements/achievement-coffin.png | Bin 1351 -> 0 bytes .../achievements/achievement-comment.png | Bin 1324 -> 0 bytes .../achievement-costumeContest.png | Bin 3392 -> 0 bytes .../achievements/achievement-dilatory.png | Bin 3466 -> 0 bytes .../achievements/achievement-firefox.png | Bin 1404 -> 0 bytes .../achievements/achievement-greeting.png | Bin 3333 -> 0 bytes ...ment-alpha.png => achievement-guild2x.png} | Bin 3226 -> 3498 bytes .../achievement-habitBirthday.png | Bin 3449 -> 0 bytes .../achievements/achievement-habiticaDay.png | Bin 3327 -> 0 bytes .../achievements/achievement-heart.png | Bin 1359 -> 0 bytes .../achievements/achievement-ninja.png | Bin 1404 -> 0 bytes .../achievements/achievement-nye.png | Bin 3446 -> 0 bytes .../achievements/achievement-partyOn.png | Bin 3844 -> 0 bytes .../achievements/achievement-partyUp.png | Bin 3430 -> 0 bytes .../achievements/achievement-perfect.png | Bin 1644 -> 0 bytes .../achievements/achievement-rat.png | Bin 1405 -> 0 bytes .../achievements/achievement-seafoam.png | Bin 3311 -> 0 bytes .../achievements/achievement-shield.png | Bin 1353 -> 0 bytes .../achievements/achievement-shinySeed.png | Bin 3399 -> 0 bytes .../achievements/achievement-snowball.png | Bin 1536 -> 0 bytes .../achievement-spookySparkles.png | Bin 3431 -> 0 bytes .../achievements/achievement-stoikalm.png | Bin 3373 -> 0 bytes .../achievements/achievement-sun.png | Bin 1340 -> 0 bytes .../achievements/achievement-sword.png | Bin 1308 -> 0 bytes .../achievements/achievement-thankyou.png | Bin 3436 -> 0 bytes .../achievements/achievement-thermometer.png | Bin 1296 -> 0 bytes .../achievements/achievement-tree.png | Bin 1347 -> 0 bytes .../achievements/achievement-triadbingo.png | Bin 3516 -> 0 bytes .../achievement-ultimate-healer.png | Bin 3241 -> 0 bytes .../achievement-ultimate-mage.png | Bin 3349 -> 0 bytes .../achievement-ultimate-rogue.png | Bin 3303 -> 0 bytes .../achievement-ultimate-warrior.png | Bin 1403 -> 0 bytes .../achievements/achievement-valentine.png | Bin 3402 -> 0 bytes .../achievements/achievement-wolf.png | Bin 755 -> 0 bytes .../spritesmith_large/scenes/scene_guilds.png | Bin 0 -> 15822 bytes .../js/controllers/notificationCtrl.js | 20 +++++++++-- website/common/locales/en/groups.json | 4 ++- website/common/locales/en/testing.json | 7 ++++ website/common/script/content/achievements.js | 5 +++ website/common/script/libs/achievements.js | 1 + website/server/controllers/api-v3/groups.js | 16 +++++++++ website/server/controllers/api-v3/tasks.js | 12 +++++++ website/server/controllers/api-v3/user.js | 2 ++ website/server/models/user/hooks.js | 24 ++++++++++---- website/server/models/user/schema.js | 2 +- website/server/models/userNotification.js | 2 ++ website/views/shared/modals/achievements.jade | 13 +++++++- website/views/shared/modals/index.jade | 1 + website/views/shared/modals/testing.jade | 31 ++++++++++++++++++ 64 files changed, 167 insertions(+), 28 deletions(-) delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-armor.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-bewilder.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-birthday.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-boot.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-bow.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-burnout.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-cactus.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-cake.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-cave.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-coffin.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-comment.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-costumeContest.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-dilatory.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-firefox.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-greeting.png rename website/assets/sprites/spritesmith/achievements/{achievement-alpha.png => achievement-guild2x.png} (76%) delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-habitBirthday.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-habiticaDay.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-heart.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-ninja.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-nye.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-partyOn.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-partyUp.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-perfect.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-rat.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-seafoam.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-shield.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-shinySeed.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-snowball.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-spookySparkles.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-stoikalm.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-sun.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-sword.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-thankyou.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-thermometer.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-tree.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-triadbingo.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-ultimate-healer.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-ultimate-mage.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-ultimate-rogue.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-ultimate-warrior.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-valentine.png delete mode 100644 website/assets/sprites/spritesmith/achievements/achievement-wolf.png create mode 100644 website/assets/sprites/spritesmith_large/scenes/scene_guilds.png create mode 100644 website/common/locales/en/testing.json create mode 100644 website/views/shared/modals/testing.jade diff --git a/test/api/v3/integration/groups/POST-groups.test.js b/test/api/v3/integration/groups/POST-groups.test.js index ad8f7a6c92..a5471a0166 100644 --- a/test/api/v3/integration/groups/POST-groups.test.js +++ b/test/api/v3/integration/groups/POST-groups.test.js @@ -74,6 +74,18 @@ describe('POST /group', () => { expect(updatedUser.guilds).to.include(guild._id); }); + it('awards the Joined Guild achievement', async () => { + await user.post('/groups', { + name: 'some guild', + type: 'guild', + privacy: 'public', + }); + + let updatedUser = await user.get('/user'); + + expect(updatedUser.achievements.joinedGuild).to.eql(true); + }); + context('public guild', () => { it('creates a group', async () => { let groupName = 'Test Public Guild'; diff --git a/test/api/v3/integration/groups/POST-groups_groupId_join.test.js b/test/api/v3/integration/groups/POST-groups_groupId_join.test.js index 13572f79bb..d6fe6a7a6d 100644 --- a/test/api/v3/integration/groups/POST-groups_groupId_join.test.js +++ b/test/api/v3/integration/groups/POST-groups_groupId_join.test.js @@ -68,6 +68,12 @@ describe('POST /group/:groupId/join', () => { await expect(joiningUser.get(`/groups/${publicGuild._id}`)).to.eventually.have.property('memberCount', oldMemberCount + 1); }); + + it('awards Joined Guild achievement', async () => { + await joiningUser.post(`/groups/${publicGuild._id}/join`); + + await expect(joiningUser.get('/user')).to.eventually.have.deep.property('achievements.joinedGuild', true); + }); }); context('Joining a private guild', () => { @@ -147,8 +153,14 @@ describe('POST /group/:groupId/join', () => { }), }; - expect(inviter.notifications[0].type).to.eql('GROUP_INVITE_ACCEPTED'); - expect(inviter.notifications[0].data).to.eql(expectedData); + expect(inviter.notifications[1].type).to.eql('GROUP_INVITE_ACCEPTED'); + expect(inviter.notifications[1].data).to.eql(expectedData); + }); + + it('awards Joined Guild achievement', async () => { + await invitedUser.post(`/groups/${guild._id}/join`); + + await expect(invitedUser.get('/user')).to.eventually.have.deep.property('achievements.joinedGuild', true); }); }); }); diff --git a/test/api/v3/integration/tasks/groups/POST-group_tasks_id_approve_userId.test.js b/test/api/v3/integration/tasks/groups/POST-group_tasks_id_approve_userId.test.js index 0805255502..9972d6c33f 100644 --- a/test/api/v3/integration/tasks/groups/POST-group_tasks_id_approve_userId.test.js +++ b/test/api/v3/integration/tasks/groups/POST-group_tasks_id_approve_userId.test.js @@ -112,8 +112,8 @@ describe('POST /tasks/:id/approve/:userId', () => { await user.sync(); await member2.sync(); - expect(user.notifications.length).to.equal(1); - expect(user.notifications[0].type).to.equal('GROUP_TASK_APPROVAL'); + expect(user.notifications.length).to.equal(2); + expect(user.notifications[1].type).to.equal('GROUP_TASK_APPROVAL'); expect(member2.notifications.length).to.equal(1); expect(member2.notifications[0].type).to.equal('GROUP_TASK_APPROVAL'); @@ -122,7 +122,7 @@ describe('POST /tasks/:id/approve/:userId', () => { await user.sync(); await member2.sync(); - expect(user.notifications.length).to.equal(0); + expect(user.notifications.length).to.equal(1); expect(member2.notifications.length).to.equal(0); }); diff --git a/test/api/v3/integration/tasks/groups/POST-group_tasks_id_score_direction.test.js b/test/api/v3/integration/tasks/groups/POST-group_tasks_id_score_direction.test.js index 6d24f9c0a4..a707e445a2 100644 --- a/test/api/v3/integration/tasks/groups/POST-group_tasks_id_score_direction.test.js +++ b/test/api/v3/integration/tasks/groups/POST-group_tasks_id_score_direction.test.js @@ -52,14 +52,14 @@ describe('POST /tasks/:id/score/:direction', () => { await user.sync(); - expect(user.notifications.length).to.equal(1); - expect(user.notifications[0].type).to.equal('GROUP_TASK_APPROVAL'); - expect(user.notifications[0].data.message).to.equal(t('userHasRequestedTaskApproval', { + expect(user.notifications.length).to.equal(2); + expect(user.notifications[1].type).to.equal('GROUP_TASK_APPROVAL'); + expect(user.notifications[1].data.message).to.equal(t('userHasRequestedTaskApproval', { user: member.auth.local.username, taskName: updatedTask.text, taskId: updatedTask._id, }, 'cs')); // This test only works if we have the notification translated - expect(user.notifications[0].data.groupId).to.equal(guild._id); + expect(user.notifications[1].data.groupId).to.equal(guild._id); expect(updatedTask.group.approval.requested).to.equal(true); expect(updatedTask.group.approval.requestedDate).to.be.a('string'); // date gets converted to a string as json doesn't have a Date type @@ -82,14 +82,14 @@ describe('POST /tasks/:id/score/:direction', () => { await user.sync(); await member2.sync(); - expect(user.notifications.length).to.equal(1); - expect(user.notifications[0].type).to.equal('GROUP_TASK_APPROVAL'); - expect(user.notifications[0].data.message).to.equal(t('userHasRequestedTaskApproval', { + expect(user.notifications.length).to.equal(2); + expect(user.notifications[1].type).to.equal('GROUP_TASK_APPROVAL'); + expect(user.notifications[1].data.message).to.equal(t('userHasRequestedTaskApproval', { user: member.auth.local.username, taskName: updatedTask.text, taskId: updatedTask._id, })); - expect(user.notifications[0].data.groupId).to.equal(guild._id); + expect(user.notifications[1].data.groupId).to.equal(guild._id); expect(member2.notifications.length).to.equal(1); expect(member2.notifications[0].type).to.equal('GROUP_TASK_APPROVAL'); diff --git a/test/api/v3/integration/user/auth/POST-register_local.test.js b/test/api/v3/integration/user/auth/POST-register_local.test.js index bb2f588bab..baf7bf3fa4 100644 --- a/test/api/v3/integration/user/auth/POST-register_local.test.js +++ b/test/api/v3/integration/user/auth/POST-register_local.test.js @@ -251,7 +251,6 @@ describe('POST /user/auth/local/register', () => { confirmPassword: password, }); - await expect(getProperty('users', user._id, '_ABtest')).to.eventually.be.a('string'); await expect(getProperty('users', user._id, '_ABtests')).to.eventually.be.a('object'); }); diff --git a/test/api/v3/integration/user/auth/POST-user_auth_social.test.js b/test/api/v3/integration/user/auth/POST-user_auth_social.test.js index 6ca68e1339..dc399c619c 100644 --- a/test/api/v3/integration/user/auth/POST-user_auth_social.test.js +++ b/test/api/v3/integration/user/auth/POST-user_auth_social.test.js @@ -83,7 +83,7 @@ describe('POST /user/auth/social', () => { network, }); - await expect(getProperty('users', user._id, '_ABtest')).to.eventually.be.a('string'); + await expect(getProperty('users', user._id, '_ABtests')).to.eventually.be.a('object'); }); }); @@ -139,7 +139,7 @@ describe('POST /user/auth/social', () => { network, }); - await expect(getProperty('users', user._id, '_ABtest')).to.eventually.be.a('string'); + await expect(getProperty('users', user._id, '_ABtests')).to.eventually.be.a('object'); }); }); }); diff --git a/website/assets/sprites/spritesmith/achievements/achievement-armor.png b/website/assets/sprites/spritesmith/achievements/achievement-armor.png deleted file mode 100644 index 7e90f0135f7af8ded249b94ab21dab2ce7ac0ce2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1383 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 FV1gvqX(<2z diff --git a/website/assets/sprites/spritesmith/achievements/achievement-birthday.png b/website/assets/sprites/spritesmith/achievements/achievement-birthday.png deleted file mode 100644 index 89720342de3f09b395ca3504e6fcae5add6feaac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3350 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 ZHip+N_M0;vKjQ`!a-Ob!F6*2UngG!{?I!>L diff --git a/website/assets/sprites/spritesmith/achievements/achievement-burnout.png b/website/assets/sprites/spritesmith/achievements/achievement-burnout.png deleted file mode 100644 index d9869947149310d7aa6a705913c9d49a0b6cb12b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 zcmV;>0x$iEP)KMd|FiP$c{*NLzeKk9guM9c?wEh3YI*}zR;fB(ixklwbp zh)fb@1Fr%uBQi<$)IMN8O!b~x-V`#$9ySP4*#Q7#Sq8F7 zwTnn;7LHB5p-Qu-XsI=77mn$l+45$vrQiVY>?Ii0s&gzn;$(@cd@}B$>9wrjUp}W+ zoV}tpIp;V!S!&7CnZPjgFr5J_vBV%q*@K5ZRPaXK)#g!o8&1Yu06^1gVHo~7Bg4=` z(`$iqj+Iz~bB=lBTk8u6vMd7tyn6FV15a<;n9c-N;%|43Q>;@)4j;F*z&!GEB2mG6 z9U(iQwO+3=2vT_fRV*itW9M{KGp}Su$+Rm7obH@q=t=8TQMBz(M>WK8toKIOF5Nwx zb4-KMY8GB60td$l!m~@vBR}6*lbhI}!Yk53k>f?L~Oq+b*5}0000r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgE9Q7kcwMtrfu{(;vmpg?9Ft&B0;#jA+~F^jtKHq+O?P!j;A|spm zSFhOncVrejtzu}3zwKulH@z}MJxk83tv3A5NXG$co$>U#wd*0o2kHR~4JbnEXAbaM&+ zeE0IqS#mq$tJZ%@5p#4FJE$GAPTA(xmq3rx=FMxD*}vZ2+FHgTe~DWM4fh3E3^ diff --git a/website/assets/sprites/spritesmith/achievements/achievement-cake.png b/website/assets/sprites/spritesmith/achievements/achievement-cake.png deleted file mode 100644 index 443af47d6d8aac4bad8a9989844967dcfbfd89b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1362 zcmeAS@N?(olHy`uVBq!ia0vp^5r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgE+-h!@m1v!7d$clYCf& z?y&y(F=6KR@6FRaCa+ndc#zSjpdl`Q(!)mO>p%P!+SZir4YPV*b)Dhpx`=>vo@%Z8 z4m@(~%-ua*)9{(aT%pROCz_Kor7w4DTubKtWHZ0$|KHEn%<2)L^V+_jetqkLST@%_ zPa&6M8sSCXFEMyAy}nz-Yb!TbFS0x0xxWujudMYGn>4&dg(mV4?+hb$`u<^ zuj_R>Bpuyhe4#Y-W~>g=H_i>owfiSm+T1@D&3v~*>hT-1sck_i*S$X8{A|{n8|-!c z5bKsB-*X-?^vJ%Fn!4_yX7T$uCyhcCmDXN=aB$)J&Mh7Z*Du6>xhr5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgE(^yZ-(+)s|C+CxbZWJ>i3Y-yc0^A8&nL0 zE8j46+o#?CnUb|S$Z5~{4^I}Kcgo?o_xoZ$XJmWjh5XZo^?UZQN-*U9R+`LsbT1#M Opz?I}b6Mw<&;$T2_1yOW diff --git a/website/assets/sprites/spritesmith/achievements/achievement-coffin.png b/website/assets/sprites/spritesmith/achievements/achievement-coffin.png deleted file mode 100644 index 417029737cfbfbab9cea28fadb99a73566d6a221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1351 zcmeAS@N?(olHy`uVBq!ia0vp^5r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgE`9I~~{kLU>E8d?`XDHYk+i|`- zR9r-e)#As>%%kT{>u_>ua-KW*TdnZP^7+?qr@T4sx`vD4`GeJ`n>*_3JlkKFUh5ML zG+lN=BjJ#9!h8YojXF$on!9I*uw3tF*Pd8A`QHt*?Yc&r>)+a`74STAd9a(`ML@jU zcs1A4({dlq{yMvg;h+>#y$&9oN;p&$2_eo#Qj%Gg0j?OL%okd(OSR zd*}0OTTc5{o+*>Su2cB)yd)QU>uN5B<&Qo+n0>RGo$n2YuG##l_n4P!-B*uhyq_3* z_2ZkP#*#|wY~4RepSQHBcu}l)GQT0V{h#N2U4cgrndhr~5SNdOXX0V7oo+toxj*Mi PP|@b;>gTe~DWM4fXbR{z diff --git a/website/assets/sprites/spritesmith/achievements/achievement-comment.png b/website/assets/sprites/spritesmith/achievements/achievement-comment.png deleted file mode 100644 index 5c8089b2e06a59bb5951c802f97b8960dfba9751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1324 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 diff --git a/website/assets/sprites/spritesmith/achievements/achievement-firefox.png b/website/assets/sprites/spritesmith/achievements/achievement-firefox.png deleted file mode 100644 index e8478444ccd0f78ef7a3cd3c4aba2616d6d389e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1404 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 P00000NkvXXu0mjf@Ju<# diff --git a/website/assets/sprites/spritesmith/achievements/achievement-alpha.png b/website/assets/sprites/spritesmith/achievements/achievement-guild2x.png similarity index 76% rename from website/assets/sprites/spritesmith/achievements/achievement-alpha.png rename to website/assets/sprites/spritesmith/achievements/achievement-guild2x.png index dcf4e8b9bfc17e91cb76f1015ce20676024402e2..90f749c1efb68862eed592ba9cc0750d2d8f5b46 100644 GIT binary patch delta 795 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 JPDHLkV1k)XJYfI; diff --git a/website/assets/sprites/spritesmith/achievements/achievement-heart.png b/website/assets/sprites/spritesmith/achievements/achievement-heart.png deleted file mode 100644 index e3cee3e8f47d46ea0c8c196ebbd11435c5dc7dbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1359 zcmeAS@N?(olHy`uVBq!ia0vp^5r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgEr&|nNaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z=8ioV%fP^R(9^{+ zq~g|^u)SV~14Qzixngy898r95?cm9SiVvE9Fzsu4@ZgT)2hm?lwG*7!+Wq)$vas*w zDAnX}^S|`|+ivye&)7aXah^TcM=k4s$_Ho1b2VO`_-^Y?syT>rjjXWY5% z=O*q*6mmcC!0>^clJBFf91o;^l$aSd+Ly)8o8UWD{+8L-=p(NJpG+#6TFq2ZIQyS{ z`OyvCTm1JnC@b!n@o(=P<;>gFB@^YYzW4pG{I~z9+Ul#{XDm57!$eU0&6S}1#_rNT z?zflty~`9Td-#Z@fN|4-!lQfsEV-^Q?SDm|^~An^26HCIKRxYgk!mzavG5ABpHs18 zQ-Dor$yVXM-1W?QPc*(+I_6ZK^B}`p&s~V%}JgTe~DWM4f2T1*| diff --git a/website/assets/sprites/spritesmith/achievements/achievement-ninja.png b/website/assets/sprites/spritesmith/achievements/achievement-ninja.png deleted file mode 100644 index f9214837d796affff9e7383d038ce0cbf7ddd5aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1404 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 Y09*KkyQ}unK>z>%07*qoM6N<$f^AoI>i_@% diff --git a/website/assets/sprites/spritesmith/achievements/achievement-partyOn.png b/website/assets/sprites/spritesmith/achievements/achievement-partyOn.png deleted file mode 100644 index d3362c6fcd209017eb06525c106b441980eb1abc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3844 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 diff --git a/website/assets/sprites/spritesmith/achievements/achievement-partyUp.png b/website/assets/sprites/spritesmith/achievements/achievement-partyUp.png deleted file mode 100644 index 7918337362b683d858bf54d3faa92054b47af4a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3430 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 IM6N<$g4jf5v;Y7A diff --git a/website/assets/sprites/spritesmith/achievements/achievement-perfect.png b/website/assets/sprites/spritesmith/achievements/achievement-perfect.png deleted file mode 100644 index b9c9afafe1d27809909b6c21500f9de59a5b2692..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1644 zcmV-y29x=TP)4Tx065EyRo!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p z6IJYPoM>9&LQ_WlK0^#2wj zPpi6NX?f6!#i_QAd0M&1rjtka&Y$0pC`L_$hvOOZW#oJh#~YJuVYUsEEK*d2n}rvP zQ;T8SSInTBO{An{X9tSHCDRyan_cN58;`WBN1p}sUVXi9;qzsL`7*-cc*bT|+HUIj zQIZ(47G2MPSdkJmpkz&+Q@wO_^n0000r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgEX|1HEW&oaOA``qGp*Q;NOxn9hao_zAj`KtM;k?V8ww|6=;n7_Ue zQ(to`y3>b=_s_oDvu7V)ykx4zrURxQ%BHh?34J}g^wGC0q4Ug)*AJ9$pRe}kczD#m zd;Q1#N6yJ2>RNvF6HP};okKFhyz^|p$)W24%0AGCK|^?o#COJ>BkH?B*r z`aj>fospAAkXxXC`tu{7m8@3UUs=azeflQ<)hgFTjZb86@7u?l-BTC&=s@3^8_Lfv z|6K5{`45jr$Lag+TVmpM`SR9kO*+LL?q{`;LFDR;<|*=uTTV!>7Wa~wV!5d5U1dSd zbC15_xyq9rrZ`SraoqZhq{Afbr`q2hWj+o(_)a;qX2V*se~QN+@_hA9*?F`rVD}tP zpWkv1DyB?x707bYcaceNc;qPRsUhL=FPYaYDL-+i-!miU&R?eT^Gml}O_5@rduQ`4 zIYovQGPf71a9hp`z9IDc5NG8<&UB|(j%iiKCj%M^BBm~MJ|x=CG+}SAINy|x**QIn zBd@%wO0N#fzjsnb%U9+3{)X43y!WbJW-HlBSd_es|8nyX=aY*pHG&6C?e_d*m0);x Wtf;i=!MeAg0@2ge&t;ucLK6T4WD4T| diff --git a/website/assets/sprites/spritesmith/achievements/achievement-seafoam.png b/website/assets/sprites/spritesmith/achievements/achievement-seafoam.png deleted file mode 100644 index ea9e917b84b6cc45655384b10e92b111a06296e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3311 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 UtFBl3`~wwkp00i_>zopr0Oi=_i2wiq diff --git a/website/assets/sprites/spritesmith/achievements/achievement-shinySeed.png b/website/assets/sprites/spritesmith/achievements/achievement-shinySeed.png deleted file mode 100644 index 679883fd8fa62c7bc2ef6aaa0f4cfc84d49d877c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3399 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 diff --git a/website/assets/sprites/spritesmith/achievements/achievement-snowball.png b/website/assets/sprites/spritesmith/achievements/achievement-snowball.png deleted file mode 100644 index a028c17fab916320989b57ce638c8359111907c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1536 zcmeAS@N?(olHy`uVBq!ia0vp^5r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgE|Z5PFSp>IEf++ybD@E~!PCWvMA{Mftf3U{70R;&h9t8&30} zdQ)(_#Q>*XeV}9XK~ako)i5Do`T;TF2^YwLC;iksV0teCChX0>ct0{QFco>aIEGZ* zS~JbpTiQ|LczRfF*uw0p3=>~r0|8ar8_ul`e9xjqE=7MxvTv;2S@H3ya)n@Z(1++J zLL3}NgG4x|EaD8)oRQ-=*~|E>@$U1#&ZJ!X`e4F@4ZA=8w*UWskFL1Wh81BNBEOcs z{#tdn>(%M^!VU$w_YLpq?<-Yq?P0R|v7<2a&7AY9O090b1+q0aJX)?izq|gedegpL z9gi3uT3HxhO*-1Dvs^Zt-Tuf+SFeBdb9eK|G)ij;aRlt(jH$XFmbL!fv0kTL9YTVK z-XFNh@aN%P_7tbOrq@^R>gfM+YVVyQKYOj4%j*3_`A>UaJ~vxmGl%2AXUp)y4{INK zEIqr{>~`e-wEcDEM|b2F{yy2UK+o;)s&+2Mz6T*iLI1X$vu<4Qy6ncOqFJGKjg!Uy zy#7AFZcn+Mj#V~8U!}6l0gmS`91kv}Ej!PqRCx3GvfJV(7}PfCM(v$*`QL&|9y|W$ z@~vWL=Qz%$v_*eIfg0Oo&-HT2js=(d+YZH_O`Y+$qVK@bq@P}inoL^~zs@i>YY2XE z@#IROsVg;^&d=Gnkp0UkL9f<#$r7?lCf!@G-^Z^luVqWs&aU*!7x@;v&579@v~z99 z`scZ;~{0 zT3aG%anjG7TT1q9{pEi1`*ge8MXJ%u{?2t{^;;p`!+U_EJ>9ow;oXq(M!zS^wuy%u ze?RWIeok1vO~C@DswPGSG3kd(KYd6!@R93vwoSnS)>}N*T8I1mD&_%|OwJ4mbox~* zD_8mAwNusN2OFIKJFeGVcCeqx-s6E`+@62j1`KZ!R?WWs_{3UJne6H6=d#Wzp$Pzv C=vPbt diff --git a/website/assets/sprites/spritesmith/achievements/achievement-spookySparkles.png b/website/assets/sprites/spritesmith/achievements/achievement-spookySparkles.png deleted file mode 100644 index d1c0ab9bedac3df3f981a9ee6765191001cfa3ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3431 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 JPDHLkV1oJbYsLTo diff --git a/website/assets/sprites/spritesmith/achievements/achievement-stoikalm.png b/website/assets/sprites/spritesmith/achievements/achievement-stoikalm.png deleted file mode 100644 index 06323f3d1749afa9fb5aa45d6a2f81a3bf8b485b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3373 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 DsHIRm diff --git a/website/assets/sprites/spritesmith/achievements/achievement-sun.png b/website/assets/sprites/spritesmith/achievements/achievement-sun.png deleted file mode 100644 index a4aacec52f252f5b5cca46e67b3f04329f12abca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1340 zcmeAS@N?(olHy`uVBq!ia0vp^5r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8) zeo$(0erZuMFyhjbK~@!5ITxiSmgEF!Yr+iu4m$|!iE#63R+S2lSmf>K>X@j>|B$(cQIpk_HE7=f_D=%dnn6pv9`bcI znRqPhY-zd3l)V0U^*-%QQ)}({EeElKLhEDYC}mWo+0=fA$Q`2G9pt*35BsJ%>OC}7*StLF2xk6-r|m~XC~ zJuzjmXA~2!9P=5KB&Q=PdxaS1H0p0M7XI=0!&Tu;YrFq%@{OMFvReFGM8Rw6Bv$U; zNqkq2H)hMHTzVTl-F4A!x7FzdTU6{f>!(l5_$qV2A$juxPZsXEGYmGDiKvI2dtb#N zxLSK+n@AJOWvX(rtn5){(lfDvUy{& zq0beeGx^-*T+EUkb?22{UZ1{v@$ULLvzAJ1Zh!vypwxyZHeSEyPTZMw*1RoOu*qR>`Q(YL4NvEKei6v3zxU)|t8!$4!gsUvjWGwdR(2?Sy}RW4N0h`zvt2u0oPDbDxsM(f;fG49pCy=N$Hyxja+`m1mx=elF{r G5}E+-f8=%m diff --git a/website/assets/sprites/spritesmith/achievements/achievement-sword.png b/website/assets/sprites/spritesmith/achievements/achievement-sword.png deleted file mode 100644 index 7f93d749fe441679098be71d1a6d9a242ce97337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1308 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 b@%kMAq!l14M6J!#00000NkvXXu0mjfB6Sr= diff --git a/website/assets/sprites/spritesmith/achievements/achievement-ultimate-mage.png b/website/assets/sprites/spritesmith/achievements/achievement-ultimate-mage.png deleted file mode 100644 index fd822f83f5af387cacf2ee610df5b069e1e9ab4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3349 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 diff --git a/website/assets/sprites/spritesmith/achievements/achievement-ultimate-rogue.png b/website/assets/sprites/spritesmith/achievements/achievement-ultimate-rogue.png deleted file mode 100644 index dc462341706255181061b6fb51b8c72555908399..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3303 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 g@I?gwt8C(QU-CRU`=lPjMh4hmsqR8MPSSzlj z_^Epl5)ws-3?2s-$9#1b`lSCxt&&I8+_7{898kDcT;t|$MF7C+l>oq(fj8UZ-*qee z{8seOjywQqwk9R!oxM?*yoSd z4%AV^Ss>x=%CTCoBJ=Quv4`y(P^;u|Wgeo~wD81sJilQaNq>ld3+X}Q0k-3jM=Onw zAKpPLu2IM;tb69G3-a{x3c&NI_h@%c2o6*QVD=Y zAGlJ!bklHMH>HSuPfsCDRlBKSG*(&8>A1bV6yYI8=r$Eyh)$?T6r4Js(TCcUf2H`M z_lNV4FjrLe6ZeMh7V3g7WB@uks9Oec8K^YJ30y002ovPDHLkV1mrQVb}lw diff --git a/website/assets/sprites/spritesmith_large/scenes/scene_guilds.png b/website/assets/sprites/spritesmith_large/scenes/scene_guilds.png new file mode 100644 index 0000000000000000000000000000000000000000..25ac3e101fb6699522c75643c45ddfad5bab2486 GIT binary patch literal 15822 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 b@9|#UApJ@=u+LD}&d_8e6vfL$KYaN=uytj( literal 0 HcmV?d00001 diff --git a/website/client-old/js/controllers/notificationCtrl.js b/website/client-old/js/controllers/notificationCtrl.js index 06246bd088..092da25a71 100644 --- a/website/client-old/js/controllers/notificationCtrl.js +++ b/website/client-old/js/controllers/notificationCtrl.js @@ -78,7 +78,7 @@ habitrpg.controller('NotificationCtrl', // Avoid showing the same notiication more than once var lastShownNotifications = []; - function trasnferGroupNotification(notification) { + function transferGroupNotification(notification) { if (!User.user.groupNotifications) User.user.groupNotifications = []; User.user.groupNotifications.push(notification); } @@ -110,6 +110,13 @@ habitrpg.controller('NotificationCtrl', var markAsRead = true; switch (notification.type) { + case 'GUILD_PROMPT': + if (notification.data.textVariant === -1) { + $rootScope.openModal('testing'); + } else { + $rootScope.openModal('testingVariant'); + } + break; case 'DROPS_ENABLED': $rootScope.openModal('dropsEnabled'); break; @@ -129,12 +136,19 @@ habitrpg.controller('NotificationCtrl', } break; case 'ULTIMATE_GEAR_ACHIEVEMENT': + $rootScope.playSound('Achievement_Unlocked'); Achievement.displayAchievement('ultimateGear', {size: 'md'}); break; case 'REBIRTH_ACHIEVEMENT': + $rootScope.playSound('Achievement_Unlocked'); Achievement.displayAchievement('rebirth'); break; + case 'GUILD_JOINED_ACHIEVEMENT': + $rootScope.playSound('Achievement_Unlocked'); + Achievement.displayAchievement('joinedGuild', {size: 'md'}); + break; case 'NEW_CONTRIBUTOR_LEVEL': + $rootScope.playSound('Achievement_Unlocked'); Achievement.displayAchievement('contributor', {size: 'md'}); break; case 'CRON': @@ -144,11 +158,11 @@ habitrpg.controller('NotificationCtrl', } break; case 'GROUP_TASK_APPROVAL': - trasnferGroupNotification(notification); + transferGroupNotification(notification); markAsRead = false; break; case 'GROUP_TASK_APPROVED': - trasnferGroupNotification(notification); + transferGroupNotification(notification); markAsRead = false; break; case 'SCORED_TASK': diff --git a/website/common/locales/en/groups.json b/website/common/locales/en/groups.json index d418a1b53b..20b9ccddb0 100644 --- a/website/common/locales/en/groups.json +++ b/website/common/locales/en/groups.json @@ -282,5 +282,7 @@ "userIsNotManager": "User is not manager", "canOnlyApproveTaskOnce": "This task has already been approved.", "leaderMarker": " - Leader", - "managerMarker": " - Manager" + "managerMarker": " - Manager", + "joinedGuild": "Joined a Guild", + "joinedGuildText": "Ventured into the social side of Habitica by joining a Guild!" } diff --git a/website/common/locales/en/testing.json b/website/common/locales/en/testing.json new file mode 100644 index 0000000000..449740b4ea --- /dev/null +++ b/website/common/locales/en/testing.json @@ -0,0 +1,7 @@ +{ + "guildReminderTitle": "Check out Guilds!", + "guildReminderText1": "Now that you've mastered Habitica's basics, come check out Guilds, where you can chat with other people who are committed to improving their lives!", + "guildReminderText2": "Ready for more? Join a Guild to meet other people who are committed to improving their lives!", + "guildReminderCTA": "Take me there!", + "guildReminderDismiss": "Not right now." +} diff --git a/website/common/script/content/achievements.js b/website/common/script/content/achievements.js index f05d83154e..067a4a0ea9 100644 --- a/website/common/script/content/achievements.js +++ b/website/common/script/content/achievements.js @@ -102,6 +102,11 @@ let basicAchievs = { titleKey: 'royallyLoyal', textKey: 'royallyLoyalText', }, + joinedGuild: { + icon: 'achievement-guild', + titleKey: 'joinedGuild', + textKey: 'joinedGuildText', + }, }; Object.assign(achievementsData, basicAchievs); diff --git a/website/common/script/libs/achievements.js b/website/common/script/libs/achievements.js index 318beca18d..1d49449a3a 100644 --- a/website/common/script/libs/achievements.js +++ b/website/common/script/libs/achievements.js @@ -179,6 +179,7 @@ function _getBasicAchievements (user, language) { _addSimple(result, user, {path: 'partyUp', language}); _addSimple(result, user, {path: 'partyOn', language}); + _addSimple(result, user, {path: 'joinedGuild', language}); _addSimple(result, user, {path: 'royallyLoyal', language}); _addSimpleWithMasterCount(result, user, {path: 'beastMaster', language}); diff --git a/website/server/controllers/api-v3/groups.js b/website/server/controllers/api-v3/groups.js index 855175e74b..35858e2f73 100644 --- a/website/server/controllers/api-v3/groups.js +++ b/website/server/controllers/api-v3/groups.js @@ -122,6 +122,14 @@ api.createGroup = { user.balance--; user.guilds.push(group._id); + if (!user.achievements.joinedGuild) { + user.achievements.joinedGuild = true; + user.addNotification('GUILD_JOINED_ACHIEVEMENT'); + } + if (user._ABtests && user._ABtests.guildReminder && user._ABtests.counter !== -1) { + user._ABtests.counter = -1; + user.markModified('_ABtests'); + } } else { if (group.privacy !== 'private') throw new NotAuthorized(res.t('partyMustbePrivate')); if (user.party._id) throw new NotAuthorized(res.t('messageGroupAlreadyInParty')); @@ -510,6 +518,14 @@ api.joinGroup = { throw new NotAuthorized(res.t('userAlreadyInGroup')); } user.guilds.push(group._id); // Add group to user's guilds + if (!user.achievements.joinedGuild) { + user.achievements.joinedGuild = true; + user.addNotification('GUILD_JOINED_ACHIEVEMENT'); + } + if (user._ABtests && user._ABtests.guildReminder && user._ABtests.counter !== -1) { + user._ABtests.counter = -1; + user.markModified('_ABtests'); + } } if (!isUserInvited) throw new NotAuthorized(res.t('messageGroupRequiresInvite')); diff --git a/website/server/controllers/api-v3/tasks.js b/website/server/controllers/api-v3/tasks.js index 401a432e24..ef61c1b8f3 100644 --- a/website/server/controllers/api-v3/tasks.js +++ b/website/server/controllers/api-v3/tasks.js @@ -589,6 +589,18 @@ api.scoreTask = { } } + if (user._ABtests && user._ABtests.guildReminder && user._ABtests.counter !== -1) { + user._ABtests.counter++; + if (user._ABtests.counter > 1) { + if (user._ABtests.guildReminder.indexOf('timing1') !== -1 || user._ABtests.counter > 4) { + user._ABtests.counter = -1; + let textVariant = user._ABtests.guildReminder.indexOf('text2'); + user.addNotification('GUILD_PROMPT', {textVariant}); + } + } + user.markModified('_ABtests'); + } + if (task.type === 'daily') { task.isDue = common.shouldDo(Date.now(), task, user.preferences); } diff --git a/website/server/controllers/api-v3/user.js b/website/server/controllers/api-v3/user.js index 49d9e17747..342013e780 100644 --- a/website/server/controllers/api-v3/user.js +++ b/website/server/controllers/api-v3/user.js @@ -121,6 +121,8 @@ api.getBuyList = { }; let updatablePaths = [ + '_ABtests.counter', + 'flags.customizationsNotification', 'flags.showTour', 'flags.tour', diff --git a/website/server/models/user/hooks.js b/website/server/models/user/hooks.js index 16ca40dc29..fa22e5f998 100644 --- a/website/server/models/user/hooks.js +++ b/website/server/models/user/hooks.js @@ -10,7 +10,7 @@ import schema from './schema'; schema.plugin(baseModel, { // noSet is not used as updating uses a whitelist and creating only accepts specific params (password, email, username, ...) noSet: [], - private: ['auth.local.hashed_password', 'auth.local.passwordHashMethod', 'auth.local.salt', '_cronSignature', '_ABtest', '_ABtests'], + private: ['auth.local.hashed_password', 'auth.local.passwordHashMethod', 'auth.local.salt', '_cronSignature', '_ABtests'], toJSONTransform: function userToJSON (plainObj, originalDoc) { plainObj._tmp = originalDoc._tmp; // be sure to send down drop notifs delete plainObj.filters; @@ -94,13 +94,25 @@ function _setUpNewUser (user) { let taskTypes; let iterableFlags = user.flags.toObject(); - user._ABtest = ''; - // A/B test 2016-12-21: Should we deliver notifications for upcoming incentives on days when users don't receive rewards? - if (Math.random() < 0.5) { - user._ABtests.checkInModals = '20161221_noCheckInPreviews'; // no 'preview' check-in modals + // A/B test 2017-05-11: Can we encourage people to join Guilds with a pester modal? + let testGroup = Math.random(); + if (testGroup < 0.1) { + user._ABtests.guildReminder = '20170511_noGuildReminder'; // control group, don't pester about Guilds + user._ABtests.counter = -1; + } else if (testGroup < 0.235) { + user._ABtests.guildReminder = '20170511_text1timing1'; // first sample text, show after two clicks + user._ABtests.counter = 0; + } else if (testGroup < 0.46) { + user._ABtests.guildReminder = '20170511_text2timing1'; // second sample text, show after two clicks + user._ABtests.counter = 0; + } else if (testGroup < 0.685) { + user._ABtests.guildReminder = '20170511_text1timing2'; // first sample text, show after five clicks + user._ABtests.counter = 0; } else { - user._ABtests.checkInModals = '20161221_showCheckInPreviews'; // show 'preview' check-in modals + user._ABtests.guildReminder = '20170511_text2timing2'; // second sample text, show after five clicks + user._ABtests.counter = 0; } + user.items.quests.dustbunnies = 1; user.purchased.background.violet = true; user.preferences.background = 'violet'; diff --git a/website/server/models/user/schema.js b/website/server/models/user/schema.js index d3b09315b7..77800ac422 100644 --- a/website/server/models/user/schema.js +++ b/website/server/models/user/schema.js @@ -112,6 +112,7 @@ let schema = new Schema({ partyUp: Boolean, partyOn: Boolean, royallyLoyal: Boolean, + joinedGuild: Boolean, }, backer: { @@ -545,7 +546,6 @@ let schema = new Schema({ return {}; }}, pushDevices: [PushDeviceSchema], - _ABtest: {type: String}, // deprecated. Superseded by _ABtests _ABtests: {type: Schema.Types.Mixed, default: () => { return {}; }}, diff --git a/website/server/models/userNotification.js b/website/server/models/userNotification.js index 639017cc77..4bc7a281df 100644 --- a/website/server/models/userNotification.js +++ b/website/server/models/userNotification.js @@ -18,6 +18,8 @@ const NOTIFICATION_TYPES = [ 'GROUP_INVITE_ACCEPTED', 'SCORED_TASK', 'BOSS_DAMAGE', // Not used currently but kept to avoid validation errors + 'GUILD_PROMPT', + 'GUILD_JOINED_ACHIEVEMENT', ]; const Schema = mongoose.Schema; diff --git a/website/views/shared/modals/achievements.jade b/website/views/shared/modals/achievements.jade index a8954d2be8..e9fe6fe538 100644 --- a/website/views/shared/modals/achievements.jade +++ b/website/views/shared/modals/achievements.jade @@ -117,7 +117,7 @@ script(id='modals/achievements/contributor.html', type='text/ng-template') button.btn.btn-primary(style='margin-top:1em' ng-click='$close()')=env.t('huzzah') +achievementFooter -//Rebirth +// Rebirth script(id='modals/achievements/rebirth.html', type='text/ng-template') .modal-content(style='min-width:28em') .modal-body.text-center @@ -152,3 +152,14 @@ script(id='modals/achievements/partyOn.html', type='text/ng-template') br button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') +achievementFooter + +// Joined Guild +script(id='modals/achievements/joinedGuild.html', type='text/ng-template') + .modal-content(style='min-width:28em') + .modal-body.text-center + h3(style='margin-bottom:0')=env.t('modalAchievement') + +achievementAvatar('guild',0) + p=env.t('joinedGuildText') + br + button.btn.btn-primary(ng-click='$close()')=env.t('huzzah') + +achievementFooter diff --git a/website/views/shared/modals/index.jade b/website/views/shared/modals/index.jade index afd31bb60e..d3ae56c8ad 100644 --- a/website/views/shared/modals/index.jade +++ b/website/views/shared/modals/index.jade @@ -27,6 +27,7 @@ include ./generic.jade include ./tasks-edit.jade include ./task-notes.jade include ./task-extra-notes.jade +include ./testing.jade //- Settings script(type='text/ng-template', id='modals/change-day-start.html') diff --git a/website/views/shared/modals/testing.jade b/website/views/shared/modals/testing.jade new file mode 100644 index 0000000000..be4e8c979c --- /dev/null +++ b/website/views/shared/modals/testing.jade @@ -0,0 +1,31 @@ +script(type='text/ng-template', id='modals/testing.html') + .modal-content(style='min-width:28em') + .modal-body.text-center(style='padding-bottom:0') + h3=env.t('guildReminderTitle') + br + .scene_guilds.center-block + br + h4=env.t('guildReminderText1') + .modal-footer(style='padding-top:0') + .container-fluid + .row + .col-xs-6.text-center + button.btn-lg.btn-default(ng-click='$close()')=env.t('guildReminderDismiss') + .col-xs-6.text-center + button.btn-lg.btn-primary(ui-sref='options.social.guilds.public', href='/#/options/groups/guilds/public', ng-click='$close()')=env.t('guildReminderCTA') + +script(type='text/ng-template', id='modals/testingVariant.html') + .modal-content(style='min-width:28em') + .modal-body.text-center(style='padding-bottom:0') + h3=env.t('guildReminderTitle') + br + .scene_guilds.center-block + br + h4=env.t('guildReminderText2') + .modal-footer(style='padding-top:0') + .container-fluid + .row + .col-xs-6.text-center + button.btn-lg.btn-default(ng-click='$close()')=env.t('guildReminderDismiss') + .col-xs-6.text-center + button.btn-lg.btn-primary(ui-sref='options.social.guilds.public', href='/#/options/groups/guilds/public', ng-click='$close()')=env.t('guildReminderCTA')