def activate_troika(troika_id): url = __check_login(url = url_for('activate_troika', troika_id = troika_id)) if url: return redirect(url) troika = get_troika(troika_id); user = get_user(session['email']) if activatable(user, troika, app.config.get('ACTIVATABLE_BEFORE_THREE')): if troika.start_time < datetime.now() and user.role != 'admin': flash(_(u'Start time is in the past, change it before activating Troika'), 'error') return redirect(url_for('troika', troika_id=troika_id)) __process_activation(troika) save_troika(troika) flash(_(u"Troika %(title)s activated", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) else: flash(_(u'Troika can only be activated by the creator or lead after all required information is set'), 'error') return redirect(url_for('troika', troika_id=troika_id))
def join_troika(troika_id, troika_role): url = __check_login(url = url_for('join_troika', troika_id = troika_id, troika_role = troika_role)) if url: return redirect(url) troika = get_troika(troika_id); user = get_user(session['email']) if not __participating(user, troika): if troika_role == '0': if troika.lead is not None: flash(_(u"The Troika already has a lead"), 'error') return redirect(url_for('troika', troika_id=troika_id)) troika.lead = user __process_pending(troika) save_troika(troika) flash(_(u"You are now the lead of %(title)s", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) elif troika_role == '1': if troika.first_learner is not None: flash(_(u"The Troika already has a first learner"), 'error') return redirect(url_for('troika', troika_id=troika_id)) troika.first_learner = user __process_pending(troika) save_troika(troika) flash(_(u"You are now the first learner of %(title)s", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) elif troika_role == '2': if troika.second_learner is not None: flash(_(u"The Troika already has a second learner"), 'error') return redirect(url_for('troika', troika_id=troika_id)) troika.second_learner = user __process_pending(troika) save_troika(troika) flash(_(u"You are now the second learner of %(title)s", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) elif troika_role == '3': if user in troika.participants: flash(_(u"You are already participating in the Troika"), 'error') return redirect(url_for('troika', troika_id=troika_id)) if __is_full(troika): flash(_(u"There is no more room in this Troika"), 'error') return redirect(url_for('troika', troika_id=troika_id)) troika.participants.append(user) save_troika(troika) flash(_(u"You are now participating in %(title)s", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) else: flash(_(u"Unknown Troika role: %(role)", role=troika_role), 'error') return redirect(url_for('troika', troika_id=troika_id)) else: flash(_(u"You are already participating in the Troika"), 'error') return redirect(url_for('troika', troika_id=troika_id))
def create_troika(): url = __check_login('create_troika') if url: return redirect(url) troikaerrors = [] troikaform = TroikaForm(prefix="troika") if troikaform.validate_on_submit(): user = get_user(session['email']) # Validate times if troikaform.start_date.data is not None and (troikaform.start_time_hours.data is None or troikaform.start_time_minutes.data is None or troikaform.duration.data is None): troikaerrors.append(_(u"When a date is set, you must also give values for hours, minutes and duration")) else: start_time = __get_start_datetime(troikaform.start_date.data, troikaform.start_time_hours.data, troikaform.start_time_minutes.data) if start_time is not None and start_time < datetime.now(): troikaerrors.append(_(u"Start time for the Troika must be in the future")) else: troika = Troika(created = datetime.now(), title=troikaform.title.data, description=troikaform.description.data, country='FI', region=None, area_id=None, campus_id=None, address=troikaform.address.data if troikaform.address.data != "" else None, address_addendum=troikaform.address_addendum.data if troikaform.address_addendum.data != "" else None, language=troikaform.language.data, start_time=start_time, end_time=__get_end_datetime(start_time, troikaform.duration.data), max_participants=troikaform.max_participants.data, creator=user) if troikaform.creator_role.data == 'lead': troika.lead = user else: troika.first_learner = user save_troika(troika) flash(_(u"Troika Created")) return redirect(url_for('troika', troika_id=troika.id)) if troikaform.errors: for key, value in troikaform.errors.items(): troikaerrors.append(key + ': ' + value[0]) return render_template('edit_troika.html', troikaform=troikaform, troikaerrors=troikaerrors, access='create')
def leave_troika(troika_id, troika_role): url = __check_login(url = url_for('leave_troika', troika_id = troika_id, troika_role = troika_role)) if url: return redirect(url) troika = get_troika(troika_id); user = get_user(session['email']) if troika.get_phase() != 'complete': if troika_role == '0': if troika.lead != user: flash(_(u"You are not the lead of this Troika"), 'error') return redirect(url_for('troika', troika_id=troika_id)) troika.lead = None save_troika(troika) flash(_(u"You are no longer the lead of %(title)s", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) elif troika_role == '1': if troika.first_learner != user: flash(_(u"You are not the first learner of this Troika"), 'error') return redirect(url_for('troika', troika_id=troika_id)) troika.first_learner = None save_troika(troika) flash(_(u"You are no longer the first learner of %(title)s", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) elif troika_role == '2': if troika.second_learner != user: flash(_(u"You are not the second learner of this Troika"), 'error') return redirect(url_for('troika', troika_id=troika_id)) troika.second_learner = None save_troika(troika) flash(_(u"You are no longer the second learner of %(title)s", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) elif troika_role == '3': if user not in troika.participants: flash(_(u"You are not participating in the Troika"), 'error') return redirect(url_for('troika', troika_id=troika_id)) troika.participants.remove(user) save_troika(troika) flash(_(u"You are no longer participating in %(title)s", title=troika.title)) return redirect(url_for('troika', troika_id=troika_id)) else: flash(_(u"Unknown Troika role: %(role)s", role = troika_role), 'error') return redirect(url_for('troika', troika_id=troika_id)) else: flash(_(u"You can not leave a Troika that is complete"), 'error') return redirect(url_for('troika', troika_id=troika_id))
def edit_troika(troika_id): url = __check_login(url = url_for('edit_troika', troika_id = troika_id)) if url: return redirect(url) troikaerrors = [] troikaform = TroikaForm(prefix="troika") # Find out if the logged in user has rights to edit/delete troika = get_troika(troika_id); user = get_user(session['email']) access = get_troika_access_right(user, troika) if not access: flash(_(u'Only the creator or the lead can edit the Troika'), 'error') return redirect(url_for('troika', troika_id=troika_id)) if request.method == 'GET': # Add default values troikaform.title.data = troika.title troikaform.description.data = troika.description troikaform.address.data = troika.address troikaform.address_addendum.data = troika.address_addendum troikaform.language.data = troika.language troikaform.start_date.data = troika.start_time troikaform.start_time_hours.data = __get_formatted_datetime(troika.start_time,"%H") troikaform.start_time_minutes.data = __get_formatted_datetime(troika.start_time,"%M") troikaform.duration.data = __get_duration(troika.start_time, troika.end_time) troikaform.max_participants.data = troika.max_participants elif troikaform.validate_on_submit(): if request.form["action"] == _(u"Save Troika"): # Validate times if troikaform.start_date.data is not None and (troikaform.start_time_hours.data is None or troikaform.start_time_minutes.data is None or troikaform.duration.data is None): troikaerrors.append(_(u"When a date is set, you must also give values for hours, minutes and duration")) else: start_time = __get_start_datetime(troikaform.start_date.data, troikaform.start_time_hours.data, troikaform.start_time_minutes.data) if user.role != 'admin' and start_time is not None and start_time < datetime.now(): troikaerrors.append(_(u"Start time for the Troika must be in the future")) else: # Update info troika.title = troikaform.title.data troika.description = troikaform.description.data troika.address = troikaform.address.data if troikaform.address.data != "" else None troika.address_addendum = troikaform.address_addendum.data if troikaform.address_addendum.data != "" else None troika.language = troikaform.language.data troika.start_time = start_time troika.end_time = __get_end_datetime(troika.start_time, troikaform.duration.data) troika.max_participants = troikaform.max_participants.data # Activate automatically when all information is given if activation_ready(troika): __process_activation(troika) flash (_(u"Troika activated!")) save_troika(troika) flash(_(u'Troika saved')) return redirect(url_for('troika', troika_id=troika_id)) elif request.form["action"] == _(u"Delete Troika"): title = troika.title delete_troika(troika) flash(_(u"Troika \"%(title)s\" deleted", title=title)) return redirect(url_for('troikas')) if troikaform.errors: for key, value in troikaform.errors.items(): troikaerrors.append(key + ': ' + value[0]) return render_template('edit_troika.html', troikaform=troikaform, troikaerrors=troikaerrors, access=access)