def import_category(self): if 'form.submit' in self.request.params: content = self.request.params.get('form.import') data = self._import_zip(content) if not data: self.response['message'] = 'This export was made for a different version of this application.\ You can rename the .zip filename to match your systems version, however this will most likely result in consequences and is not recommended.' else: category = data['category'] new_category = Categories(name=category['name'], category_intro=category['category_intro'], playable_questions=category['playable_questions'], wrong_answer_time_penalty=category['wrong_answer_time_penalty'], max_wrong_answer_allowed=category['max_wrong_answer_allowed'], question_time_allowed=category['question_time_allowed'], transition_in=category['transition_in'], transition_out=category['transition_out'], ) new_category.set_groups([],[str(group.id) for group in Groups.by({'edit':True}).all()],[str(group.id) for group in Groups.by({'review':True}).all()]) #anyone with group edit permission are allowed to edit. DBSession.add(new_category) DBSession.flush() for qs in data['question_sets']: new_qs = QuestionSets(category_id=new_category.id, answer_help=qs['answer_help'] ) DBSession.add(new_qs) DBSession.flush() for q in qs['questions']: new_q = Questions(question_sets_id=new_qs.id, question=q['question'] ) DBSession.add(new_q) for a in qs['answers']: new_a = Answers(question_sets_id=new_qs.id, answer=a['answer'], position=a['position'], is_correct = a['is_correct'] ) DBSession.add(new_a) DBSession.flush() transaction.commit() self.response['message'] = 'Imported!' self.response['message_class'] = 'info' return self.template('/import-category.pt', theme='AdminPanel')
def import_category(self): if 'form.submit' in self.request.params: content = self.request.params.get('form.import') data = self._import_zip(content) if not data: self.notify('This export was made for a different version of this application.',warn=True) else: category = data['category'] new_category = Categories(name=category['name'], category_intro=category['category_intro'], playable_questions=category['playable_questions'], wrong_answer_time_penalty=category['wrong_answer_time_penalty'], max_wrong_answer_allowed=category['max_wrong_answer_allowed'], question_time_allowed=category['question_time_allowed'], transition_in=category['transition_in'], transition_out=category['transition_out'], ) new_category.set_groups([],[str(group.id) for group in Groups.by({'edit':True}).all()],[str(group.id) for group in Groups.by({'review':True}).all()]) #anyone with group edit permission are allowed to edit. DBSession.add(new_category) DBSession.flush() for qs in data['question_sets']: new_qs = QuestionSets(category_id=new_category.id, answer_help=qs['answer_help'] ) DBSession.add(new_qs) DBSession.flush() for q in qs['questions']: new_q = Questions(question_sets_id=new_qs.id, question=q['question'] ) DBSession.add(new_q) for a in qs['answers']: new_a = Answers(question_sets_id=new_qs.id, answer=a['answer'], position=a['position'], is_correct = a['is_correct'] ) DBSession.add(new_a) DBSession.flush() transaction.commit() self.notify('Successfully imported!') return self.template('/import-category.pt', theme='AdminPanel')
def edit_category(self): category_id = self.request.matchdict['category'] self.response['category_id'] = category_id self.response['version'] = Addons.get_version('QuizSmith Core') self.response['d2l_on'] = Validate.bool(self.settings('d2l_on')) if 'form.submit' in self.request.params or 'form.submit.questions' in self.request.params: active = None if category_id == 'add': active = Categories(name='New Category') editors = [] for group in self.request.user.get_groups(): editors.append(str(group.id)) reviewers = [] for group in self.request.user.get_groups(): reviewers.append(str(group.id)) active.set_groups([], editors, reviewers) DBSession.add(active) DBSession.flush() category_id = str(active.id) else: active = Categories.by(category_id, sort='position asc', user=self.request.user, permission=ACL.EDIT).first() active.name = self.request.params.get('category.name','') active.category_intro = self.request.params.get('category.intro','') active.playable_questions = self.request.params.get('category.playable_questions',10) active.wrong_answer_time_penalty = self.request.params.get('category.wrong_answer_time_penalty',5) active.max_wrong_answer_allowed = self.request.params.get('category.max_wrong_answer_allowed',2) active.question_time_allowed = self.request.params.get('category.question_time_allowed',30) active.transition_in = self.request.params.get('category.transition_in','Random') active.transition_out = self.request.params.get('category.transition_out','Random') active.d2l_folder = self.request.params.get('category.d2l_folder','') assesment_data = [] for key,v in self.request.params.iteritems(): if key.startswith('assessment'): field_data = key.split('.') row = {} if not any(a['id'] == field_data[-1] for a in assesment_data): assesment_data.append(row) else: row = filter(lambda x: x['id'] == field_data[-1], assesment_data)[0] row['id'] = field_data[-1] if v.isdigit(): row[field_data[1]] = int(v) else: row[field_data[1]] = str(v) active.set_assessments(assesment_data) editors = [] if self.request.params.getall('category.editable'): editors = self.request.params.getall('category.editable') else: for g in active.groups: if g.edit: editors.append(str(g.groups_id)) reviewers = [] if self.request.params.getall('category.reviewable'): reviewers = self.request.params.getall('category.reviewable') else: for g in active.groups: if g.edit: editors.append(str(g.groups_id)) active.set_groups(self.request.params.getall('category.playable'), editors, reviewers) DBSession.flush() transaction.commit() self.notify('Changes saved!') if 'form.submit.questions' in self.request.params: return HTTPFound(location=self.request.application_url + '/edit/category/' + category_id + '/questions') return HTTPFound(location=self.request.application_url + '/edit/category/' + category_id) elif category_id == 'add': self.response['active_category'] = Categories(name='New Category') else: self.response['active_category'] = Categories.by(category_id, sort='position asc', user=self.request.user, permission=ACL.EDIT, strict=True).first() self.response['transitions_in'] = self.response['active_category'].transition_in self.response['transitions_out'] = self.response['active_category'].transition_out self.response['transitions'] = Transitions.all() self.response['questions'] = QuestionSets.by({'category_id':category_id}).count() self.response['all_edit_groups'] = Groups.by({'edit':True}).all() self.response['all_play_groups'] = Groups.by({'play':True}).all() self.response['all_review_groups'] = Groups.by({'review':True}).all() self.response['play_groups'] = [] self.response['edit_groups'] = [] self.response['review_groups'] = [] if self.response['active_category'].groups: for categorygroup in self.response['active_category'].groups: group = Groups.by(categorygroup.groups_id).first() if categorygroup.edit: self.response['edit_groups'].append(group.name) if categorygroup.play: self.response['play_groups'].append(group.name) if categorygroup.review: self.response['review_groups'].append(group.name) return self.template('/edit-category.pt', theme='AdminPanel')