示例#1
0
def node_create():
    """Node creation form.
    
    Here, we need to have:
    
    * Fields for db.node:
    
      * id (0 for creation)
      * type (hidden)
      * published
      * weight
      
    * Fields for db.node_version:
    
      * id (0 for creation)
      * revision_id (0 for creation)
      * language
      * {created,updated} {date,by}
      * published (for the version)
      * is_translation_base -> hidden, locked!
    
    * Fields for db.node_base_fields:
    
      * id (0 for creation)
      * title
      * body
      * body_format
    """
    
    if len(request.args) > 0:
        ## Return creation form for this node type
        node_type = request.args[0]
        node_types = cms_settings.list_node_types()
        if node_type not in node_types.keys():
            raise HTTP(404)
        form = cmsdb.node.form_create(node_type)
        response.view = 'generic/form.' + request.extension
        return dict(
            title=T('Create %s', node_types[node_type]['label']),
            form=form)
    
    else:
        ## Return selection menu to choose node type to create
        menu_items = [
            (T('Create "%s" node', type_def['label']), False,
                URL('default','node_create',args=[node_type]), [])
            for node_type, type_def in cms_settings.list_node_types().items()
        ]
        response.view = 'generic/menu_page.%s' % request.extension
        return dict(title=T('Create content'), menu_items=menu_items)
示例#2
0
def node_create():
    """Node creation form.
    
    Here, we need to have:
    
    * Fields for db.node:
    
      * id (0 for creation)
      * type (hidden)
      * published
      * weight
      
    * Fields for db.node_version:
    
      * id (0 for creation)
      * revision_id (0 for creation)
      * language
      * {created,updated} {date,by}
      * published (for the version)
      * is_translation_base -> hidden, locked!
    
    * Fields for db.node_base_fields:
    
      * id (0 for creation)
      * title
      * body
      * body_format
    """

    if len(request.args) > 0:
        ## Return creation form for this node type
        node_type = request.args[0]
        node_types = cms_settings.list_node_types()
        if node_type not in node_types.keys():
            raise HTTP(404)
        form = cmsdb.node.form_create(node_type)
        response.view = 'generic/form.' + request.extension
        return dict(title=T('Create %s', node_types[node_type]['label']),
                    form=form)

    else:
        ## Return selection menu to choose node type to create
        menu_items = [
            (T('Create "%s" node', type_def['label']), False,
             URL('default', 'node_create', args=[node_type]), [])
            for node_type, type_def in cms_settings.list_node_types().items()
        ]
        response.view = 'generic/menu_page.%s' % request.extension
        return dict(title=T('Create content'), menu_items=menu_items)
示例#3
0
 def edit_form(self, action, node_type=None, node_id=None, revision_id=None,
               language=None, defaults=None):
     """Node manipulation form.
     
     :param action: The action to be performed on node:
         one of ``create|update|translate``
     :param node_type: Only for ``create``, the type of node
         to be created
     :param node_id: Only for ``update|translate``, the id of node
         to be updated
     :param revision_id: Only for ``update|translate``, the id
         of the revision on which to work. Defaults to latest revision.
         Must be a valid revision id for this node.
     :param language: The language in which to write/translate the node.
         Defaults to current language or 'neutral'.
     :param defaults: A dict or dict-like of values to be set as
         defaults for node creation.
     """
     
     db = self.db
     T = current.T
     
     if not defaults:
         defaults = {}
     
     ## Validate arguments
     node_types = cms_settings.list_node_types()
     
     if action=='create':
         ## We need only a valid node type
         if node_type not in node_types.keys():
             raise ValueError, "Wrong node type %r must be one of %s" % (node_type, ", ".join(node_types.keys()))
     elif action=='update':
         ## node_id must be a valid node
         ## if specified, revision_id must be a valid revision for this node
         ## if specified, language must exist
         node = self.read(node_id=node_id, revision=revision_id, language=language)
         #revision_id = node.get_revision(revision_id, language)
         defaults.update(node.values)
     elif action=='translate':
         ## We need a language in which to translate plus a language
         ## to be used as "translation base" to read values from.
         pass
     
     ## To store components of the form
     _form_components = {}
     
     ## Tables to be used to generate form.
     ## TODO: Load all the db.tables matching node_fields_* and node_<type>_fields_*
     _component_tables = ['node', 'node_revision', 'node_fields_base']
     
     ## Set defaults --------------------------------------------------------
     db.node.type.default = node_type
     db.node.type.readable = \
     db.node.type.writable = False
     
     db.node_revision.node.requires = None
     db.node_revision.node.readable = \
     db.node_revision.node.writable = False
     
     db.node_fields_base.node_revision.requires = None
     db.node_fields_base.node_revision.readable = \
     db.node_fields_base.node_revision.writable = False
     
     ##TODO: set defaults from the `defaults` variable.
     
     ## Retrieve components from tables -------------------------------------
     for table in _component_tables:
         
         ## Prepare default values for fields
         if defaults.has_key(table):
             for field in db[table].fields:
                 try:
                     db[table][field].default = defaults[table][field]
                 except KeyError, e:
                     pass
         
         ## Create SQLFORM from the table
         _form_components[table] = SQLFORM.factory(db[table], buttons=[],
             formstyle='divs' if table not in ['node','node_revision'] else 'table3cols').components
         
         ## Change field names by adding ``<tablename>--`` prefix
         for ilev, comp in descend_tree(_form_components[table]):
             if isinstance(comp, INPUT) and comp.attributes.has_key('_name'):
                 ## Change field name
                 comp.attributes['_name'] = '%s--%s' % (table, comp.attributes['_name'])
示例#4
0
    def edit_form(self,
                  action,
                  node_type=None,
                  node_id=None,
                  revision_id=None,
                  language=None,
                  defaults=None):
        """Node manipulation form.
        
        :param action: The action to be performed on node:
            one of ``create|update|translate``
        :param node_type: Only for ``create``, the type of node
            to be created
        :param node_id: Only for ``update|translate``, the id of node
            to be updated
        :param revision_id: Only for ``update|translate``, the id
            of the revision on which to work. Defaults to latest revision.
            Must be a valid revision id for this node.
        :param language: The language in which to write/translate the node.
            Defaults to current language or 'neutral'.
        :param defaults: A dict or dict-like of values to be set as
            defaults for node creation.
        """

        db = self.db
        T = current.T

        if not defaults:
            defaults = {}

        ## Validate arguments
        node_types = cms_settings.list_node_types()

        if action == 'create':
            ## We need only a valid node type
            if node_type not in node_types.keys():
                raise ValueError, "Wrong node type %r must be one of %s" % (
                    node_type, ", ".join(node_types.keys()))
        elif action == 'update':
            ## node_id must be a valid node
            ## if specified, revision_id must be a valid revision for this node
            ## if specified, language must exist
            node = self.read(node_id=node_id,
                             revision=revision_id,
                             language=language)
            #revision_id = node.get_revision(revision_id, language)
            defaults.update(node.values)
        elif action == 'translate':
            ## We need a language in which to translate plus a language
            ## to be used as "translation base" to read values from.
            pass

        ## To store components of the form
        _form_components = {}

        ## Tables to be used to generate form.
        ## TODO: Load all the db.tables matching node_fields_* and node_<type>_fields_*
        _component_tables = ['node', 'node_revision', 'node_fields_base']

        ## Set defaults --------------------------------------------------------
        db.node.type.default = node_type
        db.node.type.readable = \
        db.node.type.writable = False

        db.node_revision.node.requires = None
        db.node_revision.node.readable = \
        db.node_revision.node.writable = False

        db.node_fields_base.node_revision.requires = None
        db.node_fields_base.node_revision.readable = \
        db.node_fields_base.node_revision.writable = False

        ##TODO: set defaults from the `defaults` variable.

        ## Retrieve components from tables -------------------------------------
        for table in _component_tables:

            ## Prepare default values for fields
            if defaults.has_key(table):
                for field in db[table].fields:
                    try:
                        db[table][field].default = defaults[table][field]
                    except KeyError, e:
                        pass

            ## Create SQLFORM from the table
            _form_components[table] = SQLFORM.factory(
                db[table],
                buttons=[],
                formstyle='divs' if table not in ['node', 'node_revision'] else
                'table3cols').components

            ## Change field names by adding ``<tablename>--`` prefix
            for ilev, comp in descend_tree(_form_components[table]):
                if isinstance(comp,
                              INPUT) and comp.attributes.has_key('_name'):
                    ## Change field name
                    comp.attributes['_name'] = '%s--%s' % (
                        table, comp.attributes['_name'])
示例#5
0
文件: menu.py 项目: zahedbri/web2cms
#########################################################################
## this is the main application menu add/remove items as required
#########################################################################

import cms_settings

response.menu = [
    (T('Home'), False, URL('default','index'), []),
    
    ## Node stuff
    (T('Content'), False, URL('default','node_list'), [
        (T('List content'), False, URL('default','node_list'), []),
        (T('Add'), False, URL('default','node_create'), [
            (T('New %s', type_def['label']), False, URL('default','node_create', args=[node_type]))
            for node_type, type_def in cms_settings.list_node_types().items()
        ]),
        (T('Search'), False, URL('default','node_search'), []),
    ]),
    
    ## Administration panel
    (T('Admin'), False, URL('admin','index'), []),

]

menu_development = (T('Devel'), False, URL('devel','index'), [
    (T('Status'), False, URL('devel','status'), [],
        {'icon':URL('static','images/icons/system-monitor.png')}),
    (T('Generate'), False, URL('devel','generate'), [],
        {'icon':URL('static','images/icons/devel.png')}),
    (T('Appadmin'), False, URL('appadmin','index'), [],