Fix for #3520 (Mass remove books from shelf)
This commit is contained in:
+47
-3
@@ -102,6 +102,52 @@ def add_to_shelf(shelf_id, book_id):
|
|||||||
return "", 204
|
return "", 204
|
||||||
|
|
||||||
|
|
||||||
|
@shelf.route("/shelf/massremove/<int:shelf_id>", methods=["POST"])
|
||||||
|
@user_login_required
|
||||||
|
def search_from_shelf(shelf_id):
|
||||||
|
shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.id == shelf_id).first()
|
||||||
|
if shelf is None:
|
||||||
|
log.error("Invalid shelf specified: {}".format(shelf_id))
|
||||||
|
flash(_("Invalid shelf specified"), category="error")
|
||||||
|
return redirect(url_for('web.index'))
|
||||||
|
|
||||||
|
if not check_shelf_edit_permissions(shelf):
|
||||||
|
log.warning("You are not allowed to remove a book from the shelf".format(shelf.name))
|
||||||
|
flash(_("You are not allowed to remove a book from the shelf"), category="error")
|
||||||
|
return redirect(url_for('web.index'))
|
||||||
|
|
||||||
|
if current_user.id in ub.searched_ids and ub.searched_ids[current_user.id]:
|
||||||
|
books_from_shelf = list()
|
||||||
|
books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).all()
|
||||||
|
if books_in_shelf:
|
||||||
|
book_ids = [book_id.book_id for book_id in books_in_shelf]
|
||||||
|
for searchid in ub.searched_ids[current_user.id]:
|
||||||
|
if searchid in book_ids:
|
||||||
|
books_from_shelf.append(searchid)
|
||||||
|
else:
|
||||||
|
log.error("No Books are part of {}".format(shelf.name))
|
||||||
|
flash(_("No Books are part of the shelf: %(name)s", name=shelf.name), category="error")
|
||||||
|
return redirect(url_for('web.index'))
|
||||||
|
|
||||||
|
# maxOrder = ub.session.query(func.max(ub.BookShelf.order)).filter(ub.BookShelf.shelf == shelf_id).first()[0] or 0
|
||||||
|
|
||||||
|
for book in books_from_shelf:
|
||||||
|
ub.session.delete(ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).filter(
|
||||||
|
ub.BookShelf.book_id == book).first())
|
||||||
|
shelf.last_modified = datetime.now(timezone.utc)
|
||||||
|
try:
|
||||||
|
ub.session.commit()
|
||||||
|
flash(_("Books have been removed from shelf: %(sname)s", sname=shelf.name), category="success")
|
||||||
|
except (OperationalError, InvalidRequestError) as e:
|
||||||
|
ub.session.rollback()
|
||||||
|
log.error_or_exception("Settings Database error: {}".format(e))
|
||||||
|
flash(_("Oops! Database Error: %(error)s.", error=e.orig), category="error")
|
||||||
|
else:
|
||||||
|
log.error("Could not remove books from shelf: {}".format(shelf.name))
|
||||||
|
flash(_("Could not remove books from shelf: %(sname)s", sname=shelf.name), category="error")
|
||||||
|
return redirect(url_for('web.index'))
|
||||||
|
|
||||||
|
|
||||||
@shelf.route("/shelf/massadd/<int:shelf_id>", methods=["POST"])
|
@shelf.route("/shelf/massadd/<int:shelf_id>", methods=["POST"])
|
||||||
@user_login_required
|
@user_login_required
|
||||||
def search_to_shelf(shelf_id):
|
def search_to_shelf(shelf_id):
|
||||||
@@ -120,9 +166,7 @@ def search_to_shelf(shelf_id):
|
|||||||
books_for_shelf = list()
|
books_for_shelf = list()
|
||||||
books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).all()
|
books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).all()
|
||||||
if books_in_shelf:
|
if books_in_shelf:
|
||||||
book_ids = list()
|
book_ids = [book_id.book_id for book_id in books_in_shelf]
|
||||||
for book_id in books_in_shelf:
|
|
||||||
book_ids.append(book_id.book_id)
|
|
||||||
for searchid in ub.searched_ids[current_user.id]:
|
for searchid in ub.searched_ids[current_user.id]:
|
||||||
if searchid not in book_ids:
|
if searchid not in book_ids:
|
||||||
books_for_shelf.append(searchid)
|
books_for_shelf.append(searchid)
|
||||||
|
|||||||
@@ -24,6 +24,20 @@
|
|||||||
{%endfor%}
|
{%endfor%}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="btn-group" role="group" aria-label="Remove from shelves">
|
||||||
|
<button id="remove-from-shelf" type="button" class="btn btn-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
<span class="glyphicon glyphicon-list"></span> {{_('Remove from shelf')}}
|
||||||
|
<span class="caret"></span>
|
||||||
|
</button>
|
||||||
|
<ul id="remove-from-shelves" class="dropdown-menu" aria-labelledby="add-to-shelf">
|
||||||
|
{% for shelf in g.shelves_access %}
|
||||||
|
{% if not shelf.is_public or current_user.role_edit_shelfs() %}
|
||||||
|
<li><a class="postAction" role="button" data-action="{{ url_for('shelf.search_from_shelf', shelf_id=shelf.id) }}"> {{shelf.name}}{% if shelf.is_public == 1 %} {{_('(Public)')}}{% endif %}</a></li>
|
||||||
|
{% endif %}
|
||||||
|
{%endfor%}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
Reference in New Issue
Block a user