def default_dashboard_url(request, domain): couch_user = getattr(request, 'couch_user', None) if domain in settings.CUSTOM_DASHBOARD_PAGE_URL_NAMES: return reverse(settings.CUSTOM_DASHBOARD_PAGE_URL_NAMES[domain], args=[domain]) if couch_user and not couch_user.has_permission(domain, 'access_all_locations'): if couch_user.has_permission(domain, 'view_reports'): return reverse(CaseExportListView.urlname, args=[domain]) else: if can_view_case_exports(couch_user, domain): return reverse(CaseExportListView.urlname, args=[domain]) elif can_view_form_exports(couch_user, domain): return reverse(FormExportListView.urlname, args=[domain]) return reverse(LocationsListView.urlname, args=[domain]) if couch_user and user_has_custom_top_menu(domain, couch_user): return reverse('saved_reports', args=[domain]) if not domain_has_apps(domain): return reverse('default_app', args=[domain]) return reverse(DomainDashboardView.urlname, args=[domain])
def confirm_domain(request, guid=''): with CriticalSection('confirm_domain_' + guid): error = None # Did we get a guid? if not guid: error = _('An account activation key was not provided. If you think this ' 'is an error, please contact the system administrator.') # Does guid exist in the system? else: req = RegistrationRequest.get_by_guid(guid) if not req: error = _('The account activation key "%s" provided is invalid. If you ' 'think this is an error, please contact the system ' 'administrator.') % guid if error is not None: context = { 'message_body': error, 'current_page': {'page_name': 'Account Not Activated'}, } return render(request, 'registration/confirmation_error.html', context) requested_domain = Domain.get_by_name(req.domain) view_name = "dashboard_default" view_args = [requested_domain] if not domain_has_apps(req.domain): if ab_tests.appcues_template_app_test(request): view_name = "app_from_template" view_args.append("appcues") else: view_name = "default_new_app" # Has guid already been confirmed? if requested_domain.is_active: assert(req.confirm_time is not None and req.confirm_ip is not None) messages.success(request, 'Your account %s has already been activated. ' 'No further validation is required.' % req.new_user_username) return HttpResponseRedirect(reverse(view_name, args=view_args)) # Set confirm time and IP; activate domain and new user who is in the req.confirm_time = datetime.utcnow() req.confirm_ip = get_ip(request) req.save() requested_domain.is_active = True requested_domain.save() requesting_user = WebUser.get_by_username(req.new_user_username) send_new_request_update_email(requesting_user, get_ip(request), requested_domain.name, is_confirming=True) messages.success(request, 'Your account has been successfully activated. Thank you for taking ' 'the time to confirm your email address: %s.' % (requesting_user.username)) track_workflow(requesting_user.email, "Confirmed new project") track_confirmed_account_on_hubspot_v2.delay(requesting_user) request.session['CONFIRM'] = True return HttpResponseRedirect(reverse(view_name, args=view_args))
def dashboard_default(request, domain): couch_user = getattr(request, 'couch_user', None) if couch_user and user_has_custom_top_menu(domain, couch_user): return HttpResponseRedirect(reverse('saved_reports', args=[domain])) if not domain_has_apps(domain): return HttpResponseRedirect(reverse('default_app', args=[domain])) return HttpResponseRedirect( reverse(DomainDashboardView.urlname, args=[domain]))
def default_dashboard_url(request, domain): couch_user = getattr(request, 'couch_user', None) if couch_user and user_has_custom_top_menu(domain, couch_user): return reverse('saved_reports', args=[domain]) if not domain_has_apps(domain): return reverse('default_app', args=[domain]) return reverse(DomainDashboardView.urlname, args=[domain])
def page_context(self): return { "has_apps": domain_has_apps(self.domain), "report": { "title": _("Create New Report") }, "tiles": [{ 'title': tile.title, 'slug': tile.slug, 'ng_directive': tile.ng_directive, } for tile in self.tiles], }
def default_dashboard_url(request, domain): couch_user = getattr(request, 'couch_user', None) if domain in settings.CUSTOM_DASHBOARD_PAGE_URL_NAMES: return reverse(settings.CUSTOM_DASHBOARD_PAGE_URL_NAMES[domain], args=[domain]) if couch_user and user_has_custom_top_menu(domain, couch_user): return reverse('saved_reports', args=[domain]) if not domain_has_apps(domain): return reverse('default_app', args=[domain]) return reverse(DomainDashboardView.urlname, args=[domain])
def page_context(self): return { "has_apps": domain_has_apps(self.domain), "report": { "title": _("Create New Report") }, "tiles": [{ 'title': tile.title, 'slug': tile.slug, 'ng_directive': tile.ng_directive, } for tile in self.tiles], }
def default_dashboard_url(request, domain): couch_user = getattr(request, 'couch_user', None) if domain in settings.CUSTOM_DASHBOARD_PAGE_URL_NAMES: return reverse(settings.CUSTOM_DASHBOARD_PAGE_URL_NAMES[domain], args=[domain]) if couch_user and user_has_custom_top_menu(domain, couch_user): return reverse('saved_reports', args=[domain]) if not domain_has_apps(domain): return reverse('default_app', args=[domain]) return reverse(DomainDashboardView.urlname, args=[domain])
def test_domain_has_apps(self): self.assertEqual(domain_has_apps(self.domain), True) self.assertEqual(domain_has_apps('somecrazydomainthathasnoapps'), False)
def confirm_domain(request, guid=''): with CriticalSection(['confirm_domain_' + guid]): error = None # Did we get a guid? if not guid: error = _('An account activation key was not provided. If you think this ' 'is an error, please contact the system administrator.') # Does guid exist in the system? else: req = RegistrationRequest.get_by_guid(guid) if not req: error = _('The account activation key "%s" provided is invalid. If you ' 'think this is an error, please contact the system ' 'administrator.') % guid if error is not None: context = { 'message_body': error, 'current_page': {'page_name': 'Account Not Activated'}, } return render(request, 'registration/confirmation_error.html', context) requested_domain = Domain.get_by_name(req.domain) view_name = "dashboard_default" view_args = [requested_domain.name] if not domain_has_apps(req.domain): if False and settings.IS_SAAS_ENVIRONMENT and domain_is_on_trial(req.domain): view_name = "app_from_template" view_args.append("appcues") else: view_name = "default_new_app" # Has guid already been confirmed? if requested_domain.is_active: assert(req.confirm_time is not None and req.confirm_ip is not None) messages.success(request, 'Your account %s has already been activated. ' 'No further validation is required.' % req.new_user_username) return HttpResponseRedirect(reverse(view_name, args=view_args)) # Set confirm time and IP; activate domain and new user who is in the req.confirm_time = datetime.utcnow() req.confirm_ip = get_ip(request) req.save() requested_domain.is_active = True requested_domain.save() requesting_user = WebUser.get_by_username(req.new_user_username) send_new_request_update_email(requesting_user, get_ip(request), requested_domain.name, is_confirming=True) messages.success(request, 'Your account has been successfully activated. Thank you for taking ' 'the time to confirm your email address: %s.' % (requesting_user.username)) track_workflow(requesting_user.email, "Confirmed new project") track_confirmed_account_on_hubspot_v2.delay(requesting_user) request.session['CONFIRM'] = True if settings.IS_SAAS_ENVIRONMENT: # For AppCues v3, land new user in Web Apps view_name = get_cloudcare_urlname(requested_domain.name) return HttpResponseRedirect(reverse(view_name, args=view_args))
def _get_default_tiles(request): can_edit_data = lambda request: (request.couch_user.can_edit_data() or request.couch_user.can_access_any_exports()) can_edit_apps = lambda request: (request.couch_user.is_web_user() or request.couch_user.can_edit_apps()) can_view_reports = lambda request: user_can_view_reports(request.project, request.couch_user) can_edit_users = lambda request: (request.couch_user.can_edit_commcare_users() or request.couch_user.can_edit_web_users()) def can_edit_locations_not_users(request): if not has_privilege(request, privileges.LOCATIONS): return False user = request.couch_user return not can_edit_users(request) and ( user.can_edit_locations() or user_can_edit_location_types(user, request.domain) ) can_view_commtrack_setup = lambda request: (request.project.commtrack_enabled) def can_view_exchange(request): return ( can_edit_apps(request) and not settings.ENTERPRISE_MODE and not get_domain_master_link(request.domain) # this isn't a linked domain ) def _can_access_sms(request): return has_privilege(request, privileges.OUTBOUND_SMS) def _can_access_reminders(request): return has_privilege(request, privileges.REMINDERS_FRAMEWORK) can_use_messaging = lambda request: ( (_can_access_reminders(request) or _can_access_sms(request)) and not request.couch_user.is_commcare_user() and request.couch_user.can_edit_data() ) is_billing_admin = lambda request: request.couch_user.can_edit_billing() apps_link = lambda urlname, req: ( '' if domain_has_apps(request.domain) else reverse(urlname, args=[request.domain]) ) commcare_name = commcare_hq_names(request)['commcare_hq_names']['COMMCARE_NAME'] return [ Tile( request, title=_('Applications'), slug='applications', icon='fcc fcc-applications', paginator_class=AppsPaginator, visibility_check=can_edit_apps, urlname='default_new_app', url_generator=apps_link, help_text=_('Build, update, and deploy applications'), ), Tile( request, title=_('Reports'), slug='reports', icon='fcc fcc-reports', paginator_class=ReportsPaginator, urlname='reports_home', visibility_check=can_view_reports, help_text=_('View worker monitoring reports and inspect project data'), ), Tile( request, title=_('{cc_name} Supply Setup').format(cc_name=commcare_name), slug='commtrack_setup', icon='fcc fcc-commtrack', urlname='default_commtrack_setup', visibility_check=can_view_commtrack_setup, help_text=_("Update {cc_name} Supply Settings").format(cc_name=commcare_name), ), Tile( request, title=_('Data'), slug='data', icon='fcc fcc-data', paginator_class=DataPaginator, urlname="data_interfaces_default", visibility_check=can_edit_data, help_text=_('Export and manage data'), ), Tile( request, title=_('Users'), slug='users', icon='fcc fcc-users', urlname=DefaultProjectUserSettingsView.urlname, visibility_check=can_edit_users, help_text=_('Manage accounts for mobile workers and CommCareHQ users'), ), Tile( request, title=_('Organization'), slug='locations', icon='fcc fcc-users', urlname='default_locations_view', visibility_check=can_edit_locations_not_users, help_text=_('Manage the Organization Hierarchy'), ), Tile( request, title=_('Messaging'), slug='messaging', icon='fcc fcc-messaging', urlname='sms_default', visibility_check=can_use_messaging, help_text=_('Configure and schedule SMS messages and keywords'), ), Tile( request, title=_('Exchange'), slug='exchange', icon='fcc fcc-exchange', urlname='appstore', visibility_check=can_view_exchange, url_generator=lambda urlname, req: reverse(urlname), help_text=_('Download and share CommCare applications with other users around the world'), ), Tile( request, title=_('Settings'), slug='settings', icon='fcc fcc-settings', urlname=DefaultProjectSettingsView.urlname, visibility_check=is_billing_admin, help_text=_('Set project-wide settings and manage subscriptions'), ), Tile( request, title=_('Help Site'), slug='help', icon='fcc fcc-help', url='http://help.commcarehq.org/', help_text=_("Visit CommCare's knowledge base"), ), ]
def has_app(domain, *args): return domain_has_apps(domain)
def has_app(domain, *args): return domain_has_apps(domain)
def test_domain_has_apps(self): self.assertEqual(domain_has_apps(self.domain), True) self.assertEqual(domain_has_apps("somecrazydomainthathasnoapps"), False)
def _get_default_tiles(request): can_edit_data = lambda request: (request.couch_user.can_edit_data() or request.couch_user.can_access_any_exports()) can_edit_apps = lambda request: (request.couch_user.is_web_user() or request.couch_user.can_edit_apps()) can_view_reports = lambda request: user_can_view_reports(request.project, request.couch_user) can_edit_users = lambda request: (request.couch_user.can_edit_commcare_users() or request.couch_user.can_edit_web_users()) def can_edit_locations_not_users(request): if not has_privilege(request, privileges.LOCATIONS): return False user = request.couch_user return not can_edit_users(request) and ( user.can_edit_locations() or user_can_edit_location_types(user, request.domain) ) can_view_commtrack_setup = lambda request: (request.project.commtrack_enabled) def can_view_exchange(request): return ( can_edit_apps(request) and not settings.ENTERPRISE_MODE and not get_domain_master_link(request.domain) # this isn't a linked domain ) def _can_access_sms(request): return has_privilege(request, privileges.OUTBOUND_SMS) def _can_access_reminders(request): return has_privilege(request, privileges.REMINDERS_FRAMEWORK) can_use_messaging = lambda request: ( (_can_access_reminders(request) or _can_access_sms(request)) and not request.couch_user.is_commcare_user() and request.couch_user.can_edit_data() ) is_billing_admin = lambda request: request.couch_user.can_edit_billing() apps_link = lambda urlname, req: ( '' if domain_has_apps(request.domain) else reverse(urlname, args=[request.domain]) ) commcare_name = commcare_hq_names(request)['commcare_hq_names']['COMMCARE_NAME'] return [ Tile( request, title=_('Applications'), slug='applications', icon='fcc fcc-applications', paginator_class=AppsPaginator, visibility_check=can_edit_apps, urlname='default_new_app', url_generator=apps_link, help_text=_('Build, update, and deploy applications'), ), Tile( request, title=_('Reports'), slug='reports', icon='fcc fcc-reports', paginator_class=ReportsPaginator, urlname='reports_home', visibility_check=can_view_reports, help_text=_('View worker monitoring reports and inspect project data'), ), Tile( request, title=_('{cc_name} Supply Setup').format(cc_name=commcare_name), slug='commtrack_setup', icon='fcc fcc-commtrack', urlname='default_commtrack_setup', visibility_check=can_view_commtrack_setup, help_text=_("Update {cc_name} Supply Settings").format(cc_name=commcare_name), ), Tile( request, title=_('Data'), slug='data', icon='fcc fcc-data', paginator_class=DataPaginator, urlname="data_interfaces_default", visibility_check=can_edit_data, help_text=_('Export and manage data'), ), Tile( request, title=_('Users'), slug='users', icon='fcc fcc-users', urlname=DefaultProjectUserSettingsView.urlname, visibility_check=can_edit_users, help_text=_('Manage accounts for mobile workers and CommCareHQ users'), ), Tile( request, title=_('Organization'), slug='locations', icon='fcc fcc-users', urlname='default_locations_view', visibility_check=can_edit_locations_not_users, help_text=_('Manage the Organization Hierarchy'), ), Tile( request, title=_('Messaging'), slug='messaging', icon='fcc fcc-messaging', urlname='sms_default', visibility_check=can_use_messaging, help_text=_('Configure and schedule SMS messages and keywords'), ), Tile( request, title=_('Exchange'), slug='exchange', icon='fcc fcc-exchange', urlname='appstore', visibility_check=can_view_exchange, url_generator=lambda urlname, req: reverse(urlname), help_text=_('Download and share CommCare applications with other users around the world'), ), Tile( request, title=_('Settings'), slug='settings', icon='fcc fcc-settings', urlname=DefaultProjectSettingsView.urlname, visibility_check=is_billing_admin, help_text=_('Set project-wide settings and manage subscriptions'), ), Tile( request, title=_('Help Site'), slug='help', icon='fcc fcc-help', url='http://help.commcarehq.org/', help_text=_("Visit CommCare's knowledge base"), ), ]