mirror of
https://github.com/janeczku/calibre-web
synced 2024-11-16 06:44:54 +00:00
Redirect shelf to category. - Sponsor: Fundación Karisma
This commit is contained in:
parent
c2267b6902
commit
0be83a5517
@ -22,7 +22,7 @@ from werkzeug.local import LocalProxy
|
|||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
from sqlalchemy.sql.expression import or_
|
from sqlalchemy.sql.expression import or_
|
||||||
|
|
||||||
from . import config, constants, logger, ub
|
from . import config, constants, logger, ub, db, calibre_db
|
||||||
from .ub import User
|
from .ub import User
|
||||||
|
|
||||||
|
|
||||||
@ -106,6 +106,13 @@ def get_sidebar_config(kwargs=None):
|
|||||||
|
|
||||||
return sidebar, simple
|
return sidebar, simple
|
||||||
|
|
||||||
|
def get_category(categoryId=0):
|
||||||
|
categories = calibre_db.session.query(db.Tags)\
|
||||||
|
.order_by(db.Tags.name)
|
||||||
|
for category in categories:
|
||||||
|
if category.id == categoryId:
|
||||||
|
return category
|
||||||
|
return { 'name': '' }
|
||||||
|
|
||||||
# Returns the template for rendering and includes the instance name
|
# Returns the template for rendering and includes the instance name
|
||||||
def render_title_template(*args, **kwargs):
|
def render_title_template(*args, **kwargs):
|
||||||
@ -113,6 +120,7 @@ def render_title_template(*args, **kwargs):
|
|||||||
try:
|
try:
|
||||||
return render_template(instance=config.config_calibre_web_title, sidebar=sidebar, simple=simple,
|
return render_template(instance=config.config_calibre_web_title, sidebar=sidebar, simple=simple,
|
||||||
accept=constants.EXTENSIONS_UPLOAD,
|
accept=constants.EXTENSIONS_UPLOAD,
|
||||||
|
get_category=get_category,
|
||||||
*args, **kwargs)
|
*args, **kwargs)
|
||||||
except PermissionError:
|
except PermissionError:
|
||||||
log.error("No permission to access {} file.".format(args[0]))
|
log.error("No permission to access {} file.".format(args[0]))
|
||||||
|
@ -324,6 +324,8 @@ def create_edit_shelf(shelf, page_title, page, shelf_id=False):
|
|||||||
flash(_("Sorry you are not allowed to create a public shelf"), category="error")
|
flash(_("Sorry you are not allowed to create a public shelf"), category="error")
|
||||||
return redirect(url_for('web.index'))
|
return redirect(url_for('web.index'))
|
||||||
is_public = 1 if to_save.get("is_public") == "on" else 0
|
is_public = 1 if to_save.get("is_public") == "on" else 0
|
||||||
|
type = to_save.get("type", "")
|
||||||
|
category = to_save.get("category", "")
|
||||||
if config.config_kobo_sync:
|
if config.config_kobo_sync:
|
||||||
shelf.kobo_sync = True if to_save.get("kobo_sync") else False
|
shelf.kobo_sync = True if to_save.get("kobo_sync") else False
|
||||||
if shelf.kobo_sync:
|
if shelf.kobo_sync:
|
||||||
@ -334,6 +336,8 @@ def create_edit_shelf(shelf, page_title, page, shelf_id=False):
|
|||||||
if check_shelf_is_unique(shelf_title, is_public, shelf_id):
|
if check_shelf_is_unique(shelf_title, is_public, shelf_id):
|
||||||
shelf.name = shelf_title
|
shelf.name = shelf_title
|
||||||
shelf.is_public = is_public
|
shelf.is_public = is_public
|
||||||
|
shelf.type = type
|
||||||
|
shelf.category = category
|
||||||
if not shelf_id:
|
if not shelf_id:
|
||||||
shelf.user_id = int(current_user.id)
|
shelf.user_id = int(current_user.id)
|
||||||
ub.session.add(shelf)
|
ub.session.add(shelf)
|
||||||
@ -356,8 +360,11 @@ def create_edit_shelf(shelf, page_title, page, shelf_id=False):
|
|||||||
ub.session.rollback()
|
ub.session.rollback()
|
||||||
log.error_or_exception(ex)
|
log.error_or_exception(ex)
|
||||||
flash(_("There was an error"), category="error")
|
flash(_("There was an error"), category="error")
|
||||||
|
categories = calibre_db.session.query(db.Tags)\
|
||||||
|
.order_by(db.Tags.name)
|
||||||
return render_title_template('shelf_edit.html',
|
return render_title_template('shelf_edit.html',
|
||||||
shelf=shelf,
|
shelf=shelf,
|
||||||
|
categories=categories,
|
||||||
title=page_title,
|
title=page_title,
|
||||||
page=page,
|
page=page,
|
||||||
kobo_sync_enabled=config.config_kobo_sync,
|
kobo_sync_enabled=config.config_kobo_sync,
|
||||||
|
@ -151,7 +151,17 @@
|
|||||||
{% if current_user.is_authenticated or g.allow_anonymous %}
|
{% if current_user.is_authenticated or g.allow_anonymous %}
|
||||||
<li class="nav-head hidden-xs public-shelves">{{_('Shelves')}}</li>
|
<li class="nav-head hidden-xs public-shelves">{{_('Shelves')}}</li>
|
||||||
{% for shelf in g.shelves_access %}
|
{% for shelf in g.shelves_access %}
|
||||||
<li><a href="{{url_for('shelf.show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list shelf"></span> {{shelf.name|shortentitle(40)}}{% if shelf.is_public == 1 %} {{_('(Public)')}}{% endif %}</a></li>
|
{% if shelf.type == 0 %}
|
||||||
|
<li><a href="{{url_for('shelf.show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list shelf"></span> {{shelf.name|shortentitle(40)}}{% if shelf.is_public == 1 %} {{_('(Public)')}}{% endif %}</a></li>
|
||||||
|
{% else %}
|
||||||
|
<li><a href="{{url_for('web.books_list', data='category', sort_param='stored', book_id=shelf.category )}}"><span class="glyphicon glyphicon-list shelf"></span>
|
||||||
|
{{get_category(shelf.category).name|shortentitle(40)}}
|
||||||
|
{% if shelf.is_public == 1 %} {{_('(Public)')}}{% endif %}</a>
|
||||||
|
{% if not current_user.is_anonymous %}
|
||||||
|
<a href="{{url_for('shelf.show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-edit shelf"></span> (Shelf)</a>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if not current_user.is_anonymous %}
|
{% if not current_user.is_anonymous %}
|
||||||
<li id="nav_createshelf" class="create-shelf"><a href="{{url_for('shelf.create_shelf')}}">{{_('Create a Shelf')}}</a></li>
|
<li id="nav_createshelf" class="create-shelf"><a href="{{url_for('shelf.create_shelf')}}">{{_('Create a Shelf')}}</a></li>
|
||||||
|
@ -1,4 +1,8 @@
|
|||||||
{% extends "layout.html" %}
|
{% extends "layout.html" %}
|
||||||
|
{% block header %}
|
||||||
|
<link href="{{ url_for('static', filename='css/libs/bootstrap-select.min.css') }}" rel="stylesheet" >
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="discover">
|
<div class="discover">
|
||||||
<h1>{{title}}</h1>
|
<h1>{{title}}</h1>
|
||||||
@ -14,6 +18,24 @@
|
|||||||
<input type="checkbox" name="is_public" {% if shelf.is_public == 1 %}checked{% endif %}> {{_('Share with Everyone')}}
|
<input type="checkbox" name="is_public" {% if shelf.is_public == 1 %}checked{% endif %}> {{_('Share with Everyone')}}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="type">Shelf type:</label>
|
||||||
|
<select id="type" name="type" class="selectpicker">
|
||||||
|
<option value="0"{% if shelf.type == 0 %} selected{% endif %}>Calibre web</option>
|
||||||
|
<option value="1"{% if shelf.type == 1 %} selected{% endif %}>Category shorcut</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="category">Category:</label>
|
||||||
|
<select id="category" name="category" class="selectpicker">
|
||||||
|
<option value="0">None</option>
|
||||||
|
{% if shelf.type == 1 %}
|
||||||
|
{% for category in categories %}
|
||||||
|
<option value="{{ category.id }}"{% if category.id == shelf.category %} selected{% endif %}>{{ category.name }}</option>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if kobo_sync_enabled and sync_only_selected_shelves %}
|
{% if kobo_sync_enabled and sync_only_selected_shelves %}
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
@ -29,3 +51,10 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block js %}
|
||||||
|
<script src="{{ url_for('static', filename='js/libs/bootstrap-select.min.js')}}"></script>
|
||||||
|
{% if not current_user.locale == 'en' %}
|
||||||
|
<script src="{{ url_for('static', filename='js/libs/bootstrap-select/defaults-' + current_user.locale + '.min.js') }}" charset="UTF-8"></script>
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
17
cps/ub.py
17
cps/ub.py
@ -337,6 +337,8 @@ class Shelf(Base):
|
|||||||
uuid = Column(String, default=lambda: str(uuid.uuid4()))
|
uuid = Column(String, default=lambda: str(uuid.uuid4()))
|
||||||
name = Column(String)
|
name = Column(String)
|
||||||
is_public = Column(Integer, default=0)
|
is_public = Column(Integer, default=0)
|
||||||
|
type = Column(Integer, default=0)
|
||||||
|
category = Column(Integer, default=0)
|
||||||
user_id = Column(Integer, ForeignKey('user.id'))
|
user_id = Column(Integer, ForeignKey('user.id'))
|
||||||
kobo_sync = Column(Boolean, default=False)
|
kobo_sync = Column(Boolean, default=False)
|
||||||
books = relationship("BookShelf", backref="ub_shelf", cascade="all, delete-orphan", lazy="dynamic")
|
books = relationship("BookShelf", backref="ub_shelf", cascade="all, delete-orphan", lazy="dynamic")
|
||||||
@ -630,7 +632,20 @@ def migrate_shelfs(engine, _session):
|
|||||||
trans = conn.begin()
|
trans = conn.begin()
|
||||||
conn.execute(text("ALTER TABLE book_shelf_link ADD column 'order' INTEGER DEFAULT 1"))
|
conn.execute(text("ALTER TABLE book_shelf_link ADD column 'order' INTEGER DEFAULT 1"))
|
||||||
trans.commit()
|
trans.commit()
|
||||||
|
try:
|
||||||
|
_session.query(exists().where(Shelf.type)).scalar()
|
||||||
|
except exc.OperationalError: # Database is not compatible, some columns are missing
|
||||||
|
with engine.connect() as conn:
|
||||||
|
trans = conn.begin()
|
||||||
|
conn.execute(text("ALTER TABLE shelf ADD column 'type' INTEGER DEFAULT 0"))
|
||||||
|
trans.commit()
|
||||||
|
try:
|
||||||
|
_session.query(exists().where(Shelf.category)).scalar()
|
||||||
|
except exc.OperationalError: # Database is not compatible, some columns are missing
|
||||||
|
with engine.connect() as conn:
|
||||||
|
trans = conn.begin()
|
||||||
|
conn.execute(text("ALTER TABLE shelf ADD column 'category' INTEGER DEFAULT 0"))
|
||||||
|
trans.commit()
|
||||||
|
|
||||||
def migrate_readBook(engine, _session):
|
def migrate_readBook(engine, _session):
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user