diff options
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 113 | 
1 files changed, 63 insertions, 50 deletions
| diff --git a/ishtar_common/views.py b/ishtar_common/views.py index d1ba4478f..a70bb0c30 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -23,7 +23,11 @@ from copy import copy  import csv  import cStringIO as StringIO  import datetime + +import reportlab +reportlab.Version = "2.2"  # stupid hack for an old library...  import ho.pisa as pisa +  import json  import logging  from markdown import markdown @@ -206,44 +210,44 @@ def get_autocomplete_generic(model, extra={'available': True}):              else unicode(x)          data = json.dumps([{'id': obj.pk, 'value': get_label(obj)}                             for obj in objects]) -        return HttpResponse(data, mimetype='text/plain') +        return HttpResponse(data, content_type='text/plain')      return func  def hide_shortcut_menu(request):      request.session['SHORTCUT_SHOW'] = 'off' -    return HttpResponse('OK', mimetype='text/plain') +    return HttpResponse('OK', content_type='text/plain')  def show_shortcut_menu(request):      request.session['SHORTCUT_SHOW'] = 'on' -    return HttpResponse('OK', mimetype='text/plain') +    return HttpResponse('OK', content_type='text/plain')  def activate_all_search(request):      request.session['SHORTCUT_SEARCH'] = 'all' -    return HttpResponse('OK', mimetype='text/plain') +    return HttpResponse('OK', content_type='text/plain')  def activate_own_search(request):      request.session['SHORTCUT_SEARCH'] = 'own' -    return HttpResponse('OK', mimetype='text/plain') +    return HttpResponse('OK', content_type='text/plain')  def activate_advanced_shortcut_menu(request):      if not hasattr(request.user, 'ishtaruser'): -        return HttpResponse('KO', mimetype='text/plain') +        return HttpResponse('KO', content_type='text/plain')      request.user.ishtaruser.advanced_shortcut_menu = True      request.user.ishtaruser.save() -    return HttpResponse('OK', mimetype='text/plain') +    return HttpResponse('OK', content_type='text/plain')  def activate_simple_shortcut_menu(request):      if not hasattr(request.user, 'ishtaruser'): -        return HttpResponse('KO', mimetype='text/plain') +        return HttpResponse('KO', content_type='text/plain')      request.user.ishtaruser.advanced_shortcut_menu = False      request.user.ishtaruser.save() -    return HttpResponse('OK', mimetype='text/plain') +    return HttpResponse('OK', content_type='text/plain')  def shortcut_menu(request): @@ -454,7 +458,7 @@ def autocomplete_person(request, person_types=None, attached_to=None,          own_items = request.user.has_perm('ishtar_common.view_own_person',                                            models.Person)      if not all_items and not own_items or not request.GET.get('term'): -        return HttpResponse('[]', mimetype='text/plain') +        return HttpResponse('[]', content_type='text/plain')      q = request.GET.get('term')      limit = request.GET.get('limit', 20)      try: @@ -485,12 +489,12 @@ def autocomplete_person(request, person_types=None, attached_to=None,      persons = models.Person.objects.filter(query)[:limit]      data = json.dumps([{'id': person.pk, 'value': unicode(person)}                         for person in persons if person]) -    return HttpResponse(data, mimetype='text/plain') +    return HttpResponse(data, content_type='text/plain')  def autocomplete_department(request):      if not request.GET.get('term'): -        return HttpResponse('[]', mimetype='text/plain') +        return HttpResponse('[]', content_type='text/plain')      q = request.GET.get('term')      q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore')      query = Q() @@ -501,12 +505,12 @@ def autocomplete_department(request):      departments = models.Department.objects.filter(query)[:limit]      data = json.dumps([{'id': department.pk, 'value': unicode(department)}                         for department in departments]) -    return HttpResponse(data, mimetype='text/plain') +    return HttpResponse(data, content_type='text/plain')  def autocomplete_town(request):      if not request.GET.get('term'): -        return HttpResponse(mimetype='text/plain') +        return HttpResponse(content_type='text/plain')      q = request.GET.get('term')      q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore')      query = Q() @@ -519,12 +523,12 @@ def autocomplete_town(request):      towns = models.Town.objects.filter(query)[:limit]      data = json.dumps([{'id': town.pk, 'value': unicode(town)}                         for town in towns]) -    return HttpResponse(data, mimetype='text/plain') +    return HttpResponse(data, content_type='text/plain')  def autocomplete_advanced_town(request, department_id=None, state_id=None):      if not request.GET.get('term'): -        return HttpResponse(mimetype='text/plain') +        return HttpResponse(content_type='text/plain')      q = request.GET.get('term')      q = unicodedata.normalize("NFKD", q).encode('ascii', 'ignore')      query = Q() @@ -548,7 +552,7 @@ def autocomplete_advanced_town(request, department_id=None, state_id=None):              val += " (%s)" % town.numero_insee          result.append({'id': town.pk, 'value': val})      data = json.dumps(result) -    return HttpResponse(data, mimetype='text/plain') +    return HttpResponse(data, content_type='text/plain')  def department_by_state(request, state_id=''): @@ -559,7 +563,7 @@ def department_by_state(request, state_id=''):          data = json.dumps([{'id': department.pk, 'number': department.number,                              'value': unicode(department)}                             for department in departments]) -    return HttpResponse(data, mimetype='text/plain') +    return HttpResponse(data, content_type='text/plain')  def format_val(val): @@ -577,6 +581,23 @@ HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_types',                       'material_type', 'conservatory_state'] +def _get_values(val): +    if hasattr(val, 'all'):  # manage related objects +        vals = list(val.all()) +    else: +        vals = [val] +    new_vals = [] +    for v in vals: +        if callable(v): +            v = v() +        if hasattr(v, 'url'): +            v = request.is_secure() and \ +                'https' or 'http' + '://' + \ +                           request.get_host() + v.url +        new_vals.append(v) +    return new_vals + +  def get_item(model, func_name, default_name, extra_request_keys=[],               base_request=None, bool_fields=[], reversed_bool_fields=[],               dated_fields=[], associated_models=[], relative_session_names=[], @@ -599,7 +620,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],          allowed, own = models.check_model_access_control(request, model,                                                           available_perms)          if not allowed: -            return HttpResponse(EMPTY, mimetype='text/plain') +            return HttpResponse(EMPTY, content_type='text/plain')          if force_own:              own = True @@ -675,7 +696,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],          try:              old = 'old' in request_items and int(request_items['old'])          except ValueError: -            return HttpResponse('[]', mimetype='text/plain') +            return HttpResponse('[]', content_type='text/plain')          # manage relations types          if 'relation_types' not in my_relation_types_prefix: @@ -848,7 +869,11 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                  query |= Q(**altor_dct)          if own: -            query = query & model.get_query_owns(request.user) +            q = models.IshtarUser.objects.filter(user_ptr=request.user) +            if q.count(): +                query = query & model.get_query_owns(q.all()[0]) +            else: +                return HttpResponse(EMPTY, content_type='text/plain')          for and_req in and_reqs:              query = query & and_req @@ -999,23 +1024,11 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                                  val = list(val.all())                                  for v in val:                                      v = getattr(v, ky) -                                    if callable(v): -                                        v = v() -                                    if hasattr(v, 'url'): -                                        v = request.is_secure() and \ -                                            'https' or 'http' + '://' + \ -                                            request.get_host() + v.url -                                    new_vals.append(v) +                                    new_vals += _get_values(v)                              elif val:                                  try:                                      val = getattr(val, ky) -                                    if callable(val): -                                        val = val() -                                    if hasattr(val, 'url'): -                                        val = request.is_secure() and \ -                                            'https' or 'http' + '://' + \ -                                            request.get_host() + val.url -                                    new_vals.append(val) +                                    new_vals += _get_values(val)                                  except AttributeError:                                      # must be a query key such as "contains"                                      pass @@ -1103,9 +1116,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                      "page": page_nb,                      "total": (items_nb / row_nb + 1) if row_nb else items_nb,                  }) -            return HttpResponse(data, mimetype='text/plain') +            return HttpResponse(data, content_type='text/plain')          elif data_type == "csv": -            response = HttpResponse(mimetype='text/csv') +            response = HttpResponse(content_type='text/csv')              n = datetime.datetime.now()              filename = u'%s_%s.csv' % (default_name,                                         n.strftime('%Y%m%d-%H%M%S')) @@ -1153,7 +1166,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                      row.append(val)                  writer.writerow(row)              return response -        return HttpResponse('{}', mimetype='text/plain') +        return HttpResponse('{}', content_type='text/plain')      return func @@ -1165,7 +1178,7 @@ def get_by_importer(request, slug, data_type='json', full=False,          res = ''          if data_type == "json":              res = '{}' -        return HttpResponse(res, mimetype='text/plain') +        return HttpResponse(res, content_type='text/plain')      imp = q.all()[0].get_importer_class()      cols, col_names = [], []      for formater in imp.LINE_FORMAT: @@ -1223,7 +1236,7 @@ def show_item(model, name, extra_dct=None):                      item = item.get_previous(date=date)                      assert item is not None                  except (ValueError, AssertionError): -                    return HttpResponse(None, mimetype='text/plain') +                    return HttpResponse(None, content_type='text/plain')                  dct['previous'] = item._previous                  dct['next'] = item._next              else: @@ -1278,7 +1291,7 @@ def show_item(model, name, extra_dct=None):              except xhtml2odt.ODTExportError:                  return HttpResponse(content, content_type="application/xhtml")              response = HttpResponse( -                mimetype='application/vnd.oasis.opendocument.text') +                content_type='application/vnd.oasis.opendocument.text')              response['Content-Disposition'] = 'attachment; filename=%s.odt' % \                                                filename              response.write(odtfile) @@ -1293,7 +1306,7 @@ def show_item(model, name, extra_dct=None):              pdf = pisa.pisaDocument(StringIO.StringIO(html), result,                                      encoding='utf-8')              response = HttpResponse(result.getvalue(), -                                    mimetype='application/pdf') +                                    content_type='application/pdf')              response['Content-Disposition'] = 'attachment; filename=%s.pdf' % \                                                filename              if not pdf.err: @@ -1313,8 +1326,8 @@ def revert_item(model):              date = datetime.datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%f')              item.rollback(date)          except (ObjectDoesNotExist, ValueError, HistoryError): -            return HttpResponse(None, mimetype='text/plain') -        return HttpResponse("True", mimetype='text/plain') +            return HttpResponse(None, content_type='text/plain') +        return HttpResponse("True", content_type='text/plain')      return func @@ -1325,9 +1338,9 @@ def autocomplete_organization(request, orga_type=None):                                    models.Organization)         and not request.user.ishtaruser.has_right(              'person_search', session=request.session)): -        return HttpResponse('[]', mimetype='text/plain') +        return HttpResponse('[]', content_type='text/plain')      if not request.GET.get('term'): -        return HttpResponse('[]', mimetype='text/plain') +        return HttpResponse('[]', content_type='text/plain')      q = request.GET.get('term')      query = Q()      for q in q.split(' '): @@ -1344,16 +1357,16 @@ def autocomplete_organization(request, orga_type=None):      organizations = models.Organization.objects.filter(query)[:limit]      data = json.dumps([{'id': org.pk, 'value': unicode(org)}                         for org in organizations]) -    return HttpResponse(data, mimetype='text/plain') +    return HttpResponse(data, content_type='text/plain')  def autocomplete_author(request):      if not request.user.has_perm('ishtar_common.view_author', models.Author)\         and not request.user.has_perm('ishtar_common.view_own_author',                                       models.Author): -        return HttpResponse('[]', mimetype='text/plain') +        return HttpResponse('[]', content_type='text/plain')      if not request.GET.get('term'): -        return HttpResponse('[]', mimetype='text/plain') +        return HttpResponse('[]', content_type='text/plain')      q = request.GET.get('term')      query = Q()      for q in q.split(' '): @@ -1366,7 +1379,7 @@ def autocomplete_author(request):      authors = models.Author.objects.filter(query)[:limit]      data = json.dumps([{'id': author.pk, 'value': unicode(author)}                         for author in authors]) -    return HttpResponse(data, mimetype='text/plain') +    return HttpResponse(data, content_type='text/plain')  def new_item(model, frm, many=False): | 
