summaryrefslogtreecommitdiff
path: root/ishtar/furnitures/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2011-06-13 15:01:55 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2011-06-13 15:01:55 +0200
commite29d35c908113bed814fc061e9cd1aa235188ec6 (patch)
treed86b4ee3f87443c14e269964a16d7a29269a5ba5 /ishtar/furnitures/models.py
parent664c3ec45d2b79895c9830676e9de899b4f4c825 (diff)
downloadIshtar-e29d35c908113bed814fc061e9cd1aa235188ec6.tar.bz2
Ishtar-e29d35c908113bed814fc061e9cd1aa235188ec6.zip
Provide help for form fields (closes #481)
Diffstat (limited to 'ishtar/furnitures/models.py')
-rw-r--r--ishtar/furnitures/models.py67
1 files changed, 52 insertions, 15 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py
index 6dda192ea..3d6e12536 100644
--- a/ishtar/furnitures/models.py
+++ b/ishtar/furnitures/models.py
@@ -26,7 +26,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.core.validators import validate_slug
from django.utils.translation import ugettext_lazy as _, ugettext
from django.db.utils import DatabaseError
-from django.utils.safestring import SafeUnicode
+from django.utils.safestring import SafeUnicode, mark_safe
from django.db.models import Q, Max
from django.db.models.signals import m2m_changed
@@ -130,6 +130,7 @@ class GeneralType(models.Model):
validators=[validate_slug], max_length=30, unique=True)
comment = models.TextField(_(u"Comment"), blank=True, null=True)
available = models.BooleanField(_(u"Available"))
+ HELP_TEXT = u""
class Meta:
abstract = True
@@ -138,43 +139,79 @@ class GeneralType(models.Model):
return self.label
@classmethod
- def get_types(cls, dct={}):
+ def get_help(cls, dct={}):
+ help_text = cls.HELP_TEXT
+ c_rank = -1
+ help_items = u"\n"
+ for item in cls.get_types(dct=dct, instances=True):
+ if not item.comment:
+ continue
+ if c_rank > item.rank:
+ help_items += u"</dl>\n"
+ elif c_rank < item.rank:
+ help_items += u"<dl>\n"
+ c_rank = item.rank
+ help_items += u"<dt>%s</dt><dd>%s</dd>" % (item.label,
+ u"<br/>".join(item.comment.split('\n')))
+ c_rank += 1
+ if c_rank:
+ help_items += c_rank*u"</dl>"
+ return mark_safe(help_text + help_items)
+
+ @classmethod
+ def get_types(cls, dct={}, instances=False):
base_dct = dct.copy()
if hasattr(cls, 'parent'):
- return cls._get_parent_types(base_dct)
- return cls._get_types(base_dct)
+ return cls._get_parent_types(base_dct, instances)
+ return cls._get_types(base_dct, instances)
@classmethod
- def _get_types(cls, dct={}):
+ def _get_types(cls, dct={}, instances=False):
dct['available'] = True
- yield ('', '--')
+ if not instances:
+ yield ('', '--')
for item in cls.objects.filter(**dct).all():
- yield (item.pk, _(unicode(item)))
+ if instances:
+ item.rank = 0
+ yield item
+ else:
+ yield (item.pk, _(unicode(item)))
+
+ PREFIX = "&rsaquo; "
@classmethod
- def _get_childs(cls, item, dct, prefix=""):
- prefix += "&rsaquo; "
+ def _get_childs(cls, item, dct, prefix=0, instances=False):
+ prefix += 1
dct['parent'] = item
childs = cls.objects.filter(**dct)
if hasattr(cls, 'order'):
childs = childs.order_by('order')
for child in childs.all():
- yield (child.pk, SafeUnicode(prefix + \
+ if instances:
+ child.rank = prefix
+ yield child
+ else:
+ yield (child.pk, SafeUnicode(prefix*cls.PREFIX + \
unicode(_(unicode(child))) ))
- for sub_child in cls._get_childs(child, dct, prefix):
+ for sub_child in cls._get_childs(child, dct, prefix, instances):
yield sub_child
@classmethod
- def _get_parent_types(cls, dct={}):
+ def _get_parent_types(cls, dct={}, instances=False):
dct['available'] = True
- yield ('', '--')
+ if not instances:
+ yield ('', '--')
dct['parent'] = None
items = cls.objects.filter(**dct)
if hasattr(cls, 'order'):
items = items.order_by('order')
for item in items.all():
- yield (item.pk, unicode(item))
- for child in cls._get_childs(item, dct):
+ if instances:
+ item.rank = 0
+ yield item
+ else:
+ yield (item.pk, unicode(item))
+ for child in cls._get_childs(item, dct, instances):
yield child
class HistoryError(Exception):