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
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.")
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()
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.")
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()
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()
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), )
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), )
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)
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)
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)
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',)))
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)
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',)))
def getImage(identifier): i = int(identifier) return ResultRecord(Record.filter_one_by_access(AnonymousUser(), i), identifier)