Example #1
0
    def load_subform(self, node_token, parent_result, data, session):
        # TD wtf how can be called load subform when returns data?
        # can we get a better name for this?
        # get_subform_data()?

        node = self.node
        data_out = {}
        table = self.table
        tables = util.split_table_fields(self.form_item_name_list, table).keys()

        parent_value = data.get(self.parent_id)
        where = "%s=?" % self.child_id

        result = r.search(self.table, where, session = session,
                          tables = tables, values = [parent_value])

        out = []

        for counter in range(0, len(result.results)):
            result.current_row = counter
            data_out = {}
            for field in util.INTERNAL_FIELDS:
                try:
                    data_out[field] = result.get(field)
                except AttributeError:
                    extra_field = None

            for form_item in self.form_items:
                form_item.display_page_item(node_token, result, data_out, session)

            out.append(data_out)

        return out
Example #2
0
    def view_multiple(self, node_token, read_only=True, where = None, limit=5, is_main_form = True, **kw):
        # TD not reviewed

        data = node_token[self.name]
        query = data.get('q', '')
        limit = data.get_data_int('l', limit)
        offset = data.get_data_int('o')
        id_data = data
        node = node_token.node

        id = id_data.get('id')
        if where:
            link_id = ''
            join_data = {}
            pass
        elif id:
            where = dict(id = id)
            link_id = '&id=%s' % id
            join_data = dict(id = id)
        else:
            id = id_data.get('__id')
            where = dict(_core_id = id)
            link_id = '&__id=%s' % id
            join_data = dict(__id = id)

        session = r.Session()

        data_out = {}

        table = self.table or node.table

        tables = util.split_table_fields(self.form_item_name_list, table).keys()

        results = r.search(table, where,
                           session = session, tables = tables,
                           limit = limit,
                           offset = offset,
                           count = True)
        results.collect()

        session.close()

        out = []
        # build the links
        for result in results:
            row = {}
            for field in util.INTERNAL_FIELDS:
                try:
                    row[field] = result.get(field)
                except AttributeError:
                    extra_field = None
            for form_item in self.form_items:
                form_item.display_page_item(node_token, result, row, session)
            out.append(row)

        if self.form_buttons:
            buttons = self.form_buttons
        else:
            buttons = [['add %s' % self.table, '%s:_add:' % node_token.node_name],
                       ['delete %s' % self.table, '%s:_delete:' % node_token.node_name],
                       ['cancel', 'BACK']]

        data_out = {'__array' : out}
        data_out ['__message'] = "moo table!"
        data_out['__buttons'] = buttons
        data_out['__join_data'] = join_data

        self.create_form_data(node_token, data_out, read_only)

        # add the paging info
        base_link = '@%s:_update?form=%s&q=%s%s' % (node_token.node_name, self.name, query, link_id)
        node_token.add_paging(self,
                              count = results.row_count,
                              limit = limit,
                              offset = offset,
                              base_link = base_link)

        node_token.form(self)

        session.close()
Example #3
0
    def view_single(self, node_token, read_only=True, where = None):

        # TD not reviewed
        node = node_token.node
        is_main_form = (node.layout_main_form == self.name)

        request_data = node_token[self.name]
        form_title = None
        layout_title = None
        join_data = None
        get_data = request_data.get
        id = get_data('id') or get_data('%s.id' % self.table)
        if where:
            pass
        elif id:
            where = dict(id=id)
        else:
            id = get_data('__id')
            where = dict(_core_id = id)
        try:
            session = r.Session()

            data_out = {}

            table = self.table

            tables = util.split_table_fields(self.form_item_name_list, table).keys()

            result = r.search_single(table, where,
                                     session = session,
                                     tables = tables,
                                     )

            for field in util.INTERNAL_FIELDS:
                try:
                    data_out[field] = result.get(field)
                except AttributeError:
                    extra_field = None

            for form_item in self.form_items:
                form_item.display_page_item(node_token, result, data_out, session)

            id = data_out.get('id')
            _core_id = data_out.get('_core_id')

            # set the join data for the form will be returned from the front end
            if is_main_form:
                check_table = r[self.table]
                if check_table.entity or check_table.relation:
                    join_data = dict(__id = data_out.get('_core_id'))
                else:
                    join_data = dict(id = id)

            # set the title for bookmarks if this is the main form
            if is_main_form:
                if self.title_field and data_out.has_key(self.title_field):
                    form_title = data_out.get(self.title_field)
                    if not form_title:
                        form_title = 'untitled (%s)' % id
                else:
                    form_title = '%s: %s' % (self.table, id)
                # TODO currently the layout title just defaults to the page title
                # but can be extended as needed.
                layout_title = form_title

            if self.title_field:
                title = result.get(self.title_field)
            else:
                title = result.get("id")

        except custom_exceptions.SingleResultError:
            # no result found so return error to front end
            node_token.general_error('No record found for give id')
            session.close()
            return
        except KeyError:
            # table not found
            # we shouldn't be hitting this so raise error
            # keep code incase we need it
            raise Exception('Table `%s` not found for form `%s`' % (table, self.name))
            print 'TABLE NOT FOUND', self.name, table
            data_out = {}
            result = None
            id = None
            join_field = None
            title = 'Table not Found'
            data_out = {}
            for form_item in self.form_items:
                form_item.display_page_item(node_token, result, data_out, session)
            session.close()

        if self.form_buttons:
            buttons = self.form_buttons
        elif '__buttons' not in data_out:
            if read_only:
                buttons = [['edit %s' % self.table, '%s:edit' % node_token.node_name]]
            else:
                buttons = [['save %s' % self.table, 'f@%s:_save' % node_token.node_name],
                                     ['delete %s' % self.table, '@%s:_delete' % node_token.node_name],
                                     ['cancel', 'BACK']]




    #    if join_field:
    #        data_out['__join_data'] = join_data

        self.create_form_data(node_token, data_out, read_only)

        if is_main_form and join_data:
            node_data = join_data
        else:
            node_data = None


        node_token.form(self, title = form_title, node_data = node_data)
        if is_main_form:
            node_token.set_layout_title(layout_title)
            node_token.set_layout_buttons(buttons)
        else:
            data_out['__buttons'] = buttons
            if '__message' not in data_out:
                data_out['__message'] = "Hello, edit %s" % title
        # hack to stop null bookmarks
        if is_main_form and _core_id:
            node_token.bookmark = dict(
                table_name = table,
                _core_id = _core_id
            )

        session.close()