| @@ -38,6 +38,7 @@ def create_resource(): | |||
| ingestFormats = request.form.get('ingestFormats') | |||
| outputFormats = request.form.get('outputFormats') | |||
| status = request.form.get('status') | |||
| practice_id = request.form.get('linked_practice_id') | |||
| if not name: | |||
| flash('Name is required!') | |||
| @@ -49,7 +50,7 @@ def create_resource(): | |||
| return redirect(url_for('create.create_resource')) | |||
| # create a new tool with the form data | |||
| new_tool = Tool(name=name, description=description, projectUrl=projectUrl, repositoryUrl=repositoryUrl, expertiseToUse=expertiseToUse, expertiseToHost=expertiseToHost, dependencies=dependencies, ingestFormats=ingestFormats, outputFormats=outputFormats, status=status) | |||
| new_tool = Tool(name=name, description=description, projectUrl=projectUrl, repositoryUrl=repositoryUrl, expertiseToUse=expertiseToUse, expertiseToHost=expertiseToHost, dependencies=dependencies, ingestFormats=ingestFormats, outputFormats=outputFormats, status=status, practice_id=practice_id) | |||
| # add the new tool to the database | |||
| db.session.add(new_tool) | |||
| @@ -175,4 +176,5 @@ def create_resource(): | |||
| db.session.add(new_reference) | |||
| db.session.commit() | |||
| return render_template('create.html') | |||
| practice_dropdown = Practice.query | |||
| return render_template('create.html', practice_dropdown=practice_dropdown) | |||
| @@ -68,6 +68,16 @@ | |||
| <label for="status">Platform status</label> | |||
| <input class="form-control" type="text" name="status" placeholder="Platform status" autofocus=""> | |||
| </div> | |||
| <div class="mb-3 mt-3"> | |||
| <label for="linked_practice_id">Linked practices</label> | |||
| <select class="form-select" aria-label="Linked practices" name="linked_practice_id"> | |||
| <option selected>Select a linked practice</option> | |||
| {% for practice_dropdown in practice_dropdown %} | |||
| <option value="{{ practice_dropdown['id'] }}">{{ practice_dropdown['name'] }}</option> | |||
| {% endfor %} | |||
| </select> | |||
| </div> | |||
| </div> | |||
| <div id="resource_type_practice" class="resource_type_input" style="display: none;"> | |||
| <div class="mb-3 mt-3"> | |||
| @@ -16,17 +16,14 @@ | |||
| <div class="row"> | |||
| {% for practice in practices %} | |||
| <div class="col-md-4 col-sm-6 py-3"> | |||
| <div class="card"> | |||
| <div class="card-header"> | |||
| <div class="card text-dark bg-warning mb-3"> | |||
| <div class="card-body"> | |||
| <a href="{{ url_for('practice.show_practice', practice_id=practice['id']) }}"> | |||
| <h2 class="card-title">{{ practice['name'] }}</h2> | |||
| <h3 class="card-title text-center text-dark">{{ practice['name'] }}</h3> | |||
| </a> | |||
| </div> | |||
| <div class="card-body"> | |||
| <p class="card-text"> | |||
| {{ practice['description']|truncate(100) }} | |||
| </p> | |||
| <span class="badge bg-secondary">{{ practice['created'].strftime("%Y-%m-%d %H:%M") }} UTC</span> | |||
| {% if current_user.is_authenticated %} | |||
| <a href="{{ url_for('practice.edit_practice', practice_id=practice['id']) }}"> | |||
| <span class="badge bg-dark">Edit</span> | |||
| @@ -101,4 +101,25 @@ | |||
| </table> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col"> | |||
| <h2 class="text-center">Linked practices:</h2> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col-md-4 col-sm-6 py-3"> | |||
| <div class="card text-dark bg-warning mb-3"> | |||
| <div class="card-body"> | |||
| <a href="{{ url_for('practice.show_practice', practice_id=practice['id']) }}"> | |||
| <h3 class="card-title text-center text-dark">{{ practice['name'] }}</h3> | |||
| </a> | |||
| <p class="card-text"> | |||
| {{ practice['description']|truncate(100) }} | |||
| </p> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {% endblock %} | |||
| @@ -10,6 +10,7 @@ | |||
| from flask import Blueprint, render_template, request, flash, redirect, url_for | |||
| from flask_login import login_required, current_user | |||
| from .models import Tool | |||
| from .models import Practice | |||
| from werkzeug.exceptions import abort | |||
| from . import db | |||
| @@ -22,6 +23,11 @@ def get_tool(tool_id): | |||
| abort(404) | |||
| return tool | |||
| # function to retrieve linked practices | |||
| def get_practice(practice_id): | |||
| practice = Practice.query.filter_by(id=practice_id).first() | |||
| return practice | |||
| # route for displaying all tools in database | |||
| @tool.route('/tools') | |||
| def get_tools(): | |||
| @@ -32,7 +38,8 @@ def get_tools(): | |||
| @tool.route('/tools/<int:tool_id>') | |||
| def show_tool(tool_id): | |||
| tool = get_tool(tool_id) | |||
| return render_template('tool.html', tool=tool) | |||
| practice = get_practice(tool.practice_id) | |||
| return render_template('tool.html', tool=tool, practice=practice) | |||
| # route for editing a single tool based on the ID in the database | |||
| @tool.route('/tools/<int:tool_id>/edit', methods=('GET', 'POST')) | |||
| @@ -58,6 +65,7 @@ def edit_tool(tool_id): | |||
| tool.ingestFormats = ingest | |||
| tool.outputFormats = output | |||
| tool.status = status | |||
| tool.practice_id = practice_id | |||
| db.session.commit() | |||
| return redirect(url_for('tool.get_tools')) | |||