Example #1
0
def search_user(request):

    docs = []

    query = request.POST['filter']
    if not query:
        return_dict = {
            "sEcho": 1,
            "iTotalRecords": 0,
            "iTotalDisplayRecords": 0,
            "aaData": []
        }
        return jsonfy(**return_dict)

    if query.isdigit():
        query = "document_number:%s" % query
    else:
        query = "%s~.1" % sanitize_lucene(query)

    for doc in search_lucene('searchauth/user',
                             database="couchauthsearch",
                             q=query):
        docs.append(doc)

    start = int(request.POST['iDisplayStart'])
    length = int(request.POST['iDisplayLength'])
    secho = int(request.POST['sEcho']) + 1

    #sort_col = int(request.POST['iSortCol_0'])
    #sort_dir = request.POST['sSortDir_0']

    count = len(docs)

    db = User.get_db()
    keys = [doc['id'] for doc in docs[start:start + length]]
    columns = []
    for doc in db.view('_all_docs', keys=keys, include_docs=True):
        doc = User.wrap(doc['doc'])

        username = '******' % \
                                        (doc._id, doc.username)

        if doc._attachments and 'photo' in doc._attachments:
            img_path = "/couchflow/get_attach/couchauth/%s/photo" % doc._id
            img = '<img style="width:40px" src="%s"/>' % img_path
        else:
            img = '<div class="nophoto">?</div>'
        first_name = doc.first_name
        last_name = doc.last_name
        dni = doc.document_number

        row = [doc._id, img, username, first_name, last_name, dni]

        columns.append(row)

    return_dict = {
        "sEcho": secho,
        "iTotalRecords": count,
        "iTotalDisplayRecords": count,
        "aaData": columns
    }
    return jsonfy(**return_dict)
Example #2
0
def user(request, user_id):
    """
    User Profile Page
    """
    #user = request.user

    user_db = User.get_db()

    if user_id == 'me':
        user = request.user
        groups = user.group_names
    else:
        user = User.get(user_id)
        groups = [
            x['doc']['name']
            for x in user_db.view("couchauth/groups_by_username",
                                  key=user.username,
                                  include_docs=True)
        ]

    if user._attachments and 'photo' in user._attachments:
        photo = "/couchflow/get_attach/couchauth/%s/photo" % user._id
    else:
        photo = None

    editlink = "/webconf/couchauth/edit_user/%s/" % user.username

    context = {
        "user": request.user,
        "userdoc": user,
        "photo": photo,
        "groups": groups,
        "editlink": editlink,
    }
    if 'biblio' in request.user.group_names:
        context['is_biblio'] = True

        if user_id == 'me':
            penalties = list(user_db.view("couchauth/penalties"))
            context['show_penalty_alert'] = True
            context['penalty_alert'] = penalties

    if context.get('is_biblio', False) or request.user.is_superuser or \
       user_id == 'me':

        circ_db = CirculationLog.get_db()
        startkey = [user._id]
        endkey = [user._id, {}]
        results = circ_db.view("circulation/logs",
                               include_docs=True)[startkey:endkey]

        logs = {}
        for row in results:
            row_id = tuple(row['key'][1:])
            logs.setdefault(row_id, {})
            logs[row_id][row['doc']['doc_type']] = row['doc']

        logs_list = [x[1] for x in sorted(logs.items(), key=lambda x: x[0])]

        context['logs'] = logs_list

    return render_to_response('circulation/user.html', context)