Skip to content

Commit

Permalink
Merge pull request #6 from Rowbotronics/master
Browse files Browse the repository at this point in the history
Various improvements
  • Loading branch information
Rowbotronics authored Dec 21, 2017
2 parents e8d8faf + 74f731d commit 1f28656
Show file tree
Hide file tree
Showing 8 changed files with 437 additions and 1,186 deletions.
15 changes: 9 additions & 6 deletions src/plugins/Gmail/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,15 @@ def __init__(self):

def createDraftMessage(self, event):
logging.debug('Creating draft message')
if settings.value('timezone') is not None and settings.value('timezone') != '':
timezoneOffset = settings.value('timezone').split(' UTC')[1]
tzName = ' ' + settings.value('timezone').split(' ')[-2]
else:
timezoneOffset = ''
tzName = ''
# if settings.value('timezone') is not None and settings.value('timezone') != '':
# timezoneOffset = settings.value('timezone').split(' UTC')[1]
# tzName = ' ' + settings.value('timezone').split(' ')[-2]
# else:
# timezoneOffset = ''
# tzName = ''

timezoneOffset=''
tzName=''

dateTimeFormat = self.getSetting('Date/Time format', 'yyyy MMM dd - h:mm ap')

Expand Down
19 changes: 12 additions & 7 deletions src/plugins/GoogleCalendar/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,14 @@ def credentialsReceived(credentials):


def createEvent(self, event):
if settings.value('timezone') is not None and settings.value('timezone') != '':
timezoneOffset = settings.value('timezone').split(' UTC')[1]
else:
timezoneOffset = ''

# if settings.value('timezone') is not None and settings.value('timezone') != '':
# timezoneOffset = settings.value('timezone').split(' UTC')[1]
# else:
# timezoneOffset = ''

timezone = settings.value('timezone')


selectedResources = []
for resourceTag in event['tags']['Resources']:
for resource in self.resourceObjects:
Expand All @@ -87,8 +90,10 @@ def createEvent(self, event):
'summary': event['title'],
'location': event['location'],
'description': description,
'start': {'dateTime': event['startTime'].toString(QtCore.Qt.ISODate) + timezoneOffset},
'end': {'dateTime': event['stopTime'].toString(QtCore.Qt.ISODate) + timezoneOffset},
# 'start': {'dateTime': event['startTime'].toString(QtCore.Qt.ISODate) + timezoneOffset},
# 'end': {'dateTime': event['stopTime'].toString(QtCore.Qt.ISODate) + timezoneOffset},
'start': {'dateTime': event['startTime'].toString(QtCore.Qt.ISODate), 'timeZone':timezone},
'end': {'dateTime': event['stopTime'].toString(QtCore.Qt.ISODate), 'timeZone':timezone},
'attendees': selectedResources
}

Expand Down
13 changes: 12 additions & 1 deletion src/plugins/MakerspaceAuthorizations/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,19 @@ def updateDescription(self, event):
logging.debug('Adding authorizations to description')

auths = event['tags']['Required auth\'s']

auth_tag = "Required authorizations:"

if auth_tag in event['description']:
print ("Already has authorizations in description; removing!")
description = event['description'].split('\n')
for piece in reversed(description):
if auth_tag in piece:
description.remove(piece)
event['description'] = '\n'.join(description)

if len(auths) > 0:
event['description'] += '\n\nRequired authorizations: ' + ','.join(auths)
event['description'] += '\n' + auth_tag + ','.join(auths)

def load():
return MakerspaceAuthorizationsPlugin()
42 changes: 42 additions & 0 deletions src/plugins/WildApricot/WildApricotAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,3 +148,45 @@ def _parse_response(http_response):
return decoded[list(decoded.keys())[0]]
else:
return decoded




def _make_api_request(self, request_string, api_request_object=None, method=None):
try:
return self.execute_request(request_string, api_request_object, method)
except urllib.error.HTTPError as e:
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
except urllib.error.URLError as e:
print('We failed to reach a server.')
print('Reason: ', e.reason)
return False

def GetEventByID(self, event_id):
event = self._make_api_request('Events/'+str(event_id))
return event

def SetEventAccessControl(self, event_id, restricted=False, any_level=True, any_group=True, group_ids=[], level_ids=[]):
event = self.GetEventByID(event_id)
if restricted:
event["AccessLevel"] = "Restricted"
event["Details"]["AccessControl"]["AccessLevel"] = "Restricted"
event["Details"]["AccessControl"]["AvailableForAnyLevel"] = any_level
event["Details"]["AccessControl"]["AvailableForAnyGroup"] = any_group
groups=[]
for group_id in group_ids:
groups.append({'Id':group_id})
event["Details"]["AccessControl"]["AvailableForGroups"] = groups
levels=[]
for levels_id in level_ids:
levels.append({'Id':level_id})
event["Details"]["AccessControl"]["AvailableForLevels"] = levels
else:
event["AccessLevel"] = ""
event["Details"]["AccessControl"]["AccessLevel"] = ""
event["Details"]["AccessControl"]["AvailableForAnyLevel"] = True
event["Details"]["AccessControl"]["AvailableForAnyGroup"] = True
event["Details"]["AccessControl"]["AvailableForGroups"] = []
event["Details"]["AccessControl"]["AvailableForLevels"] = []
response = self._make_api_request('https://api.wildapricot.org/v2.1/accounts/84576/Events/%d' %(event_id), event, method="PUT")
43 changes: 37 additions & 6 deletions src/plugins/WildApricot/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,27 @@ def __init__(self):
},{
'name': 'Use this as registration URL',
'type': 'yesno',
},{
'name': 'Enable group-based authorizations',
'type': 'yesno',
}
]

ui.addTarget(self.name, self, self.createEvent)
ui.addPopulationType('Members')

def createEvent(self, event):
if settings.value('timezone') is not None and settings.value('timezone') != '':
timezoneOffset = settings.value('timezone').split(' UTC')[1]
else:
timezoneOffset = ''
# if settings.value('timezone') is not None and settings.value('timezone') != '':
# timezoneOffset = settings.value('timezone').split(' UTC')[1]
# else:
# timezoneOffset = ''

tags = ["instructor_name:" + event['instructorName'], "instructor_email:"+event['instructorEmail']]

eventData = {
"Name": event['title'],
"StartDate": event['startTime'].toString(QtCore.Qt.ISODate) + timezoneOffset,
"EndDate": event['stopTime'].toString(QtCore.Qt.ISODate) + timezoneOffset,
"StartDate": event['startTime'].toString(QtCore.Qt.ISODate),
"EndDate": event['stopTime'].toString(QtCore.Qt.ISODate),
"Location": event['location'],
"RegistrationsLimit": event['registrationLimit'],
"RegistrationEnabled": True,
Expand All @@ -57,6 +62,7 @@ def createEvent(self, event):
"SendEmailCopy": False,
"WaitListBehaviour": "Disabled",
},
"Tags":tags
}

#@TODO: open ticket with WildApricot so that we can have an API endpoint for enabling email reminders
Expand Down Expand Up @@ -99,6 +105,31 @@ def createEvent(self, event):
logging.debug('Adding registration type: ' + rsvpType['name'])
api.execute_request('EventRegistrationTypes', registrationTypeData)

if config.checkBool(self.getSetting('Enable group-based authorizations')):
auths = event['tags']['Required auth\'s']
auth_map = {'Woodshop':416232,
'Metalshop':416231,
'Forge':420386,
'LaserCutter':416230,
'Mig welding':420387,
'Tig welding':420388,
'Stick welding':420389,
'Manual mill':420390,
'Plasma':420391,
'Metal lathes':420392,
'CNC Plasma':420393,
'Intro Tormach':420394,
'Full Tormach':420395}
auth_ids=[]
if len(auths) > 0:
for auth in auths:
auth_ids.append(auth_map[auth])

self.checkForInterruption()

logging.debug('Adding auth group requirements')
api.SetEventAccessControl(eventID, restricted=True, any_level=True, any_group=False, group_ids=auth_ids, level_ids=[])

if self.getSetting('Registration URL format', '') == '':
waEvent = api.execute_request('Events/%s' % eventID)
registerURL = waEvent['Details']['Url']
Expand Down
Loading

0 comments on commit 1f28656

Please sign in to comment.