class DashboardDataGrid(DataGridSidebarMixin, ReviewRequestDataGrid): """Displays the dashboard. The dashboard is the main place where users see what review requests are out there that may need their attention. """ new_updates = NewUpdatesColumn() my_comments = MyCommentsColumn() selected = ReviewRequestCheckboxColumn() sidebar = Sidebar([ OverviewSection, OutgoingSection, IncomingSection, ], default_view_id='incoming') js_model_class = 'RB.Dashboard' js_view_class = 'RB.DashboardView' periodic_reload = True def __init__(self, *args, **kwargs): """Initialize the datagrid.""" local_site = kwargs.get('local_site', None) super(DashboardDataGrid, self).__init__(*args, **kwargs) self.listview_template = 'datagrids/hideable_listview.html' self.profile_sort_field = 'sort_dashboard_columns' self.profile_columns_field = 'dashboard_columns' self.default_view = 'incoming' self.show_closed = False self.show_archived = False self.default_sort = ['-last_updated'] self.default_columns = [ 'selected', 'new_updates', 'ship_it', 'my_comments', 'summary', 'submitter', 'last_updated_since' ] self.extra_js_model_data = { 'show_archived': self.show_archived, } self.local_site = local_site self.user = self.request.user self.profile = self.user.get_profile() self.site_profile = self.user.get_site_profile(local_site) def load_extra_state(self, profile): """Load extra state for the datagrid.""" group_name = self.request.GET.get('group', '') view = self.request.GET.get('view', self.default_view) user = self.request.user if view == 'outgoing': self.queryset = ReviewRequest.objects.from_user( user, user, local_site=self.local_site) self.title = _('All Outgoing Review Requests') elif view == 'overview': self.queryset = ReviewRequest.objects.to_or_from_user( user, user, local_site=self.local_site) self.title = _('Open Incoming and Outgoing Review Requests') elif view == 'mine': self.queryset = ReviewRequest.objects.from_user( user, user, None, local_site=self.local_site) self.title = _('All My Review Requests') elif view == 'to-me': self.queryset = ReviewRequest.objects.to_user_directly( user, user, local_site=self.local_site) self.title = _('Incoming Review Requests to Me') elif view in ('to-group', 'to-watched-group'): if group_name: # to-group is special because we want to make sure that the # group exists and show a 404 if it doesn't. Otherwise, we'll # show an empty datagrid with the name. try: group = Group.objects.get(name=group_name, local_site=self.local_site) if not group.is_accessible_by(user): raise Http404 except Group.DoesNotExist: raise Http404 self.queryset = ReviewRequest.objects.to_group( group_name, self.local_site, user) self.title = _('Incoming Review Requests to %s') % group_name else: self.queryset = ReviewRequest.objects.to_user_groups( user, user, local_site=self.local_site) self.title = _('All Incoming Review Requests to My Groups') elif view == 'starred': self.queryset = self.profile.starred_review_requests.public( user=user, local_site=self.local_site, status=None) self.title = _('Starred Review Requests') elif view == 'incoming': self.queryset = ReviewRequest.objects.to_user( user, user, local_site=self.local_site) self.title = _('All Incoming Review Requests') else: raise Http404 if profile and 'show_archived' in profile.extra_data: self.show_archived = profile.extra_data['show_archived'] try: show = self.request.GET.get('show-archived', self.show_archived) self.show_archived = int(show) != 0 except ValueError: pass if not self.show_archived: hidden_q = ReviewRequestVisit.objects.filter(user=user).exclude( visibility=ReviewRequestVisit.VISIBLE) hidden_q = hidden_q.values_list('review_request_id', flat=True) self.queryset = self.queryset.exclude(pk__in=hidden_q) if (profile and self.show_archived != profile.extra_data.get('show_archived')): profile.extra_data['show_archived'] = self.show_archived profile_changed = True else: profile_changed = False self.extra_js_model_data['show_archived'] = self.show_archived parent_profile_changed = \ super(DashboardDataGrid, self).load_extra_state( profile, allow_hide_closed=False) return profile_changed or parent_profile_changed
class DashboardDataGrid(DataGridSidebarMixin, ReviewRequestDataGrid): """Displays the dashboard. The dashboard is the main place where users see what review requests are out there that may need their attention. """ new_updates = NewUpdatesColumn() my_comments = MyCommentsColumn() selected = ReviewRequestCheckboxColumn() sidebar = Sidebar([ OutgoingSection, IncomingSection, ], default_view_id='incoming') js_model_class = 'RB.Dashboard' js_view_class = 'RB.DashboardView' periodic_reload = True def __init__(self, *args, **kwargs): """Initialize the datagrid.""" local_site = kwargs.get('local_site', None) super(DashboardDataGrid, self).__init__(*args, **kwargs) self.listview_template = 'datagrid/listview.html' self.profile_sort_field = 'sort_dashboard_columns' self.profile_columns_field = 'dashboard_columns' self.default_view = 'incoming' self.show_closed = False self.default_sort = ['-last_updated'] self.default_columns = [ 'selected', 'new_updates', 'ship_it', 'my_comments', 'summary', 'submitter', 'last_updated_since' ] self.local_site = local_site self.user = self.request.user self.profile = Profile.objects.get_or_create(user=self.user)[0] self.site_profile = LocalSiteProfile.objects.get_or_create( user=self.user, local_site=local_site, profile=self.profile)[0] def load_extra_state(self, profile): """Load extra state for the datagrid.""" group_name = self.request.GET.get('group', '') view = self.request.GET.get('view', self.default_view) user = self.request.user if view == 'outgoing': self.queryset = ReviewRequest.objects.from_user( user, user, local_site=self.local_site) self.title = _('All Outgoing Review Requests') elif view == 'mine': self.queryset = ReviewRequest.objects.from_user( user, user, None, local_site=self.local_site) self.title = _('All My Review Requests') elif view == 'to-me': self.queryset = ReviewRequest.objects.to_user_directly( user, user, local_site=self.local_site) self.title = _('Incoming Review Requests to Me') elif view in ('to-group', 'to-watched-group'): if group_name: # to-group is special because we want to make sure that the # group exists and show a 404 if it doesn't. Otherwise, we'll # show an empty datagrid with the name. try: group = Group.objects.get(name=group_name, local_site=self.local_site) if not group.is_accessible_by(user): raise Http404 except Group.DoesNotExist: raise Http404 self.queryset = ReviewRequest.objects.to_group( group_name, self.local_site, user) self.title = _('Incoming Review Requests to %s') % group_name else: self.queryset = ReviewRequest.objects.to_user_groups( user, user, local_site=self.local_site) self.title = _('All Incoming Review Requests to My Groups') elif view == 'starred': self.queryset = self.profile.starred_review_requests.public( user=user, local_site=self.local_site, status=None) self.title = _('Starred Review Requests') elif view == 'incoming': self.queryset = ReviewRequest.objects.to_user( user, user, local_site=self.local_site) self.title = _('All Incoming Review Requests') else: raise Http404 return super(DashboardDataGrid, self).load_extra_state(profile, allow_hide_closed=False)
class ReviewRequestDataGrid(ShowClosedReviewRequestsMixin, DataGrid): """A datagrid that displays a list of review requests. This datagrid accepts the show_closed parameter in the URL, allowing submitted review requests to be filtered out or displayed. """ new_updates = NewUpdatesColumn() my_comments = MyCommentsColumn() star = ReviewRequestStarColumn() ship_it = ShipItColumn() summary = SummaryColumn() submitter = UsernameColumn(label=_('Owner'), user_relation=['submitter']) branch = Column(label=_('Branch'), db_field='branch', shrink=True, sortable=True, link=False) bugs_closed = BugsColumn() repository = RepositoryColumn() time_added = DateTimeColumn(label=_('Posted'), detailed_label=_('Posted Time'), format='F jS, Y, P', shrink=True, css_class=lambda r: ageid(r.time_added)) last_updated = DateTimeColumn(label=_('Last Updated'), format='F jS, Y, P', shrink=True, db_field='last_updated', field_name='last_updated', css_class=lambda r: ageid(r.last_updated)) diff_updated = DiffUpdatedColumn( format='F jS, Y, P', shrink=True, css_class=lambda r: ageid(r.diffset_history.last_diff_updated)) time_added_since = DateTimeSinceColumn( label=_('Posted'), detailed_label=_('Posted Time (Relative)'), field_name='time_added', shrink=True, css_class=lambda r: ageid(r.time_added)) last_updated_since = DateTimeSinceColumn( label=_('Last Updated'), detailed_label=_('Last Updated (Relative)'), shrink=True, db_field='last_updated', field_name='last_updated', css_class=lambda r: ageid(r.last_updated)) diff_updated_since = DiffUpdatedSinceColumn( detailed_label=_('Diff Updated (Relative)'), shrink=True, css_class=lambda r: ageid(r.diffset_history.last_diff_updated)) diff_size = DiffSizeColumn() review_count = ReviewCountColumn() target_groups = GroupsColumn() target_people = PeopleColumn() to_me = ToMeColumn() review_id = ReviewRequestIDColumn() status_query_field = 'status' site_query_field = 'local_site' def __init__(self, *args, **kwargs): """Initialize the datagrid.""" self.local_site = kwargs.pop('local_site', None) super(ReviewRequestDataGrid, self).__init__(*args, **kwargs) self.listview_template = 'datagrids/review_request_listview.html' self.profile_sort_field = 'sort_review_request_columns' self.profile_columns_field = 'review_request_columns' self.show_closed = True self.submitter_url_name = 'user' self.default_sort = ['-last_updated'] self.default_columns = [ 'star', 'summary', 'submitter', 'time_added', 'last_updated_since' ] # Add local timezone info to the columns. user = self.request.user if user.is_authenticated(): profile = user.get_profile() self.timezone = pytz.timezone(profile.timezone) self.time_added.timezone = self.timezone self.last_updated.timezone = self.timezone self.diff_updated.timezone = self.timezone def load_extra_state(self, profile, allow_hide_closed=True): """Load extra state for the datagrid.""" return super(ReviewRequestDataGrid, self).load_extra_state(profile, allow_hide_closed) def post_process_queryset(self, queryset): """Add additional data to the queryset.""" q = queryset.with_counts(self.request.user) return super(ReviewRequestDataGrid, self).post_process_queryset(q) def link_to_object(self, state, obj, value): """Return a link to the given object.""" if value and isinstance(value, User): return local_site_reverse('user', request=self.request, args=[value]) return obj.get_absolute_url()
class ReviewRequestDataGrid(DataGrid): """A datagrid that displays a list of review requests. This datagrid accepts the show_closed parameter in the URL, allowing submitted review requests to be filtered out or displayed. """ my_comments = MyCommentsColumn() star = ReviewRequestStarColumn() ship_it = ShipItColumn() summary = SummaryColumn() submitter = SubmitterColumn() branch = Column(label=_('Branch'), db_field='branch', shrink=True, sortable=True, link=False) bugs_closed = BugsColumn() repository = RepositoryColumn() time_added = DateTimeColumn(label=_('Posted'), detailed_label=_('Posted Time'), format='F jS, Y, P', shrink=True, css_class=lambda r: ageid(r.time_added)) last_updated = DateTimeColumn(label=_('Last Updated'), format='F jS, Y, P', shrink=True, db_field='last_updated', field_name='last_updated', css_class=lambda r: ageid(r.last_updated)) diff_updated = DiffUpdatedColumn( format='F jS, Y, P', shrink=True, css_class=lambda r: ageid(r.diffset_history.last_diff_updated)) time_added_since = DateTimeSinceColumn( label=_('Posted'), detailed_label=_('Posted Time (Relative)'), field_name='time_added', shrink=True, css_class=lambda r: ageid(r.time_added)) last_updated_since = DateTimeSinceColumn( label=_('Last Updated'), detailed_label=_('Last Updated (Relative)'), shrink=True, db_field='last_updated', field_name='last_updated', css_class=lambda r: ageid(r.last_updated)) diff_updated_since = DiffUpdatedSinceColumn( detailed_label=_('Diff Updated (Relative)'), shrink=True, css_class=lambda r: ageid(r.diffset_history.last_diff_updated)) diff_size = DiffSizeColumn() review_count = ReviewCountColumn() target_groups = GroupsColumn() target_people = PeopleColumn() to_me = ToMeColumn() review_id = ReviewRequestIDColumn() def __init__(self, *args, **kwargs): self.local_site = kwargs.pop('local_site', None) super(ReviewRequestDataGrid, self).__init__(*args, **kwargs) self.listview_template = 'datagrids/review_request_listview.html' self.profile_sort_field = 'sort_review_request_columns' self.profile_columns_field = 'review_request_columns' self.show_closed = True self.submitter_url_name = 'user' self.default_sort = ['-last_updated'] self.default_columns = [ 'star', 'summary', 'submitter', 'time_added', 'last_updated_since' ] # Add local timezone info to the columns user = self.request.user if user.is_authenticated(): profile, is_new = Profile.objects.get_or_create(user=user) self.timezone = pytz.timezone(profile.timezone) self.time_added.timezone = self.timezone self.last_updated.timezone = self.timezone self.diff_updated.timezone = self.timezone def load_extra_state(self, profile): if profile: self.show_closed = profile.show_closed try: self.show_closed = (int( self.request.GET.get('show-closed', self.show_closed)) != 0) except ValueError: # do nothing pass if not self.show_closed: self.queryset = self.queryset.filter(status='P') self.queryset = self.queryset.filter(local_site=self.local_site) if profile and self.show_closed != profile.show_closed: profile.show_closed = self.show_closed return True return False def post_process_queryset(self, queryset): q = queryset.with_counts(self.request.user) return super(ReviewRequestDataGrid, self).post_process_queryset(q) def link_to_object(self, state, obj, value): if value and isinstance(value, User): return local_site_reverse('user', request=self.request, args=[value]) return obj.get_absolute_url()