As you which!!

# Controllers
Form 1
def phone_numbers_form():
    """
    phone_numbers_form() allow to create/update/display phone(s) number(s).

    Args (vars):
        readonlyform: If set to "True" the function only display phones 
numbers in row, no create form and buttons
                      to modify add phone number is available.
        remove_phone_number_id: If phone number id is passed through url 
with this vars phone number specify id
                                record is deleted.
        request_modify_phone_id: The passed phone number with this vars 
will make the phone_numbers_form() to return
                                 an update form for the specified phone 
number id record.

    """
    user_id = None

    # To display only the phone numbers
    readonlyform = False
    if request.vars.readonlyform:
        if request.vars.readonlyform in ['True']:
            readonlyform = True

    if request.args(0) is not None:
        try:
            user_id = int(request.args(0))
        except:
            user_id = db(db.auth_user.username == 
request.args(0)).select(db.auth_user.id).first().id
    if user_id is None:
        user_id = auth.user_id
    if request.vars.remove_phone_number_id is not None:
        db(db.phone_number.id == 
int(request.vars.remove_phone_number_id)).delete()
    record_to_modify = request.vars.request_modify_phone_id
    phone_numbers = db(db.phone_number.user_id == user_id).select()
    db.phone_number.user_id.default = user_id
    db.phone_number.user_id.update = user_id
    if record_to_modify is None:
        buttons = [
            TAG.button(I('', _class='icon-ban-circle icon-large 
icon-white'), _type='button',
                      
 _onClick='web2py_component("%s","phone_number_component");' % 
URL(c='directory',
                                                                            
             f='phone_numbers_form',
                                                                            
             extension='load',
                                                                            
             args=request.args(0)),
                       _class='btn btn-mini btn-inverse'),
            TAG.button((I('', _class='icon-ok icon-large icon-white'), 
CAT('  '), STRONG(T('Add'))), _type='submit',
                       _class='btn btn-mini btn-primary', 
_style='white-space: nowrap;')]
    else:
        buttons = [
            TAG.button(I('', _class='icon-ban-circle icon-large 
icon-white'), _type='button',
                      
 _onClick='web2py_component("%s","phone_number_component");' % 
URL(c='directory',
                                                                            
             f='phone_numbers_form',
                                                                            
             extension='load',
                                                                            
             args=request.args(0)),
                       _class='btn btn-mini btn-inverse'),
            TAG.button((I('', _class='icon-ok icon-large icon-white'), 
CAT('  '), STRONG(T('Ok'))), _type='submit',
                       _class='btn btn-mini btn-primary')]
        # form.element(_type='submit')['_value'] = T('ok')
        # form.element(_type='submit')['_class'] = 'btn btn-mini pull-right'
    form = SQLFORM(db.phone_number, record=None if record_to_modify is None 
else int(record_to_modify),
                   buttons=buttons if readonlyform is False else None,
                   readonly=True if readonlyform is True else False,
                   _id='phone_number_form_id')
    if form.process(formname='phone_number_form').accepted:
        if record_to_modify is not None:
            response.flash = T('Successfully inserted')
        else:
            response.flash = T('Successfully updated')
        response.js = 
'web2py_component("%(URL)s","phone_number_component");' % {'URL': 
URL(c='directory',
                                                                            
                f='phone_numbers_form',
                                                                            
                extension='load',
                                                                            
                args=request.args(0))}
    elif form.errors:
        response.flash = T('Errors...')

    # 
-----------------------------------------------------------------------------
    # <script>
    #     $(document).ready(function() {
    #         var add_phone_number_translation = "{{=T('Add a phone 
number')}}"
    #         $("tr#input_new_phone_number").children().hide();
    #         $("tr#input_new_phone_number").append('<td colspan="3" 
id="new_phone_number"><button type="button" class="btn btn-small 
pull-right" onclick="$(\'tr#input_new_phone_number\').children().show(); 
$(\'td#new_phone_number\').hide();"><strong>' + 
add_phone_number_translation + '</strong></button></td>');
    #         });
    # </script>
    # What below is a replacement for the jQuery code above
    if readonlyform is False:
        controller_view_js = \
            common_functions.flash_message_from_js(tr_id='new_phone_number',
                                                   colspan='3',
                                                   button_text='Add a phone 
number',
                                                   flash_text='Please add 
your phone number...',
                                                  
 form_id='phone_number_form_id')
    else:
        controller_view_js = ''
    # 
-----------------------------------------------------------------------------

    return dict(phone_numbers=phone_numbers,
                form=form,
                controller_view_js=controller_view_js,
                readonlyform=readonlyform)


Form 2

def group_membership():
    if not auth.has_membership('admin'):
        redirect(URL(c='permission', f='not_authorized'))
    user_id = None
    if request.args(0) is not None:
        try:
            user_id = int(request.args(0))
        except ValueError:
            user_id = db(db.auth_user.username == 
request.args(0)).select(db.auth_user.id).first().id
    # if user_id is None:
    #     user_id = auth.user_id  # Extrêmement douteux...
    if request.vars.remove_membership_id is not None:
        db(db.auth_membership.id == 
int(request.vars.remove_membership_id)).delete()
    record_to_modify = request.vars.request_modify_membership_id
    memberships = db(db.auth_membership.user_id == user_id
                     ).select(db.auth_membership.ALL,
                              db.auth_group.ALL,
                              join=db.auth_group.on(db.auth_group.id == 
db.auth_membership.group_id),
                              orderby=db.auth_group.role_gui)
    db.auth_membership.user_id.default = user_id
    db.auth_membership.user_id.update = user_id
    # 
------------------------------------------------------------------------------------------------------------------
    # We don't need all the user id to be present in the drop down as group 
selected should apply to only a single user
    # 
------------------------------------------------------------------------------------------------------------------
    user_id_set = db(db.auth_user.id == user_id)
    db.auth_membership.user_id.requires = IS_IN_DB(user_id_set, 
'auth_user.id', '%(first_name)s %(last_name)s (%(id)s)')
    # 
------------------------------------------------------------------------------------------------------------------
    # 
------------------------------------------------------------------------------------------------------------------
    # We don't need other user_X groups as the user can't be assign to 
other user group
    # 
------------------------------------------------------------------------------------------------------------------
    groups_set = db(~db.auth_group.role.startswith('user_'))
    db.auth_membership.group_id.requires = IS_IN_DB(groups_set, 
'auth_group.id', '%(role)s-%(description)s (%(id)s)')
    # 
------------------------------------------------------------------------------------------------------------------
    if record_to_modify is None:
        buttons = [
            TAG.button(I('', _class='icon-ban-circle icon-large 
icon-white'), _type='button',
                      
 _onClick='web2py_component("%s","membership_component");' % 
URL(c='directory',
                                                                            
             f='group_membership',
                                                                            
             extension='load',
                                                                            
             args=request.args(0)),
                       _class='btn btn-mini btn-inverse'),
            TAG.button((I('', _class='icon-ok icon-large icon-white'), 
CAT('  '), STRONG(T('Add'))), _type='submit',
                       _class='btn btn-mini btn-primary', 
_style='white-space: nowrap;')]
    else:
        buttons = [
            TAG.button(I('', _class='icon-ban-circle icon-large 
icon-white'), _type='button',
                      
 _onClick='web2py_component("%s","membership_component");' % 
URL(c='directory',
                                                                            
             f='group_membership',
                                                                            
             extension='load',
                                                                            
             args=request.args(0)),
                       _class='btn btn-mini btn-inverse'),
            TAG.button((I('', _class='icon-ok icon-large icon-white'), 
CAT('  '), STRONG(T('Ok'))), _type='submit',
                       _class='btn btn-mini btn-primary')]
        # form.element(_type='submit')['_value'] = T('ok')
        # form.element(_type='submit')['_class'] = 'btn btn-mini pull-right'
    form = SQLFORM(db.auth_membership, record=None if record_to_modify is 
None else int(record_to_modify),
                   buttons=buttons, _id='membership_form_id')
    if form.process(formname='membership_form').accepted:
        if record_to_modify is None:
            response.flash = T('Successfully inserted')
        else:
            response.flash = T('Successfully updated')
        response.js = 'web2py_component("%(URL)s","membership_component");' 
% {'URL': URL(c='directory',
                                                                            
              f='group_membership',
                                                                            
              extension='load',
                                                                            
              args=request.args(0))}
    elif form.errors:
        response.flash = T('Errors...')

    thead = THEAD(TR(TH(T('Role(s)'))))
    trs = []
    for r in memberships:
        if request.vars.request_modify_membership_id is not None and \
                r.auth_membership.id == 
int(request.vars.request_modify_membership_id):
            trs.append(TR(TD(form.custom.widget.group_id,
                             DIV(A(I('', _class='icon-ban-circle icon-large 
icon-white'),
                                   _class='btn btn-mini btn-inverse',
                                   _href=URL('group_membership', 
extension='load',
                                             args=request.args(0)), 
cid=request.cid),
                                 BUTTON(I('', _class='icon-ok icon-large 
icon-white'),
                                        _class='btn btn-mini btn-primary',
                                        _type='submit'),
                                 _class='pull-right'))))
        else:
            trs.append(TR(TD(T(r.auth_group.role_gui),
                             DIV(A(I('', _class='icon-edit icon-large'), 
_class='btn btn-mini',
                                   _href=URL('group_membership', 
extension='load', args=request.args(0),
                                            
 vars=dict(request_modify_membership_id=r.auth_membership.id)),
                                   cid=request.cid),
                                 A(I('', _class='icon-remove icon-large 
icon-white'), _class='btn btn-mini btn-danger',
                                   _href=URL('group_membership', 
extension='load', args=request.args(0),
                                            
 vars=dict(remove_membership_id=r.auth_membership.id)), cid=request.cid),
                                 _class='pull-right'))))
    if request.vars.request_modify_membership_id == None:
        trs.append(TR(TD(form.custom.widget.group_id,
                         SPAN(form.custom.widget.user_id, _style='display: 
none;'),  # There is an issue with this...
                                                                            
         # NO form.vars.user_id available
                                                                            
         # for update form!!
                         SPAN(form.custom.submit, _class='pull-right')), 
_id='input_new_membership'))
    memberships_table = TABLE(thead, TBODY(*trs), _class='table 
table-condensed table-hover')

    # 
-----------------------------------------------------------------------------
    # $(document).ready(function() {
    #     var add_membership_translation = '{{=T('Add membership')}}'
    #     $("tr#input_new_membership").children().hide();
    #     $("tr#input_new_membership").append('<td colspan="3" 
id="new_membership"><button type="button" class="btn btn-small pull-right" 
onclick="$(\'tr#input_new_membership\').children().show(); 
$(\'td#new_membership\').hide();"><strong>' + add_membership_translation + 
'</strong></button></td>');
    #     });
    # What below is a replacement for the jQuery code above
    controller_view_js = \
        common_functions.flash_message_from_js(tr_id='new_membership',
                                               colspan='3',
                                               button_text='Add membership',
                                               flash_text='Please select a 
role...',
                                               form_id='membership_form_id')
    # 
-----------------------------------------------------------------------------

    return dict(memberships_table=memberships_table, form=form, 
controller_view_js=controller_view_js)

Container page controller
@auth.requires_login()
def manage_users():
    if not auth.has_membership('manage_users'):
        redirect(URL(c='permission', f='not_authorized'))
    if request.args(0) is not None:
        try:
                user_id = int(request.args(0))
        except ValueError:
            user_id = db(db.auth_user.username == 
request.args(0)).select(db.auth_user.id).first().id
    else:
        user_id = None
        db.auth_user.address_id.requires = \
            IS_EMPTY_OR(IS_IN_DB(db, db.address.id, '%(address_code)s - 
%(door_number)s, %(street)s'))
        db.auth_user.initials.requires = \
            IS_EMPTY_OR(IS_NOT_IN_DB(db, 'auth_user.initials', 
error_message=T('Initials already exist!')))
        db.auth_user.password.requires = 
IS_EMPTY_OR(CRYPT(min_length=auth.settings.password_min_length,
                                                          
 error_message=T('too short')))

    for field in db.auth_user.fields:
        db.auth_user[field].readable = False
        db.auth_user[field].writable = False
    fields = (db.auth_user.first_name,
              db.auth_user.last_name,
              db.auth_user.address_id,
              db.auth_user.email,
              db.auth_user.initials,
              db.auth_user.title_fr,
              db.auth_user.title_en,
              db.auth_user.manager_id,
              db.auth_user.gender,
              db.auth_user.registration_key,
              db.auth_user.picture)
    for field in fields:
        field.readable = True
        field.writable = True
    db.auth_user.registration_key.requires = 
IS_EMPTY_OR(IS_IN_SET(['pending', 'disabled']))
    db.auth_user.registration_key.default = 'pending'
    buttons = [TAG.button((I('', _class='icon-ban-circle icon-large 
icon-white'), CAT('  '), STRONG(T('Cancel'))),
                          _type='button',
                          _onClick="javascript:void(history.go(-1))",
                          _class='btn btn-small btn-inverse'),
               TAG.button((I('', _class='icon-ok icon-large icon-white'), 
CAT('  '), STRONG(T('Update'))),
                          _type='submit',
                          _class='btn btn-small btn-primary')]
    form = SQLFORM(db.auth_user, record=user_id, buttons=buttons, 
formstyle=formstyle, separator=separator)
    if form.process(dbio=False).accepted:
        if user_id is None:
            session.flash = T('User created')
            form.vars.ceo = False
            form.vars.note = ''
            if form.vars.email is not None:
                form.vars.username = form.vars.email.split('@')[0]
            id = db.auth_user.insert(**{str(var): form.vars[var] for var in 
form.vars})
            user_id_role_exist = db(db.auth_group.role == 'user_%d' % 
id).count() == 1
            if user_id_role_exist is False:
                db.auth_group.insert(role='user_%d' % id, 
description='Individual user group user_ + user id',
                                     role_gui=form.vars.username)
            member_of_basic_access_group = \
                db((db.auth_membership.user_id == id) &
                   (db.auth_membership.group_id == db(db.auth_group.role == 
'basic_access'
                                                      
).select(db.auth_group.id).first().id)
                   ).count() == 1
            if member_of_basic_access_group is False:
                db.auth_membership.insert(user_id=id,
                                          group_id=db(db.auth_group.role == 
'basic_access'
                                                      
).select(db.auth_group.id).first().id)
            # Push new user into Redmine
            redmine_utility.push_active_user_into_redmine(db=db)
        else:
            session.flash = T('User updated')
            db(db.auth_user.id == user_id).update(**{str(var): 
form.vars[var] for var in form.vars})

        if form.vars.title_fr is not None and form.vars.title_fr != '' \
                and form.vars.title_en is not None and form.vars.title_en 
!= '':
            
common_functions.value_translation_update(en_field_name='title_en', 
fr_field_name='title_fr', form=form)
        if request.args(0) is not None:
            username = request.args(0)
        elif form.vars.username is not None:
            username = form.vars.username
        else:
            username = None
        redirect(URL(c='directory', f='employee', args=username))
    elif form.errors:
        response.flash = T('Form has error')
    else:
        response.flash = T('Please complete or update the form')
    return dict(form=form)





# View ".load"
Form 1
<strong>{{=T('Phone numbers')}}</strong>
{{=form.custom.begin}}
<table class="table table-condensed table-hover">
    <tbody>
        {{for phone_number in phone_numbers:}}
            <tr>
                {{if request.vars.request_modify_phone_id is not None and 
phone_number.id == int(request.vars.request_modify_phone_id):}}
                    <td>{{=form.custom.widget.phone_number_kind_id}}</td>
                    <td>{{=form.custom.widget.phone_number}}</td>
                    <td>
                        <span style="display: 
none;">{{=form.custom.widget.user_id}}</span>
                        {{=form.custom.widget.extension}}
                        <div class="pull-right">
                        {{=A(I('', _class='icon-ban-circle icon-white'), 
_class='btn btn-mini btn-inverse',
                             _href=URL('phone_numbers_form', 
extension='load', args=request.args(0)), cid=request.cid)}}
                        {{=BUTTON(I('', _class='icon-ok icon-white'), 
_class='btn btn-mini btn-primary', _type='submit')}}
                        </div>
                    </td>
                {{else:}}
                    
<td>{{=db.phone_number_kind[phone_number.phone_number_kind_id].phone_number_kind}}</td>
                    <td>{{=phone_number.phone_number}}</td>
                    <td>
                        {{if phone_number.extension is not None and 
phone_number.extension != '':}}
                            ({{=phone_number.extension}})
                        {{pass}}
                        {{if readonlyform is False:}}
                            <div class="pull-right">
                            {{=A(I('',_class='icon-edit'), _class='btn 
btn-mini',
                                 _href=URL('phone_numbers_form', 
extension='load', args=request.args(0),
                                          
 vars=dict(request_modify_phone_id=phone_number.id)), cid=request.cid)}}
                            {{=A(I('',_class='icon-remove icon-white'), 
_class='btn btn-mini btn-danger',
                                 _href=URL('phone_numbers_form', 
extension='load', args=request.args(0),
                                          
 vars=dict(remove_phone_number_id=phone_number.id)), cid=request.cid)}}
                            </div>
                        {{pass}}
                    </td>
                {{pass}}
            </tr>
        {{pass}}
        {{if readonlyform is False:}}
            {{if request.vars.request_modify_phone_id == None:}}
                <tr id="input_new_phone_number">
                    <td>{{=form.custom.widget.phone_number_kind_id}}</td>
                    <td>{{=form.custom.widget.phone_number}}</td>
                    <td>{{=form.custom.widget.extension}}
                        <span style="display: 
none;">{{=form.custom.widget.user_id}}</span>
                        <span 
class='pull-right'>{{=form.custom.submit}}</span>
                    </td>
                </tr>
            {{pass}}
        {{pass}}
    </tbody>
</table>
{{=form.custom.end}}

<script>
    {{=XML(controller_view_js)}}
</script>



Form 2
<strong>{{=T('User membership')}}</strong>
{{=form.custom.begin}}
    {{=memberships_table}}
{{=form.custom.end}}

<script>
    {{=XML(controller_view_js)}}
</script>


Container page
{{extend 'layout_form.html'}}

    <div class="span4">
        <div class="thumbnail">
            <div>
                {{=form}}
            </div>
        </div>
    </div>
    {{if request.args(0) is not None:}}
        <div class="span6">
            <div class="thumbnail">
                <div>
                    {{=LOAD(c='directory', f='phone_numbers_form', 
extension='load',
                            args=request.args(0), ajax=True, 
target='phone_number_component')}}
                </div>
            </div>
        </div>
        {{if auth.has_membership('admin') and request.args(0) is not None:}}
            <div class="span6">
                <div class="thumbnail">
                    <div>
                        {{=LOAD(c='directory', f='group_membership', 
extension='load',
                                args=request.args(0), ajax=True, 
target='membership_component')}}
                    </div>
                </div>
            </div>
        {{pass}}
    {{pass}}




# modules JS generation snippet
def flash_message_from_js(tr_id, colspan, button_text, flash_text, 
form_id=None):
    """
    Set flash message with $.web2py.flash() so the flash message get fire 
in the right context
    Need this in view :

    <script>
        {{=XML(controller_view_js)}}
    </script>

    NOTE: We now generate this piece of JS from python to solve issue with 
quoting escape cause by to many single
          and double quotes. The code breaks when whe translate "Please 
fill out the form..." with
          "S'il vous plaît remplir le formulaire..." the single quote were 
not escape properly with the Javascript
          implementation.
    NOTE: The issue has multiple facet... Mainly the issue is related to 
the fact that we want to translate flash
          message and for this reason we need to generate JS at some level 
from python even if it only the content of
          a string variable. Then since we need to generating also HTML 
from Javascript it makes multiple level of
          abstraction and a lot of quoting... When you add over all that 
there is single quote using in the translated
          text and that we deal with byte (python str) and not unicode... 
That were you end up...

          :param colspan:
          :param tr_id:
          :param flash_text:
          :param button_text:
    """
    elements_to_be_added = \
        TD(TAG.button(STRONG(current.T(button_text).decode('utf8')),
                      _type='button',
                      _class='btn btn-small pull-right',
                      _onclick='$("tr#input_%s").children().show(); '
                               '$("td#%s").hide(); '
                               '$.web2py.flash("%s");' % (tr_id, tr_id, 
current.T(flash_text).decode('utf8'))),
           _colspan=colspan,
           _id=tr_id)

    controller_view_js = \
        '''$(document).ready(function() {
            if(!$('#%s .error').length) {
                $("tr#input_%s").children().hide();
                $("tr#input_%s").append('%s');
                }
            });''' % (form_id, tr_id, tr_id, elements_to_be_added)
    # 
-----------------------------------------------------------------------------
    return controller_view_js




You have everything...

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to