Coverage for lino/modlib/users/mixins.py : 59%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
# Copyright 2011-2015 Luc Saffre # License: BSD (see file COPYING for details)
.. autosummary::
"""
"""Mixin for database models which have a :attr:`timezone` field.
.. attribute:: timezone
The timezone.
"""
timezone = models.CharField(_("Time zone"), max_length=15, blank=True) else:
def timezone_choices(cls, partner): import pytz if partner and partner.country: return pytz.country_timezones[partner.country.isocode] return pytz.common_timezones
"""Model mixin for database objects that have a `user` field which points to the "author" of this object. The default user is automatically set to the requesting user.
.. attribute:: user
The author of this object. A pointer to :class:`lino.modlib.users.models.User`.
"""
"""The list of required roles for getting permission to edit other users' work.
By default, only :class:`SiteStaff <lino.core.roles.SiteStaff>` users can edit other users' work.
An application can set :attr:`manager_roles_required` to some other user role class or a tuple of such classes.
Setting :attr:`manager_roles_required` to ``[]`` will **disable** this behaviour (i.e. everybody can edit the work of other users).
This is going to be passed to :meth:`has_required_roles <lino.core.users.choicelists.UserProfile.has_required_roles>` of the requesting user's profile.
Usage examples see :class:`lino_xl.lib.notes.models.Note` or :class:`lino_xl.lib.cal.models.Component`.
"""
'users.User', verbose_name=_("Author"), related_name="%(app_label)s_%(class)s_set_by_user", blank=True, null=True)
""" Adds the requesting user to the `user` field.
When acting as another user, the default implementation still inserts the real user, not subst_user. This is important for cal.Event. """ if self.user_id is None: u = ar.user if u is not None: self.user = u super(UserAuthored, self).on_create(ar)
"""Return the author's timezone. Used by :class:`lino_xl.lib.cal.mixins.Started`.
""" if self.user_id is None: return settings.TIME_ZONE return self.user.timezone or settings.TIME_ZONE
"""The default behaviour after duplicating is to change the author to the user who requested the duplicate.
""" if ar.user is not None: self.user = ar.user super(UserAuthored, self).on_duplicate(ar, master)
"""Only "managers" or "editors" can edit other users' work.
See also :attr:`manager_roles_required`.
""" return False and (ar.subst_user is None or self.user != ar.subst_user) \ and not user.profile.has_required_roles( self.manager_roles_required): return ba.action.readonly
def on_analyze(cls, site): raise ChangedAPI("{0} has a manager_level_field".format(cls))
def get_parameter_fields(cls, **fields): """Adds the :attr:`user` filter parameter field.""" 'user', models.ForeignKey( 'users.User', verbose_name=_("Author"), blank=True, null=True))
def get_simple_parameters(cls):
"""Table mixin for tables on :class:`UserAuthored`.
Used by :mod:`lino_xl.lib.excerpts` and :mod:`lino_xl.lib.reception`. """
def get_actor_label(self): if self.model is None: return self._label or self.__name__ return self._label or \ _("My %s") % self.model._meta.verbose_name_plural
def param_defaults(self, ar, **kw): kw = super(My, self).param_defaults(ar, **kw) kw.update(user=ar.get_user()) return kw
"""Base table which fills the master instance from the web request.
""" #~ details_of_master_template = _("%(details)s of %(master)s")
def get_actor_label(self): if self.model is None: return self._label or self.__name__ return self._label or \ _("My %s") % self.model._meta.verbose_name_plural
def setup_request(self, ar): #~ logger.info("ByUser.setup_request") if ar.master_instance is None: u = ar.get_user() if not isinstance(u, AnonymousUser): ar.master_instance = u super(ByUser, self).setup_request(ar)
def get_view_permission(self, profile): if not profile.has_required_roles([SiteUser]): return False return super(ByUser, self).get_view_permission(profile)
# dummy Table for userless sites ByUser = dbtables.Table
""" """
user = ar.get_user() if obj.user != user and \ not user.profile.has_required_roles(self.manager_roles_required): return self.readonly return super( AuthorAction, self).get_action_permission(ar, obj, state) |