Browse Source

changes to linked resources functions

joel
Simon Bowie 2 years ago
parent
commit
0ddf1382e1
5 changed files with 56 additions and 25 deletions
  1. +2
    -7
      web/app/create.py
  2. +9
    -1
      web/app/practice.py
  3. +23
    -7
      web/app/resources.py
  4. +18
    -0
      web/app/templates/edit.html
  5. +4
    -10
      web/app/tool.py

+ 2
- 7
web/app/create.py View File

from flask_login import login_required, current_user from flask_login import login_required, current_user
from .models import Resource from .models import Resource
from .models import Relationship from .models import Relationship
from .resources import *
from werkzeug.exceptions import abort from werkzeug.exceptions import abort
from . import db from . import db


if request.form.getlist('linked_resources'): if request.form.getlist('linked_resources'):
for linked_resource in request.form.getlist('linked_resources'): for linked_resource in request.form.getlist('linked_resources'):
tool = Resource.query.filter_by(type='tool').filter_by(name=name).first() tool = Resource.query.filter_by(type='tool').filter_by(name=name).first()
first_resource_id = tool.id
second_resource_id = linked_resource
new_relationship = Relationship(first_resource_id=first_resource_id, second_resource_id=second_resource_id)

# add the new relationship to the database
db.session.add(new_relationship)
db.session.commit()
add_linked_resource(tool.id, linked_resource)


elif request.form.get('resource_type') == 'practice': elif request.form.get('resource_type') == 'practice':
type = 'practice' type = 'practice'

+ 9
- 1
web/app/practice.py View File

@login_required @login_required
def edit_practice(practice_id): def edit_practice(practice_id):
practice = get_resource(practice_id) practice = get_resource(practice_id)
resource_dropdown = Resource.query
links = get_linked_resources(practice_id)


if request.method == 'POST': if request.method == 'POST':
name = request.form['name'] name = request.form['name']
description = request.form['description'] description = request.form['description']
linked_resources = request.form.getlist('linked_resources')


if not name: if not name:
flash('Name is required!') flash('Name is required!')
practice.name = name practice.name = name
practice.description = description practice.description = description
db.session.commit() db.session.commit()
if linked_resources:
for linked_resource in request.form.getlist('linked_resources'):
link = Resource.query.get(linked_resource)
if link not in links:
add_linked_resource(practice_id, linked_resource)
return redirect(url_for('practice.get_practices')) return redirect(url_for('practice.get_practices'))


return render_template('edit.html', resource=practice)
return render_template('edit.html', resource=practice, resource_dropdown=resource_dropdown, links=links)


# route for function to delete a single practice from the edit page # route for function to delete a single practice from the edit page
@practice.route('/practices/<int:practice_id>/delete', methods=('POST',)) @practice.route('/practices/<int:practice_id>/delete', methods=('POST',))

+ 23
- 7
web/app/resources.py View File

return resource return resource


# function to retrieve linked resources # function to retrieve linked resources
def get_linked_resources(resource_id):
relationships = Relationship.query.filter_by(first_resource_id=resource_id).all()
def get_linked_resources(primary_id):
relationships = Relationship.query.filter_by(first_resource_id=primary_id).all()
links = []
if relationships: if relationships:
links = [] links = []
for relationship in relationships: for relationship in relationships:
resource_id = relationship.second_resource_id
links.extend(Resource.query.filter_by(id=resource_id).all())
secondary_id = relationship.second_resource_id
links.extend(Resource.query.filter_by(id=secondary_id).all())
secondary_relationships = Relationship.query.filter_by(second_resource_id=primary_id).all()
if secondary_relationships:
for relationship in secondary_relationships:
primary_id = relationship.first_resource_id
links.extend(Resource.query.filter_by(id=primary_id).all())
return links return links
else: else:
relationships = Relationship.query.filter_by(second_resource_id=resource_id).all()
relationships = Relationship.query.filter_by(second_resource_id=primary_id).all()
if relationships: if relationships:
links = [] links = []
for relationship in relationships: for relationship in relationships:
resource_id = relationship.first_resource_id
links.extend(Resource.query.filter_by(id=resource_id).all())
primary_id = relationship.first_resource_id
links.extend(Resource.query.filter_by(id=primary_id).all())
return links return links


# function to add a relationship to a linked resource
def add_linked_resource(resource_id, linked_resource_id):
first_resource_id = resource_id
second_resource_id = linked_resource_id
new_relationship = Relationship(first_resource_id=first_resource_id, second_resource_id=second_resource_id)

# add the new relationship to the database
db.session.add(new_relationship)
db.session.commit()

# function to delete a single resource # function to delete a single resource
def delete_resource(resource_id): def delete_resource(resource_id):
deletion = Resource.query.get(resource_id) deletion = Resource.query.get(resource_id)

+ 18
- 0
web/app/templates/edit.html View File

{% endfor %} {% endfor %}
</select> </select>
</div> </div>

{% elif resource['type'] == 'practice' %}
<div class="mb-3 mt-3">
<label for="linked_practice_id">Linked resources</label>
</div>
<div class="mb-3 mt-3">
<select name="linked_resources" id="linked_resources" aria-label="Linked resources" class="selectpicker" data-live-search="true" multiple>
{% for resource_dropdown in resource_dropdown %}
{% if resource_dropdown['type'] != 'practice' %}
{% if resource_dropdown in links %}
<option value="{{ resource_dropdown['id'] }}" selected>{{ resource_dropdown['name'] }}</option>
{% else %}
<option value="{{ resource_dropdown['id'] }}">{{ resource_dropdown['name'] }}</option>
{% endif %}
{% endif %}
{% endfor %}
</select>
</div>
{% endif %} {% endif %}


<div class="mb-3 mt-3"> <div class="mb-3 mt-3">

+ 4
- 10
web/app/tool.py View File

ingestFormats = request.form['ingestFormats'] ingestFormats = request.form['ingestFormats']
outputFormats = request.form['outputFormats'] outputFormats = request.form['outputFormats']
status = request.form['status'] status = request.form['status']
linked_resource = request.form.getlist('linked_resources')
linked_resources = request.form.getlist('linked_resources')


if not name: if not name:
flash('Name is required!') flash('Name is required!')
tool.outputFormats = outputFormats tool.outputFormats = outputFormats
tool.status = status tool.status = status
db.session.commit() db.session.commit()
if linked_resource:
for linked_resource in request.form.getlist('linked_resources'):
if linked_resources:
for linked_resource in linked_resources:
link = Resource.query.get(linked_resource) link = Resource.query.get(linked_resource)
if link not in links: if link not in links:
first_resource_id = tool_id
second_resource_id = linked_resource
new_relationship = Relationship(first_resource_id=first_resource_id, second_resource_id=second_resource_id)

# add the new relationship to the database
db.session.add(new_relationship)
db.session.commit()
add_linked_resource(tool_id, linked_resource)
return redirect(url_for('tool.get_tools')) return redirect(url_for('tool.get_tools'))


return render_template('edit.html', resource=tool, resource_dropdown=resource_dropdown, links=links) return render_template('edit.html', resource=tool, resource_dropdown=resource_dropdown, links=links)

Loading…
Cancel
Save