Skip to content

Commit 32bc2c1

Browse files
authored
Merge pull request #1062 from p2pu/lc-co-facilitators
Multiple facilitators
2 parents c0d3f4f + 056e869 commit 32bc2c1

71 files changed

Lines changed: 962 additions & 691 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

custom_registration/views.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from studygroups.models import TeamMembership
3030
from studygroups.models import Profile
3131
from studygroups.forms import TeamMembershipForm
32+
from studygroups.models.learningcircle import StudyGroup
3233
from uxhelpers.utils import json_response
3334
from api import schema
3435
from .models import create_user
@@ -309,8 +310,14 @@ def delete(self, request, *args, **kwargs):
309310
user.username = random_username
310311
user.save()
311312

312-
# delete any active or future learning circles
313-
user.studygroup_set.update(deleted_at=timezone.now())
313+
for lc in StudyGroup.objects.active().filter(facilitator__user=user):
314+
if lc.facilitator_set.count() == 1:
315+
lc.deleted_at = timezone.now()
316+
317+
if lc.facilitator_set.count() > 1:
318+
lc.facilitator_set.filter(user=user).delete()
319+
320+
lc.save()
314321

315322
# delete profile data
316323
profile = user.profile

docker-compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ version: '3'
22
services:
33
postgres:
44
image: postgres:11
5+
ports:
6+
- 5432:5432
57
environment:
68
- POSTGRES_HOST_AUTH_METHOD=trust
79
volumes:

e2e/fixtures/test_studygroups.json

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
"longitude" : "-87.650050",
3434
"language" : "en",
3535
"place_id" : "",
36-
"facilitator": 1,
36+
"created_by": 1,
3737
"venue_name": "Harold Washington",
3838
"venue_address": "123 Street",
3939
"venue_details": "3rd floor",
@@ -45,6 +45,16 @@
4545
"model": "studygroups.studygroup",
4646
"pk": 1
4747
},
48+
{
49+
"fields": {
50+
"added_at": "2015-03-23T15:18:39.462Z",
51+
"user": 1,
52+
"study_group": 1
53+
},
54+
"model": "studygroups.facilitator",
55+
"pk": 1
56+
},
57+
4858
{
4959
"fields": {
5060
"created_at": "2015-03-23T15:19:04.318Z",
@@ -57,7 +67,7 @@
5767
"end_date": "2015-03-23",
5868
"duration": 120,
5969
"timezone": "US/Central",
60-
"facilitator": 1,
70+
"created_by": 1,
6171
"venue_name": "Harold Washington",
6272
"venue_address": "123 Street",
6373
"venue_details": "3rd floor",
@@ -71,6 +81,16 @@
7181
"model": "studygroups.studygroup",
7282
"pk": 2
7383
},
84+
{
85+
"fields": {
86+
"added_at": "2015-03-23T15:18:39.462Z",
87+
"user": 1,
88+
"study_group": 2
89+
},
90+
"model": "studygroups.facilitator",
91+
"pk": 2
92+
},
93+
7494
{
7595
"fields": {
7696
"created_at": "2015-03-25T14:35:02.227Z",
@@ -83,7 +103,7 @@
83103
"end_date": "2015-03-23",
84104
"duration": 120,
85105
"timezone": "US/Central",
86-
"facilitator": 1,
106+
"created_by": 1,
87107
"venue_name": "Harold Washington",
88108
"venue_address": "123 Street",
89109
"venue_details": "3rd floor",
@@ -97,6 +117,15 @@
97117
"model": "studygroups.studygroup",
98118
"pk": 3
99119
},
120+
{
121+
"fields": {
122+
"added_at": "2015-03-23T15:18:39.462Z",
123+
"user": 1,
124+
"study_group": 3
125+
},
126+
"model": "studygroups.facilitator",
127+
"pk": 3
128+
},
100129
{
101130
"fields": {
102131
"created_at": "2015-03-25T15:55:44.525Z",
@@ -109,7 +138,7 @@
109138
"end_date": "2015-03-23",
110139
"duration": 120,
111140
"timezone": "US/Central",
112-
"facilitator": 1,
141+
"created_by": 1,
113142
"venue_name": "Harold Washington",
114143
"venue_address": "123 Street",
115144
"venue_details": "3rd floor",
@@ -122,5 +151,14 @@
122151
},
123152
"model": "studygroups.studygroup",
124153
"pk": 4
154+
},
155+
{
156+
"fields": {
157+
"added_at": "2015-03-23T15:18:39.462Z",
158+
"user": 1,
159+
"study_group": 4
160+
},
161+
"model": "studygroups.facilitator",
162+
"pk": 4
125163
}
126164
]

e2e/tests/test_learning_circle_creation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ def test_save_draft_learning_circle(self):
155155
self.wait.until(expected_conditions.url_changes('%s%s' % (self.live_server_url, '/en/studygroup/create/')))
156156

157157
saved_studygroup = StudyGroup.objects.filter(draft=True).last()
158-
self.assertEqual(saved_studygroup.facilitator, facilitator)
158+
self.assertEqual(saved_studygroup.created_by, facilitator)
159159
self.assertTrue(expected_conditions.url_to_be('{}/en/studygroup/{}/'.format(self.live_server_url, saved_studygroup.id)))
160160

161161

@@ -196,7 +196,7 @@ def test_publish_learning_circle(self):
196196
self.wait.until(expected_conditions.url_changes('%s%s' % (self.live_server_url, '/en/studygroup/create/')))
197197

198198
published_studygroup = StudyGroup.objects.published().last()
199-
self.assertEqual(published_studygroup.facilitator, facilitator)
199+
self.assertEqual(published_studygroup.created_by, facilitator)
200200
self.assertTrue(expected_conditions.url_to_be('{}/en/studygroup/{}/'.format(self.live_server_url, published_studygroup.id)))
201201

202202

e2e/tests/test_learning_circle_manage.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from studygroups.models import Course
1414
from studygroups.models import StudyGroup
1515
from studygroups.models import Meeting
16+
from studygroups.models import Facilitator
1617
from custom_registration.models import create_user
1718

1819
from datetime import timedelta, time
@@ -56,8 +57,9 @@ def tearDownClass(cls):
5657
def setUp(self):
5758
self.facilitator = create_user('hi@example.net', 'bowie', 'wowie', 'password')
5859
sg = StudyGroup.objects.get(pk=1)
59-
sg.facilitator = self.facilitator
60+
sg.created_by = self.facilitator
6061
sg.save()
62+
Facilitator.objects.create(study_group=sg, user=self.facilitator)
6163
self.study_group = sg
6264
meeting_date = timezone.now() - timedelta(days=2)
6365
meeting = Meeting.objects.create(study_group=sg, meeting_date=meeting_date.date(), meeting_time=time(18, 0))

frontend/components/create-learning-circle-page.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,11 @@ export default class CreateLearningCirclePage extends React.Component {
5353
...this.props.learningCircle,
5454
meetings: meetings
5555
},
56+
team: this.props.team,
5657
showModal: false,
5758
showHelp: window.screen.width > DESKTOP_BREAKPOINT,
5859
user: this.props.user,
60+
userId: this.props.userId,
5961
errors: {},
6062
alert: { show: false },
6163
isSaving: false,
@@ -290,7 +292,9 @@ export default class CreateLearningCirclePage extends React.Component {
290292
currentTab={this.state.currentTab}
291293
allTabs={this.allTabs}
292294
changeTab={this.changeTab}
295+
userId={this.props.userId}
293296
learningCircle={this.state.learningCircle}
297+
team={this.state.team}
294298
errors={this.state.errors}
295299
onCancel={this.onCancel}
296300
onSubmitForm={this.onSubmitForm}

frontend/components/dashboard/FacilitatorDashboard.jsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ import Notification from './Notification';
1010
import DiscourseTable from './DiscourseTable';
1111
import CoursesTable from './CoursesTable';
1212
import MemberLearningCirclesTable from './MemberLearningCirclesTable';
13-
import UpcomingLearningCirclesTable from './UpcomingLearningCirclesTable';
1413
import CurrentLearningCirclesTable from './CurrentLearningCirclesTable';
1514
import ActiveLearningCirclesTable from './ActiveLearningCirclesTable';
1615
import CompletedLearningCirclesTable from './CompletedLearningCirclesTable';
17-
import UpcomingMeetings from './UpcomingMeetings';
1816
import RecommendedResources from "./RecommendedResources";
1917
import GlobalSuccesses from "./GlobalSuccesses";
2018
import InstagramFeed from "./InstagramFeed";

frontend/components/dashboard/TeamInvitationsTable.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export default class TeamMembersTable extends Component {
7777
if (this.state.teamMembers.length === 0) {
7878
return(
7979
<div className="py-2">
80-
<div>You don't have any team members.</div>
80+
<div>You don't have any pending invitations.</div>
8181
</div>
8282
)
8383
}

frontend/components/dashboard/UpcomingLearningCirclesTable.jsx

Lines changed: 0 additions & 149 deletions
This file was deleted.

0 commit comments

Comments
 (0)