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 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') 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_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','') mbody = Properties.by({'prop_name':'MAILER_BODY'}).first() mbody.prop_value = self.request.params.get('edit.mailer.body','') transaction.commit() self.response['message'] = "Mailer Settings Changed" self.response['message_class'] = "info" 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',''), } return self.template('/edit-mailer.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')