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
>>>>>>>
>>>>>>
>>>>>>
>>>>
>>>
>>

Reply via email to