Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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 ""
Example #7
0
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)