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