mirror of
https://github.com/sudoxnym/habitica.git
synced 2026-08-03 08:21:07 +00:00
guilds: generalize more groups stuff, creation invitation leaving,
etc. also fixes party invite bugs
This commit is contained in:
parent
619b92563e
commit
ff35cbf1e7
3 changed files with 45 additions and 56 deletions
|
|
@ -6,14 +6,9 @@ module.exports.app = (appExports, model, app) ->
|
|||
browser = require './browser'
|
||||
|
||||
_currentTime = model.at '_currentTime'
|
||||
|
||||
_currentTime.setNull +new Date()
|
||||
|
||||
# Every 60 seconds, reset the current time so that the chat
|
||||
# can update relative times
|
||||
setInterval ->
|
||||
_currentTime.set +new Date()
|
||||
, 60000
|
||||
_currentTime.setNull +new Date
|
||||
# Every 60 seconds, reset the current time so that the chat can update relative times
|
||||
setInterval (->_currentTime.set +new Date), 60000
|
||||
|
||||
user = model.at('_user')
|
||||
|
||||
|
|
@ -25,60 +20,51 @@ module.exports.app = (appExports, model, app) ->
|
|||
model.ref '_party', party
|
||||
browser.resetDom(model)
|
||||
|
||||
appExports.partyCreate = ->
|
||||
newParty = model.get("_newParty")
|
||||
id = model.add 'groups', { name: newParty, leader: user.get('id'), members: [user.get('id')], invites:[] }
|
||||
user.set 'party', {current: id, invitation: null}, ->
|
||||
window.location.reload true
|
||||
appExports.groupCreate = (e,el) ->
|
||||
model.add('groups',
|
||||
name: model.get("_newGroup")
|
||||
leader: user.get('id')
|
||||
members: [user.get('id')]
|
||||
type: $(el).attr('data-type')
|
||||
, ->location.reload())
|
||||
|
||||
appExports.partyInvite = ->
|
||||
id = model.get('_newPartyMember').replace(/[\s"]/g, '')
|
||||
appExports.groupInvite = (e,el) ->
|
||||
id = model.get('_groupInvitee').replace(/[\s"]/g, '')
|
||||
model.set '_groupInvitee', ''
|
||||
return if _.isEmpty(id)
|
||||
|
||||
model.query('users').publicInfo([id]).fetch (err, users) ->
|
||||
model.query('users').publicInfo([id]).fetch (err, profiles) ->
|
||||
throw err if err
|
||||
u = users.at(0).get()
|
||||
if !u?
|
||||
model.set "_partyError", "User with id #{id} not found."
|
||||
return
|
||||
else if u.party.current? or u.party.invitation?
|
||||
model.set "_partyError", "User already in a party or pending invitation."
|
||||
return
|
||||
else
|
||||
profile = profiles.at(0)
|
||||
return model.set("_groupError", "User with id #{id} not found.") unless profile.get()
|
||||
|
||||
invite = ->
|
||||
$.bootstrapGrowl "Invitation Sent."
|
||||
model.set "users.#{id}.party.invitation", model.get('_party.id'), -> window.location.reload()
|
||||
#model.set '_newPartyMember', ''
|
||||
#partySubscribe model
|
||||
model.set("users.#{id}.party.invitation", e.get('id'), ->location.reload())
|
||||
if e.get('type') is 'party'
|
||||
model.query('groups').withMember(id).fetch (err,groups) ->
|
||||
if profile.get('party.invitation') or !_.isEmpty(groups.get())
|
||||
return model.set("_groupError", "User already in a party or pending invitation.")
|
||||
else invite()
|
||||
else invite()
|
||||
|
||||
appExports.partyAccept = ->
|
||||
partyId = user.get('party.invitation')
|
||||
user.set 'party.invitation', null
|
||||
user.set 'party.current', partyId
|
||||
model.at("groups.#{partyId}.members").push user.get('id'), -> window.location.reload()
|
||||
# model.query('groups').withId(partyId).fetch (err, p) ->
|
||||
# members = p.get('members')
|
||||
# members.push user.get('id')
|
||||
# p.set 'members', members, ->
|
||||
# window.location.reload true
|
||||
|
||||
# partySubscribe model, ->
|
||||
# p = model.at('_party')
|
||||
# p.push 'members', user.get('id')
|
||||
user.set 'party.invitation', null, ->
|
||||
model.push("groups.#{partyId}.members", user.get('id'), ->location.reload())
|
||||
|
||||
appExports.partyReject = ->
|
||||
user.set 'party.invitation', null
|
||||
browser.resetDom(model)
|
||||
|
||||
appExports.partyLeave = ->
|
||||
id = user.set 'party.current', null
|
||||
party = model.at '_party'
|
||||
members = party.get('members')
|
||||
appExports.groupLeave = (e,el) ->
|
||||
members = e.get('members')
|
||||
index = members.indexOf(user.get('id'))
|
||||
party.remove 'members', index, 1, ->
|
||||
e.at().remove 'members', index, 1, ->
|
||||
if members.length is 1 # # last member out, kill the party
|
||||
model.del "groups.#{id}", (-> window.location.reload true)
|
||||
model.del("groups.#{id}", ->location.reload())
|
||||
else
|
||||
window.location.reload true
|
||||
location.reload()
|
||||
|
||||
###
|
||||
Chat Functionality
|
||||
|
|
|
|||
|
|
@ -128,8 +128,9 @@ groupSystem = (store) ->
|
|||
###
|
||||
Find group which has member by id
|
||||
###
|
||||
store.query.expose "groups", "withMember", (id) ->
|
||||
@where('members').contains([id]).only(['id','members'])
|
||||
store.query.expose "groups", "withMember", (id, type) ->
|
||||
q = @where('members').contains([id]).only(['id','members'])
|
||||
q = q.where('type').equals(type) if type?
|
||||
store.queryAccess 'groups', 'withMember', publicAccess
|
||||
|
||||
###
|
||||
|
|
|
|||
|
|
@ -18,9 +18,9 @@
|
|||
<!-- Not in a party , no invites - create a new one -->
|
||||
<p>You are not in a party. You can either create one and invite friends, or if you want to join an existing party, have them enter:</p>
|
||||
<pre class=prettyprint>{_user.id}</pre>
|
||||
<form class=form-inline x-bind="submit: partyCreate">
|
||||
{#if _partyError}
|
||||
<div class='alert alert-danger'>{_partyError}</div>
|
||||
<form class=form-inline x-bind="submit:groupCreate" data-type="party">
|
||||
{#if _groupError}
|
||||
<div class='alert alert-danger'>{_groupError}</div>
|
||||
{/}
|
||||
<div class=control-group>
|
||||
<input type="text" class="input-medium" placeholder="Party Name" value="{_newParty}" />
|
||||
|
|
@ -84,16 +84,18 @@
|
|||
<tr><td>{{username(_members[:memberId].auth, _members[:memberId].profile.name)}}</td><td>({{:memberId}})</td></tr>
|
||||
{{/}}
|
||||
</table>
|
||||
<form class=form-inline x-bind="submit: partyInvite">
|
||||
{#if _partyError}
|
||||
<div class='alert alert-danger'>{_partyError}</div>
|
||||
{#with @group as :group}
|
||||
<form class="form-inline" x-bind="submit:groupInvite" data-type="{@group.type}" >
|
||||
{#if _groupError}
|
||||
<div class='alert alert-danger'>{_groupError}</div>
|
||||
{/}
|
||||
<div class='control-group'>
|
||||
<input type="text" class="input-medium" placeholder="User Id" value="{_newPartyMember}">
|
||||
<input type="text" class="input-medium" placeholder="User Id" value="{_groupInvitee}">
|
||||
<input type="submit" class="btn" value="Invite" />
|
||||
</div>
|
||||
</form>
|
||||
<a class='btn btn-danger' x-bind="click: partyLeave">Leave</a>
|
||||
<a class='btn btn-danger' x-bind="click:groupLeave">Leave</a>
|
||||
{/}
|
||||
{{/}}
|
||||
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Reference in a new issue