Esempio n. 1
0
    def test_home_page_for_role(self):
        frappe.delete_doc_if_exists("User",
                                    "*****@*****.**")
        frappe.delete_doc_if_exists("Role", "home-page-test")
        frappe.delete_doc_if_exists("Web Page", "home-page-test")
        user = frappe.get_doc(
            dict(doctype="User",
                 email="*****@*****.**",
                 first_name="test")).insert(ignore_if_duplicate=True)
        user.reload()

        role = frappe.get_doc(
            dict(doctype="Role",
                 role_name="home-page-test",
                 desk_access=0,
                 home_page="/home-page-test")).insert()

        user.add_roles(role.name)
        user.save()

        frappe.set_user("*****@*****.**")
        self.assertEqual(get_home_page(), "home-page-test")

        frappe.set_user("Administrator")
        role.home_page = ""
        role.save()

        # home page via portal settings
        frappe.db.set_value("Portal Settings", None, "default_portal_home",
                            "test-portal-home")

        frappe.set_user("*****@*****.**")
        frappe.cache().hdel("home_page", frappe.session.user)
        self.assertEqual(get_home_page(), "test-portal-home")
Esempio n. 2
0
    def test_home_page_for_role(self):
        frappe.delete_doc_if_exists('User',
                                    '*****@*****.**')
        frappe.delete_doc_if_exists('Role', 'home-page-test')
        frappe.delete_doc_if_exists('Web Page', 'home-page-test')
        user = frappe.get_doc(
            dict(doctype='User',
                 email='*****@*****.**',
                 first_name='test')).insert()

        role = frappe.get_doc(
            dict(doctype='Role',
                 role_name='home-page-test',
                 desk_access=0,
                 home_page='/home-page-test')).insert()

        user.add_roles(role.name)
        user.save()

        frappe.set_user('*****@*****.**')
        self.assertEqual(get_home_page(), 'home-page-test')

        frappe.set_user('Administrator')
        role.home_page = ''
        role.save()

        # home page via portal settings
        frappe.db.set_value('Portal Settings', None, 'default_portal_home',
                            'test-portal-home')

        frappe.set_user('*****@*****.**')
        frappe.cache().hdel('home_page', frappe.session.user)
        self.assertEqual(get_home_page(), 'test-portal-home')
Esempio n. 3
0
def get_route_children(pathname, home_page=None):
    if not home_page:
        home_page = get_home_page()

    if pathname == home_page or not pathname:
        children = frappe.db.sql("""select url as name, label as page_title,
			1 as public_read from `tabTop Bar Item` where parentfield='sidebar_items'
			order by idx""",
                                 as_dict=True)
    else:
        children = frappe.db.sql("""select * from `tabWebsite Route`
			where ifnull(parent_website_route,'')=%s
			and public_read=1
			order by idx, page_title asc""",
                                 pathname,
                                 as_dict=True)

        if children:
            # if children are from generator and sort order is specified, then get that condition
            module = frappe.get_module(children[0].controller)
            if hasattr(module, "order_by"):
                children = frappe.db.sql("""select t1.* from
					`tabWebsite Route` t1, `tab{ref_doctype}` t2
					where ifnull(t1.parent_website_route,'')=%s
					and t1.public_read=1
					and t1.docname = t2.name
					order by {order_by}""".format(ref_doctype=children[0].ref_doctype,
                                   order_by=module.order_by),
                                         pathname,
                                         as_dict=True)

            children = [frappe.get_doc("Website Route", pathname)] + children

    return children
Esempio n. 4
0
	def set_user_info(self, resume=False):
		# set sid again
		frappe.local.cookie_manager.init_cookies()
		frappe.response["csrf_token"] = frappe.generate_hash()
		self.full_name = " ".join(filter(None, [self.info.first_name,
			self.info.last_name]))

		if self.info.user_type=="Website User":
			frappe.local.cookie_manager.set_cookie("system_user", "no")
			if not resume:
				frappe.local.response["message"] = "No App"
				frappe.local.response["home_page"] = '/' + get_home_page()
		else:
			frappe.local.cookie_manager.set_cookie("system_user", "yes")
			if not resume:
				frappe.local.response['message'] = 'Logged In'
				frappe.local.response["home_page"] = "/desk"

		if not resume:
			frappe.response["full_name"] = self.full_name

		# redirect information
		redirect_to = frappe.cache().hget('redirect_after_login', self.user)
		if redirect_to:
			frappe.local.response["redirect_to"] = redirect_to
			frappe.cache().hdel('redirect_after_login', self.user)


		frappe.local.cookie_manager.set_cookie("full_name", self.full_name)
		frappe.local.cookie_manager.set_cookie("user_id", self.user)
		frappe.local.cookie_manager.set_cookie("user_image", self.info.user_image or "")
Esempio n. 5
0
def get_route_children(pathname, home_page=None):
	if not home_page:
		home_page = get_home_page()

	if pathname==home_page or not pathname:
		children = frappe.db.sql("""select url as name, label as page_title,
			1 as public_read from `tabTop Bar Item` where parentfield='sidebar_items' order by idx""",
			as_dict=True)
	else:
		children = frappe.db.sql("""select * from `tabWebsite Route`
			where ifnull(parent_website_route,'')=%s
			and public_read=1
			order by idx, page_title asc""", pathname, as_dict=True)

		if children:
			# if children are from generator and sort order is specified, then get that condition
			website_template = frappe.get_doc("Website Template", children[0].website_template)
			if website_template.sort_by!="name":
				children = frappe.db.sql("""select t1.* from
					`tabWebsite Route` t1, `tab{ref_doctype}` t2
					where ifnull(t1.parent_website_route,'')=%s
					and t1.public_read=1
					and t1.docname = t2.name
					order by t2.{sort_by} {sort_order}""".format(**website_template.as_dict()),
						pathname, as_dict=True)

			children = [frappe.get_doc("Website Route", pathname)] + children

	return children
Esempio n. 6
0
def build_sitemap_options(path):
	sitemap_options = frappe._dict(frappe.get_doc("Website Route", path).as_dict())
	home_page = get_home_page()

	sitemap_config = frappe.get_doc("Website Template",
		sitemap_options.get("website_template")).as_dict()

	# get sitemap config fields too
	for fieldname in ("base_template_path", "template_path", "controller",
		"no_cache", "no_sitemap", "page_name_field", "condition_field"):
		sitemap_options[fieldname] = sitemap_config.get(fieldname)

	sitemap_options.doctype = sitemap_options.ref_doctype
	sitemap_options.title = sitemap_options.page_title
	sitemap_options.pathname = sitemap_options.name

	# establish hierarchy
	sitemap_options.parents = frappe.db.sql("""select name, page_title from `tabWebsite Route`
		where lft < %s and rgt > %s order by lft asc""", (sitemap_options.lft, sitemap_options.rgt), as_dict=True)

	if not sitemap_options.no_sidebar:
		sitemap_options.children = get_route_children(sitemap_options.pathname, home_page)

		if not sitemap_options.children and sitemap_options.parent_website_route \
			and sitemap_options.parent_website_route!=home_page:
			sitemap_options.children = get_route_children(sitemap_options.parent_website_route, home_page)

	# determine templates to be used
	if not sitemap_options.base_template_path:
		app_base = frappe.get_hooks("base_template")
		sitemap_options.base_template_path = app_base[0] if app_base else "templates/base.html"

	return sitemap_options
Esempio n. 7
0
def get_context(context):
	redirect_to = frappe.local.request.args.get("redirect-to")

	if frappe.session.user != "Guest":
		if not redirect_to:
			if frappe.session.data.user_type=="Website User":
				redirect_to = get_home_page()
			else:
				redirect_to = "/app"

		if redirect_to != 'login':
			frappe.local.flags.redirect_location = redirect_to
			raise frappe.Redirect

	# get settings from site config
	context.no_header = True
	context.for_test = 'login.html'
	context["title"] = "Login"
	context["provider_logins"] = []
	context["disable_signup"] = frappe.utils.cint(frappe.db.get_value("Website Settings", "Website Settings", "disable_signup"))
	context["logo"] = frappe.get_hooks("app_logo_url")[-1]
	context["app_name"] = frappe.get_system_settings("app_name") or _("Frappe")
	providers = [i.name for i in frappe.get_all("Social Login Key", filters={"enable_social_login":1}, order_by="name")]
	for provider in providers:
		client_id, base_url = frappe.get_value("Social Login Key", provider, ["client_id", "base_url"])
		client_secret = get_decrypted_password("Social Login Key", provider, "client_secret")
		provider_name = frappe.get_value("Social Login Key", provider, "provider_name")

		icon = None
		icon_url = frappe.get_value("Social Login Key", provider, "icon")
		if icon_url:
			if provider_name != "Custom":
				icon = "<img src='{0}' alt={1}>".format(icon_url, provider_name)
			else:
				icon = get_icon_html(icon_url, small=True)

		if (get_oauth_keys(provider) and client_secret and client_id and base_url):
			context.provider_logins.append({
				"name": provider,
				"provider_name": provider_name,
				"auth_url": get_oauth2_authorize_url(provider, redirect_to),
				"icon": icon
			})
			context["social_login"] = True
	ldap_settings = LDAPSettings.get_ldap_client_settings()
	context["ldap_settings"] = ldap_settings

	login_label = [_("Email")]

	if frappe.utils.cint(frappe.get_system_settings("allow_login_using_mobile_number")):
		login_label.append(_("Mobile"))

	if frappe.utils.cint(frappe.get_system_settings("allow_login_using_user_name")):
		login_label.append(_("Username"))

	context['login_label'] = ' {0} '.format(_('or')).join(login_label)

	return context
Esempio n. 8
0
    def get_parents(self, context):
        # already set
        if context.parents:
            return context.parents

        home_page = get_home_page()

        parents = []
        me = self
        while me:
            _parent_field = me.website.parent_website_route_field
            _parent_val = me.get(_parent_field) if _parent_field else None

            # if no parent and not home page, then parent is home page
            if not _parent_val and me.get_route() != home_page:
                parents.append(
                    frappe._dict(name=home_page,
                                 title=get_route_info(home_page).title))
                break

            elif _parent_val:
                df = me.meta.get_field(_parent_field)
                if not df:
                    break
                parent_doc = frappe.get_doc(df.options, _parent_val)

                if not parent_doc.website_published():
                    break

                if parent_doc:
                    parent_info = frappe._dict(
                        name=parent_doc.get_route(),
                        title=parent_doc.get(
                            parent_doc.website.page_title_field or "name"))
                else:
                    parent_info = frappe._dict(
                        name=self.parent_website_route,
                        title=self.parent_website_route.replace("_",
                                                                " ").title())

                if parent_info.name in [p.name for p in parents]:
                    raise frappe.ValidationError, "Recursion in parent link"

                parents.append(parent_info)
                me = parent_doc
            else:
                # parent route is a page e.g. "blog"
                if me.get("parent_website_route"):
                    page_route = get_page_route(me.parent_website_route)
                    if page_route:
                        parents.append(
                            frappe._dict(name=page_route.name,
                                         title=page_route.page_title))
                me = None

        parents.reverse()
        return parents
Esempio n. 9
0
def resolve_path(path):
	if not path:
		path = "index"

	if path.endswith('.html'):
		path = path[:-5]

	if path == "index":
		path = get_home_page()

	return path
Esempio n. 10
0
def resolve_path(path):
    if not path:
        path = "index"

    if path.endswith('.html'):
        path = path[:-5]

    if path == "index":
        path = get_home_page()

    return path
	def get_parents(self, context):
		# already set
		if context.parents:
			return context.parents

		home_page = get_home_page()

		parents = []
		me = self
		while me:
			_parent_field = me.website.parent_website_route_field
			_parent_val = me.get(_parent_field) if _parent_field else None

			# if no parent and not home page, then parent is home page
			if not _parent_val and me.get_route() != home_page:
				# parents.append(frappe._dict(name=home_page, title=get_page_context(home_page).title))
				break

			elif _parent_val:
				df = me.meta.get_field(_parent_field)
				if not df:
					break
				parent_doc = frappe.get_doc(df.options, _parent_val)

				if not parent_doc.website_published():
					break

				if parent_doc:
					parent_info = frappe._dict(name = parent_doc.get_route(),
						title= parent_doc.get(parent_doc.website.page_title_field or "name"))
				else:
					parent_info = frappe._dict(name=self.parent_website_route,
						title=self.parent_website_route.replace("_", " ").title())

				if parent_info.name in [p.name for p in parents]:
					raise frappe.ValidationError, "Recursion in parent link"

				parents.append(parent_info)
				me = parent_doc
			else:
				# parent route is a page e.g. "blog"
				if me.get("parent_website_route"):
					page_route = get_page_context_from_template(me.parent_website_route)
					if page_route:
						parents.append(frappe._dict(name = page_route.name,
							title=page_route.page_title))
				me = None

		parents.reverse()
		return parents
Esempio n. 12
0
	def get_children(self):
		if self.get_route()==get_home_page():
			return frappe.db.sql("""select url as name, label as page_title,
			1 as public_read from `tabTop Bar Item` where parentfield='sidebar_items'
			order by idx""", as_dict=True)

		if self.meta.get_field("parent_website_route"):
			children = self.get_children_of(self.get_route())

			if not children and self.parent_website_route:
				children = self.get_children_of(self.parent_website_route)

			return children
		else:
			return []
Esempio n. 13
0
	def get_children(self):
		if self.get_route()==get_home_page():
			return frappe.db.sql("""select url as name, label as page_title,
			1 as public_read from `tabTop Bar Item` where parentfield='sidebar_items'
			order by idx""", as_dict=True)

		if self.meta.get_field("parent_website_route"):
			children = self.get_children_of(self.get_route())

			if not children and self.parent_website_route:
				children = self.get_children_of(self.parent_website_route)

			return children
		else:
			return []
Esempio n. 14
0
def resolve_path(path):
	if not path:
		path = "index"

	if path.endswith('.html'):
		path = path[:-5]

	if path == "index":
		path = get_home_page()

	frappe.local.path = path

	if path != "index":
		path = resolve_from_map(path)

	return path
Esempio n. 15
0
def resolve_path(path):
    if not path:
        path = "index"

    if path.endswith('.html'):
        path = path[:-5]

    if path == "index":
        path = get_home_page()

    frappe.local.path = path

    if path != "index":
        path = resolve_from_map(path)

    return path
Esempio n. 16
0
	def get_children(self, context=None):
		children = []
		route = self.get_route()
		if route==get_home_page():
			children = frappe.db.sql("""select url as name, label as page_title
				from `tabTop Bar Item` where parentfield='sidebar_items'
			order by idx""", as_dict=True)
			route = ""

		if not children and self.meta.get_field("parent_website_route"):
			children = self.get_children_of(route)

			if not children and self.parent_website_route:
				children = self.get_children_of(self.parent_website_route)

		return children
	def get_children(self, context=None):
		children = []
		route = self.get_route()
		if route==get_home_page():
			children = frappe.db.sql("""select url as name, label as page_title
				from `tabTop Bar Item` where parentfield='sidebar_items'
			order by idx""", as_dict=True)
			route = ""

		if not children and self.meta.get_field("parent_website_route"):
			children = self.get_children_of(route)

			if not children and self.parent_website_route:
				children = self.get_children_of(self.parent_website_route)

		return children
Esempio n. 18
0
	def test_home_page(self):
		frappe.set_user('Administrator')
		# test home page via role
		user = frappe.get_doc(dict(
			doctype='User',
			email='*****@*****.**',
			first_name='test')).insert(ignore_if_duplicate=True)

		role = frappe.get_doc(dict(
			doctype = 'Role',
			role_name = 'home-page-test',
			desk_access = 0,
		)).insert(ignore_if_duplicate=True)

		user.add_roles(role.name)
		user.save()

		frappe.db.set_value('Role', 'home-page-test', 'home_page', 'home-page-test')
		frappe.set_user('*****@*****.**')
		self.assertEqual(get_home_page(), 'home-page-test')

		frappe.set_user('Administrator')
		frappe.db.set_value('Role', 'home-page-test', 'home_page', '')

		# home page via portal settings
		frappe.db.set_value('Portal Settings', None, 'default_portal_home', 'test-portal-home')

		frappe.set_user('*****@*****.**')
		frappe.cache().hdel('home_page', frappe.session.user)
		self.assertEqual(get_home_page(), 'test-portal-home')

		frappe.db.set_value("Portal Settings", None, "default_portal_home", '')
		clear_website_cache()

		# home page via website settings
		frappe.db.set_value("Website Settings", None, "home_page", 'contact')
		self.assertEqual(get_home_page(), 'contact')

		frappe.db.set_value("Website Settings", None, "home_page", None)
		clear_website_cache()

		# fallback homepage
		self.assertEqual(get_home_page(), 'me')

		# fallback homepage for guest
		frappe.set_user('Guest')
		self.assertEqual(get_home_page(), 'login')
		frappe.set_user('Administrator')

		# test homepage via hooks
		clear_website_cache()
		set_home_page_hook('get_website_user_home_page', 'frappe.www._test._test_home_page.get_website_user_home_page')
		self.assertEqual(get_home_page(), '_test/_test_folder')

		clear_website_cache()
		set_home_page_hook('website_user_home_page', 'login')
		self.assertEqual(get_home_page(), 'login')

		clear_website_cache()
		set_home_page_hook('home_page', 'about')
		self.assertEqual(get_home_page(), 'about')

		clear_website_cache()
		set_home_page_hook('role_home_page', {'home-page-test': 'home-page-test'})
		self.assertEqual(get_home_page(), 'home-page-test')