mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 07:13:02 +00:00 
			
		
		
		
	#396 implemented
This commit is contained in:
		| @@ -88,6 +88,7 @@ | |||||||
|                 <option value="40" {% if content.config_log_level == 40 %}selected{% endif %}>ERROR</option> |                 <option value="40" {% if content.config_log_level == 40 %}selected{% endif %}>ERROR</option> | ||||||
|         </select> |         </select> | ||||||
|     </div> |     </div> | ||||||
|  |     <div class="col-sm-6"> | ||||||
|     <div class="form-group"> |     <div class="form-group"> | ||||||
|         <input type="checkbox" id="config_uploading" name="config_uploading" {% if content.config_uploading %}checked{% endif %}> |         <input type="checkbox" id="config_uploading" name="config_uploading" {% if content.config_uploading %}checked{% endif %}> | ||||||
|         <label for="config_uploading">{{_('Enable uploading')}}</label> |         <label for="config_uploading">{{_('Enable uploading')}}</label> | ||||||
| @@ -121,7 +122,6 @@ | |||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     {% endif %} |     {% endif %} | ||||||
|  |  | ||||||
|     <h2>{{_('Default Settings for new users')}}</h2> |     <h2>{{_('Default Settings for new users')}}</h2> | ||||||
|     <div class="form-group"> |     <div class="form-group"> | ||||||
|       <input type="checkbox" name="admin_role" id="admin_role" {% if content.role_admin() %}checked{% endif %}> |       <input type="checkbox" name="admin_role" id="admin_role" {% if content.role_admin() %}checked{% endif %}> | ||||||
| @@ -151,6 +151,57 @@ | |||||||
|       <input type="checkbox" name="edit_shelf_role" id="edit_shelf_role" {% if content.role_edit_shelfs() %}checked{% endif %}> |       <input type="checkbox" name="edit_shelf_role" id="edit_shelf_role" {% if content.role_edit_shelfs() %}checked{% endif %}> | ||||||
|       <label for="edit_shelf_role">{{_('Allow Editing Public Shelfs')}}</label> |       <label for="edit_shelf_role">{{_('Allow Editing Public Shelfs')}}</label> | ||||||
|     </div> |     </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="col-sm-6"> | ||||||
|  |     <h3>{{_('Default visiblities for new users')}}</h3> | ||||||
|  |     <div class="col-sm-6"> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_random" id="show_random" {% if content.show_random_books() %}checked{% endif %}> | ||||||
|  |           <label for="show_random">{{_('Show random books')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_recent" id="show_recent" {% if content.show_recent() %}checked{% endif %}> | ||||||
|  |           <label for="show_recent">{{_('Show recent books')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_sorted" id="show_sorted" {% if content.show_sorted() %}checked{% endif %}> | ||||||
|  |           <label for="show_sorted">{{_('Show sorted books')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_hot" id="show_hot" {% if content.show_hot_books() %}checked{% endif %}> | ||||||
|  |           <label for="show_hot">{{_('Show hot books')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_best_rated" id="show_best_rated" {% if content.show_best_rated_books() %}checked{% endif %}> | ||||||
|  |           <label for="show_best_rated">{{_('Show best rated books')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_language" id="show_language" {% if content.show_language() %}checked{% endif %}> | ||||||
|  |           <label for="show_language">{{_('Show language selection')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_series" id="show_series" {% if content.show_series() %}checked{% endif %}> | ||||||
|  |           <label for="show_series">{{_('Show series selection')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_category" id="show_category" {% if content.show_category() %}checked{% endif %}> | ||||||
|  |           <label for="show_category">{{_('Show category selection')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_author" id="show_author" {% if content.show_author() %}checked{% endif %}> | ||||||
|  |           <label for="show_author">{{_('Show author selection')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_read_and_unread" id="show_read_and_unread" {% if content.show_read_and_unread() %}checked{% endif %}> | ||||||
|  |           <label for="show_read_and_unread">{{_('Show read and unread')}}</label> | ||||||
|  |       </div> | ||||||
|  |       <div class="form-group"> | ||||||
|  |           <input type="checkbox" name="show_detail_random" id="show_detail_random" {% if content.show_detail_random() %}checked{% endif %}> | ||||||
|  |           <label for="show_detail_random">{{_('Show random books in detail view')}}</label> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |     </div> | ||||||
|  |     <div class="col-sm-12"> | ||||||
|     <button type="submit" class="btn btn-default">{{_('Submit')}}</button> |     <button type="submit" class="btn btn-default">{{_('Submit')}}</button> | ||||||
|     {% if not origin %} |     {% if not origin %} | ||||||
|       <a href="{{ url_for('admin') }}" class="btn btn-default">{{_('Back')}}</a> |       <a href="{{ url_for('admin') }}" class="btn btn-default">{{_('Back')}}</a> | ||||||
| @@ -158,6 +209,7 @@ | |||||||
|     {% if success %} |     {% if success %} | ||||||
|       <a href="{{ url_for('login') }}" class="btn btn-default">{{_('Login')}}</a> |       <a href="{{ url_for('login') }}" class="btn btn-default">{{_('Login')}}</a> | ||||||
|     {% endif %} |     {% endif %} | ||||||
|  |     </div> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
| {% endblock %} | {% endblock %} | ||||||
|   | |||||||
| @@ -1284,7 +1284,7 @@ msgstr "Zeige Zufällige Bücher" | |||||||
|  |  | ||||||
| #: cps/templates/user_edit.html:50 | #: cps/templates/user_edit.html:50 | ||||||
| msgid "Show recent books" | msgid "Show recent books" | ||||||
| msgstr " kürzlich hinzugefügte Bücher" | msgstr "Zeige kürzlich hinzugefügte Bücher" | ||||||
|  |  | ||||||
| #: cps/templates/user_edit.html:54 | #: cps/templates/user_edit.html:54 | ||||||
| msgid "Show sorted books" | msgid "Show sorted books" | ||||||
|   | |||||||
							
								
								
									
										54
									
								
								cps/ub.py
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								cps/ub.py
									
									
									
									
									
								
							| @@ -281,6 +281,7 @@ class Settings(Base): | |||||||
|     config_anonbrowse = Column(SmallInteger, default=0) |     config_anonbrowse = Column(SmallInteger, default=0) | ||||||
|     config_public_reg = Column(SmallInteger, default=0) |     config_public_reg = Column(SmallInteger, default=0) | ||||||
|     config_default_role = Column(SmallInteger, default=0) |     config_default_role = Column(SmallInteger, default=0) | ||||||
|  |     config_default_show = Column(SmallInteger, default=2047) | ||||||
|     config_columns_to_ignore = Column(String) |     config_columns_to_ignore = Column(String) | ||||||
|     config_use_google_drive = Column(Boolean) |     config_use_google_drive = Column(Boolean) | ||||||
|     config_google_drive_client_id = Column(String) |     config_google_drive_client_id = Column(String) | ||||||
| @@ -288,7 +289,6 @@ class Settings(Base): | |||||||
|     config_google_drive_folder = Column(String) |     config_google_drive_folder = Column(String) | ||||||
|     config_google_drive_calibre_url_base = Column(String) |     config_google_drive_calibre_url_base = Column(String) | ||||||
|     config_google_drive_watch_changes_response = Column(String) |     config_google_drive_watch_changes_response = Column(String) | ||||||
|     #config_columns_to_ignore = Column(String) |  | ||||||
|     config_remote_login = Column(Boolean) |     config_remote_login = Column(Boolean) | ||||||
|     config_use_goodreads = Column(Boolean) |     config_use_goodreads = Column(Boolean) | ||||||
|     config_goodreads_api_key = Column(String) |     config_goodreads_api_key = Column(String) | ||||||
| @@ -337,6 +337,7 @@ class Config: | |||||||
|         self.config_anonbrowse = data.config_anonbrowse |         self.config_anonbrowse = data.config_anonbrowse | ||||||
|         self.config_public_reg = data.config_public_reg |         self.config_public_reg = data.config_public_reg | ||||||
|         self.config_default_role = data.config_default_role |         self.config_default_role = data.config_default_role | ||||||
|  |         self.config_default_show = data.config_default_show | ||||||
|         self.config_columns_to_ignore = data.config_columns_to_ignore |         self.config_columns_to_ignore = data.config_columns_to_ignore | ||||||
|         self.config_use_google_drive = data.config_use_google_drive |         self.config_use_google_drive = data.config_use_google_drive | ||||||
|         self.config_google_drive_client_id = data.config_google_drive_client_id |         self.config_google_drive_client_id = data.config_google_drive_client_id | ||||||
| @@ -400,6 +401,50 @@ class Config: | |||||||
|         return bool((self.config_default_role is not None) and |         return bool((self.config_default_role is not None) and | ||||||
|                     (self.config_default_role & ROLE_DELETE_BOOKS == ROLE_DELETE_BOOKS)) |                     (self.config_default_role & ROLE_DELETE_BOOKS == ROLE_DELETE_BOOKS)) | ||||||
|  |  | ||||||
|  |     def show_detail_random(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & DETAIL_RANDOM == DETAIL_RANDOM)) | ||||||
|  |  | ||||||
|  |     def show_language(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_LANGUAGE == SIDEBAR_LANGUAGE)) | ||||||
|  |  | ||||||
|  |     def show_series(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_SERIES == SIDEBAR_SERIES)) | ||||||
|  |  | ||||||
|  |     def show_category(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_CATEGORY == SIDEBAR_CATEGORY)) | ||||||
|  |  | ||||||
|  |     def show_hot_books(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_HOT == SIDEBAR_HOT)) | ||||||
|  |  | ||||||
|  |     def show_random_books(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_RANDOM == SIDEBAR_RANDOM)) | ||||||
|  |  | ||||||
|  |     def show_author(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_AUTHOR == SIDEBAR_AUTHOR)) | ||||||
|  |  | ||||||
|  |     def show_best_rated_books(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_BEST_RATED == SIDEBAR_BEST_RATED)) | ||||||
|  |  | ||||||
|  |     def show_read_and_unread(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_READ_AND_UNREAD == SIDEBAR_READ_AND_UNREAD)) | ||||||
|  |  | ||||||
|  |     def show_recent(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_RECENT == SIDEBAR_RECENT)) | ||||||
|  |  | ||||||
|  |     def show_sorted(self): | ||||||
|  |         return bool((self.config_default_show is not None) and | ||||||
|  |                     (self.config_default_show & SIDEBAR_SORTED == SIDEBAR_SORTED)) | ||||||
|  |  | ||||||
|     def mature_content_tags(self): |     def mature_content_tags(self): | ||||||
|         if sys.version_info > (3, 0): # Python3 str, Python2 unicode |         if sys.version_info > (3, 0): # Python3 str, Python2 unicode | ||||||
|             lstrip = str.lstrip |             lstrip = str.lstrip | ||||||
| @@ -532,6 +577,13 @@ def migrate_Database(): | |||||||
|     except exc.OperationalError: |     except exc.OperationalError: | ||||||
|         conn = engine.connect() |         conn = engine.connect() | ||||||
|         conn.execute("ALTER TABLE Settings ADD column `config_mature_content_tags` String DEFAULT ''") |         conn.execute("ALTER TABLE Settings ADD column `config_mature_content_tags` String DEFAULT ''") | ||||||
|  |     try: | ||||||
|  |         session.query(exists().where(Settings.config_default_show)).scalar() | ||||||
|  |         session.commit() | ||||||
|  |     except exc.OperationalError:  # Database is not compatible, some rows are missing | ||||||
|  |         conn = engine.connect() | ||||||
|  |         conn.execute("ALTER TABLE Settings ADD column `config_default_show` SmallInteger DEFAULT 2047") | ||||||
|  |         session.commit() | ||||||
|  |  | ||||||
|  |  | ||||||
| def clean_database(): | def clean_database(): | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								cps/web.py
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								cps/web.py
									
									
									
									
									
								
							| @@ -1933,6 +1933,7 @@ def register(): | |||||||
|             content.nickname = to_save["nickname"] |             content.nickname = to_save["nickname"] | ||||||
|             content.email = to_save["email"] |             content.email = to_save["email"] | ||||||
|             content.role = config.config_default_role |             content.role = config.config_default_role | ||||||
|  |             content.sidebar_view = config.config_default_show | ||||||
|             try: |             try: | ||||||
|                 ub.session.add(content) |                 ub.session.add(content) | ||||||
|                 ub.session.commit() |                 ub.session.commit() | ||||||
| @@ -2484,6 +2485,7 @@ def configuration_helper(origin): | |||||||
|         if "config_mature_content_tags" in to_save: |         if "config_mature_content_tags" in to_save: | ||||||
|             content.config_mature_content_tags = to_save["config_mature_content_tags"].strip() |             content.config_mature_content_tags = to_save["config_mature_content_tags"].strip() | ||||||
|  |  | ||||||
|  |         # Default user configuration | ||||||
|         content.config_default_role = 0 |         content.config_default_role = 0 | ||||||
|         if "admin_role" in to_save: |         if "admin_role" in to_save: | ||||||
|             content.config_default_role = content.config_default_role + ub.ROLE_ADMIN |             content.config_default_role = content.config_default_role + ub.ROLE_ADMIN | ||||||
| @@ -2499,6 +2501,30 @@ def configuration_helper(origin): | |||||||
|             content.config_default_role = content.config_default_role + ub.ROLE_PASSWD |             content.config_default_role = content.config_default_role + ub.ROLE_PASSWD | ||||||
|         if "passwd_role" in to_save: |         if "passwd_role" in to_save: | ||||||
|             content.config_default_role = content.config_default_role + ub.ROLE_EDIT_SHELFS |             content.config_default_role = content.config_default_role + ub.ROLE_EDIT_SHELFS | ||||||
|  |         content.config_default_show = 0 | ||||||
|  |         if "show_detail_random" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.DETAIL_RANDOM | ||||||
|  |         if "show_language" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_LANGUAGE | ||||||
|  |         if "show_series" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_SERIES | ||||||
|  |         if "show_category" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_CATEGORY | ||||||
|  |         if "show_hot" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_HOT | ||||||
|  |         if "show_random" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_RANDOM | ||||||
|  |         if "show_author" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_AUTHOR | ||||||
|  |         if "show_best_rated" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_BEST_RATED | ||||||
|  |         if "show_read_and_unread" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_READ_AND_UNREAD | ||||||
|  |         if "show_recent" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_RECENT | ||||||
|  |         if "show_sorted" in to_save: | ||||||
|  |             content.config_default_show = content.config_default_show + ub.SIDEBAR_SORTED | ||||||
|  |  | ||||||
|         try: |         try: | ||||||
|             if content.config_use_google_drive and is_gdrive_ready() and not os.path.exists(config.config_calibre_dir + "/metadata.db"): |             if content.config_use_google_drive and is_gdrive_ready() and not os.path.exists(config.config_calibre_dir + "/metadata.db"): | ||||||
|                 gdriveutils.downloadFile(Gdrive.Instance().drive, None, "metadata.db", config.config_calibre_dir + "/metadata.db") |                 gdriveutils.downloadFile(Gdrive.Instance().drive, None, "metadata.db", config.config_calibre_dir + "/metadata.db") | ||||||
| @@ -2607,6 +2633,7 @@ def new_user(): | |||||||
|             flash(_(u"Found an existing account for this email address or nickname."), category="error") |             flash(_(u"Found an existing account for this email address or nickname."), category="error") | ||||||
|     else: |     else: | ||||||
|         content.role = config.config_default_role |         content.role = config.config_default_role | ||||||
|  |         content.sidebar_view = config.config_default_show | ||||||
|     return render_title_template("user_edit.html", new_user=1, content=content, translations=translations, |     return render_title_template("user_edit.html", new_user=1, content=content, translations=translations, | ||||||
|                                  languages=languages, title=_(u"Add new user")) |                                  languages=languages, title=_(u"Add new user")) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 OzzieIsaacs
					OzzieIsaacs