def doc_presentation(doc, lang = 'fi', basedoc = None):
    keys = ['name_' + lang]

    if '_source' in doc:
        doc = doc['_source']

    for key in keys:
        if key in doc:
            return doc[key]

    if 'last_name' in doc:
        first_name = doc['first_name'].encode('utf-8') if doc['first_name'] else ''
        last_name = doc['last_name'].encode('utf-8') if doc['first_name'] else ''
        return '{0} {1}'.format(first_name, last_name)

    return 'FOOBAR'

    """
    Return the short human readable presentation for a document.
    TODO: To be deprecated.
    """

    if not basedoc:
        basedoc = get_basedoc(doc['_type'])
    fields = presentation_fields(basedoc, lang)
    if '_source' in doc:
        doc = doc['_source']
    if fields:
        for field in fields:
            if not field in doc or doc[field] == None:
                return ''
            return u' '.join([ unicode(doc[key]) for key in fields])
    else:
        return ' - '
def get_docs(doctype, index=settings.INDEX_NAME, sort=False):
    dtype = get_basedoc(doctype)
    if not dtype:
        raise Http404

    if sort and dtype and 'meta' in dtype and 'sort' in dtype['meta']:
        sort_field = dtype['meta']['sort']
    else:
        sort_field = None

    docs = es_tools.get_docs(doctype, index, sort_field)
    return docs
def get_parent_chain(doc, data, max_depth = 4):
    """
    Get all the organisation's parents and parents' parents etc.
    performance ?
    todo: remove and use es enchanced version
    """
    meta = doc.get('meta', {})
    parent_field_key = meta.get('parent_reference', None)

    if not parent_field_key:
        return None
    if max_depth == 0 or doc == None:
        return None

    from views import doc_presentation

    query_term = doc.get('fields').get(parent_field_key).get('field').get(
        'query')
    if query_term[0] == '_type':
        doctype = query_term[1]

    parent_id = data.get(parent_field_key, None)

    if parent_id:
        try:
            parent = conn.get(primary_index, doctype, parent_id)
            parent = es_tools.convert_to_legacy_format(parent)
        except:
            return None

        name =  doc_presentation(parent) # todo: language
        result = [(parent_id, name)]

        deeper = get_parent_chain(get_basedoc(doctype), parent['_source'],
                                  max_depth - 1)
        if deeper:
            result.extend(deeper)

        return result
    else:
        return None
def restore_view(request, doctype, eid):
    """
    Restore document from versioning index
    """
    basedoc = get_basedoc(doctype)
    reid = request.GET.get("reid") or request.POST.get("reid")
    if not reid:
        versions = es_tools.get_versions(doctype, eid)
        if not versions:
            raise Http404
        resdoc = None
    else:
        versions = None
        res = get_doc_from_index(settings.VERSION_INDEX_NAME, doctype, reid)
        if res:
            resdoc = htmltree_conversion(es_tools.get_source(res), basedoc)
        else:
            raise Http404
    cur = get_doc_from_index(settings.INDEX_NAME, doctype, eid)
    if cur:
        curdoc = es_tools.get_source(cur)
    else:
        raise Http404

    if request.POST.get("restore"):
        es_tools.restore(doctype, curdoc, resdoc, request.user)
        restore = True
    else:
        restore = False
    t = env.get_template('restore.html')
    context = {"restore" : restore,
                  "data" : htmltree_conversion(curdoc, basedoc),
                  "curdoc" : curdoc,
                  "resdoc" : resdoc,
                  "versions" : versions,
                  "doctype" : doctype}
    context.update(csrf(request))
    s = template_render(t, context)
    return HttpResponse(s)
def get_base(doctype):
    doc = get_basedoc(doctype)
    baseform = build_form(doc['fields'], doc['meta'])
    return doc, baseform