No problem, I don't have time neither maybe for a couples of days too :) Richard
On Fri, Jun 1, 2012 at 3:24 PM, Paolo Caruccio <[email protected]>wrote: > Richard, > > I made some reflections on what you want to do and it's not easy, since > the use of control for simultaneous upload of multiple files was aimed to > replace the standard control. As an example of use, you can > seehttp://ochiba77.blogspot.it/2012/01/web2py-slices-sending-email-from-form.html > However, we can use a different approach to getting what you want through > the use of a smartgrid. I'll post soon a demo application (in this days I'm > very busy in personal matters). > > Il giorno giovedì 31 maggio 2012 19:35:02 UTC+2, Richard ha scritto: > >> Here where I get as now : >> >> Controler : >> def trip_update(): >> # only SQLFORM.factory tested >> form=SQLFORM.factory(db.t_**trip, db.t_photos) >> for row in db(db.t_trip.id == request.args(0)).select(db.t_** >> trip.ALL): >> for f in db.t_trip.fields: >> form.vars[f]=row[f] >> photos_files = [] >> for row in db(db.t_photos.f_trip_ref == request.args(0)).select(db.t_ >> **photos.ALL): >> #for f in db.t_photos.fields: >> #f_photo_0:CONTENT_OF_f_title >> #form.vars['f_photo_'+str(i)+'**:'+row.f_title]=row >> #LI(_title='couleurs (1).png', A('x', >> _href='javascript:void(0);', _class='mw_delItem', _title='remove this >> file'), I(B(EM(_class='mw_file-ext-**png'))), SPAN('test1')) >> photos_files.append(XML(LI(A('**x', _href='javascript:void(0);', >> _class='mw_delItem', _title='remove this file'), >> EM(_class='mw_file-ext-png'), SPAN(row.f_title), _title=row.f_photo)).xml()) >> # response.js="""var photos_files_list = "{{=photos_files}}" >> # $(document).ready( function () { >> # if(photos_files_list != 'None') { >> # $.each(photos_files_list, function(i, val) { >> # $('ul.mw_list').append(**photos_files_list[i]); >> # }); >> # }; >> # });""" >> #response.js="""var photos_files_list = "{{=photos_files}}" >> $(document).ready( function () {if(photos_files_list != 'None') >> {$.each(photos_files_list, function(i, val) {$('ul.mw_list').append(** >> photos_files_list[i]);});};});**""" >> #A(T('Access'),_href=URL(r=**request,f='read',args=(** >> request.args(0),str(id)))) >> >> #<li title="couleurs (1).png"><a class="mw_delItem" >> href="javascript:void(0);" title="remove this file">x</a><i><b><em >> class="mw_file-ext-png"></em><**/b></i><span>test1</span></li> >> if form.accepts(request, session, onvalidation=lambda >> form:check(form)): # Is it possible to use onvalidation with form.process() >> syntax ? >> trip_id = request.args(0) >> db(db.t_trip.id == trip_id).update(**db.t_trip._** >> filter_fields(form.vars)) >> nfiles = 0 >> for var in request.vars: >> if var.startswith('f_photo') and request.vars[var] != '': >> uploaded = request.vars[var] >> if isinstance(uploaded,list): >> # files uploaded through input with "multiple" >> attribute set on true >> counter=0 >> for element in uploaded: >> counter += 1 >> nfiles += 1 >> file_title = element.name.split(":")[-1] # TODO: >> could this be made better? >> # I >> mean, the title must be appended to element's name >> # or is >> there another way? >> db.t_photos.insert( >> f_trip_ref=trip_id, >> f_title=file_title+" ("+str(counter)+")" if >> file_title!="" else file_title, >> f_photo=db.t_photos.f_photo.** >> store(element.file,element.**filename)) >> else: >> # only one file uploaded >> element = request.vars[var] >> nfiles += 1 >> db.t_photos.insert( >> f_trip_ref=trip_id, >> f_title=element.name.split(":"**)[-1], >> f_photo=db.t_photos.f_photo.** >> store(element.file,element.**filename)) >> >> session.flash = T('%s photo%s uploaded'%(nfiles, 's' if nfiles>1 >> else '')) >> redirect(URL('trip_read')) >> >> if isinstance(form,FORM): >> # hide f_title form's row. Is there a better way to accomplish it? >> del form[0][3] >> >> return dict(form=form, photos_files=photos_files) >> >> View : >> >> {{response.files.extend([URL('**static','css/multiupload.css')** >> ,URL('static','js/jquery.**multiupload.js')])}} >> {{left_sidebar_enabled=right_**sidebar_enabled=False}} >> {{extend 'layout.html'}} >> <div> >> {{=form}} >> <ul>{{=photos_files[0]}}</ul> >> <script type="text/javascript" charset="utf-8"> >> //<!-- >> jQuery('input[name="f_photo"]:**not(.processed)').multiUpload(**{ >> mw_placeholder:"{{=T('insert a title')}}", >> mw_text_addBtn:"+", >> mw_tooltip_addBtn:"{{=T('add a file')}}", >> mw_text_clearBtn:"x", >> mw_tooltip_clearBtn:"{{=T('**remove all')}}", >> mw_tooltip_removeFileBtn:"{{=**T('remove this file')}}", >> mw_tooltip_removeGroupBtn:"{{=**T('remove this file group')}}", >> mw_group_title:"{{=T('FILE GROUP')}}", >> mw_fileNumber:false, >> mw_maxElementAllowed:5 >> }); >> //--> >> </script> >> </div> >> >> <script type="text/javascript" charset="utf-8"> >> var photos_files_list = {{=photos_files}} >> $(document).ready( function () { >> if(photos_files_list != 'None') { >> $.each(photos_files_list, function(i, val) { >> $('ul.mw_list').append(val); //photos_files_list[i] >> }); >> }; >> }); >> </script> >> >> {{if request.is_local:}} >> {{=response.toolbar()}} >> {{pass}} >> >> >> Problem : the items are not showing up in the UL box, because a >> conversion between python and javascript text format I think (I know the >> get into the box as plain text), Second thing, the destruction of the items >> is not working not sure why. Also there is code refactoring to do since the >> rest of the function only manage adding stuff I change a bit for updating >> stuff, for the first table (maybe for nothing), but it needs to destruct >> records in the referenced table so I need to code that. >> >> Richard >> >> On Thu, May 31, 2012 at 12:25 PM, Richard Vézina < >> [email protected]> wrote: >> >>> response.js will not works, it only works on response and for component >>> as says the book. >>> >>> Putting the js code into the view seems to work if I pass the >>> photos_files var to the view... >>> >>> Now I think I just have to find the way to expose the HTML, XML() not >>> seems to work. >>> >>> Richard >>> >>> >>> On Thu, May 31, 2012 at 12:09 PM, Richard Vézina < >>> [email protected]> wrote: >>> >>>> Hello Paolo, >>>> >>>> Here some fresher code : >>>> >>>> def trip_update(): >>>> # only SQLFORM.factory tested >>>> form=SQLFORM.factory(db.t_**trip, db.t_photos) >>>> for row in db(db.t_trip.id == request.args(0)).select(db.t_** >>>> trip.ALL): >>>> for f in db.t_trip.fields: >>>> form.vars[f]=row[f] >>>> photos_files = [] >>>> for row in db(db.t_photos.f_trip_ref == >>>> request.args(0)).select(db.t_**photos.ALL): >>>> #for f in db.t_photos.fields: >>>> #f_photo_0:CONTENT_OF_f_title >>>> #form.vars['f_photo_'+str(i)+'**:'+row.f_title]=row >>>> #LI(_title='couleurs (1).png', A('x', >>>> _href='javascript:void(0);', _class='mw_delItem', _title='remove this >>>> file'), I(B(EM(_class='mw_file-ext-**png'))), SPAN('test1')) >>>> photos_files.append(XML(LI(A('**x', >>>> _href='javascript:void(0);', _class='mw_delItem', _title='remove this >>>> file'), EM(_class='mw_file-ext-png'), SPAN(row.f_title), >>>> _title=row.f_photo))) >>>> response.js="""var photos_files_list = "{{=photos_files}}" >>>> $(document).ready( function () { >>>> if(photos_files_list != 'None') { >>>> $.each(photos_files_list, function(i, val) { >>>> $('ul.mw_list').append(photos_**files_list[i]); >>>> }); >>>> }; >>>> });""" >>>> #A(T('Access'),_href=URL(r=**request,f='read',args=(** >>>> request.args(0),str(id)))) >>>> >>>> #<li title="couleurs (1).png"><a class="mw_delItem" >>>> href="javascript:void(0);" title="remove this file">x</a><i><b><em >>>> class="mw_file-ext-png"></em><**/b></i><span>test1</span></li> >>>> if form.accepts(request, session, onvalidation=lambda >>>> form:check(form)): # Is it possible to use onvalidation with form.process() >>>> syntax ? >>>> trip_id = db.t_trip.update_record(**db.** >>>> t_trip._filter_fields(form.**vars)) >>>> nfiles = 0 >>>> for var in request.vars: >>>> if var.startswith('f_photo') and request.vars[var] != '': >>>> uploaded = request.vars[var] >>>> if isinstance(uploaded,list): >>>> # files uploaded through input with "multiple" >>>> attribute set on true >>>> counter=0 >>>> for element in uploaded: >>>> counter += 1 >>>> nfiles += 1 >>>> file_title = element.name.split(":")[-1] # >>>> TODO: could this be made better? >>>> # I >>>> mean, the title must be appended to element's name >>>> # or >>>> is there another way? >>>> db.t_photos.insert( >>>> f_trip_ref=trip_id, >>>> f_title=file_title+" ("+str(counter)+")" if >>>> file_title!="" else file_title, >>>> f_photo=db.t_photos.f_photo.** >>>> store(element.file,element.**filename)) >>>> else: >>>> # only one file uploaded >>>> element = request.vars[var] >>>> nfiles += 1 >>>> db.t_photos.insert( >>>> f_trip_ref=trip_id, >>>> f_title=element.name.split(":"**)[-1], >>>> f_photo=db.t_photos.f_photo.** >>>> store(element.file,element.**filename)) >>>> >>>> session.flash = T('%s photo%s uploaded'%(nfiles, 's' if >>>> nfiles>1 else '')) >>>> redirect(URL('trip_read')) >>>> >>>> if isinstance(form,FORM): >>>> # hide f_title form's row. Is there a better way to accomplish >>>> it? >>>> del form[0][3] >>>> >>>> return dict(form=form) >>>> >>>> On Wed, May 30, 2012 at 6:23 PM, Paolo Caruccio < >>>> [email protected]> wrote: >>>> >>>>> Richard, >>>>> >>>>> I saw your email in the discussion regarding bootswatch, but I want to >>>>> answer here for competence. >>>>> >>>>> Multiupload is a my old project. The object of the toy app was >>>>> demonstrate the usage of multiupload control. It wasn't a complete >>>>> application. >>>>> >>>>> Your intentions, however, are interesting. I will take a look at your >>>>> code and I will try to find a solution. >>>>> >>>>> >>>>> Il giorno mercoledì 30 maggio 2012 16:15:09 UTC+2, Richard ha scritto: >>>>> >>>>>> Hello Paolo, >>>>>> >>>>>> Pretty nice! >>>>>> >>>>>> Did you implement the update of the records also? >>>>>> >>>>>> Is it a straight and easy task or it becomes trickier to implement >>>>>> than the rest of the app?? >>>>>> >>>>>> Richard >>>>>> >>>>>> On Sat, Oct 29, 2011 at 6:21 PM, Paolo Caruccio < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Bruno, >>>>>>> >>>>>>> thanks. >>>>>>> >>>>>>> What do you think about the upload mechanism? Can it be translate in >>>>>>> a web2py widget? or is it better to use a different javascript/jquery >>>>>>> library? >>>>>>> >>>>>>> Regards. >>>>>>> >>>>>>> Paolo >>>>>>> >>>>>> >>>>>> >>>> >>> >>

