diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-08-31 17:03:39 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-10-24 12:06:08 +0200 |
commit | 8d6714d0c71137b5b6f05723e9b336f67e10ee09 (patch) | |
tree | e2d116dceb23297c0216936224ae11da3eef26e1 /ishtar_common | |
parent | 51358c00845d01873b6780636f2ef076cd78c30a (diff) | |
download | Ishtar-8d6714d0c71137b5b6f05723e9b336f67e10ee09.tar.bz2 Ishtar-8d6714d0c71137b5b6f05723e9b336f67e10ee09.zip |
Quick action: main classes for quick action definition
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 5c2875fc5..5141ed66d 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1649,11 +1649,66 @@ class SearchQuery(models.Model): class ShortMenuItem(object): + """ + Item available in the short menu + """ @classmethod def get_short_menu_class(cls, pk): return '' +class QuickAction(object): + """ + Quick action available from tables + """ + def __init__(self, url, icon='', text='', target=None, rights=None): + self.url = url + self.icon = icon + self.text = text + self.rights = rights + self.target = target + assert self.target in ('one', 'many', None) + + def is_available(self, user, session=None, obj=None): + if not self.rights: # no restriction + return True + for right in self.rights: + if user.has_perm(right, session=session, obj=obj): + return True + return False + + def render(self): + lbl = self.text + if self.icon: + lbl = self.icon + if self.target is None: + url = reverse(self.url) + else: + # put arbitrary pk for the target + url = reverse(self.url, args=[0]) + url = url[:-1] # all quick action url have to finish with the + # pk of the selected item + return u'<a href="#" data-url="{}" title="{}">{}</a>'.format( + url, self.text, lbl + ) + + +class MainItem(ShortMenuItem): + """ + Item with quick actions availables from tables + """ + QUICK_ACTIONS = [] + + @classmethod + def render_quick_actions(cls, user, session=None, obj=None): + rendered = [] + for action in cls.QUICK_ACTIONS: + if not action.is_available(user, session=session, obj=obj): + continue + rendered.append(action.render()) + return mark_safe(u" ".join(rendered)) + + class LightHistorizedItem(BaseHistorizedItem): history_date = models.DateTimeField(default=datetime.datetime.now) |