diff options
Diffstat (limited to 'ishtar_common/views.py')
| -rw-r--r-- | ishtar_common/views.py | 78 | 
1 files changed, 43 insertions, 35 deletions
| diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 27b192e74..67b883447 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -63,7 +63,8 @@ from archaeological_operations.forms import DashboardForm as DashboardFormOpe  from archaeological_files.forms import DashboardForm as DashboardFormFile  from ishtar_common.forms import FinalForm, FinalDeleteForm -from ishtar_common.utils import get_random_item_image_link, shortify +from ishtar_common.widgets import JQueryAutoComplete +from ishtar_common.utils import get_random_item_image_link  from ishtar_common import forms_common as forms  from ishtar_common import wizards  from ishtar_common.models import HistoryError, PRIVATE_FIELDS, \ @@ -199,6 +200,16 @@ def get_autocomplete_generic(model, extra={'available': True}):      return func +def activate_all_search(request): +    request.session['SHORTCUT_SEARCH'] = 'all' +    return HttpResponse('OK', mimetype='text/plain') + + +def activate_own_search(request): +    request.session['SHORTCUT_SEARCH'] = 'own' +    return HttpResponse('OK', mimetype='text/plain') + +  def shortcut_menu(request):      profile = get_current_profile()      CURRENT_ITEMS = [] @@ -209,36 +220,19 @@ def shortcut_menu(request):          CURRENT_ITEMS.append((_(u"Context record"), ContextRecord))      if profile.find:          CURRENT_ITEMS.append((_(u"Find"), Find)) -    dct = {'current_menu': []} -    current_selected_item = None +    dct = {'current_menu': [], 'menu': [], +           'SHORTCUT_SEARCH': request.session['SHORTCUT_SEARCH'] +           if 'SHORTCUT_SEARCH' in request.session else 'own'} +      for lbl, model in CURRENT_ITEMS: -        new_selected_item = None          model_name = model.SLUG -        cls = ''          current = model_name in request.session and request.session[model_name] -        items = [] -        for item in model.get_owns(request.user, -                                   menu_filtr=current_selected_item): -            pk = unicode(item.pk) -            if item.IS_BASKET: -                pk = "basket-" + pk -            selected = pk == current -            if selected: -                cls = item.get_short_menu_class() -                new_selected_item = item -                items.append((pk, shortify(unicode(item), 60), -                              selected, item.get_short_menu_class())) -        # selected is not in owns - add it to the list -        if not new_selected_item and current: -            try: -                item = model.objects.get(pk=int(current)) -                new_selected_item = item -                items.append((item.pk, shortify(unicode(item), 60), -                              True, item.get_short_menu_class())) -            except (model.DoesNotExist, ValueError): -                pass -        dct['current_menu'].append((lbl, model_name, cls, items)) -        current_selected_item = new_selected_item + +        dct['menu'].append((lbl, model_name, current or 0, JQueryAutoComplete( +            reverse('get-' + model.SLUG + '-shortcut'), +            model).render( +                model.SLUG + '-shortcut', value=current, +                attrs={'id': 'current_' + model.SLUG})))      return render_to_response('ishtar/blocks/shortcut_menu.html', dct,                                context_instance=RequestContext(request)) @@ -281,6 +275,7 @@ def update_current_item(request, item_type=None, pk=None):              request.session[item_type] = request.POST['value']      else:          request.session[item_type] = str(pk) +    request.session['SHORTCUT_SEARCH'] = 'all'      currents = get_current_items(request)      # reinit when descending item are not relevant @@ -507,6 +502,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                          break  # max right reach          if force_own:              own = True +        if full == 'shortcut' and 'SHORTCUT_SEARCH' in request.session and \ +                request.session['SHORTCUT_SEARCH'] == 'own': +            own = True          EMPTY = ''          if 'type' in dct:              data_type = dct.pop('type') @@ -535,6 +533,8 @@ def get_item(model, func_name, default_name, extra_request_keys=[],          request_items = request.method == 'POST' and request.POST \              or request.GET          dct = base_request.copy() +        if full == 'shortcut': +            dct['cached_label__icontains'] = request.GET.get('term', None)          and_reqs, or_reqs = [], []          try:              old = 'old' in request_items and int(request_items['old']) @@ -568,7 +568,7 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                  q = Q(**{req_key: val})                  reqs = reqs | q              and_reqs.append(reqs) -        if 'submited' not in request_items: +        if 'submited' not in request_items and full != 'shortcut':              # default search              # an item is selected in the default menu              if default_name in request.session and \ @@ -782,6 +782,9 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                  pass              start = (page_nb - 1) * row_nb              end = page_nb * row_nb +        if full == 'shortcut': +            start = 0 +            end = 20          items_nb = items.count()          if manual_sort_key:              items = items.all() @@ -896,13 +899,18 @@ def get_item(model, func_name, default_name, extra_request_keys=[],                          if hasattr(model, 'COL_LINK') and k in model.COL_LINK:                              value = link_ext_template.format(value, value)                          res[k] = value +                if full == 'shortcut': +                    res['value'] = res.pop('cached_label')                  rows.append(res) -            data = json.dumps({ -                "records": items_nb, -                "rows": rows, -                "page": page_nb, -                "total": (items_nb / row_nb + 1) if row_nb else items_nb, -            }) +            if full == 'shortcut': +                data = json.dumps(rows) +            else: +                data = json.dumps({ +                    "records": items_nb, +                    "rows": rows, +                    "page": page_nb, +                    "total": (items_nb / row_nb + 1) if row_nb else items_nb, +                })              return HttpResponse(data, mimetype='text/plain')          elif data_type == "csv":              response = HttpResponse(mimetype='text/csv') | 
