Esempio n. 1
0
        def proccess_change_page_layout(self, pageid, newlayoutid):
            """
                Cambia el diseño de una página, a los modulos existentes
                en esa página se les asigna el panel correspondiente al nuevo 
                layout.

                Si hay un panel con el mismo nombre se le pone ese, si no se le 
                pone el 'contentpane' que es el unico panel obligatorio.

                Parametros
                ----------
                page_id:
                    id de la página a la cual le cambiamos el layout

                newlayoutid:
                    El id de la tabla layout correspondiente al nuevo layout

                """
            db = self.db
            options = self.options
            obj_page = db.pages[pageid]
            if (str(obj_page.layoutsrc) != newlayoutid):
                modulesinpage = db(db.pagemodules.pageid == pageid).select()
                for mip in modulesinpage:
                    current_layout_mip_name = db_packages.Packages(
                    ).get_panename_byid(mip.panename)
                    nuevolayout = int(options['plugin_layout_default'])
                    if newlayoutid:
                        nuevolayout = int(newlayoutid)
                    #hay un panel que se llama igual en el nuevo diseño?
                    if db_packages.Packages().existe_panename(
                            current_layout_mip_name, nuevolayout):
                        #Si lo hay, se mueve ahí
                        newpane = db_packages.Packages(
                        ).get_idpanename_from_name_and_layout(
                            current_layout_mip_name, nuevolayout)
                        db(db.pagemodules.id == mip.id).update(
                            panename=newpane)
                    else:
                        #search a common name 'contentpane' or 'toppane' must be in skin
                        newpane = db_packages.Packages(
                        ).get_idpanename_from_name_and_layout(
                            'contentpane', nuevolayout)
                        if newpane == -1:
                            newpane = db_packages.Packages(
                            ).get_idpanename_from_name_and_layout(
                                'toppane', nuevolayout)
                        db(db.pagemodules.id == mip.id).update(
                            panename=newpane)
            return
Esempio n. 2
0
    def edit_pagemodule(self, pagemoduleid):
        """ Editar pagemodule a partir del pagemoduleid"""

        db = self.db
        clPyPages = self.clPyPages
        deletable = False
        pagemodulerecord = db.pagemodules[pagemoduleid]

        #Filtrar los paneles según el layout que tiene la pagina
        obj_page = db.pages[pagemodulerecord.pageid]
        layouts_id_default = int(
            db_options.Options().get_option('plugin_layout_default'))
        container_id_default = int(
            db_options.Options().get_option('plugin_container_default'))

        try:
            layouts_id = obj_page.layoutsrc
        except:
            layouts_id = layouts_id_default

        if layouts_id == None:
            layouts_id = layouts_id_default

        panes = db_packages.Packages().get_panesfromlayoutid(layouts_id, True)
        #limitar la lista de paneles para que solo se muestren los correspondientes al layout que está usando
        isinset_list = []
        for p in panes:
            item_panes = ((p['id']), p['panename'])
            isinset_list.append(item_panes)

        db.pagemodules.panename.requires = IS_IN_SET(isinset_list)

        db.pagemodules.pageid.requires = IS_IN_SET(
            clPyPages.get_pages_hierarchical())

        form = SQLFORM(db.pagemodules,
                       pagemoduleid,
                       showid=True,
                       deletable=deletable)
        return form
Esempio n. 3
0
    def define_tables(self):
        T = self.T
        db = self.db
        signature = db_pynuke.PyNuke().def_fields_signature()
        querypages = (db.pages.tree_id == 1) & (db.pages.id > 1)
        dict_containers = db_packages.Packages().get_layouts_available(2)

        db.define_table(
            'pagemodules',
            Field('moduleid',
                  db.modules,
                  label=T('module'),
                  readable=False,
                  writable=False),
            Field('moduletitle',
                  'string',
                  label=T('Module title'),
                  comment=T("Title for the module")),
            Field('moduleorder', 'integer', label=T('order')),
            Field('alignment',
                  requires=IS_EMPTY_OR(
                      IS_IN_SET([T('Left'), T('Center'),
                                 T('Right')]))),
            Field('pageid',
                  db.pages,
                  requires=IS_IN_DB(db(querypages), db.pages.id, '%(name)s'),
                  label=T('Page'),
                  represent=lambda id, row: A(db.pages(id).name,
                                              _href=
                                              '%s' % db_pages.Pages.Navigation(
                                              ).friendly_url_to_page(id))),
            #Field('pageid',db.pages,requires=IS_IN_SET(db_pages.Pages.WebForms().get_pages_hierarchical()) ,label=T('Page')),
            Field('color', 'string', label=T('color')),
            Field('border', 'string', label=T('border')),
            Field('iconfile', 'upload', label=T('Icon File')),
            Field('panename', db.layouts_panes, label=T('Pane')),
            Field('cachetime',
                  'integer',
                  readable=False,
                  writable=False,
                  label=T('Cache time')),
            Field('visibility',
                  'integer',
                  readable=False,
                  writable=False,
                  label=T('Visibility')),
            Field('containersrc',
                  db.layouts,
                  requires=IS_EMPTY_OR(IS_IN_SET(dict_containers)),
                  label=T('container')),
            Field('displaytitle',
                  'boolean',
                  default=True,
                  label=T('Display Title')),
            Field('displayprint',
                  'boolean',
                  default=False,
                  readable=False,
                  writable=False,
                  label=T('Display Print')),
            Field('displaysyndicate',
                  'boolean',
                  default=False,
                  readable=False,
                  writable=False,
                  label=T('Display Syndicate')),
            Field('iswebslice',
                  'boolean',
                  default=False,
                  readable=False,
                  writable=False,
                  label=T('Is Web Slice')),
            Field('webslicetitle',
                  'string',
                  readable=False,
                  writable=False,
                  label=T('Web Slice Title')),
            Field('websliceexpirydate',
                  'datetime',
                  readable=False,
                  writable=False,
                  label=T('Web Slice expiry date')),
            Field('webslicettl',
                  'integer',
                  readable=False,
                  writable=False,
                  label=T('Web Slice ttl')),
            Field('isdeleted',
                  'boolean',
                  label=T('Is Deleted'),
                  readable=False,
                  writable=False),
            Field('cachemethod',
                  'string',
                  readable=False,
                  writable=False,
                  label=T('Cache Method')),
            Field('header', 'text', label=T('Module header')),
            Field('footer', 'text', label=T('Module footer')),
            Field('culturecode',
                  'string',
                  label=T('Culture code'),
                  readable=False,
                  writable=False),
            Field('uniqueid',
                  length=64,
                  default=lambda: str(uuid.uuid4()),
                  notnull=True,
                  readable=False,
                  writable=False),
            Field('versionguid',
                  length=64,
                  default=lambda: str(uuid.uuid4()),
                  notnull=True,
                  readable=False,
                  writable=False),
            Field('defaultlanguageguid',
                  length=64,
                  default=lambda: str(uuid.uuid4()),
                  notnull=True,
                  readable=False,
                  writable=False),
            Field('localizedversionguid',
                  length=64,
                  default=lambda: str(uuid.uuid4()),
                  notnull=True,
                  readable=False,
                  writable=False),
            signature,
            format='%(moduletitle)s',
            plural='pagemodules',
            singular='pagemodule',
        )

        db.define_table(
            'modulesettings',
            Field('pagemoduleid',
                  db.pagemodules,
                  label=T('pagemoduleid'),
                  readable=False,
                  writable=False),
            Field('settingname',
                  'string',
                  label=T('Setting Name'),
                  writable=False),
            Field('settingvalue', 'string', label=T('Setting Value')),
            signature,
            format='%(settingname)s',
            plural='Setting',
            singular='Settings',
        )

        return
Esempio n. 4
0
        def define_tables(self):
            T = self.T
            db = self.db
            request = self.request
            signature = db_pynuke.PyNuke().def_fields_signature()
            dict_layouts = db_packages.Packages().get_layouts_available()
            dict_containers = db_packages.Packages().get_layouts_available(2)
            dict_result = {
                'pages': [
                    Field('node_type'),
                    Field(
                        'name',
                        'string',
                        length=50,
                        required=True,
                        notnull=True,
                        label=T("Name"),
                        comment=
                        T("Name of the page. This text is displayed in the menu system."
                          )),
                    Field(
                        'title',
                        'string',
                        length=255,
                        label=T("Title"),
                        comment=
                        T("Enter a title for this page. The inserted text is displayed in the title of the browser window."
                          )),
                    Field(
                        'slug',
                        'string',
                        requires=IS_SLUG(),
                        label=T("Friendly URL"),
                        comment=T("You can enter a custom URL for the page.")),
                    Field('description',
                          'text',
                          label=T("Description"),
                          comment=T("Enter a description for this page")),
                    Field(
                        'keywords',
                        'text',
                        label=T("Keywords"),
                        comment=
                        T("Enter some keywords for this page (separated by commas). These keywords are used by some internet search engines like Google to help index your site's pages."
                          )),
                    Field(
                        'isvisible',
                        'boolean',
                        default=True,
                        label=T("Page Visible"),
                        comment=
                        T("You can choose to include or exclude this page from the main menu. If the page is not included in the menu, you can link it using its URL.."
                          )),
                    Field(
                        'sectionheadervisible',
                        'boolean',
                        label=T("Section Header Visible"),
                        default=True,
                        comment=
                        T("In some designs there is a area marked as section header, with this check you can select if this area is visible or not"
                          )),
                    Field("a", 'string', label="Application"),
                    Field("c", 'string', label="Controller"),
                    Field("f", 'string', label="Function"),
                    Field("args", 'string', label="Arguments"),
                    Field("sortable",
                          'integer',
                          writable=False,
                          readable=False),
                    Field('iconfile', 'upload', length=100),
                    Field(
                        'signature',
                        'boolean',
                    ),
                    Field(
                        'disablelink',
                        'boolean',
                        label=T("Disabled"),
                        comment=
                        T("If the page is disabled it cannot be clicked in any navigation menu. This option is used to provide place-holders for child menu items."
                          )),
                    Field('isdeleted',
                          'boolean',
                          writable=False,
                          readable=False),
                    Field(
                        'url',
                        'string',
                        length=255,
                        writable=True,
                        readable=True,
                        comment=
                        T("If you would like this page to behave as a navigation link to another resource, you can specify the Link URL value here. Please note that this field is optional."
                          ),
                        label=T("Link URL")),
                    Field(
                        'layoutsrc',
                        db.layouts,
                        label=T("Layout"),
                        comment=T(
                            "The selected skin will be applied to this page."),
                        requires=IS_EMPTY_OR(IS_IN_SET(dict_layouts)),
                        length=255),
                    Field('viewsrc', 'string', length=255),
                    Field(
                        'containersrc',
                        db.layouts,
                        label=T("Container"),
                        comment=
                        T("The selected container will be applied by default to all modules on this page without container specified."
                          ),
                        requires=IS_EMPTY_OR(IS_IN_SET(dict_containers)),
                        length=255),
                    Field('pagepath',
                          'string',
                          length=255,
                          writable=False,
                          readable=False),
                    Field(
                        'startdate',
                        'datetime',
                        label=T("Start date"),
                        comment=
                        T("Enter the start date for displaying this page. You may use the Calendar to pick a date."
                          )),
                    Field(
                        'enddate',
                        'datetime',
                        label=T("End date"),
                        comment=
                        T("Enter the end date for displaying this page. You may use the Calendar to pick a date."
                          )),
                    Field('refreshinterval',
                          'integer',
                          writable=False,
                          readable=False),
                    Field(
                        'pageheadtext',
                        'text',
                        label=T("Page header tags"),
                        comment=
                        T('Enter any tags (i.e. META tags) that should be rendered in the "HEAD" tag of the HTML for this page.'
                          )),
                    Field(
                        'pagefootertext',
                        'text',
                        label=T("Page footer tags"),
                        comment=
                        T('Enter any text that should be rendered in the footer for this page.'
                          )),
                    Field(
                        'issecure',
                        'boolean',
                        label=T("Secure"),
                        comment=
                        T("Specify whether or not this page should be forced to use a secure connection (SSL)."
                          )),
                    Field('permanentredirect',
                          'boolean',
                          writable=False,
                          readable=False),
                    Field(
                        'sitemappriority',
                        'double',
                        label=T("Site Map Priority"),
                        comment=
                        T("Enter the desired priority (between 0 and 1.0). This helps determine how this page is ranked in Google with respect to other pages on your site (0.5 is the default)."
                          ),
                        default=0.5,
                        required=True,
                        represent=lambda value, row: DIV('%.1f' % (
                            0.5 if value == None else value)),
                    ),
                    Field('iconfilelarge', 'upload', length=255),
                    Field('culturecode',
                          'string',
                          writable=False,
                          readable=False,
                          length=10),
                    Field('contentitemid',
                          'integer',
                          writable=False,
                          readable=False),
                    Field('uniqueid',
                          length=64,
                          default=lambda: str(uuid.uuid4()),
                          notnull=True,
                          writable=False,
                          readable=False),
                    Field('versionguid',
                          length=64,
                          default=lambda: str(uuid.uuid4()),
                          notnull=True,
                          writable=False,
                          readable=False),
                    Field('defaultlanguageguid',
                          length=64,
                          default=lambda: str(uuid.uuid4()),
                          notnull=True,
                          writable=False,
                          readable=False),
                    Field('localizedversionguid',
                          length=64,
                          default=lambda: str(uuid.uuid4()),
                          notnull=True,
                          writable=False,
                          readable=False),
                    signature,
                ],
            }

            def make_slug(r):
                db = self.db
                value = IS_SLUG()(r.name)[0]
                return value

            return dict_result
Esempio n. 5
0
    def insert_modules_visibles_all_pages(self, pageid):
        """
            Crea una instancia de cada módulo marcado "Visible en todas las
            paginas" en la página que se le pase

            Parametros
            ----------
            page_id:
                id del registro de la tabla db.pages a editar

            can_delete:
                especifica si en el formulario se va a incluir el checkbox
                delete
        """

        db = self.db
        modules_all_pages = db(db.modules.allpages == True).select()
        settings = self.settings
        objpage = db.pages[pageid]
        for mod_ap in modules_all_pages:
            query = (db.pagemodules.moduleid == mod_ap.id)
            query = query & ((db.pagemodules.isdeleted == False) |
                             (db.pagemodules.isdeleted == None))
            first_pagemodule = db(query).select(
                orderby=db.pagemodules.id).first()
            tmp_namepane = db_packages.Packages().get_panename_byid(
                first_pagemodule.panename)
            tmp_layout = objpage.layoutsrc or settings.plugin_layout_default
            if db_packages.Packages().existe_panename(tmp_namepane,
                                                      tmp_layout):
                idpane = db_packages.Packages(
                ).get_idpanename_from_name_and_layout(tmp_namepane, tmp_layout)
            else:
                idpane = db_packages.Packages(
                ).get_idpanename_from_name_and_layout("contentpane",
                                                      tmp_layout)

            new_pagemoduleid = db.pagemodules.insert(
                moduleid=mod_ap.id,
                moduletitle=first_pagemodule.moduletitle,
                moduleorder=first_pagemodule.moduleorder,
                alignment=first_pagemodule.alignment,
                pageid=pageid,
                color=first_pagemodule.color,
                iconfile=first_pagemodule.iconfile,
                panename=idpane,
                cachetime=first_pagemodule.cachetime,
                visibility=first_pagemodule.visibility,
                containersrc=first_pagemodule.containersrc,
                displaytitle=first_pagemodule.displaytitle,
                displayprint=first_pagemodule.displayprint,
                displaysyndicate=first_pagemodule.displaysyndicate,
                iswebslice=first_pagemodule.iswebslice,
                webslicetitle=first_pagemodule.webslicetitle,
                websliceexpirydate=first_pagemodule.websliceexpirydate,
                webslicettl=first_pagemodule.webslicettl,
                isdeleted=first_pagemodule.isdeleted,
                cachemethod=first_pagemodule.cachemethod,
                header=first_pagemodule.header,
                footer=first_pagemodule.footer,
                culturecode=first_pagemodule.culturecode,
                uniqueid=first_pagemodule.uniqueid,
            )
            settings_to_duplicate = db(db.modulesettings.pagemoduleid ==
                                       first_pagemodule.id).select()
            for setting in settings_to_duplicate:
                db.modulesettings.insert(pagemoduleid=new_pagemoduleid,
                                         settingname=setting.settingname,
                                         settingvalue=setting.settingvalue)

            db.commit()
Esempio n. 6
0
    def copy_pagemodule_all_pages(self,
                                  moduleid,
                                  pagemoduleid,
                                  sourcepageid,
                                  copypagesettings=True):
        """
        Copia el modulo especificado en todas las páginas, agregando registros
        en pagemodules para cada página excepto para la pagina "fuente" que es
        de donde viene el módulo

        Parametros
        ----------
        moduleid:
            id de la tabla modules

        pagemoduleid:
            id de la table pagemodules del módulo que se va a a copiar en
            todas las paginas

        sourcepageid:
            página origen donde está el modulo. Ahí no se copiará

        copypagesettings:
            True if you want to copy the page settings too

        Return
        --------
        Nothing...

        """

        db = self.db
        settings = self.settings
        obj_module_to_duplicate = db.pagemodules[pagemoduleid]
        tpages = db.pages
        pages = db((tpages.isdeleted == False)
                   | (tpages.isdeleted == None) & (tpages.id != sourcepageid)
                   & (tpages.tree_id == 1) & (tpages.level > 0)).select()
        for p in pages:
            panename_orig = db_packages.Packages().get_panename_byid(
                obj_module_to_duplicate.panename)
            pane_dest = db_packages.Packages(
            ).get_idpanename_from_name_and_layout(
                panename_orig, p.layoutsrc or settings.plugin_layout_default)
            new_pagemoduleid = db.pagemodules.insert(
                pageid=p.id,
                moduleid=moduleid,
                moduletitle=obj_module_to_duplicate.moduletitle,
                moduleorder=obj_module_to_duplicate.moduleorder,
                alignment=obj_module_to_duplicate.alignment,
                color=obj_module_to_duplicate.color,
                border=obj_module_to_duplicate.color,
                iconfile=obj_module_to_duplicate.iconfile,
                panename=pane_dest,
                cachetime=obj_module_to_duplicate.cachetime,
                visibility=obj_module_to_duplicate.visibility,
                containersrc=obj_module_to_duplicate.containersrc,
                displaytitle=obj_module_to_duplicate.displaytitle,
                displayprint=obj_module_to_duplicate.displayprint,
                displaysyndicate=obj_module_to_duplicate.displaysyndicate,
                cachemethod=obj_module_to_duplicate.cachemethod,
                header=obj_module_to_duplicate.header,
                footer=obj_module_to_duplicate.footer,
                culturecode=obj_module_to_duplicate.culturecode,
            )
            #optionally copy settings ...
            if copypagesettings:
                settings_to_duplicate = db(
                    db.modulesettings.pagemoduleid == pagemoduleid).select()
                for setting in settings_to_duplicate:
                    db.modulesettings.insert(pagemoduleid=new_pagemoduleid,
                                             settingname=setting.settingname,
                                             settingvalue=setting.settingvalue)

        return
Esempio n. 7
0
    def form_settings(self):
        '''
            Opciones generales del sitio
        '''

        db = self.db
        T = self.T
        auth = self.auth
        settings = self.settings
        clPyPages = self.clPyPages
        ckeditor = CKEditor(db)
        #leer los valores actuales de configuracion para asignar por defecto
        options, dict_default_helps = self.read_sitesettings()
        #options = self.get_all_options()
        #dict_default_helps = self.default_dicthelps()
        #querystartpage = (db.pages.tree_id == 1) & (db.pages.id > 1)
        usersadmins = db_security.PNSecurity().get_users_from_role(1)
        dictusers = {}
        for u in usersadmins:
            value = str(u.id) + " - " + u.email
            if "username" in u:
                value += " - " + u.username
            dictusers[u.id] = value

        enabled_change_user = False
        if auth.user_id == int(settings.portal_admin):
            enabled_change_user = True

        dict_layouts = db_packages.Packages().get_layouts_available()
        dict_containers = db_packages.Packages().get_layouts_available(2)

        list_pags = clPyPages.get_pages_hierarchical()
        
        result = SQLFORM.factory(Field('plugin_layout_default', db.layouts, 
                                       requires=IS_IN_SET(dict_layouts),
                                       label=T('Layout'),
                                       default=options['plugin_layout_default'],
                                       comment=dict_default_helps['plugin_layout_default']),
                Field('plugin_container_default', db.layouts,
                      requires=IS_IN_SET(dict_containers),
                      label=T('Container'),
                      default=options['plugin_container_default'],
                      comment=dict_default_helps['plugin_container_default']),
                Field('portal_admin','string',label=T('Portal Administrator'),requires=IS_IN_SET(dictusers),default=options['portal_admin'],comment=dict_default_helps['portal_admin'], writable=enabled_change_user),
                Field('img_logo','string',label=T('Image Logo'),default=options['img_logo'],comment=dict_default_helps['img_logo']),
                Field('link_logo','string',label=T('Link Logo'),default=options['link_logo'],comment=dict_default_helps['link_logo']),
                Field('site_title','string',label=T('Title'),default=options['site_title'],comment=dict_default_helps['site_title']),                    
                Field('site_description','string',label=T('Description'),default=options['site_description'],comment=dict_default_helps['site_description']),
                Field('bootstrap_brand','string',label=T('Bootstrap brand'),default=options['bootstrap_brand'],comment=dict_default_helps['bootstrap_brand']),
                Field('author','string',label=T('Author'),default=options['author'],comment=dict_default_helps['author']),
                Field('keywords','text',label=T('Keywords'),default=options['keywords'],comment=dict_default_helps['keywords']),
                Field('generator','string',label=T('Generator'),default=options['generator'],comment=dict_default_helps['generator']),
                Field('copyright','string',label=T('Copyright'),default=options['copyright'],comment=dict_default_helps['copyright']),
                Field('startpageid',db.pages,label=T('Start Page'),requires=IS_IN_SET(list_pags, zero='', multiple=False),default=options['startpageid'],comment=dict_default_helps['startpageid']),
                Field('gmt_offset','string',label=T('GMT offset'),readable=False, writable=False,default=options['gmt_offset'],comment=dict_default_helps['gmt_offset']),
                Field('google_meta','string',label=T('google_meta'),default=options['google_meta'],writable=False, readable=False,comment=dict_default_helps['google_meta']),
                Field('google_analytics_id','string',label=T('Google Analytics id'),default=options['google_analytics_id'],comment=dict_default_helps['google_analytics_id']),
                Field('migrate','boolean',label=T('Migrate'),default=db_pynuke.PyNuke.Utils().str2bool(options['migrate']),comment=dict_default_helps['migrate']),
                Field('mail_settings_server','string',label=T('Mail settings server'),default=options['mail_settings_server'],comment=dict_default_helps['mail_settings_server']),
                Field('mail_settings_sender','string',label=T('Mail settings sender'),default=options['mail_settings_sender'],comment=dict_default_helps['mail_settings_sender']),
                Field('mail_settings_allmessageswithcopyto','string',label=T('All messages with copy to'),default=options['mail_settings_allmessageswithcopyto'],comment=dict_default_helps['mail_settings_allmessageswithcopyto']),
                Field('mail_settings_TLS','boolean',label=T('Use TLS'),default=db_pynuke.PyNuke.Utils().str2bool(options['mail_settings_TLS']),comment=dict_default_helps['mail_settings_TLS']),
                Field('mail_settings_SSL','boolean',label=T('Use SSL'),default=db_pynuke.PyNuke.Utils().str2bool(options['mail_settings_SSL']),comment=dict_default_helps['mail_settings_SSL']),
                Field('mail_settings_login','string',label=T('Mail login'),default=options['mail_settings_login'],comment=dict_default_helps['mail_settings_login']),
                Field('mail_settings_logging','boolean',label=T('Simulate sending messages'),default=db_pynuke.PyNuke.Utils().str2bool(options['mail_settings_logging']),comment=dict_default_helps['mail_settings_logging']),
                Field('mail_maximo_num_envios_x_sendqueue','string',label=T('Max messages x sendqueue proccess'),default=options['mail_maximo_num_envios_x_sendqueue'],comment=dict_default_helps['mail_maximo_num_envios_x_sendqueue']),
                Field('registration_type',
                      'string',
                      requires=IS_IN_SET({'private':T('Private'),
                                     'public':T('Public'),
                                     'verified':T('Verified'),
                                     'public-verified':T('Public-Verified'),
                                     'none':T('None'),
                                      }),
                                    label=T('Registration type'),
                                    default=options['registration_type'].lower(),
                                    comment=dict_default_helps['registration_type']),
                Field('message_onregister','boolean',label=T('Send mail to portal admin when user registered'),default=db_pynuke.PyNuke.Utils().str2bool(options['message_onregister']),comment=dict_default_helps['message_onregister']),
                Field('message_onvalidation','boolean',label=T('Send mail to portal admin when a user validates the mail address'),default=db_pynuke.PyNuke.Utils().str2bool(options['message_onvalidation']),comment=dict_default_helps['message_onvalidation']),
                Field('use_mail_as_username','boolean',label=T('use mail as username'),default=db_pynuke.PyNuke.Utils().str2bool(options['use_mail_as_username']),comment=dict_default_helps['use_mail_as_username']),
                Field('reset_password_requires_verification','boolean',label=T('reset_password_requires_verification'),default=db_pynuke.PyNuke.Utils().str2bool(options['site_description']),comment=dict_default_helps['reset_password_requires_verification']),
                Field('LevelLogging','string',label=T('Level Logging'),default=options['LevelLogging'],comment=dict_default_helps['LevelLogging']),
                Field('force_SSL','boolean',label=T('Force SSL'),default=db_pynuke.PyNuke.Utils().str2bool(options['force_SSL']),comment=dict_default_helps['force_SSL']),
                Field('auth_require_recaptcha','boolean',label=T('Auth Login requires recaptcha'),default=db_pynuke.PyNuke.Utils().str2bool(options['auth_require_recaptcha']),comment=dict_default_helps['auth_require_recaptcha']),
                Field('auth_register_require_recaptcha','boolean',label=T('Auth Register requires recaptcha'),default=db_pynuke.PyNuke.Utils().str2bool(options['auth_register_require_recaptcha']),comment=dict_default_helps['auth_register_require_recaptcha']),
                Field('auth_retrieve_username_require_recaptcha','boolean',label=T('Retrieve username requires recaptcha'),default=db_pynuke.PyNuke.Utils().str2bool(options['auth_retrieve_username_require_recaptcha']),comment=dict_default_helps['auth_retrieve_username_require_recaptcha']),
                Field('auth_retrieve_password_require_recaptcha','boolean',label=T('Retrieve password requires recaptcha'),default=db_pynuke.PyNuke.Utils().str2bool(options['auth_retrieve_password_require_recaptcha']),comment=dict_default_helps['auth_retrieve_password_require_recaptcha']),

                Field('recaptcha_publickey','string',label=T('Recaptcha publickey'),default=options['recaptcha_publickey'],comment=dict_default_helps['recaptcha_publickey']),
                Field('recaptcha_privatekey','string',label=T('Recaptcha privatekey'),default=options['recaptcha_privatekey'],comment=dict_default_helps['recaptcha_privatekey']),
                Field('recaptcha_options','string',label=T('Recaptcha options'),default=options['recaptcha_options'],comment=dict_default_helps['recaptcha_options']),
                Field('compress_css_files','boolean',
                      label=T('Compress CSS Files'),
                      default=db_pynuke.PyNuke.Utils().str2bool(options['compress_css_files']) ,
                      comment=dict_default_helps['compress_css_files']),                    
                Field('compress_js_files','boolean',label=T('Compress JS Files'),default=db_pynuke.PyNuke.Utils().str2bool(options['compress_js_files']) ,comment=dict_default_helps['compress_js_files']),
                Field('use_janrain','boolean',label=T('Use janrain'),default=db_pynuke.PyNuke.Utils().str2bool(options['use_janrain']),comment=dict_default_helps['use_janrain']),
                Field('redirectafterlogin',db.pages,label=T('Redirect after login'),requires=IS_IN_SET(list_pags, zero='', multiple=False),default=options['redirectafterlogin'],comment=dict_default_helps['redirectafterlogin']),
                Field('redirectafterregister',db.pages,label=T('Redirect after register'),requires=IS_IN_SET(list_pags, zero='', multiple=False),default=options['redirectafterregister'],comment=dict_default_helps['redirectafterregister']),
                Field('redirectafterlogout',db.pages,label=T('Redirect after logout'),requires=IS_IN_SET(list_pags, zero='', multiple=False),default=options['redirectafterlogout'],comment=dict_default_helps['redirectafterlogout']),
                
                Field('cssclass_icon_edit','string',label=T('CSS Icon Edit'),default=options['cssclass_icon_edit'],comment=dict_default_helps['cssclass_icon_edit']),
                Field('cssclass_icon_return','string',label=T('CSS Icon Return'),default=options['cssclass_icon_return'],comment=dict_default_helps['cssclass_icon_return']),
                Field('cssclass_icon_remove','string',label=T('CSS Icon Remove'),default=options['cssclass_icon_remove'],comment=dict_default_helps['cssclass_icon_remove']),
                Field('cssclass_button_small','string',label=T('CSS Button small'),default=options['cssclass_button_small'],comment=dict_default_helps['cssclass_button_small']),
                Field('cssclass_button_extrasmall','string',label=T('CSS Button extrasmall'),default=options['cssclass_button_extrasmall'],comment=dict_default_helps['cssclass_button_extrasmall']),
                Field('cssclass_button_warning','string',label=T('CSS Button warning'),default=options['cssclass_button_warning'],comment=dict_default_helps['cssclass_button_warning']),
                Field('cssclass_button_danger','string',label=T('CSS Button danger'),default=options['cssclass_button_danger'],comment=dict_default_helps['cssclass_button_danger']),
                
                #por cada campo boolean (checkbox) agregar abajo su equivalente oculto con el valor 'F'
               #Esto es por que los checkboxes si no están seleccionados no se envían. Al poner el campo oculto
               #con el mismo nombre, cogerá este si el checkbox no está seleccionado.
               #http://stackoverflow.com/questions/476426/submit-an-html-form-with-empty-checkboxes
               hidden=dict(migrate='False',
                        mail_settings_TLS='False',
                        mail_settings_SSL='False',
                        mail_settings_logging='False',
                        reset_password_requires_verification='False',
                        force_SSL='False',
                        auth_require_recaptcha='False',
                        use_janrain='False',
                        use_mail_as_username='******',
                        message_onregister='False',
                        message_onvalidation='False',
                        compress_css_files='False',
                        compress_js_files='False',
                        auth_register_require_recaptcha='False',
                        auth_retrieve_username_require_recaptcha='False',
                        auth_retrieve_password_require_recaptcha='False'
                        )
                    )
        return result