示例#1
0
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])
示例#2
0
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))
示例#3
0
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]))
示例#4
0
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])
示例#5
0
 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],
     }
示例#6
0
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])
示例#7
0
 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],
     }
示例#8
0
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)
示例#10
0
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))
示例#11
0
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"),
        ),
    ]
示例#12
0
def has_app(domain, *args):
    return domain_has_apps(domain)
示例#13
0
def has_app(domain, *args):
    return domain_has_apps(domain)
示例#14
0
 def test_domain_has_apps(self):
     self.assertEqual(domain_has_apps(self.domain), True)
     self.assertEqual(domain_has_apps("somecrazydomainthathasnoapps"), False)
示例#15
0
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"),
        ),
    ]