Пример #1
0
def get_media_for_record(recordid, user=None, passwords={}):
    """
    Returns all media accessible to the user either directly through collections
    or indirectly through presentations.
    A user always must have access to the storage where the media is stored.
    """
    from rooibos.presentation.models import Presentation
    
    print str(recordid)
    #record_id = getattr(record, 'id', record)
    print 'recordid '+ str(recordid)
    if isinstance(recordid, Record):
        record_id = recordid.id        
    else:
        record_id = recordid
    if DEBUG:
        print "RECORD ID: " + str(record_id)
    record = Record.filter_one_by_access(user, record_id)
    if DEBUG:
        print "record filtered"

    if not record:
        print "not record in storage/init/get_media"
        # Try to get to record through an accessible presentation -
        # own presentations don't count, since it's already established that owner
        # doesn't have access to the record.
        pw_q = Q(
            # Presentation must not have password
            Q(password=None) | Q(password='') |
            # or must know password
            Q(id__in=Presentation.check_passwords(passwords))
        )
        access_q = Q(
            # Must have access to presentation
            id__in=filter_by_access(user, Presentation),
            # and presentation must not be archived
            hidden=False
        )
        accessible_presentations = Presentation.objects.filter(
            pw_q, access_q, items__record__id=record_id)
        # Now get all the presentation owners so we can check if any of them have access
        # to the record
        owners = User.objects.filter(id__in=accessible_presentations.values('owner'))
        if not any(Record.filter_one_by_access(owner, record_id) for owner in owners):
            if DEBUG:
                print "Media.objects.none() is being returned"
            return Media.objects.none()
        #print "how many media objects: "+str(Media.objects.count())
        #print "data: "+str(Media.objects.all().values("record__id", "url"))
    print "media filter filtered"
    media_filter = Media.objects.filter(
        record__id=record_id,
        #storage__id__in=filter_by_access(user, Storage),
        )
    if not media_filter:
        print "oh no, no media there on line 82 of storage/__init__"
        print str(Media.objects.all())
        print "Count: " + str(Media.objects.count())
    return media_filter
Пример #2
0
def set_marker(request, id, name):
    if request.method == "POST":
        index = request.POST['index']
        time = request.POST['time']
        if index and time:
            record = Record.filter_one_by_access(request.user, id)
            can_edit = record.editable_by(request.user)
            markers = get_markers(record)
            m = dict(map(lambda v: v.split(','),
                         markers.value.split())) if markers.value else dict()
            m[index] = time
            to_remove = []
            prev_val = None
            for key in sorted(m.keys()):
                if prev_val:
                    if prev_val >= m[key]:
                        to_remove.append(key)
                else:
                    prev_val = m[key]
            for key in to_remove:
                del m[key]
            markers.value = '\n'.join('%s,%s' % (v, k)
                                      for v, k in m.iteritems())
            markers.save()
            return dict(message="Marker saved.")
        else:
            return dict(result="Error", message="Missing parameters")
    else:
        return dict(result="Error", message="Invalid method. Use POST.")
Пример #3
0
        def drawCard(index, item):
            p.saveState()
            p.translate(0, height / 3 * (2 - index % 3))

            # retrieve record while making sure it's accessible to presentation owner
            record = Record.filter_one_by_access(presentation.owner, item.record.id)

            if record:
                image = get_image_for_record(record, presentation.owner, 800, 800, passwords)
                if image:
                    p.drawImage(image, inch / 2, inch / 2, width=width / 2 - inch, height=height / 3 - inch,
                                preserveAspectRatio=True)
                f = Frame(width / 2 + inch / 2, inch / 2,
                          width=width / 2 - inch, height=height / 3 - inch,
                          leftPadding=0, bottomPadding=0, rightPadding=0, topPadding=0)
                data = []
                data.append(getParagraph('%s/%s' % (index + 1, len(items)), styles['SlideNumber']))
                values = item.get_fieldvalues(owner=request.user)
                for value in values:
                    v = value.value if len(value.value) < 100 else value.value[:100] + '...'

                    v = remove_rels_from_a_tags(v)

                    data.append(getParagraph('<b>%s:</b> %s' % (value.resolved_label, v), styles['Data']))
                annotation = item.annotation
                if annotation:
                    data.append(getParagraph('<b>%s:</b> %s' % ('Annotation', annotation), styles['Data']))
                data = filter(None, data)
                f.addFromList(data, p)
                if data:
                    p.setFont('Helvetica', 8)
                    p.setFillColorRGB(0, 0, 0)
                    p.drawRightString(width - inch / 2, inch / 2, '...')

            p.restoreState()
Пример #4
0
def set_marker(request, id, name):
    if request.method == "POST":
        index = request.POST['index']
        time = request.POST['time']
        if index and time:
            record = Record.filter_one_by_access(request.user, id)
            can_edit = record.editable_by(request.user)
            markers = get_markers(record)
            m = dict(map(lambda v: v.split(','), markers.value.split())) if markers.value else dict()
            m[index] = time
            to_remove = []
            prev_val = None
            for key in sorted(m.keys()):
                if prev_val:
                    if prev_val >= m[key]:
                        to_remove.append(key)
                else:
                    prev_val = m[key]
            for key in to_remove:
                del m[key]
            markers.value = '\n'.join('%s,%s' % (v,k) for v,k in m.iteritems())
            markers.save()
            return dict(message="Marker saved.")
        else:
            return dict(result="Error", message="Missing parameters")
    else:
        return dict(result="Error", message="Invalid method. Use POST.")
Пример #5
0
        def drawCard(index, item):
            p.saveState()
            p.translate(0, height / 3 * (2 - index % 3))

            # retrieve record while making sure it's accessible to presentation owner
            record = Record.filter_one_by_access(presentation.owner, item.record.id)

            if record:
                image = get_image_for_record(record, presentation.owner, 800, 800, passwords)
                if image:
                    p.drawImage(image, inch / 2, inch / 2, width=width / 2 - inch, height=height / 3 - inch,
                                preserveAspectRatio=True)
                f = Frame(width / 2 + inch / 2, inch / 2,
                          width=width / 2 - inch, height = height / 3 - inch,
                          leftPadding=0, bottomPadding=0, rightPadding=0, topPadding=0)
                data = []
                data.append(getParagraph('%s/%s' % (index + 1, len(items)), styles['SlideNumber']))
                values = item.get_fieldvalues(owner=request.user)
                for value in values:
                    v = value.value if len(value.value) < 100 else value.value[:100] + '...'
                    data.append(getParagraph('<b>%s:</b> %s' % (value.resolved_label, v), styles['Data']))
                annotation = item.annotation
                if annotation:
                    data.append(getParagraph('<b>%s:</b> %s' % ('Annotation', annotation), styles['Data']))
                data = filter(None, data)
                f.addFromList(data, p)
                if data:
                    p.setFont('Helvetica', 8)
                    p.setFillColorRGB(0, 0, 0)
                    p.drawRightString(width - inch / 2, inch / 2, '...')

            p.restoreState()
Пример #6
0
        def draw_card(index, item):
            p.saveState()
            p.translate(0, height / 3 * (2 - index % 3))

            # retrieve record while making sure it's accessible
            # to presentation owner
            record = Record.filter_one_by_access(presentation.owner,
                                                 item.record.id)

            if record:
                image = get_image_for_record(record, self.user, 800, 800,
                                             passwords)
                if image:
                    p.drawImage(image,
                                inch / 2,
                                inch / 2,
                                width=width / 2 - inch,
                                height=height / 3 - inch,
                                preserveAspectRatio=True)
                f = Frame(width / 2 + inch / 2,
                          inch / 2,
                          width=width / 2 - inch,
                          height=height / 3 - inch,
                          leftPadding=0,
                          bottomPadding=0,
                          rightPadding=0,
                          topPadding=0)
                data = []
                data.append(
                    get_paragraph('%s/%s' % (index + 1, len(items)),
                                  styles['SlideNumber']))
                values = get_metadata(item.get_fieldvalues(owner=request.user))
                for value in values:
                    v = _clean_for_render(value['value'])
                    data.append(
                        get_paragraph('<b>%s:</b> %s' % (value['label'], v),
                                      styles['Data']))
                annotation = item.annotation
                if annotation:
                    annotation = _clean_for_render(annotation)
                    data.append(
                        get_paragraph(
                            '<b>%s:</b> %s' % ('Annotation', annotation),
                            styles['Data']))
                data = [_f for _f in data if _f]
                incomplete = False
                while data:
                    f.addFromList(data, p)
                    if data:
                        data = data[1:]
                        incomplete = True

                if incomplete:
                    p.setFont('Helvetica', 8)
                    p.setFillColorRGB(0, 0, 0)
                    p.drawRightString(width - inch / 2, inch / 2, '...')

            p.restoreState()
Пример #7
0
def get_media_for_record(record, user=None, passwords={}):
    """
    Returns all media accessible to the user either directly through collections
    or indirectly through presentations.
    A user always must have access to the storage where the media is stored.
    """
    from rooibos.presentation.models import Presentation

    record_id = getattr(record, 'id', record)
    record = Record.filter_one_by_access(user, record_id)
	
    if not record:
        print "Media is not a record"
     	# Try to get to record through an accessible presentation -
        # own presentations don't count, since it's already established that owner
        # doesn't have access to the record.
        pw_q = Q(
            # Presentation must not have password
            Q(password=None) | Q(password='') |
            # or must know password
            Q(id__in=Presentation.check_passwords(passwords))
        )
        access_q = Q(
            # Must have access to presentation
            id__in=filter_by_access(user, Presentation),
            # and presentation must not be archived
            hidden=False
        )
        accessible_presentations = Presentation.objects.filter(
            pw_q, access_q, items__record__id=record_id)
        # Now get all the presentation owners so we can check if any of them have access
        # to the record
        owners = User.objects.filter(id__in=accessible_presentations.values('owner'))
        if not any(Record.filter_one_by_access(owner, record_id) for owner in owners):
            return Media.objects.none()	
        
    print record_id
    print filter_by_access(user, Storage)

    return Media.objects.filter(
        record__id=record_id,
        storage__id__in=filter_by_access(user, Storage),
    )
Пример #8
0
def get_media_for_record(record, user=None, passwords={}):
    """
    Returns all media accessible to the user either directly through
    collections or indirectly through presentations.
    A user always must have access to the storage where the media is stored.
    """
    from rooibos.presentation.models import Presentation

    record_id = getattr(record, 'id', record)
    record = Record.filter_one_by_access(user, record_id)

    if not record:
        # Try to get to record through an accessible presentation -
        # own presentations don't count, since it's already established
        # that owner doesn't have access to the record.
        pw_q = Q(
            # Presentation must not have password
            Q(password=None) | Q(password='') |
            # or must know password
            Q(id__in=Presentation.check_passwords(passwords))
        )
        access_q = Q(
            # Must have access to presentation
            id__in=filter_by_access(user, Presentation),
            # and presentation must not be archived
            hidden=False
        )
        accessible_presentations = Presentation.objects.filter(
            pw_q, access_q, items__record__id=record_id)
        # Now get all the presentation owners so we can check if any of them
        # have access to the record
        owners = User.objects.filter(
            id__in=accessible_presentations.values('owner'))
        if not any(
                Record.filter_one_by_access(owner, record_id)
                for owner in owners):
            return Media.objects.none()

    return Media.objects.filter(
        record__id=record_id,
        storage__id__in=filter_by_access(user, Storage),
    )
Пример #9
0
def pdfviewer(obj, request, objid=None):
    if obj:
        if not isinstance(obj, Record):
            return None
    else:
        obj = Record.filter_one_by_access(request.user, objid)
        if not obj:
            return None
    if obj.media_set.filter(mimetype='application/pdf').count() == 0:
        return None
    return PdfViewer(obj, request.user)
Пример #10
0
def pdfviewer(obj, request, objid=None):
    if obj:
        if not isinstance(obj, Record):
            return None
    else:
        obj = Record.filter_one_by_access(request.user, objid)
        if not obj:
            return None
    if obj.media_set.filter(mimetype="application/pdf").count() == 0:
        return None
    return PdfViewer(obj, request.user)
Пример #11
0
def audiotextsyncviewer(obj, request, objid=None):
    if obj:
        if not isinstance(obj, Record):
            return None
    else:
        obj = Record.filter_one_by_access(request.user, objid)
        if not obj:
            return None
    has_text = has_audio = False
    for media in obj.media_set.filter(
        storage__in=filter_by_access(request.user, Storage)):
        if media.mimetype == 'audio/mpeg':
            has_audio = True
        elif media.mimetype == 'text/plain':
            has_text = True
    if not has_text or not has_audio:
        return None
    return AudioTextSyncViewer(obj, request.user)
Пример #12
0
def record_thumbnail(request, id, name):
    print 'record_thumbnail'
    filename = get_thumbnail_for_record(id, request.user, crop_to_square=request.GET.has_key('square'))
    if filename:
        Activity.objects.create(event='media-thumbnail',
                                request=request,
                                content_type=ContentType.objects.get_for_model(Record),
                                object_id=id,
                                #content_object=record,
                                data=dict(square=int(request.GET.has_key('square'))))
        try:
            return HttpResponse(content=open(filename, 'rb').read(), mimetype='image/jpeg')
        except IOError:
            logging.error("IOError: %s" % filename)
    record = Record.filter_one_by_access(request.user, id)
    if record and record.tmp_extthumb:
        return HttpResponseRedirect(record.tmp_extthumb)
    return HttpResponseRedirect(reverse('static', args=('images/thumbnail_unavailable.png',)))
Пример #13
0
def audiotextsyncviewer(obj, request, objid=None):
    if obj:
        if not isinstance(obj, Record):
            return None
    else:
        obj = Record.filter_one_by_access(request.user, objid)
        if not obj:
            return None
    has_text = has_audio = False
    for media in obj.media_set.filter(
        storage__in=filter_by_access(request.user, Storage)):
        if media.mimetype == 'audio/mpeg':
            has_audio = True
        elif media.mimetype == 'text/plain':
            has_text = True
    if not has_text or not has_audio:
        return None
    return AudioTextSyncViewer(obj, request.user)
Пример #14
0
def record_thumbnail(request, id, name):
    print 'record_thumbnail'
    filename = get_thumbnail_for_record(id, request.user, crop_to_square=request.GET.has_key('square'))
    if filename:
        Activity.objects.create(event='media-thumbnail',
                                request=request,
                                content_type=ContentType.objects.get_for_model(Record),
                                object_id=id,
                                #content_object=record,
                                data=dict(square=int(request.GET.has_key('square'))))
        try:
            return HttpResponse(content=open(filename, 'rb').read(), mimetype='image/jpeg')
        except IOError:
            logging.error("IOError: %s" % filename)
    record = Record.filter_one_by_access(request.user, id)
    if record and record.tmp_extthumb:
        return HttpResponseRedirect(record.tmp_extthumb)
    print "THUMBNAIL UNAVAILABLE - NO RECORD"
    return HttpResponseRedirect(reverse('static', args=('images/thumbnail_unavailable.png',)))
Пример #15
0
def getImage(identifier):
	i = int(identifier)
	return ResultRecord(Record.filter_one_by_access(AnonymousUser(), i), identifier)