* Initial work on #8248 * Add tests * Fix tests * Add feature query for bookmarks * Add BookmarksWidget * Correct generic relation name * Add docs for bookmarks * Remove inheritance from ChangeLoggedModel
This commit is contained in:
@@ -15,6 +15,7 @@ from django.template.loader import render_to_string
|
||||
from django.urls import NoReverseMatch, resolve, reverse
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
from extras.choices import BookmarkOrderingChoices
|
||||
from extras.utils import FeatureQuery
|
||||
from utilities.forms import BootstrapMixin
|
||||
from utilities.permissions import get_permission_for_model
|
||||
@@ -23,6 +24,7 @@ from utilities.utils import content_type_identifier, content_type_name, get_view
|
||||
from .utils import register_widget
|
||||
|
||||
__all__ = (
|
||||
'BookmarksWidget',
|
||||
'DashboardWidget',
|
||||
'NoteWidget',
|
||||
'ObjectCountsWidget',
|
||||
@@ -318,3 +320,42 @@ class RSSFeedWidget(DashboardWidget):
|
||||
return {
|
||||
'feed': feed,
|
||||
}
|
||||
|
||||
|
||||
@register_widget
|
||||
class BookmarksWidget(DashboardWidget):
|
||||
default_title = _('Bookmarks')
|
||||
default_config = {
|
||||
'order_by': BookmarkOrderingChoices.ORDERING_NEWEST,
|
||||
}
|
||||
description = _('Show your personal bookmarks')
|
||||
template_name = 'extras/dashboard/widgets/bookmarks.html'
|
||||
|
||||
class ConfigForm(WidgetConfigForm):
|
||||
object_types = forms.MultipleChoiceField(
|
||||
# TODO: Restrict the choices by FeatureQuery('bookmarks')
|
||||
choices=get_content_type_labels,
|
||||
required=False
|
||||
)
|
||||
order_by = forms.ChoiceField(
|
||||
choices=BookmarkOrderingChoices
|
||||
)
|
||||
max_items = forms.IntegerField(
|
||||
min_value=1,
|
||||
required=False
|
||||
)
|
||||
|
||||
def render(self, request):
|
||||
from extras.models import Bookmark
|
||||
|
||||
bookmarks = Bookmark.objects.filter(user=request.user).order_by(self.config['order_by'])
|
||||
if object_types := self.config.get('object_types'):
|
||||
models = get_models_from_content_types(object_types)
|
||||
conent_types = ContentType.objects.get_for_models(*models).values()
|
||||
bookmarks = bookmarks.filter(object_type__in=conent_types)
|
||||
if max_items := self.config.get('max_items'):
|
||||
bookmarks = bookmarks[:max_items]
|
||||
|
||||
return render_to_string(self.template_name, {
|
||||
'bookmarks': bookmarks,
|
||||
})
|
||||
|
Reference in New Issue
Block a user