def _create_custom_app_strings(app, lang): def trans(d): return clean_trans(d, langs) def maybe_add_index(text): if app.build_version >= '2.8': numeric_nav_on = app.profile.get('properties', {}).get('cc-entry-mode') == 'cc-entry-review' if app.profile.get('features', {}).get('sense') == 'true' or numeric_nav_on: text = "${0} %s" % (text,) if not (text and text[0].isdigit()) else text return text langs = [lang] + app.langs yield id_strings.homescreen_title(), app.name yield id_strings.app_display_name(), app.name yield 'cchq.case', "Case" yield 'cchq.referral', "Referral" # include language code names for lc in app.langs: name = langcodes.get_name(lc) or lc if name: yield lc, name for module in app.get_modules(): for detail_type, detail, _ in module.get_details(): if detail_type.startswith('case'): label = trans(module.case_label) else: label = trans(module.referral_label) yield id_strings.detail_title_locale(module, detail_type), label for column in detail.get_columns(): if not is_sort_only_column(column): yield id_strings.detail_column_header_locale(module, detail_type, column), trans(column.header) if column.format in ('enum', 'enum-image'): for item in column.enum: yield id_strings.detail_column_enum_variable(module, detail_type, column, item.key), trans(item.value) elif column.format == "graph": for index, item in enumerate(column.graph_configuration.annotations): yield id_strings.graph_annotation(module, detail_type, column, index), trans(item.values) for property, values in column.graph_configuration.locale_specific_config.iteritems(): yield id_strings.graph_configuration(module, detail_type, column, property), trans(values) for tab in detail.get_tabs(): yield id_strings.detail_tab_title_locale(module, detail_type, tab), trans(tab.header) yield id_strings.module_locale(module), maybe_add_index(trans(module.name)) if hasattr(module, 'case_list'): if module.case_list.show: yield id_strings.case_list_locale(module), trans(module.case_list.label) or "Case List" if hasattr(module, 'referral_list'): if module.referral_list.show: yield id_strings.referral_list_locale(module), trans(module.referral_list.label) for form in module.get_forms(): form_name = trans(form.name) + ('${0}' if form.show_count else '') yield id_strings.form_locale(form), maybe_add_index(form_name)
def get_module_contributions(self, module): # avoid circular dependency from corehq.apps.app_manager.models import CareplanModule menus = [] if isinstance(module, CareplanModule): update_menu = Menu( id=id_strings.menu_id(module), locale_id=id_strings.module_locale(module), ) if not module.display_separately: parent = self.app.get_module_by_unique_id( module.parent_select.module_id) create_goal_form = module.get_form_by_type( CAREPLAN_GOAL, 'create') create_menu = Menu( id=id_strings.menu_id(parent), locale_id=id_strings.module_locale(parent), ) create_menu.commands.append( Command(id=id_strings.form_command(create_goal_form))) menus.append(create_menu) update_menu.root = id_strings.menu_id(parent) else: update_menu.commands.extend([ Command(id=id_strings.form_command( module.get_form_by_type(CAREPLAN_GOAL, 'create'))), ]) update_menu.commands.extend([ Command(id=id_strings.form_command( module.get_form_by_type(CAREPLAN_GOAL, 'update'))), Command(id=id_strings.form_command( module.get_form_by_type(CAREPLAN_TASK, 'create'))), Command(id=id_strings.form_command( module.get_form_by_type(CAREPLAN_TASK, 'update'))), ]) menus.append(update_menu) return menus
def _create_custom_app_strings(app, lang): from corehq.apps.app_manager.models import Module def trans(d): return clean_trans(d, langs) def maybe_add_index(text): if LooseVersion(app.build_spec.version) >= '2.8': numeric_nav_on = app.profile.get('properties', {}).get('cc-entry-mode') == 'cc-entry-review' if app.profile.get('features', {}).get('sense') == 'true' or numeric_nav_on: text = "${0} %s" % (text,) if not (text and text[0].isdigit()) else text return text langs = [lang] + app.langs yield id_strings.homescreen_title(), app.name yield id_strings.app_display_name(), app.name yield 'cchq.case', "Case" yield 'cchq.referral', "Referral" # include language code names for lc in app.langs: name = langcodes.get_name(lc) or lc if name: yield lc, name for module in app.get_modules(): for detail_type, detail, _ in module.get_details(): if detail_type.startswith('case'): label = trans(module.case_label) else: label = trans(module.referral_label) yield id_strings.detail_title_locale(module, detail_type), label detail_column_infos = get_detail_column_infos(detail, include_sort=detail_type == 'case_short') for (column, sort_element, order) in detail_column_infos: if not is_sort_only_column(column): yield id_strings.detail_column_header_locale(module, detail_type, column), trans(column.header) if column.format in ('enum', 'enum-image'): for item in column.enum: yield id_strings.detail_column_enum_variable(module, detail_type, column, item.key), trans(item.value) yield id_strings.module_locale(module), maybe_add_index(trans(module.name)) if hasattr(module, 'case_list'): if module.case_list.show: yield id_strings.case_list_locale(module), trans(module.case_list.label) or "Case List" if hasattr(module, 'referral_list'): if module.referral_list.show: yield id_strings.referral_list_locale(module), trans(module.referral_list.label) for form in module.get_forms(): form_name = trans(form.name) + ('${0}' if form.show_count else '') yield id_strings.form_locale(form), maybe_add_index(form_name)
def _create_custom_app_strings(app, lang): def trans(d): return clean_trans(d, langs) def maybe_add_index(text): if app.build_version >= '2.8': numeric_nav_on = app.profile.get('properties', {}).get('cc-entry-mode') == 'cc-entry-review' if app.profile.get('features', {}).get('sense') == 'true' or numeric_nav_on: text = "${0} %s" % (text,) if not (text and text[0].isdigit()) else text return text langs = [lang] + app.langs yield id_strings.homescreen_title(), app.name yield id_strings.app_display_name(), app.name yield 'cchq.case', "Case" yield 'cchq.referral', "Referral" # include language code names for lc in app.langs: name = langcodes.get_name(lc) or lc if name: yield lc, name for module in app.get_modules(): for detail_type, detail, _ in module.get_details(): if detail_type.startswith('case'): label = trans(module.case_label) else: label = trans(module.referral_label) yield id_strings.detail_title_locale(module, detail_type), label for column in detail.get_columns(): if not is_sort_only_column(column): yield id_strings.detail_column_header_locale(module, detail_type, column), trans(column.header) if column.format in ('enum', 'enum-image'): for item in column.enum: yield id_strings.detail_column_enum_variable(module, detail_type, column, item.key), trans(item.value) yield id_strings.module_locale(module), maybe_add_index(trans(module.name)) if hasattr(module, 'case_list'): if module.case_list.show: yield id_strings.case_list_locale(module), trans(module.case_list.label) or "Case List" if hasattr(module, 'referral_list'): if module.referral_list.show: yield id_strings.referral_list_locale(module), trans(module.referral_list.label) for form in module.get_forms(): form_name = trans(form.name) + ('${0}' if form.show_count else '') yield id_strings.form_locale(form), maybe_add_index(form_name)
def get_module_contributions(self, module): # avoid circular dependency from corehq.apps.app_manager.models import CareplanModule menus = [] if isinstance(module, CareplanModule): update_menu = Menu( id=id_strings.menu_id(module), locale_id=id_strings.module_locale(module), ) if not module.display_separately: parent = self.app.get_module_by_unique_id(module.parent_select.module_id, error=_("Could not find module '{}' is attached to.").format(module.default_name())) create_goal_form = module.get_form_by_type(CAREPLAN_GOAL, 'create') create_menu = Menu( id=id_strings.menu_id(parent), locale_id=id_strings.module_locale(parent), ) create_menu.commands.append(Command(id=id_strings.form_command(create_goal_form))) menus.append(create_menu) update_menu.root = id_strings.menu_id(parent) else: update_menu.commands.extend([ Command(id=id_strings.form_command(module.get_form_by_type(CAREPLAN_GOAL, 'create'))), ]) update_menu.commands.extend([ Command(id=id_strings.form_command(module.get_form_by_type(CAREPLAN_GOAL, 'update'))), Command(id=id_strings.form_command(module.get_form_by_type(CAREPLAN_TASK, 'create'))), Command(id=id_strings.form_command(module.get_form_by_type(CAREPLAN_TASK, 'update'))), ]) menus.append(update_menu) return menus
def _create_custom_app_strings(app, lang, for_default=False): def trans(d): return clean_trans(d, langs) def maybe_add_index(text): if app.build_version and app.build_version >= LooseVersion('2.8'): numeric_nav_on = app.profile.get( 'properties', {}).get('cc-entry-mode') == 'cc-entry-review' if app.profile.get('features', {}).get('sense') == 'true' or numeric_nav_on: text = "${0} %s" % (text, ) if not ( text and text[0].isdigit()) else text return text langs = [lang] + app.langs yield id_strings.homescreen_title(), app.name yield id_strings.app_display_name(), app.name for id, value in id_strings.REGEX_DEFAULT_VALUES.items(): yield id, value if for_default: # include language code names and current language for lc in app.langs: name = langcodes.get_name(lc) or lc if not name: continue with localize(convert_to_two_letter_code(lc)): name = ugettext(name) yield lc, name yield id_strings.current_language(), lang for module in app.get_modules(): for detail_type, detail, _ in module.get_details(): for column in detail.get_columns(): yield id_strings.detail_column_header_locale( module, detail_type, column), trans(column.header) if column.format in ('enum', 'enum-image', 'conditional-enum'): for item in column.enum: yield id_strings.detail_column_enum_variable( module, detail_type, column, item.key_as_variable), trans(item.value) elif column.format == "graph": for index, item in enumerate( column.graph_configuration.annotations): yield id_strings.graph_annotation( module, detail_type, column, index), trans(item.values) for property, values in six.iteritems( column.graph_configuration.locale_specific_config): yield id_strings.graph_configuration( module, detail_type, column, property), trans(values) for index, item in enumerate( column.graph_configuration.series): for property, values in six.iteritems( item.locale_specific_config): yield id_strings.graph_series_configuration( module, detail_type, column, index, property), trans(values) # To list app strings for properties used as sorting properties only if detail.sort_elements: sort_only, sort_columns = get_sort_and_sort_only_columns( detail, detail.sort_elements) for field, sort_element, order in sort_only: if sort_element.has_display_values(): column = create_temp_sort_column(sort_element, order) yield id_strings.detail_column_header_locale(module, detail_type, column), \ trans(column.header) for tab in detail.get_tabs(): yield id_strings.detail_tab_title_locale( module, detail_type, tab), trans(tab.header) if getattr(detail, 'lookup_display_results'): yield id_strings.callout_header_locale(module), trans( detail.lookup_field_header) yield id_strings.module_locale(module), maybe_add_index( trans(module.name)) icon = module.icon_app_string(lang, for_default=for_default) audio = module.audio_app_string(lang, for_default=for_default) custom_icon_form, custom_icon_text = module.custom_icon_form_and_text_by_language( lang) if icon: yield id_strings.module_icon_locale(module), icon if audio: yield id_strings.module_audio_locale(module), audio if custom_icon_form and custom_icon_text: yield _get_custom_icon_app_locale_and_value(custom_icon_form, custom_icon_text, module=module) if hasattr(module, 'report_configs'): for config in module.report_configs: yield id_strings.report_command(config.uuid), trans( config.header) yield id_strings.report_name(config.uuid), trans(config.header) yield id_strings.report_description(config.uuid), trans( config.localized_description) for column in config.report(app.domain).report_columns: yield (id_strings.report_column_header( config.uuid, column.column_id), column.get_header(lang)) for chart_id, graph_config in six.iteritems( config.complete_graph_configs): for index, item in enumerate(graph_config.annotations): yield id_strings.mobile_ucr_annotation( module, config.uuid, index), trans(item.values) for property, values in six.iteritems( graph_config.locale_specific_config): yield id_strings.mobile_ucr_configuration( module, config.uuid, property), trans(values) for index, item in enumerate(graph_config.series): for property, values in six.iteritems( item.locale_specific_config): yield id_strings.mobile_ucr_series_configuration( module, config.uuid, index, property), trans(values) if hasattr(module, 'case_list'): if module.case_list.show: yield id_strings.case_list_locale(module), trans( module.case_list.label) or "Case List" icon = module.case_list.icon_app_string( lang, for_default=for_default) audio = module.case_list.audio_app_string( lang, for_default=for_default) if icon: yield id_strings.case_list_icon_locale(module), icon if audio: yield id_strings.case_list_audio_locale(module), audio if module_offers_search(module): yield id_strings.case_search_locale(module), trans( module.search_config.command_label) # icon and audio not yet available for prop in module.search_config.properties: yield id_strings.search_property_locale( module, prop.name), trans(prop.label) if hasattr(module, 'referral_list'): if module.referral_list.show: yield id_strings.referral_list_locale(module), trans( module.referral_list.label) for form in module.get_forms(): form_name = trans(form.name) + ('${0}' if form.show_count else '') yield id_strings.form_locale(form), maybe_add_index(form_name) icon = form.icon_app_string(lang, for_default=for_default) audio = form.audio_app_string(lang, for_default=for_default) custom_icon_form, custom_icon_text = form.custom_icon_form_and_text_by_language( lang) if icon: yield id_strings.form_icon_locale(form), icon if audio: yield id_strings.form_audio_locale(form), audio if custom_icon_form and custom_icon_text: yield _get_custom_icon_app_locale_and_value(custom_icon_form, custom_icon_text, form=form) if hasattr(module, 'case_list_form') and module.case_list_form.form_id: yield (id_strings.case_list_form_locale(module), trans(module.case_list_form.label) or "Create a new Case") icon = module.case_list_form.icon_app_string( lang, for_default=for_default) audio = module.case_list_form.audio_app_string( lang, for_default=for_default) if icon: yield id_strings.case_list_form_icon_locale(module), icon if audio: yield id_strings.case_list_form_audio_locale(module), audio
class MenuContributor(SuiteContributorByModule): def get_module_contributions(self, module): def get_commands(excluded_form_ids): @memoized def module_uses_case(): return module.all_forms_require_a_case() @memoized def domain_uses_usercase(): return is_usercase_in_use(self.app.domain) for form in module.get_suite_forms(): if form.unique_id in excluded_form_ids: continue command = Command(id=id_strings.form_command(form, module)) if form.requires_case(): form_datums = self.entries_helper.get_datums_meta_for_form_generic( form, module) var_name = next(meta.datum.id for meta in reversed(form_datums) if meta.action and meta.requires_selection) case = CaseIDXPath(session_var(var_name)).case() else: case = None if getattr(form, 'form_filter', None): fixture_xpath = (session_var( id_strings.fixture_session_var(module)) if module.fixture_select.active else None) interpolated_xpath = interpolate_xpath(form.form_filter, case, fixture_xpath, module=module, form=form) if xpath_references_case(interpolated_xpath) and \ (not module_uses_case() or module.put_in_root and not module.root_requires_same_case()): raise CaseXPathValidationError(module=module, form=form) if xpath_references_user_case( interpolated_xpath) and not domain_uses_usercase(): raise UserCaseXPathValidationError(module=module, form=form) command.relevant = interpolated_xpath if getattr(module, 'has_schedule', False) and module.all_forms_require_a_case(): # If there is a schedule and another filter condition, disregard it... # Other forms of filtering are disabled in the UI schedule_filter_condition = MenuContributor._schedule_filter_conditions( form, module, case) if schedule_filter_condition is not None: command.relevant = schedule_filter_condition yield command if hasattr(module, 'case_list') and module.case_list.show: yield Command(id=id_strings.case_list_command(module)) supports_module_filter = self.app.enable_module_filtering and getattr( module, 'module_filter', None) menus = [] if hasattr(module, 'get_menus'): for menu in module.get_menus( supports_module_filter=supports_module_filter): menus.append(menu) else: from corehq.apps.app_manager.models import ShadowModule id_modules = [module] root_modules = [] shadow_modules = [ m for m in self.app.get_modules() if isinstance(m, ShadowModule) and m.source_module_id ] put_in_root = getattr(module, 'put_in_root', False) if not put_in_root and getattr(module, 'root_module', False): root_modules.append(module.root_module) for shadow in shadow_modules: if module.root_module.unique_id == shadow.source_module_id: root_modules.append(shadow) else: root_modules.append(None) if put_in_root and getattr(module, 'root_module', False): for shadow in shadow_modules: if module.root_module.unique_id == shadow.source_module_id: id_modules.append(shadow) for id_module in id_modules: for root_module in root_modules: menu_kwargs = {} suffix = "" if root_module: menu_kwargs.update( {'root': id_strings.menu_id(root_module)}) suffix = id_strings.menu_id(root_module) if isinstance( root_module, ShadowModule) else "" menu_kwargs.update( {'id': id_strings.menu_id(id_module, suffix)}) if supports_module_filter: menu_kwargs['relevant'] = interpolate_xpath( module.module_filter) if self.app.enable_localized_menu_media: module_custom_icon = module.custom_icon menu_kwargs.update({ 'menu_locale_id': id_strings.module_locale(module), 'media_image': bool(len(module.all_image_paths())), 'media_audio': bool(len(module.all_audio_paths())), 'image_locale_id': id_strings.module_icon_locale(module), 'audio_locale_id': id_strings.module_audio_locale(module), 'custom_icon_locale_id': (id_strings.module_custom_icon_locale( module, module_custom_icon.form) if module_custom_icon and not module_custom_icon.xpath else None), 'custom_icon_form': (module_custom_icon.form if module_custom_icon else None), 'custom_icon_xpath': (module_custom_icon.xpath if module_custom_icon and module_custom_icon.xpath else None), }) menu = LocalizedMenu(**menu_kwargs) else: menu_kwargs.update({ 'locale_id': id_strings.module_locale(module), 'media_image': module.default_media_image, 'media_audio': module.default_media_audio, }) menu = Menu(**menu_kwargs) excluded_form_ids = [] if root_module and isinstance(root_module, ShadowModule): excluded_form_ids = root_module.excluded_form_ids if id_module and isinstance(id_module, ShadowModule): excluded_form_ids = id_module.excluded_form_ids menu.commands.extend(get_commands(excluded_form_ids)) if len(menu.commands): menus.append(menu) if self.app.grid_display_for_all_modules() or \ self.app.grid_display_for_some_modules() and module.grid_display_style(): self._give_non_root_menus_grid_style(menus) if self.app.use_grid_menus: self._give_root_menu_grid_style(menus) return menus
def get_module_contributions(self, module): def get_commands(): for form in module.get_suite_forms(): command = Command(id=id_strings.form_command(form, module)) if form.requires_case(): form_datums = self.entries_helper.get_datums_meta_for_form_generic(form, module) var_name = next( meta.datum.id for meta in reversed(form_datums) if meta.action and meta.requires_selection ) case = CaseIDXPath(session_var(var_name)).case() else: case = None if ( getattr(form, 'form_filter', None) and not module.put_in_root and (module.all_forms_require_a_case() or is_usercase_in_use(self.app.domain)) ): fixture_xpath = ( session_var(id_strings.fixture_session_var(module)) if module.fixture_select.active else None ) command.relevant = interpolate_xpath(form.form_filter, case, fixture_xpath) if getattr(module, 'has_schedule', False) and module.all_forms_require_a_case(): # If there is a schedule and another filter condition, disregard it... # Other forms of filtering are disabled in the UI schedule_filter_condition = MenuContributor._schedule_filter_conditions(form, module, case) if schedule_filter_condition is not None: command.relevant = schedule_filter_condition yield command if hasattr(module, 'case_list') and module.case_list.show: yield Command(id=id_strings.case_list_command(module)) supports_module_filter = ( self.app.domain and MODULE_FILTER.enabled(self.app.domain) and self.app.enable_module_filtering and getattr(module, 'module_filter', None) ) menus = [] if hasattr(module, 'get_menus'): for menu in module.get_menus(supports_module_filter=supports_module_filter): menus.append(menu) elif module.module_type != 'careplan': id_modules = [module] root_modules = [] shadow_modules = [m for m in self.app.get_modules() if m.doc_type == "ShadowModule" and m.source_module_id] put_in_root = getattr(module, 'put_in_root', False) if not put_in_root and getattr(module, 'root_module', False): root_modules.append(module.root_module) for shadow in shadow_modules: if module.root_module.unique_id == shadow.source_module_id: root_modules.append(shadow) else: root_modules.append(None) if put_in_root and getattr(module, 'root_module', False): for shadow in shadow_modules: if module.root_module.unique_id == shadow.source_module_id: id_modules.append(shadow) for id_module in id_modules: for root_module in root_modules: menu_kwargs = {} suffix = "" if root_module: menu_kwargs.update({'root': id_strings.menu_id(root_module)}) suffix = id_strings.menu_id(root_module) if root_module.doc_type == 'ShadowModule' else "" menu_kwargs.update({'id': id_strings.menu_id(id_module, suffix)}) if supports_module_filter: menu_kwargs['relevant'] = interpolate_xpath(module.module_filter) if self.app.enable_localized_menu_media: menu_kwargs.update({ 'menu_locale_id': id_strings.module_locale(module), 'media_image': bool(len(module.all_image_paths())), 'media_audio': bool(len(module.all_audio_paths())), 'image_locale_id': id_strings.module_icon_locale(module), 'audio_locale_id': id_strings.module_audio_locale(module), }) menu = LocalizedMenu(**menu_kwargs) else: menu_kwargs.update({ 'locale_id': id_strings.module_locale(module), 'media_image': module.default_media_image, 'media_audio': module.default_media_audio, }) menu = Menu(**menu_kwargs) menu.commands.extend(get_commands()) menus.append(menu) if self.app.use_grid_menus: self._give_root_menus_grid_style(menus) return menus
def _create_custom_app_strings(app, lang, for_default=False): def trans(d): return clean_trans(d, langs) def maybe_add_index(text): if app.build_version >= '2.8': numeric_nav_on = app.profile.get('properties', {}).get('cc-entry-mode') == 'cc-entry-review' if app.profile.get('features', {}).get('sense') == 'true' or numeric_nav_on: text = "${0} %s" % (text,) if not (text and text[0].isdigit()) else text return text langs = [lang] + app.langs yield id_strings.homescreen_title(), app.name yield id_strings.app_display_name(), app.name yield 'cchq.case', "Case" yield 'cchq.referral', "Referral" # include language code names and current language for lc in app.langs: name = langcodes.get_name(lc) or lc if name: yield lc, name yield id_strings.current_language(), lang for module in app.get_modules(): for detail_type, detail, _ in module.get_details(): if detail_type.startswith('case'): label = trans(module.case_label) elif detail_type.startswith('referral'): label = trans(module.referral_label) elif detail_type in ('product_short', 'product_long'): label = '' else: label = None if label is not None: yield id_strings.detail_title_locale(module, detail_type), label for column in detail.get_columns(): if not is_sort_only_column(column): yield id_strings.detail_column_header_locale(module, detail_type, column), trans(column.header) if column.format in ('enum', 'enum-image'): for item in column.enum: yield id_strings.detail_column_enum_variable( module, detail_type, column, item.key_as_variable ), trans(item.value) elif column.format == "graph": for index, item in enumerate(column.graph_configuration.annotations): yield id_strings.graph_annotation(module, detail_type, column, index), trans(item.values) for property, values in column.graph_configuration.locale_specific_config.iteritems(): yield id_strings.graph_configuration(module, detail_type, column, property), trans(values) for index, item in enumerate(column.graph_configuration.series): for property, values in item.locale_specific_config.iteritems(): yield id_strings.graph_series_configuration( module, detail_type, column, index, property ), trans(values) for tab in detail.get_tabs(): yield id_strings.detail_tab_title_locale(module, detail_type, tab), trans(tab.header) yield id_strings.module_locale(module), maybe_add_index(trans(module.name)) icon = module.icon_app_string(lang, for_default=for_default) audio = module.audio_app_string(lang, for_default=for_default) if icon: yield id_strings.module_icon_locale(module), icon if audio: yield id_strings.module_audio_locale(module), audio if hasattr(module, 'report_configs'): yield id_strings.report_menu(), 'Reports' yield id_strings.report_name_header(), 'Report Name' yield id_strings.report_description_header(), 'Report Description' yield id_strings.report_last_sync(), 'Last Sync' yield id_strings.report_data_table(), 'Data Table' for config in module.report_configs: yield id_strings.report_command(config.uuid), trans(config.header) yield id_strings.report_name(config.uuid), trans(config.header) yield id_strings.report_description(config.uuid), trans(config.localized_description) for column in config.report.report_columns: yield ( id_strings.report_column_header(config.uuid, column.column_id), column.get_header(lang) ) if hasattr(module, 'case_list'): if module.case_list.show: yield id_strings.case_list_locale(module), trans(module.case_list.label) or "Case List" icon = module.case_list.icon_app_string(lang, for_default=for_default) audio = module.case_list.audio_app_string(lang, for_default=for_default) if icon: yield id_strings.case_list_icon_locale(module), icon if audio: yield id_strings.case_list_audio_locale(module), audio if hasattr(module, 'referral_list'): if module.referral_list.show: yield id_strings.referral_list_locale(module), trans(module.referral_list.label) for form in module.get_forms(): form_name = trans(form.name) + ('${0}' if form.show_count else '') yield id_strings.form_locale(form), maybe_add_index(form_name) icon = form.icon_app_string(lang, for_default=for_default) audio = form.audio_app_string(lang, for_default=for_default) if icon: yield id_strings.form_icon_locale(form), icon if audio: yield id_strings.form_audio_locale(form), audio if hasattr(module, 'case_list_form') and module.case_list_form.form_id: yield ( id_strings.case_list_form_locale(module), trans(module.case_list_form.label) or "Create a new Case" ) icon = module.case_list_form.icon_app_string(lang, for_default=for_default) audio = module.case_list_form.audio_app_string(lang, for_default=for_default) if icon: yield id_strings.case_list_form_icon_locale(module), icon if audio: yield id_strings.case_list_form_audio_locale(module), audio
def get_module_contributions(self, module): def get_commands(excluded_form_ids): @memoized def module_uses_case(): return module.all_forms_require_a_case() @memoized def domain_uses_usercase(): return is_usercase_in_use(self.app.domain) for form in module.get_suite_forms(): if form.unique_id in excluded_form_ids: continue command = Command(id=id_strings.form_command(form, module)) if form.requires_case(): form_datums = self.entries_helper.get_datums_meta_for_form_generic(form, module) var_name = next( meta.datum.id for meta in reversed(form_datums) if meta.action and meta.requires_selection ) case = CaseIDXPath(session_var(var_name)).case() else: case = None if getattr(form, 'form_filter', None): fixture_xpath = ( session_var(id_strings.fixture_session_var(module)) if module.fixture_select.active else None ) interpolated_xpath = interpolate_xpath(form.form_filter, case, fixture_xpath, module=module, form=form) if xpath_references_case(interpolated_xpath) and \ (not module_uses_case() or module.put_in_root): raise CaseXPathValidationError(module=module, form=form) if xpath_references_user_case(interpolated_xpath) and not domain_uses_usercase(): raise UserCaseXPathValidationError(module=module, form=form) command.relevant = interpolated_xpath if getattr(module, 'has_schedule', False) and module.all_forms_require_a_case(): # If there is a schedule and another filter condition, disregard it... # Other forms of filtering are disabled in the UI schedule_filter_condition = MenuContributor._schedule_filter_conditions(form, module, case) if schedule_filter_condition is not None: command.relevant = schedule_filter_condition yield command if hasattr(module, 'case_list') and module.case_list.show: yield Command(id=id_strings.case_list_command(module)) supports_module_filter = self.app.enable_module_filtering and getattr(module, 'module_filter', None) menus = [] if hasattr(module, 'get_menus'): for menu in module.get_menus(supports_module_filter=supports_module_filter): menus.append(menu) elif module.module_type != 'careplan': from corehq.apps.app_manager.models import ShadowModule id_modules = [module] root_modules = [] shadow_modules = [m for m in self.app.get_modules() if isinstance(m, ShadowModule) and m.source_module_id] put_in_root = getattr(module, 'put_in_root', False) if not put_in_root and getattr(module, 'root_module', False): root_modules.append(module.root_module) for shadow in shadow_modules: if module.root_module.unique_id == shadow.source_module_id: root_modules.append(shadow) else: root_modules.append(None) if put_in_root and getattr(module, 'root_module', False): for shadow in shadow_modules: if module.root_module.unique_id == shadow.source_module_id: id_modules.append(shadow) for id_module in id_modules: for root_module in root_modules: menu_kwargs = {} suffix = "" if root_module: menu_kwargs.update({'root': id_strings.menu_id(root_module)}) suffix = id_strings.menu_id(root_module) if isinstance(root_module, ShadowModule) else "" menu_kwargs.update({'id': id_strings.menu_id(id_module, suffix)}) if supports_module_filter: menu_kwargs['relevant'] = interpolate_xpath(module.module_filter) if self.app.enable_localized_menu_media: menu_kwargs.update({ 'menu_locale_id': id_strings.module_locale(module), 'media_image': bool(len(module.all_image_paths())), 'media_audio': bool(len(module.all_audio_paths())), 'image_locale_id': id_strings.module_icon_locale(module), 'audio_locale_id': id_strings.module_audio_locale(module), }) menu = LocalizedMenu(**menu_kwargs) else: menu_kwargs.update({ 'locale_id': id_strings.module_locale(module), 'media_image': module.default_media_image, 'media_audio': module.default_media_audio, }) menu = Menu(**menu_kwargs) excluded_form_ids = [] if root_module and isinstance(root_module, ShadowModule): excluded_form_ids = root_module.excluded_form_ids if id_module and isinstance(id_module, ShadowModule): excluded_form_ids = id_module.excluded_form_ids menu.commands.extend(get_commands(excluded_form_ids)) if len(menu.commands): menus.append(menu) if self.app.grid_display_for_all_modules() or \ self.app.grid_display_for_some_modules() and module.grid_display_style(): self._give_non_root_menus_grid_style(menus) if self.app.grid_menu_toggle_enabled() and self.app.use_grid_menus: self._give_root_menu_grid_style(menus) return menus
def get_module_locale_id(module): if not _module_uses_name_enum(module): return id_strings.module_locale(module)
def get_module_locale_id(module): if _should_use_root_display(module): module = module.root_module return id_strings.module_locale(module)
def _create_custom_app_strings(app, lang, for_default=False): def trans(d): return clean_trans(d, langs) def maybe_add_index(text): if app.build_version and app.build_version >= LooseVersion('2.8'): numeric_nav_on = app.profile.get('properties', {}).get('cc-entry-mode') == 'cc-entry-review' if app.profile.get('features', {}).get('sense') == 'true' or numeric_nav_on: text = "${0} %s" % (text,) if not (text and text[0].isdigit()) else text return text langs = [lang] + app.langs yield id_strings.homescreen_title(), app.name yield id_strings.app_display_name(), app.name for id, value in id_strings.REGEX_DEFAULT_VALUES.items(): yield id, value if for_default: # include language code names and current language for lc in app.langs: name = langcodes.get_name(lc) or lc if not name: continue with localize(convert_to_two_letter_code(lc)): name = ugettext(name) yield lc, name yield id_strings.current_language(), lang for module in app.get_modules(): for detail_type, detail, _ in module.get_details(): for column in detail.get_columns(): yield id_strings.detail_column_header_locale(module, detail_type, column), trans(column.header) if column.format in ('enum', 'enum-image', 'conditional-enum'): for item in column.enum: yield id_strings.detail_column_enum_variable( module, detail_type, column, item.key_as_variable ), trans(item.value) elif column.format == "graph": for index, item in enumerate(column.graph_configuration.annotations): yield id_strings.graph_annotation(module, detail_type, column, index), trans(item.values) for property, values in six.iteritems(column.graph_configuration.locale_specific_config): yield id_strings.graph_configuration(module, detail_type, column, property), trans(values) for index, item in enumerate(column.graph_configuration.series): for property, values in six.iteritems(item.locale_specific_config): yield id_strings.graph_series_configuration( module, detail_type, column, index, property ), trans(values) # To list app strings for properties used as sorting properties only if detail.sort_elements: sort_only, sort_columns = get_sort_and_sort_only_columns(detail, detail.sort_elements) for field, sort_element, order in sort_only: if sort_element.has_display_values(): column = create_temp_sort_column(sort_element, order) yield id_strings.detail_column_header_locale(module, detail_type, column), \ trans(column.header) for tab in detail.get_tabs(): yield id_strings.detail_tab_title_locale(module, detail_type, tab), trans(tab.header) if getattr(detail, 'lookup_display_results'): yield id_strings.callout_header_locale(module), trans(detail.lookup_field_header) yield id_strings.module_locale(module), maybe_add_index(trans(module.name)) icon = module.icon_app_string(lang, for_default=for_default) audio = module.audio_app_string(lang, for_default=for_default) custom_icon_form, custom_icon_text = module.custom_icon_form_and_text_by_language(lang) if icon: yield id_strings.module_icon_locale(module), icon if audio: yield id_strings.module_audio_locale(module), audio if custom_icon_form and custom_icon_text: yield _get_custom_icon_app_locale_and_value(custom_icon_form, custom_icon_text, module=module) if hasattr(module, 'report_configs'): for config in module.report_configs: yield id_strings.report_command(config.uuid), trans(config.header) yield id_strings.report_name(config.uuid), trans(config.header) yield id_strings.report_description(config.uuid), trans(config.localized_description) for column in config.report(app.domain).report_columns: yield ( id_strings.report_column_header(config.uuid, column.column_id), column.get_header(lang) ) for chart_id, graph_config in six.iteritems(config.complete_graph_configs): for index, item in enumerate(graph_config.annotations): yield id_strings.mobile_ucr_annotation(module, config.uuid, index), trans(item.values) for property, values in six.iteritems(graph_config.locale_specific_config): yield id_strings.mobile_ucr_configuration(module, config.uuid, property), trans(values) for index, item in enumerate(graph_config.series): for property, values in six.iteritems(item.locale_specific_config): yield id_strings.mobile_ucr_series_configuration( module, config.uuid, index, property ), trans(values) if hasattr(module, 'case_list'): if module.case_list.show: yield id_strings.case_list_locale(module), trans(module.case_list.label) or "Case List" icon = module.case_list.icon_app_string(lang, for_default=for_default) audio = module.case_list.audio_app_string(lang, for_default=for_default) if icon: yield id_strings.case_list_icon_locale(module), icon if audio: yield id_strings.case_list_audio_locale(module), audio if module_offers_search(module): yield id_strings.case_search_locale(module), trans(module.search_config.command_label) # icon and audio not yet available for prop in module.search_config.properties: yield id_strings.search_property_locale(module, prop.name), trans(prop.label) if hasattr(module, 'referral_list'): if module.referral_list.show: yield id_strings.referral_list_locale(module), trans(module.referral_list.label) for form in module.get_forms(): form_name = trans(form.name) + ('${0}' if form.show_count else '') yield id_strings.form_locale(form), maybe_add_index(form_name) icon = form.icon_app_string(lang, for_default=for_default) audio = form.audio_app_string(lang, for_default=for_default) custom_icon_form, custom_icon_text = form.custom_icon_form_and_text_by_language(lang) if icon: yield id_strings.form_icon_locale(form), icon if audio: yield id_strings.form_audio_locale(form), audio if custom_icon_form and custom_icon_text: yield _get_custom_icon_app_locale_and_value(custom_icon_form, custom_icon_text, form=form) for id, custom_assertion in enumerate(form.custom_assertions): yield id_strings.custom_assertion_locale(module, form, id), trans(custom_assertion.text) if hasattr(module, 'case_list_form') and module.case_list_form.form_id: yield ( id_strings.case_list_form_locale(module), trans(module.case_list_form.label) or "Create a new Case" ) icon = module.case_list_form.icon_app_string(lang, for_default=for_default) audio = module.case_list_form.audio_app_string(lang, for_default=for_default) if icon: yield id_strings.case_list_form_icon_locale(module), icon if audio: yield id_strings.case_list_form_audio_locale(module), audio
def _create_custom_app_strings(app, lang): def trans(d): return clean_trans(d, langs) def maybe_add_index(text): if app.build_version >= '2.8': numeric_nav_on = app.profile.get('properties', {}).get('cc-entry-mode') == 'cc-entry-review' if app.profile.get('features', {}).get('sense') == 'true' or numeric_nav_on: text = "${0} %s" % (text,) if not (text and text[0].isdigit()) else text return text langs = [lang] + app.langs yield id_strings.homescreen_title(), app.name yield id_strings.app_display_name(), app.name yield 'cchq.case', "Case" yield 'cchq.referral', "Referral" # include language code names for lc in app.langs: name = langcodes.get_name(lc) or lc if name: yield lc, name for module in app.get_modules(): for detail_type, detail, _ in module.get_details(): if detail_type.startswith('case'): label = trans(module.case_label) elif detail_type.startswith('referral'): label = trans(module.referral_label) elif detail_type in ('product_short', 'product_long'): label = '' else: label = None if label is not None: yield id_strings.detail_title_locale(module, detail_type), label for column in detail.get_columns(): if not is_sort_only_column(column): yield id_strings.detail_column_header_locale(module, detail_type, column), trans(column.header) if column.format in ('enum', 'enum-image'): for item in column.enum: yield id_strings.detail_column_enum_variable(module, detail_type, column, item.key_as_variable), trans(item.value) elif column.format == "graph": for index, item in enumerate(column.graph_configuration.annotations): yield id_strings.graph_annotation(module, detail_type, column, index), trans(item.values) for property, values in column.graph_configuration.locale_specific_config.iteritems(): yield id_strings.graph_configuration(module, detail_type, column, property), trans(values) for tab in detail.get_tabs(): yield id_strings.detail_tab_title_locale(module, detail_type, tab), trans(tab.header) yield id_strings.module_locale(module), maybe_add_index(trans(module.name)) if hasattr(module, 'report_configs'): for config in module.report_configs: yield id_strings.report_command(config.report_id), trans(config.header) yield id_strings.report_name(config.report_id), config.report.title yield id_strings.report_menu(), 'Reports' yield id_strings.report_name_header(), 'Report Name' yield id_strings.report_description_header(), 'Report Description' for column in config.report.report_columns: yield ( id_strings.report_column_header(config.report_id, column.column_id), column.get_header(lang) ) if hasattr(module, 'case_list'): if module.case_list.show: yield id_strings.case_list_locale(module), trans(module.case_list.label) or "Case List" if hasattr(module, 'referral_list'): if module.referral_list.show: yield id_strings.referral_list_locale(module), trans(module.referral_list.label) for form in module.get_forms(): form_name = trans(form.name) + ('${0}' if form.show_count else '') yield id_strings.form_locale(form), maybe_add_index(form_name) if hasattr(module, 'case_list_form') and module.case_list_form.form_id: yield ( id_strings.case_list_form_locale(module), trans(module.case_list_form.label) or "Create a new Case" )
def get_module_locale_id(module): if _should_use_root_display(module): module = module.root_module if not _module_uses_name_enum(module): return id_strings.module_locale(module)