Example #1
0
    def get_rst(self):
        user_type = UserTypes.get_by_value('900')
        with translation.override(self.language):
            #~ set_language(lng)
            actor_names = ' '.join(self.content).split()
            items = []
            for an in actor_names:
                cls = settings.SITE.models.resolve(an)
                if not isinstance(cls, type):
                    raise Exception("%s is not an actor." % self.content[0])
                desc = "**{0}** (:class:`{1} <{2}>`)".format(
                    force_text(cls.label),
                    cls.__name__,
                    cls.__module__ + '.' + cls.__name__
                )
                mi = user_type.find_menu_item(cls.default_action)
                if mi is not None:
                    desc += _(" (Menu %s)") % menuselection(mi)
                    #~ print(str(mi.label).strip())
                if cls.help_text:
                    desc += "  : " + force_text(cls.help_text).strip()

                # items.append("%s : %s" % (actor_ref(cls), cls.help_text or ''))
                items.append(desc)
            return rstgen.ul(items)
Example #2
0
 def instance(cls):
     if cls._instance is None:
         # Call startup() to fill UserTypes also in a
         # multi-threaded environment:
         settings.SITE.startup()
         cls._instance = AnonymousUser()
         from lino.modlib.users.choicelists import UserTypes
         cls._instance.profile = UserTypes.get_by_value(
             settings.SITE.anonymous_user_type, None)
         if cls._instance.profile is None:
             raise Exception(
                 "Invalid value %r for `SITE.anonymous_user_type`. "
                 "Must be one of %s" % (
                     settings.SITE.anonymous_user_type,
                     [i.value for i in list(UserTypes.items())]))
     return cls._instance
Example #3
0
    def get_rst(self):
        user_type = UserTypes.get_by_value('900')
        with translation.override(self.language):
            #~ set_language(lng)
            actor_names = ' '.join(self.content).split()
            items = []
            for an in actor_names:
                cls = settings.SITE.models.resolve(an)
                if not isinstance(cls, type):
                    raise Exception("%s is not an actor." % self.content[0])
                desc = "**{0}** (:class:`{1} <{2}>`)".format(
                    force_text(cls.label),
                    cls.__name__,
                    cls.__module__ + '.' + cls.__name__
                )
                mi = user_type.find_menu_item(cls.default_action)
                if mi is not None:
                    desc += _(" (Menu %s)") % menuselection(mi)
                    #~ print(str(mi.label).strip())
                if cls.help_text:
                    desc += "  : " + force_text(cls.help_text).strip()

                # items.append("%s : %s" % (actor_ref(cls), cls.help_text or ''))
                items.append(desc)
            return rstgen.ul(items)
Example #4
0
    def get_user_profiles(cls):
        """Yield a series of all user profiles on this site which satisfy this
        role.

        """
        from lino.modlib.users.choicelists import UserTypes
        for p in UserTypes.items():
            if p.has_required_roles([cls]):
                yield p
Example #5
0
def menupath_role(typ, rawtext, text, *args, **kwargs):
    a = resolve_action(text)
    user_type = UserTypes.get_by_value('900')
    mi = user_type.find_menu_item(a)
    if mi is None:
        raise Exception("Unknown menu descriptor %s" % text)
    text = menuselection_text(mi)
    rawtext = menuselection(mi)
    return menusel_role('menuselection', rawtext, text, *args, **kwargs)
Example #6
0
def menupath_role(typ, rawtext, text, *args, **kwargs):
    a = resolve_action(text)
    user_type = UserTypes.get_by_value('900')
    mi = user_type.find_menu_item(a)
    if mi is None:
        raise Exception("Unknown menu descriptor %s" % text)
    text = menuselection_text(mi)
    rawtext = menuselection(mi)
    return menusel_role('menuselection', rawtext, text, *args, **kwargs)
Example #7
0
    def get_user_profiles(cls):
        """Yield a series of all user profiles on this site which satisfy this
        role.

        """
        from lino.modlib.users.choicelists import UserTypes
        for p in UserTypes.items():
            if p.has_required_roles([cls]):
                yield p
Example #8
0
def objects():

    from lino_welfare.modlib.newcomers.models import Broker, Faculty, Competence
    pcsw = dd.resolve_app('pcsw')
    Person = dd.resolve_model('contacts.Person')

    I = Instantiator(Broker).build
    #~ yield I(**babel_values('name',
        #~ de=u"Polizei", fr=u"Police",en=u"Police"))
    #~ yield I(**babel_values('name',
        #~ de=u"Jugendgericht", fr=u"Jugendgericht",en=u"Jugendgericht"))
    yield I(name="Police")
    yield I(name="Other PCSW")

    I = Instantiator(Faculty).build
    yield I(weight=10, **babel_values('name', de=u"Eingliederungseinkommen (EiEi)", fr=u"Revenu d'intégration sociale (RIS)",  en=u"EiEi"))
    yield I(weight=5, **babel_values('name', de=u"DSBE",                    fr=u"Service d'insertion socio-professionnelle",   en=u"DSBE"))
    yield I(weight=4, **babel_values('name', de=u"Ausländerbeihilfe",       fr=u"Aide sociale équivalente (pour étrangers)", en=u"Ausländerbeihilfe"))
    yield I(weight=6, **babel_values('name', de=u"Finanzielle Begleitung",  fr=u"Accompagnement budgétaire",     en=u"Finanzielle Begleitung"))
    yield I(weight=2, **babel_values('name', de=u"Laufende Beihilfe",       fr=u"Aide complémenataire",       en=u"Laufende Beihilfe"))

    #~ User = resolve_model('users.User')
    #~ yield User(username="******",
        #~ first_name="Caroline",last_name="Carnol",
        # ~ profile='200') # UserTypes.caroline)
    #~ FACULTIES = Cycler(Faculty.objects.all())
    #~ profiles = [p for p in UserTypes.items() if p.integ_level]
    #~ USERS = Cycler(User.objects.filter(profile__in=profiles))
    #~ for i in range(7):
        #~ yield Competence(user=USERS.pop(),faculty=FACULTIES.pop())
    #~ for p in pcsw.Client.objects.filter(client_state=pcsw.ClientStates.new):
        #~ p.faculty = FACULTIES.pop()
        #~ p.save()
    newcomers = dd.resolve_app('newcomers')
    users = dd.resolve_app('users')

    QUOTAS = Cycler(100, 60, 50, 20)
    FACULTIES = Cycler(newcomers.Faculty.objects.all())

    profiles = [
        p for p in UserTypes.items()
        if isinstance(p.role, IntegrationAgent)
        and not isinstance(p.role, dd.SiteStaff)]
    qs = users.User.objects.filter(profile__in=profiles)
    for u in qs:
        u.newcomer_quota = QUOTAS.pop()
        yield u

    USERS = Cycler(qs)
    for i in range(7):
        yield newcomers.Competence(user=USERS.pop(), faculty=FACULTIES.pop())

        for p in pcsw.Client.objects.exclude(
                client_state=pcsw.ClientStates.former):
            p.faculty = FACULTIES.pop()
            p.save()
Example #9
0
File: diag.py Project: zyrobin/lino
    def show_complexity_factors(self):
        self.analyze()
        items = []
        items.append("{0} plugins".format(len(dd.plugins)))
        items.append("{0} models".format(len(get_models())))
        items.append("{0} views".format(len(actors.actors_list)))
        items.append("{0} user types".format(len(UserTypes.objects())))

        dialog_actions = [
            ba for ba in analyzer.custom_actions + analyzer.window_actions
            if ba.action.parameters
        ]
        items.append("{0} dialog actions".format(len(dialog_actions)))
        return rstgen.ul(items)
Example #10
0
    def save(self, *args, **kwargs):
        super(Room, self). save(*args, **kwargs)

        if not self.calendar:
            return

        if not settings.SITE.loading_from_dump:

            user_types = set()
            for p in UserTypes.items():
                if p.has_required_roles([OfficeUser]):
                    user_types.add(p)
            User = settings.SITE.user_model
            for u in User.objects.filter(user_type__in=user_types):
                check_subscription(u, self.calendar)
Example #11
0
File: diag.py Project: NewRGB/lino
 def get_complexity_factors(self, today=None):
     self.analyze()
     yield "{0} plugins".format(len(dd.plugins))
     yield "{0} models".format(len(get_models()))
     User = settings.SITE.user_model
     if today and User:
         qs = User.objects.filter(username__isnull=False)
         qs = PeriodEvents.active.add_filter(qs, today)
         yield "{0} users".format(qs.count())
     yield "{0} user roles".format(len(settings.SITE.user_roles))
     yield "{0} user types".format(len(UserTypes.objects()))
     yield "{0} views".format(len(
         [a for a in actors.actors_list if not a.abstract]))
     dialog_actions = [ba for ba in analyzer.custom_actions +
                       analyzer.window_actions if
                       ba.action.parameters]
     yield "{0} dialog actions".format(len(dialog_actions))
Example #12
0
 def instance(cls):
     if cls._instance is None:
         # Call startup() to fill UserTypes also in a
         # multi-threaded environment:
         settings.SITE.startup()
         cls._instance = AnonymousUser()
         from lino.modlib.users.choicelists import UserTypes
         cls._instance.profile = UserTypes.get_by_name('anonymous', None)
         # cls._instance.profile = UserTypes.get_by_value(
         #     settings.SITE.anonymous_user_type, None)
         # if cls._instance.profile is None:
         #     raise Exception(
         #         "Invalid value %r for `SITE.anonymous_user_type`. "
         #         "Must be one of %s" % (
         #             settings.SITE.anonymous_user_type,
         #             [i.value for i in list(UserTypes.items())]))
     return cls._instance
Example #13
0
def actors_overview_ul(model_reports):
    user_type = UserTypes.get_by_value('900')
    # deprecated
    items = []
    for tb in model_reports:
        desc = actor_ref(tb)
        #~ label = str(tb.title or tb.label)
        #~ desc += " (%s)" % str(tb)
        desc += " (%s)" % typeref(tb)
        # mi = find_menu_item(tb.default_action)
        mi = user_type.find_menu_item(tb.default_action)
        if mi is not None:
            desc += _(" (Menu %s)") % menuselection(mi)
            #~ print(unicode(mi.label).strip())
        if tb.help_text:
            desc += " -- " + str(tb.help_text).strip()

        items.append(desc)
    return rstgen.ul(items)
Example #14
0
def actors_overview_ul(model_reports):
    user_type = UserTypes.get_by_value('900')
    # deprecated
    items = []
    for tb in model_reports:
        desc = actor_ref(tb)
        #~ label = str(tb.title or tb.label)
        #~ desc += " (%s)" % str(tb)
        desc += " (%s)" % typeref(tb)
        # mi = find_menu_item(tb.default_action)
        mi = user_type.find_menu_item(tb.default_action)
        if mi is not None:
            desc += _(" (Menu %s)") % menuselection(mi)
            #~ print(unicode(mi.label).strip())
        if tb.help_text:
            desc += " -- " + str(tb.help_text).strip()

        items.append(desc)
    return rstgen.ul(items)
Example #15
0
def visible_for(ba):
    """Shows a list of user profiles for which this action is visible."""
    if ba is None:
        return "N/A"
    visible = []
    hidden = []
    for p in UserTypes.objects():
        name = p.name or p.value
        if ba.get_view_permission(p):
            visible.append(name)
        else:
            hidden.append(name)
    if len(hidden) == 0:
        return "all"
    if len(visible) == 0:
        return "nobody"
    # if len(hidden) < len(visible):
    # if len(hidden) <= 3:
    #     return "all except %s" % ', '.join(hidden)
    return ' '.join(visible)
Example #16
0
def visible_for(ba):
    """Shows a list of user profiles for which this action is visible."""
    if ba is None:
        return "N/A"
    visible = []
    hidden = []
    for p in UserTypes.objects():
        name = p.name or p.value
        if ba.get_view_permission(p):
            visible.append(name)
        else:
            hidden.append(name)
    if len(hidden) == 0:
        return "all"
    if len(visible) == 0:
        return "nobody"
    # if len(hidden) < len(visible):
    # if len(hidden) <= 3:
    #     return "all except %s" % ', '.join(hidden)
    return ' '.join(visible)
Example #17
0
    def build_site_cache(self, force=False):
        """
        Build the site cache files under `/media/cache`, especially the
        :xfile:`lino*.js` files, one per user user_type and language.
        """
        # if not self.is_prepared:
        #     self.prepare_layouts()
        #     self.is_prepared = True

        if settings.SITE.never_build_site_cache:
            logger.debug(
                "Not building site cache because `settings.SITE.never_build_site_cache` is True"
            )
            return
        if not os.path.isdir(settings.MEDIA_ROOT):
            logger.debug(
                "Not building site cache because " +
                "directory '%s' (settings.MEDIA_ROOT) does not exist.",
                settings.STATIC_ROOT)
            return

        started = time.time()
        # logger.info("20140401 build_site_cache started")

        settings.SITE.on_each_app('setup_site_cache', force)

        settings.SITE.makedirs_if_missing(
            os.path.join(settings.MEDIA_ROOT, 'upload'))
        settings.SITE.makedirs_if_missing(
            os.path.join(settings.MEDIA_ROOT, 'webdav'))

        if force or settings.SITE.build_js_cache_on_startup:
            count = 0
            for lng in settings.SITE.languages:
                with translation.override(lng.django_code):
                    for user_type in UserTypes.objects():
                        count += with_user_profile(user_type,
                                                   self.build_js_cache, force)
            logger.info("%d lino*.js files have been built in %s seconds.",
                        count,
                        time.time() - started)
Example #18
0
    def build_site_cache(self, force=False):
        """
        Build the site cache files under `/media/cache`, especially the
        :xfile:`lino*.js` files, one per user user_type and language.
        """
        # if not self.is_prepared:
        #     self.prepare_layouts()
        #     self.is_prepared = True

        if settings.SITE.never_build_site_cache:
            logger.debug(
                "Not building site cache because `settings.SITE.never_build_site_cache` is True")
            return
        if not os.path.isdir(settings.MEDIA_ROOT):
            logger.debug(
                "Not building site cache because " +
                "directory '%s' (settings.MEDIA_ROOT) does not exist.",
                settings.STATIC_ROOT)
            return

        started = time.time()
        # logger.info("20140401 build_site_cache started")

        settings.SITE.on_each_app('setup_site_cache', force)

        settings.SITE.makedirs_if_missing(
            os.path.join(settings.MEDIA_ROOT, 'upload'))
        settings.SITE.makedirs_if_missing(
            os.path.join(settings.MEDIA_ROOT, 'webdav'))

        if force or settings.SITE.build_js_cache_on_startup:
            count = 0
            for lng in settings.SITE.languages:
                with translation.override(lng.django_code):
                    for user_type in UserTypes.objects():
                        count += with_user_profile(
                            user_type, self.build_js_cache, force)
            logger.info("%d lino*.js files have been built in %s seconds.",
                        count, time.time() - started)
Example #19
0
    def get_complexity_factors(self, today=None):
        """
        Yield a series of plain text lines that describe the complexity factors of this application.

        """
        self.analyze()
        yield "{0} plugins".format(len(dd.plugins))
        yield "{0} models".format(len(get_models()))
        User = settings.SITE.user_model
        if today and User:
            qs = User.objects.filter(username__isnull=False)
            qs = PeriodEvents.active.add_filter(qs, today)
            yield "{0} users".format(qs.count())
        # yield "{0} user roles".format(len(settings.SITE.user_roles))
        yield "{0} user types".format(len(UserTypes.objects()))
        yield "{0} views".format(
            len([a for a in actors.actors_list if not a.abstract]))
        dialog_actions = [
            ba for ba in analyzer.custom_actions + analyzer.window_actions
            if ba.action.parameters and not ba.action.no_params_window
        ]
        yield "{0} dialog actions".format(len(dialog_actions))
Example #20
0
 def get_request_queryset(self, ar):
     profiles = [p for p in UserTypes.items()
                 if isinstance(p.role, SocialAgent)]
     return super(AvailableCoaches, self, ar).filter(
         models.Q(profile__in=profiles))
Example #21
0
 def __init__(self):
     settings.SITE.startup()
     from lino.modlib.users.choicelists import UserTypes
     self.user_type = UserTypes.get_by_name(self.username, None)
Example #22
0
class Secretary(Receptor, SiteStaff, ContactsStaff, ExcerptsUser,
                VoucherSupervisor, ProductsStaff, Explorer, GuestOperator):
    pass


class Teacher(CoursesTeacher):  # , ExcerptsUser, OfficeUser):
    """Somebody who can just register presences of participants, i.e. mark
    them as absent or present.

    """
    pass


class SiteAdmin(SiteAdmin, CoursesUser, ContactsStaff, OfficeStaff,
                NotesStaff,
                LedgerStaff, SepaStaff, CheckdataUser, GuestOperator,
                ExcerptsStaff, ProductsStaff, Explorer, SiteSearcher):
    pass


from django.utils.translation import ugettext_lazy as _
from lino.modlib.users.choicelists import UserTypes
UserTypes.clear()
add = UserTypes.add_item
add('000', _("Anonymous"), UserRole, name='anonymous', readonly=True)
add('100', _("User"), Receptor, name='user')
add('200', _("Secretary"), Secretary, name='secretary')
add('300', _("Teacher"), Teacher, name='teacher')
add('900', _("Administrator"), SiteAdmin, name='admin')
Example #23
0
dd.connection_created.connect(my_handler)
if AFTER18:
    models.signals.post_migrate.connect(my_handler)
else:
    models.signals.post_syncdb.connect(my_handler)


class SiteConfigs(dd.Table):
    """
    The table used to present the :class:`SiteConfig` row in a Detail form.
    See also :meth:`lino.Lino.get_site_config`.
    Deserves more documentation.
    """
    model = 'system.SiteConfig'
    required_roles = dd.required(SiteStaff)
    default_action = actions.ShowDetail()
    #~ has_navigator = False
    hide_top_toolbar = True
    #~ can_delete = perms.never
    detail_layout = """
    default_build_method
    # lino.ModelsBySite
    """

    do_build = BuildSiteCache()


if settings.SITE.user_model == 'auth.User':
    dd.inject_field(settings.SITE.user_model, 'profile', UserTypes.field())
    dd.inject_field(settings.SITE.user_model, 'language', dd.LanguageField())
Example #24
0
    #~ def setup_handle(self,lh):
        #~ lh.config.label = _("Site Parameters")
        #~ lh.about.label = _("About")

class SiteConfigs(dd.Table):

    """
    The table used to present the :class:`SiteConfig` row in a Detail form.
    See also :meth:`lino.Lino.get_site_config`.
    Deserves more documentation.
    """
    model = 'system.SiteConfig'
    required_roles = dd.required(SiteStaff)
    default_action = actions.ShowDetailAction()
    #~ has_navigator = False
    hide_top_toolbar = True
    #~ can_delete = perms.never
    detail_layout = """
    default_build_method
    # lino.ModelsBySite
    """

    do_build = BuildSiteCache()


if settings.SITE.user_model == 'auth.User':
    dd.inject_field(settings.SITE.user_model,
                    'profile', UserTypes.field())
    dd.inject_field(settings.SITE.user_model, 'language', dd.LanguageField())

Example #25
0
    Currently an office operator can create their own notes and
    uploads, but no calendar entries.

    For example the `lino_xl.lib.cal.ui.OverdueAppointments` table
    requires :class:`OfficeStaff` and is *not* available for
    :class:`OfficeOperator`.

    """


# class OfficeStaff(OfficeUser, OfficeOperator, ContactsStaff):
class OfficeStaff(OfficeUser, OfficeOperator):
    """A user who manages configuration of office functionality.

    """


class SiteAdmin(SiteAdmin, OfficeStaff):
    """A user with all permissions."""
    pass

from django.utils.translation import ugettext_lazy as _
from lino.modlib.users.choicelists import UserTypes

UserTypes.clear()
add = UserTypes.add_item
add('000', _("Anonymous"), UserRole, name='anonymous', readonly=True)
add('100', _("User"), OfficeUser, name='user')
add('900', _("Administrator"), SiteAdmin, name='admin')
Example #26
0
 def __init__(self):
     settings.SITE.startup()
     from lino.modlib.users.choicelists import UserTypes
     self.user_type = UserTypes.get_by_name(self.username, None)