def upload_files(): form = UploadFilesForm() modules = Module.query.all() modules = [(module.id, module.get_full_formatted()) for module in modules] form.module_id.choices = modules if form.validate_on_submit(): basedir = os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "..") module_files_path = os.path.join(basedir, "webapp", "luminus", "modules", str(form.module_id.data), "files") files = request.files.getlist(form.files.name) if files: for file in files: file.save( os.path.join(module_files_path, form.category.data, secure_filename(file.filename))) module = Module.query.get(form.module_id.data) users = module.users for user in users: if user.telegram_id: telegram.send_message( user.telegram_id, f"New file update from {module.get_full_formatted()}.") flash("Successfully uploaded file(s)", "success") return redirect(url_for("admin.upload_files")) return render_template("admin/module/upload_files.html", form=form)
def assign_task(): form = AssignTaskForm() tasks = ModuleTask.query.all() tasks = [(task.id, f"{task.module.get_full_formatted()}, {task.title}") for task in tasks] form.task_id.choices = tasks users = User.query.all() users = [(user.id, user.username) for user in users] form.user_id.choices = users if form.validate_on_submit(): task = ModuleTask.query.get(form.task_id.data) user = User.query.get(form.user_id.data) if user in task.users.all(): flash("This task is already assigned to the user!", "danger") return redirect(url_for("admin.assign_task")) module_task_user = ModuleTaskUserMap() form.populate_obj(module_task_user) db.session.add(module_task_user) db.session.commit() if user.telegram_id: telegram.send_message( user.telegram_id, f"New task assigned to you from {task.module.get_full_formatted()}." ) flash("Successfully assigned task!", "success") return redirect(url_for("admin.assign_task")) return render_template("admin/module/assign_task.html", form=form)
def manage_application(): form = ManageApplicationForm() applications = HostelApplication.query.all() user_ids = [] hostel_room_ids = [] for application in applications: user_id = application.user_id username = User.query.get(application.user_id).username user_ids.append((user_id, username)) hostel_id = application.hostel_id rooms = Hostel.query.get(hostel_id).rooms for room in rooms: if room.is_currently_available(): room_option = ( room.id, f"[{room.hostel.name.capitalize()}] Room {room.get_formatted_location()}" ) if room_option not in hostel_room_ids: hostel_room_ids.append(room_option) form.user_id.choices = user_ids form.hostel_room_id.choices = hostel_room_ids if form.validate_on_submit(): application = HostelApplication.query.filter_by( user_id=form.user_id.data, hostel_id=HostelRoom.query.get( form.hostel_room_id.data).hostel.id).first() if application: db.session.delete(application) rent = HostelRoomUserMap( hostel_room_id=form.hostel_room_id.data, academic_year=current_app.config["CURRENT_ACADEMIC_YEAR"], semester=current_app.config["CURRENT_SEMESTER"], user_id=form.user_id.data) db.session.add(rent) db.session.commit() user = User.query.get(form.user_id.data) if user.telegram_id: telegram.send_message( user.telegram_id, "Your hostel application has been approved.") flash("Successfully processed application!", "success") return redirect(url_for("admin.manage_application")) return render_template("admin/hostel/manage_application.html", form=form)
def post_announcement(): form = PostAnnouncementForm() modules = Module.query.all() modules = [(module.id, module.get_full_formatted()) for module in modules] form.module_id.choices = modules if form.validate_on_submit(): announcement = ModuleAnnouncement() form.populate_obj(announcement) db.session.add(announcement) db.session.commit() users = announcement.module.users for user in users: if user.telegram_id: telegram.send_message( user.telegram_id, f"There is a new announcement made from {announcement.module.get_full_formatted()}." ) flash("Successfully posted announcement!", "success") return redirect(url_for("admin.post_announcement")) return render_template("admin/module/post_announcement.html", form=form)
def broadcast_message(): form = BroadcastMessageForm() hostels = Hostel.query.all() hostels = [(hostel.id, hostel.name) for hostel in hostels] form.hostel_id.choices = hostels if form.validate_on_submit(): message = HostelMessage() form.populate_obj(message) db.session.add(message) db.session.commit() hostel = Hostel.query.get(form.hostel_id.data) rooms = hostel.rooms for room in rooms: user = room.get_current_user() if user: if user.telegram_id: telegram.send_message( user.telegram_id, f"There is a new message posted from {message.hostel.name}" ) flash("Successfully broadcasted message!", "success") return redirect(url_for("admin.broadcast_message")) return render_template("admin/hostel/broadcast_message.html", form=form)
def update(): message = telegram.parse_update(request.get_data()) text = message["text"] if text.startswith("/register "): user_id_token = text.split("/register ")[1] user_id = jwt.decode(user_id_token, current_app.config["SECRET_KEY"], algorithms=["HS256"]) user = User.query.get(user_id["user_id"]) user.telegram_id = message["from"]["id"] db.session.commit() telegram.send_message( message["from"]["id"], "Dear {}, you've registered for telegram subscription!".format( user.profile.get_full_name())) elif text.startswith("/unregister"): user = User.query.filter_by(telegram_id=message["from"]["id"]).first() user.telegram_id = None db.session.commit() telegram.send_message( message["from"]["id"], "Dear {}, we're sad to see you leave :( come back soon!".format( user.profile.get_full_name())) return ""
def enroll_student(): form = EnrollStudentForm() modules = Module.query.all() modules = [(module.id, module.get_full_formatted()) for module in modules] form.module_id.choices = modules users = User.query.all() users = [(user.id, user.username) for user in users] form.user_id.choices = users if form.validate_on_submit(): module = Module.query.get(form.module_id.data) user = User.query.get(form.user_id.data) if user in module.users.all(): flash("This user is already enrolled to module!", "danger") return redirect(url_for("admin.enroll_student")) module.users.append(user) db.session.commit() if user.telegram_id: telegram.send_message( user.telegram_id, f"You've been enrolled into {module.get_full_formatted()}.") flash("Successfully enrolled student!", "success") return redirect(url_for("admin.enroll_student")) return render_template("admin/module/enroll_student.html", form=form)