Skip to content

Commit e7af880

Browse files
Adds feature to transfer event to another user
fixes travis failure
1 parent a05ba48 commit e7af880

File tree

9 files changed

+178
-0
lines changed

9 files changed

+178
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import FormMixin from 'open-event-frontend/mixins/form';
2+
import ModalBase from 'open-event-frontend/components/modals/modal-base';
3+
4+
export default ModalBase.extend(FormMixin, {
5+
actions: {
6+
submit() {
7+
this.onValid(() => {
8+
this.sendAction('transferEvent', this.getProperties('newOwnerEmail'));
9+
});
10+
}
11+
},
12+
13+
getValidationRules() {
14+
15+
return {
16+
inline : true,
17+
delay : false,
18+
on : 'blur',
19+
fields : {
20+
newOwnerEmail: {
21+
identifier : 'user_email',
22+
rules : [
23+
{
24+
type : 'empty',
25+
prompt : this.l10n.t('Please enter an email for new organizer')
26+
},
27+
{
28+
type : 'email',
29+
prompt : this.l10n.t('Please enter a valid email address for new organizer')
30+
}
31+
]
32+
}
33+
}
34+
};
35+
}
36+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { computed } from '@ember/object';
2+
import ModalBase from 'open-event-frontend/components/modals/modal-base';
3+
4+
export default ModalBase.extend({
5+
isSmall : true,
6+
confirmEventName : '',
7+
isNameDifferent : computed('confirmEventName', function() {
8+
return this.eventName ? this.confirmEventName.toLowerCase() !== this.eventName.toLowerCase() : true;
9+
})
10+
});
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import Controller from '@ember/controller';
2+
3+
export default Controller.extend({
4+
5+
actions: {
6+
openEventTransferModal(id, name) {
7+
this.setProperties({
8+
'isEventTransferModalOpen' : true,
9+
'confirmEventName' : '',
10+
'eventId' : id,
11+
'eventName' : name
12+
});
13+
},
14+
openConfirmEventTransferModal() {
15+
this.setProperties({
16+
'isEventTransferModalOpen' : false,
17+
'isConfirmEventTransferModalOpen' : true,
18+
'checked' : false
19+
});
20+
},
21+
transferEvent(event, data) {
22+
this.set('isLoading', true);
23+
let payload = {
24+
data: {
25+
attributes: {
26+
'new-owner' : data.newOwnerEmail,
27+
'starts-at' : event.startsAt,
28+
'ends-at' : event.endsAt,
29+
'timezone' : event.timezone
30+
},
31+
id : event.originalId,
32+
type : 'event',
33+
identifier : event.id
34+
}
35+
};
36+
let config = {
37+
skipDataTransform: true
38+
};
39+
return this.loader
40+
.patch(`events/${event.id}`, JSON.stringify(payload), config)
41+
.then(() => {
42+
this.routing.transitionTo('index');
43+
this.notify.success(this.l10n.t('Your event has been transferred successfully.'));
44+
})
45+
.catch(() => {
46+
this.notify.error(this.l10n.t('An unexpected error has occurred.'));
47+
})
48+
.finally(() => {
49+
this.setProperties({
50+
'isLoading' : false,
51+
'isConfirmEventTransferModalOpen' : false,
52+
'checked' : false
53+
});
54+
});
55+
}
56+
}
57+
});

app/router.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ router.map(function() {
7070
this.route('sessions-speakers');
7171
});
7272
this.route('export');
73+
this.route('settings');
7374
this.route('sessions', function() {
7475
this.route('list', { path: '/:session_status' });
7576
this.route('create');

app/routes/events/view/settings.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Route from '@ember/routing/route';
2+
3+
export default Route.extend({
4+
titleToken() {
5+
return this.l10n.t('Settings');
6+
},
7+
model() {
8+
return this.modelFor('events.view');
9+
}
10+
});
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<div class="header">
2+
{{t 'You are transferring this event. This action cannot be undone.'}}
3+
<div class="muted small text">
4+
{{t 'All the event rights will be transferred to another user'}}
5+
</div>
6+
</div>
7+
<div class="content">
8+
<form class="ui {{if isLoading 'loading'}} form" id="event-transfer-form" autocomplete="off" {{action 'submit' on='submit'}}>
9+
<div class="field">
10+
<label class="required">
11+
{{t 'User Email'}}
12+
</label>
13+
{{input type='text' name='user_email' value=newOwnerEmail}}
14+
</div>
15+
<div class="field">
16+
{{ui-checkbox label=(t 'Please tick the box to agree and press TRANSFER') type="checkbox" checked=checked onChange=(action (mut checked))}}
17+
</div>
18+
</form>
19+
</div>
20+
<div class="actions">
21+
<button type="button" class="ui black button" {{action 'close'}}>
22+
{{t 'Cancel'}}
23+
</button>
24+
<button type="submit" form="event-transfer-form" class="ui red button {{if (not checked) 'disabled'}}">
25+
{{t 'Transfer'}}
26+
</button>
27+
</div>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<div class="header">
2+
{{t 'Are you sure you would like to transfer this event?'}}
3+
<div class="muted small text">
4+
{{t 'Transferring the event to another user will lead to you losing all the owner rights.'}}
5+
</div>
6+
</div>
7+
<div class="content">
8+
<div class="ui {{if isLoading 'loading'}} form" autocomplete="off">
9+
<div class="field">
10+
<div class="label">
11+
{{t 'Please enter the event-name to confirm that you want to transfer the event'}}
12+
</div>
13+
{{input type='text' name='confirm_name' value=confirmEventName required=true}}
14+
</div>
15+
</div>
16+
</div>
17+
<div class="actions">
18+
<button type="button" class="ui black button" {{action 'close'}}>
19+
{{t 'Cancel'}}
20+
</button>
21+
<button {{action openConfirmEventTransferModal}} class="ui red button {{if isNameDifferent 'disabled'}}">
22+
{{t 'Proceed'}}
23+
</button>
24+
</div>

app/templates/events/view.hbs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@
8181
{{#link-to 'events.view.export' class='item'}}
8282
{{t 'Export'}}
8383
{{/link-to}}
84+
{{#link-to 'events.view.settings' class='item'}}
85+
{{t 'Settings'}}
86+
{{/link-to}}
8487
{{/tabbed-navigation}}
8588
</div>
8689
</div>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<div class="row">
2+
<p>
3+
{{t 'Transfer ownership of this event to another user. You\'ll lose all the owner rights once they accept the ownership.'}}
4+
</p>
5+
<button {{action 'openEventTransferModal' model.id model.name}} class='ui red button'>
6+
{{t 'Transfer Ownership'}}
7+
</button>
8+
</div>
9+
{{modals/event-transfer-modal isLoading=isLoading isOpen=isEventTransferModalOpen confirmEventName=confirmEventName eventName=eventName openConfirmEventTransferModal=(action 'openConfirmEventTransferModal') transferEvent=(action 'transferEvent' model)}}
10+
{{modals/confirm-event-transfer-modal isLoading=isLoading isOpen=isConfirmEventTransferModalOpen checked=checked transferEvent=(action 'transferEvent' model)}}

0 commit comments

Comments
 (0)