def multimedia(aa): ''' uploading multimedia files ''' if aa == 0: flash('Notice: if you followed the rules, it should be uploaded ..', 'success') files_limit_indicator = 300 folder_size_limit_indicator = 2000 media_path = absolute_path('static/multimedia') form = MultimediaForm() medias = data.Media.query page = request.args.get('page', 1, type=int) pagination = data.Media.query.paginate(page, per_page=10, error_out=False) supported_images = SUPPORTED_MEDIA_FILES[0] supported_audios = SUPPORTED_MEDIA_FILES[1] supported_videos = SUPPORTED_MEDIA_FILES[2] supported_all = supported_images + supported_audios + supported_videos if medias.count(): # cleanup unused media files for media in medias: if os.path.isfile(os.path.join(media_path, media.name)): media.used = media.is_used() else: db.session.delete(media) db.session.commit() if form.validate_on_submit(): name = secure_filename(form.mf.data.filename) extension = name[-3:] if extension in supported_all: files.save(request.files['mf'], name=name) db.session.add( data.Media( extension in supported_videos or name[-4:] in supported_videos, extension in supported_audios, extension in supported_images, False, name)) else: flash('Error: wrong entry, something went wrong', 'danger') return redirect(url_for('cust_app.multimedia', aa=1)) db.session.commit() return redirect(url_for('cust_app.multimedia', aa=0)) return render_template('multimedia.html', page_title='Multimedia', navbar='#snb2', form=form, hash='#da1', mmm=medias, len=len, ml=SUPPORTED_MEDIA_FILES, mmmp=pagination.items, pagination=pagination, tc=data.Touch_store.query, sl=data.Slides.query, dc=data.Display_store.query, fs=int(getFolderSize(media_path, True)), nofl=files_limit_indicator, sfl=folder_size_limit_indicator, vtrue=data.Vid.get().enable, strue=data.Slides_c.get().status)
def multimedia(aa): """ uploading multimedia files """ # Number of files limit nofl = 300 # size folder limit in MB sfl = 2000 # Fix limited upload folder size dire = absolute_path('static/multimedia/') pf = data.Media.query.order_by(data.Media.id.desc()).first() if pf is not None: pf = pf.name if aa == 0: if data.Media.query.count() >= nofl: flash( "Error: you have reached the amount limit of multimedia files " + str(nofl), 'danger') return redirect(url_for('cust_app.multimedia', aa=1)) else: flash( "Notice: if you followed the rules, it should be uploaded ..", "success") elif aa != 1: flash('Error: wrong entry, something went wrong', 'danger') return redirect(url_for("core.root")) mmm = data.Media.query page = request.args.get('page', 1, type=int) pagination = data.Media.query.paginate(page, per_page=10, error_out=False) form = forms.Multimedia(session.get('lang')) if mmm.count() >= 1: from sqlalchemy.sql import or_ for me in mmm: if os.path.isfile(dire + me.name): dl = [ data.Display_store.query.filter( or_(data.Display_store.ikey == me.id, data.Display_store.akey == me.id)).first(), data.Touch_store.query.filter( or_(data.Touch_store.ikey == me.id, data.Touch_store.akey == me.id)).first(), data.Slides.query.filter_by(ikey=me.id).first(), data.Vid.query.filter_by(vkey=me.id).first() ] me.used = False for d in dl: if d is not None: me.used = True break db.session.add(me) db.session.commit() else: if me.img or me.audio or me.vid: for t in [ data.Touch_store, data.Display_store, data.Slides ]: t = t.query.filter_by( or_(data.Display_store.ikey == me.id, data.Display_store.vkey == me.id)).first() if me.img or me.vid and t is not None: if me.img: t.ikey = None if me.vid: t.vid = None if t != data.Slides: t.bgcolor = "bg-danger" else: t.bgname = "bg-danger" db.session.add(t) ttt = t.query.filter_by(akey=me.id).first() if me.audio and ttt is not None: if t != data.Slides: t.akey = None t.audio = "false" db.session.add(t) db.session.delete(me) db.session.commit() if form.validate_on_submit(): ff = form.mf.data ffn = secure_filename(ff.filename) # dc = data.Media.query.count() # FIX ISSUE Remove folder size limitation # if int(utils.getFolderSize(dire)) >= sfl or dc >= nofl: # return redirect(url_for('cust_app.multimedia', aa=1)) e = ffn[-3:] if e in SUPPORTED_MEDIA_FILES[0]: files.save(request.files['mf'], name=ffn) if imghdr.what(dire + ffn) is None: os.remove(dire + ffn) return redirect(url_for("cust_app.multimedia", aa=1)) db.session.add(data.Media(False, False, True, False, ffn)) db.session.commit() return redirect(url_for("cust_app.multimedia", aa=1)) elif e in SUPPORTED_MEDIA_FILES[1]: files.save(request.files['mf'], name=ffn) # FIXME: Find an alternative to sndhdr for audio file detection # if sndhdr.what(dire + ffn) is None: # os.remove(dire + ffn) # return redirect(url_for("cust_app.multimedia", aa=1)) db.session.add(data.Media(False, True, False, False, ffn)) db.session.commit() return redirect(url_for("cust_app.multimedia", aa=1)) elif e in SUPPORTED_MEDIA_FILES[2] or ffn[ -4:] in SUPPORTED_MEDIA_FILES[2]: files.save(request.files['mf'], name=ffn) db.session.add(data.Media(True, False, False, False, ffn)) db.session.commit() return redirect(url_for("cust_app.multimedia", aa=1)) else: flash('Error: wrong entry, something went wrong', 'danger') return redirect(url_for("cust_app.multimedia", aa=1)) return render_template("multimedia.html", page_title="Multimedia", navbar="#snb2", form=form, hash="#da1", mmm=mmm, len=len, ml=SUPPORTED_MEDIA_FILES, mmmp=pagination.items, pagination=pagination, tc=data.Touch_store.query, sl=data.Slides.query, dc=data.Display_store.query, fs=int(getFolderSize(dire, True)), nofl=nofl, sfl=sfl, vtrue=data.Vid.query.first().enable, strue=data.Slides_c.query.first().status)