def edit_credits(self): if 'edit.credits.submit' in self.request.params: i = 0 results = [] for k in self.request.params: if 'data_' in k: p = k.split('_') d = { 'id':int(p[1]) } exists = False for r in results: if r['id'] == int(p[1]): d = r exists = True if '_type' in k: d['type'] = self.request.params.get(k) if '_val' in k: d['value'] = self.request.params.get(k) if not exists: results.append(d) results = sorted(results,key=itemgetter('id')) properties = Properties.by({'prop_name':'CREDITS'}).first() properties.prop_value = json.dumps(results) transaction.commit() self.notify('Changes saved!') self.response['credits'] = json.loads(Properties.get('CREDITS','[]')) return self.template('/edit-credits.pt', theme='AdminPanel')
def feedback(self): self.response['sent_status'] = 0 if 'feedback.message' in self.request.params: msg = Validate.sanatize_textsafe(self.request.params.get('feedback.message','')) msg = msg + "\n\n ---------- \n" msg = msg + "Player: " + self.request.params.get('feedback.player','error') + "\n" msg = msg + "Category: " + self.request.params.get('feedback.category','error') + "\n" msg = msg + "From: " + self.request.params.get('feedback.from','error') + "\n" try: # Send to emails = Properties.get('MAILER_FEEDBACK_ADDRESS').replace(' ','').split(',') message = Message(subject="Feedback - " + datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S"), sender=self.request.user.email, recipients=emails, body=msg ) mailer = get_mailer(self.request) mailer.send(message) # Receipt message_receipt = Message(subject="Feedback - Receipt", sender=Properties.get('MAILER_GLOBAL_FROM_ADDRESS'), recipients=[self.request.user.email], body="Thank you for submitting feedback. \n\n ---- \n" + Validate.sanatize_textsafe(self.request.params.get('feedback.message','')) ) mailer.send(message_receipt) self.response['sent_status'] = 2 except Exception as e: self.response['sent_status'] = 1 return self.response
def email(self): id = self.request.matchdict['id'] test = Tests.by({'id':id,'alias':self.request.user.alias}).first() if not test: raise HTTPForbidden() file = self._generate_pdf(id) self.response['id'] = id self.response['emails'] = self.request.params.get('email.addresses',None) if 'form.submitted' in self.request.params: if self.request.params['email.ok'] == '1': emails = self.request.params['email.addresses'].replace(' ','').split(',') for email in emails: if not Validate.email(email): self.notify('Invalid email address',warn=True) return self.template('email.pt') try: message = Message(subject=self._email_fmt(id, str(Properties.get('MAILER_TO_SUBJECT','Submission'))), sender=str(Properties.get('MAILER_GLOBAL_FROM_ADDRESS','System')), recipients=emails, body=self._email_fmt(id, str(Properties.get('MAILER_BODY','Submission')))) attachment = Attachment('submission_' + str(id) + '.pdf', 'application/pdf', file) message.attach(attachment) mailer = get_mailer(self.request) mailer.send(message) self.notify('Email sent!') except Exception as e: print "ERROR: " + str(e) self.notify('Unable to send email!',warn=True) else: self.notify('Unable to send example email!',warn=True) return self.template('email.pt')
def edit_leaderboard(self): if 'edit.leaderboard.submit' in self.request.params: archive_date = Properties.by({'prop_name':'LEADERBOARD_ARCHIVE_DATE'}).first() archive_date.prop_value = self.request.params.get('edit.leaderboard.archive_date','2013-1-1') transaction.commit() self.response['message'] = "Leaderboard Settings Changed" self.response['message_class'] = "info" self.response['leaderboard'] = {'archive_date': Properties.get('LEADERBOARD_ARCHIVE_DATE','2013-1-1'), } return self.template('/edit-leaderboard.pt', theme='AdminPanel')
def edit_info(self): # Analytics if 'edit.info.analytics.submit' in self.request.params: value = self.request.params.get('edit.info.analytics','') analytics = Properties.by({'prop_name':'ANALYTICS'}).first() analytics.prop_value = value transaction.commit() self.notify('Changes saved!') self.response['analytics'] = Properties.get('ANALYTICS',default='') # Site User Information users = Users.by(None,sort='last_active desc') self.response['users_last_active'] = users.all()[0:5] self.response['users_local_count'] = users.filter(getattr(Users,'is_local')==True).count() self.response['users_non_local_count'] = users.filter(getattr(Users,'is_local')==False).count() self.response['users_total_count'] = users.count() return self.template('/edit-info.pt', theme='AdminPanel')
def edit_theme(self): theme_dir = pkg_resources.resource_filename('quizsmith', 'themes/') os.chdir(theme_dir) try: if 'edit.theme.change.submit' in self.request.params: value = self.request.params.get('edit.theme.change','') p = Properties.by({'prop_name':'ACTIVE_THEME'}).first() p.prop_value = value transaction.commit() self.response['message'] = 'Theme Changed' self.response['message_class'] = 'info' if 'edit.theme.upload.submit' in self.request.params: obj = self.request.params.get('edit.theme.upload','') zip = zipfile.ZipFile(obj.file, 'r') filename = os.path.splitext(os.path.basename(obj.filename))[0] allowed_extensions = tuple(self.settings('safe_uploads_ext','').split(',')) try: shutil.rmtree(filename) except Exception as e: pass # ignore if folder didn't previously exist os.makedirs(filename) os.chdir(filename) for f in zip.namelist(): if f.endswith('/'): os.makedirs(f) elif f.endswith(allowed_extensions): zip.extract(f) self.response['message'] = 'Theme Uploaded' self.response['message_class'] = 'info' os.chdir(theme_dir) if 'edit.theme.remove.submit' in self.request.params: value = self.request.params.get('edit.theme.remove','') shutil.rmtree(value) self.response['message'] = 'Theme Removed' self.response['message_class'] = 'info' except Exception as e: self.response['message_class'] = "warn" if self.response['message'] == '': self.response['message'] = 'Could not complete' print str(e) folders = [d for d in os.listdir('.') if os.path.isdir(d)] self.response['restricted_themes'] = [] self.response['all_themes'] = [] for f in folders: if not any('EXCLUDE_THEME' in s for s in os.listdir(f)): self.response['restricted_themes'].append( str(f) ) self.response['all_themes'].append( str(f) ) return self.template('/edit-theme.pt', theme='AdminPanel')
def edit_theme(self): self.determine_instance('AdminPanel') # since instance_id is needed earlier than render time, determine it by calling sooner. self.response['changeable_themes'] = [] self.response['deletable_themes'] = [] self.response['all_themes'] = [] try: if 'edit.theme.change.submit' in self.request.params: theme_name = self.request.params.get('edit.theme.change','**SimpleBlue') theme_name = theme_name.replace('**','') p = Properties.by({'prop_name':'ACTIVE_THEME'}).first() p.prop_value = theme_name transaction.commit() self.notify('Theme changed to ' + theme_name + '!') return HTTPFound(location=self.request.application_url + '/edit/theme') if 'edit.theme.upload.submit' in self.request.params: theme_dir = pkg_resources.resource_filename('quizsmith', 'themes/' + self.settings('theme.folder')) os.chdir(theme_dir) obj = self.request.params.get('edit.theme.upload','') zip = zipfile.ZipFile(obj.file, 'r') filename = os.path.splitext(os.path.basename(obj.filename))[0] allowed_extensions = tuple(self.settings('safe_uploads_ext','').split(',')) try: shutil.rmtree(filename) except Exception as e: pass # ignore if folder didn't previously exist if not self.has_python(zip): firstpass = True for f in zip.namelist(): if firstpass and not f.endswith('/'): # created folder if not nested zip os.makedirs(filename) os.chdir(filename) if f.endswith('/'): os.makedirs(f) elif f.endswith(allowed_extensions): zip.extract(f) firstpass = False self.notify('Theme Uploaded: ' + str(filename)) if 'edit.theme.remove.submit' in self.request.params: value = self.request.params.get('edit.theme.remove','') shutil.rmtree(value) self.notify('Theme Removed! This cannot be undone.') except Exception as e: print str(e) self.notify('Could not complete',warn=True) self.load_themes('default','**') self.load_themes(self.settings('theme.folder'),'') return self.template('/edit-theme.pt', theme='AdminPanel')
def edit_leaderboard(self): if 'edit.leaderboard.submit' in self.request.params: archive_date = Properties.by({'prop_name':'LEADERBOARD_ARCHIVE_DATE'}).first() archive_date.prop_value = self.request.params.get('edit.leaderboard.archive_date','2013-1-1') hall_of_fame = Properties.by({'prop_name':'LEADERBOARD_HOF'}).first() results = [] for sections in range(int(self.request.params.get('hofs_sections',0))): s = str(sections) data = {'title':self.request.params.get('hofs_' + s + '_title',''), 'index':int(self.request.params.get('hofs_' + s + '_index','0')), 'players':[]} for rows in range(int(self.request.params.get('hofs_' + s + '_rows',0))): r = str(rows) pdata = {'name':self.request.params.get('hofs_' + s + '_' + r + '_name',''), 'score':self.request.params.get('hofs_' + s + '_' + r + '_score',''), 'index':rows} data['players'].append(pdata) data['players'] = sorted(data['players'],key=itemgetter('index')) results.append(data) results = sorted(results,key=itemgetter('index')) hall_of_fame.prop_value = json.dumps(results) transaction.commit() self.notify('Changes saved!') self.response['leaderboard'] = {'archive_date': Properties.get('LEADERBOARD_ARCHIVE_DATE','2013-1-1')} self.response['hofs'] = json.loads(Properties.get('LEADERBOARD_HOF','[]')) return self.template('/edit-leaderboard.pt', theme='AdminPanel')
def edit_mailer(self): if 'edit.mailer.submit' in self.request.params: msubject = Properties.by({'prop_name':'MAILER_TO_SUBJECT'}).first() msubject.prop_value = self.request.params.get('edit.mailer.subject','') mfrom = Properties.by({'prop_name':'MAILER_GLOBAL_FROM_ADDRESS'}).first() mfrom.prop_value = self.request.params.get('edit.mailer.from','') mfeedback = Properties.by({'prop_name':'MAILER_FEEDBACK_ADDRESS'}).first() mfeedback.prop_value = self.request.params.get('edit.mailer.feedback','') mhelp = Properties.by({'prop_name':'MAILER_HELP_ADDRESS'}).first() mhelp.prop_value = self.request.params.get('edit.mailer.help','') mbody = Properties.by({'prop_name':'MAILER_BODY'}).first() mbody.prop_value = self.request.params.get('edit.mailer.body','') transaction.commit() self.notify('Changes saved!') self.response['mailer'] = {'subject': Properties.get('MAILER_TO_SUBJECT',''), 'from_address': Properties.get('MAILER_GLOBAL_FROM_ADDRESS',''), 'feedback_address': Properties.get('MAILER_FEEDBACK_ADDRESS',''), 'body': Properties.get('MAILER_BODY',''), 'help_address': Properties.get('MAILER_HELP_ADDRESS',''), } return self.template('/edit-mailer.pt', theme='AdminPanel')
def archive_date(cls): return datetime.datetime.strptime(Properties.get('LEADERBOARD_ARCHIVE_DATE'), '%Y-%m-%d')
def leaderboard_top_scores(self): self.response['hofs'] = json.loads(Properties.get('LEADERBOARD_HOF','[]')) return self.template('leaderboard_top.pt')
def active_base_theme(self): return Properties.get('ACTIVE_THEME','Original')
def help(self): self.response['help_address'] = Properties.get('MAILER_HELP_ADDRESS',default='') return self.template('help.pt')
def credits(self): self.response['credits'] = json.loads(Properties.get('CREDITS','[]')) return self.template('credits.pt')
def __init__(self, request): self.request = request self.context = request.context self.theme = self.request.active_base_theme self.response = {'instance_id' : 'default', 'analytics' : Properties.get('ANALYTICS')}