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")
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')
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
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 "")
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
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
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
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
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
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 []
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
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 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')