def get(self, request, index, *args, **kw): """Returns a rendered HTML version the requested user dashboard.""" ar = BaseRequest(request) ar.renderer = settings.SITE.plugins.react.renderer ar.requesting_panel = f"dashboard-{index}" dash = ar.get_user().get_preferences().dashboard_items if len(dash) > index: html = ar.show_story([dash[index]]) else: html = "" ar.success(html=html) return json_response(ar.response, ar.content_type)
def get(self, request, name=None): # ar = action_request(None, None, request, request.GET, True) ar = BaseRequest( # user=user, request=request, renderer=settings.SITE.plugins.openui5.renderer) u = ar.get_user() context = dict( menu=settings.SITE.get_site_menu(None, u.user_type) ) device_type = request.device_type print ("device_type", device_type) # print(u) # print(name) if name.startswith("dialog/SignInActionFormPanel"): tplname = "openui5/fragment/SignInActionFormPanel.fragment.xml" elif name.startswith("menu/user/user.fragment.xml"): tplname = "openui5/fragment/UserMenu.fragment.xml" elif name.startswith("menu/"): tplname = "openui5/fragment/Menu.fragment.xml" sel_menu = name.split("/", 1)[1].split('.', 1)[0] # [05/Feb/2018 09:32:25] "GET /ui/menu/mailbox.fragment.xml HTTP/1.1" 200 325 for i in context['menu'].items: if i.name == sel_menu: context.update(dict( opened_menu=i )) break else: raise Exception("No Menu with name %s" % sel_menu) elif name.startswith("grid/") or name.startswith("slavetable/") or \ name.startswith("view/grid/") or name.startswith("view/slavetable/"): # Table/grid view # todo Get table data # "grid/tickets/AllTickets.view.xml" # or # "slavetable/tickets/AllTickets.view.xml app_label, actor = re.match(r"(?:(?:view\/)?grid|slavetable)\/(.+)\/(.+).view.xml$", name).groups() ar = action_request(app_label, actor, request, request.GET, True) actor = rt.models.resolve(app_label + "." + actor) store = ar.ah.store columns = actor.get_handle().get_columns() store.list_fields # todo match columns's field.name with store.list_fields storefield's index. index_mod = 0 for c in columns: c.fields_index = find(store.list_fields, c.field.name, key=lambda f: f.name) + index_mod if isinstance(c, ComboFieldElement): # Skip the data value for multi value columns, such as choices and FK fields. # use c.fields_index -1 for data value index_mod += 1 # print(ar.ah.store.pk_index) # indexk of PK in detail row data if settings.SITE.is_installed('contenttypes'): # Used in slave tables of gfks relations m = getattr(store.pk, 'model', None) # e.g. pk may be the VALUE_FIELD of a choicelist which # has no model if m is not None: ct = ContentType.objects.get_for_model(m).pk context.update(content_type=ct) context.update({ "actor": actor, "columns": columns, "actions": actor.get_actions(), "title": actor.label, "pk_index": store.pk_index, "is_slave": name.startswith("slavetable/") or actor.master is not None, }) if name.startswith("slavetable/"): tplname = "openui5/view/slaveTable.view.xml" else: # if device_type == 'desktop': if not actor.tablet_columns and not actor.mobile_columns: tplname = "openui5/view/table.view.xml" # Change to "grid" to match action? else: tplname = "openui5/view/table.mview.xml" # ar = action_request(app_label, actor, request, request.GET, True) # add to context elif name.startswith("detail") or name.startswith("view/detail"): # Detail view # "detail/tickets/AllTickets.view.xml" app_label, actor = re.match(r"(?:view\/)?detail\/(.+)\/(.+).view.xml$", name).groups() actor = rt.models.resolve(app_label + "." + actor) # detail_action = actor.actions['detail'] detail_action = actor.detail_action window_layout = detail_action.get_window_layout() layout_handle = window_layout.get_layout_handle(settings.SITE.plugins.openui5) layout_handle.main.elements # elems # Refactor into actor get method? ba_actions = actor.get_toolbar_actions(actor.detail_action.action) context.update({ "actor": actor, # "columns": actor.get_handle().get_columns(), "actions": actor.get_actions(), 'ba_actions': ba_actions, "title": actor.label, # # "main_elems": layout_handle.main.elements, "main": layout_handle.main, "layout_handle": layout_handle }) tplname = "openui5/view/detail.view.xml" # Change to "grid" to match action? # ar = action_request(app_label, actor, request, request.GET, True) # add to context elif name.startswith("view/") or \ name.startswith("controller/") or \ name.startswith("core/") or name.startswith("fragment/"): tplname = "openui5/" + name if "manifest.json" in name: ## List all master tables for routing actors_list = [ rpt for rpt in kernel.master_tables + kernel.slave_tables + list(kernel.generic_slaves.values()) + kernel.virtual_tables + kernel.frames_list ] detail_list = set() def add(res, collector, fl, formpanel_name): if fl is None or fl._datasource is None: return # 20130804 if fl._datasource != res: fl._other_datasources.add(res) if fl not in collector: collector.add(res) for res in actors_list: add(res, detail_list, res.detail_layout, "detail.%s" % res) # self.actors_list.extend( # [a for a in list(kernel.CHOICELISTS.values()) # if settings.SITE.is_installed(a.app_label)]) # don't include for abstract actors actors_list = [a for a in actors_list if not a.is_abstract()] context.update(actors_list=actors_list, detail_list=detail_list, ) else: raise Exception("Can't find a view for path: {}".format(name)) return XML_response(ar, tplname, context)