From cf656377efa56fa7cbf50978a756e0e2c0ccb764 Mon Sep 17 00:00:00 2001 From: metatroncubeswdev Date: Sat, 12 Sep 2026 00:53:31 -0400 Subject: [PATCH] O9: align Admissions, Contact Us and Login with the homepage design, real Metatroncube logo/favicon, and a chain of placeholder-content leaks found underneath Per discussion: the marketing homepage looked polished but the rest of the public site (the admission form, contact us, the backend login screen) was still bare stock Odoo, and the site nav still showed stock Odoo's own default logo/favicon rather than Metatroncube's real ones. This brings the same design system (Manrope + Work Sans, the navy/indigo palette) to all three pages and wires up the two supplied brand assets - static/img/logo.png (the wordmark, used as website.logo, so it renders in every page's nav automatically) and static/img/favicon.png (the cube mark, website.favicon). Loaded via a post_init_hook (hooks.py) rather than a plain : website's two stock demo sites (website.default_website, website.website2) are both noupdate=True, and Python is the tool that isn't gated by that the way a / tag would be on an already-installed database (see hooks.py's own docstring for the exact mechanism and its fresh-install-only limitation). Admissions keeps its exact form markup/field names/model untouched - only the surrounding hero and "what happens next" strip are new, added via position="before"/"after" around the existing
so the stock s_website_form JS widget this page depends on is never touched. Restyling contact us and the login screen surfaced a chain of real, separate placeholder-content bugs, each found by looking at the next page down rather than assuming the previous fix was complete: 1. website.contactus's sidebar hardcodes "My Company" and a fake US street address - shared/DEMO_SCRIPT.md explicitly bans placeholder content, and it had been live here the whole time. Reading res_company fields instead means it shows whichever school is actually active, same as the admission form's own live program list. 2. website.footer_custom - the footer on EVERY page, not just contact us - carries the identical yourcompany.example.com / +1 555-555-5556 placeholder, plus a "Products/Services/Legal" link list to nowhere and dead social icons. Fixing #1 alone would have left this sitting directly underneath it on every single page. 3. website.header_text_element, the nav bar's own phone/email widget, carries the same fake number - a fourth, separate occurrence, this time in the header. First pass here fixed only its "phone_mail" variant, assumed (wrongly) to be what this site's header actually uses; the live page still showed the fake number afterward. It turned out both nav slots (desktop, mobile) use the plain default branch instead - caught only by re-checking the real page rather than trusting that assumption, and fixed every variant that carries contact info this time, not just the one guessed at. 4. Underneath all three page-level fixes: base.main_company itself still carried stock Odoo's own demo phone (+1 555-555-5556) and email (info@yourcompany.com) - the page-level fixes above only surfaced this because they read real company data for the first time; the data itself needed fixing too. Real Indian/Canadian contact details added to both demo companies in mc_theme_demo.xml. 5. web.login_layout hardcodes its own separate "Powered by Odoo" link - a third distinct occurrence, different from the portal sidebar text and the web.brand_promotion badge already fixed, reached by the very first screen anyone doing this demo sees. Full suite (all 9 modules + web_responsive) re-verified together after every fix in this chain: 0 failed, 0 error(s), tests up to 93. One correction to this session's own earlier work: mc_cast_users_demo.xml claimed "isn't subject to" the noupdate/mode guard that blocks a plain on an already-installed database - false, odoo/tools/convert.py's _tag_function has the exact same "if self.noupdate and self.mode != 'init': return" check. What actually fixed that earlier bug was applying the change as a one-off manual Python snippet, not the tag choice - the same manual-application pattern used again here for base.main_company's contact fields on the already-running school_demo database. Co-Authored-By: Claude Sonnet 5 --- .../views/website_admission_templates.xml | 106 +++++++++++- addons/mc_education_theme/__init__.py | 7 +- addons/mc_education_theme/__manifest__.py | 4 + .../mc_education_theme/demo/mc_theme_demo.xml | 23 ++- addons/mc_education_theme/hooks.py | 28 +++ .../mc_education_theme/static/img/favicon.png | Bin 0 -> 75281 bytes addons/mc_education_theme/static/img/logo.png | Bin 0 -> 14677 bytes addons/mc_education_theme/tests/test_theme.py | 122 +++++++++++++ .../views/contactus_templates.xml | 161 ++++++++++++++++++ .../views/footer_templates.xml | 137 +++++++++++++++ .../views/homepage_templates.xml | 22 +-- .../views/login_templates.xml | 53 ++++++ 12 files changed, 640 insertions(+), 23 deletions(-) create mode 100644 addons/mc_education_theme/hooks.py create mode 100644 addons/mc_education_theme/static/img/favicon.png create mode 100644 addons/mc_education_theme/static/img/logo.png create mode 100644 addons/mc_education_theme/views/contactus_templates.xml create mode 100644 addons/mc_education_theme/views/footer_templates.xml create mode 100644 addons/mc_education_theme/views/login_templates.xml diff --git a/addons/mc_education_admission/views/website_admission_templates.xml b/addons/mc_education_admission/views/website_admission_templates.xml index 9534405..d973bb7 100644 --- a/addons/mc_education_admission/views/website_admission_templates.xml +++ b/addons/mc_education_admission/views/website_admission_templates.xml @@ -1,5 +1,21 @@ + + + diff --git a/addons/mc_education_theme/__init__.py b/addons/mc_education_theme/__init__.py index a319498..614670c 100644 --- a/addons/mc_education_theme/__init__.py +++ b/addons/mc_education_theme/__init__.py @@ -1,4 +1,7 @@ # No models: every branding field this module configures (res.company # logo/name/primary_color/secondary_color/currency, res.partner address) -# already exists in stock Odoo. This module is data (demo/) and one view -# override (views/), nothing more. +# already exists in stock Odoo. This module is data (demo/) and view +# overrides (views/), plus one post_init_hook (hooks.py) for the +# website logo/favicon - see hooks.py for why that can't be a plain +# XML . +from .hooks import post_init_hook diff --git a/addons/mc_education_theme/__manifest__.py b/addons/mc_education_theme/__manifest__.py index 2459c2b..5c35d5f 100644 --- a/addons/mc_education_theme/__manifest__.py +++ b/addons/mc_education_theme/__manifest__.py @@ -19,6 +19,9 @@ "data": [ "views/portal_branding_templates.xml", "views/homepage_templates.xml", + "views/contactus_templates.xml", + "views/login_templates.xml", + "views/footer_templates.xml", ], "demo": [ "demo/mc_theme_demo.xml", @@ -26,4 +29,5 @@ ], "installable": True, "application": False, + "post_init_hook": "post_init_hook", } diff --git a/addons/mc_education_theme/demo/mc_theme_demo.xml b/addons/mc_education_theme/demo/mc_theme_demo.xml index 4d2b290..8f72429 100644 --- a/addons/mc_education_theme/demo/mc_theme_demo.xml +++ b/addons/mc_education_theme/demo/mc_theme_demo.xml @@ -25,10 +25,24 @@ run, never as a later "apply a theme" change. The brand-new second company below has no such history, so its currency is set safely at creation. --> + St. Aloysius Public School - + 45 Avinashi Road Coimbatore + + +91 422 435 6789 + info@staloysiuscbe.edu.in #1B3A5C #D4A017 @@ -36,9 +50,12 @@ Waterloo Heights Academy - - + 75 University Avenue West Waterloo + + + +1 519 888 4400 + info@waterlooheights.ca #1E5C3A #C0C0C0 diff --git a/addons/mc_education_theme/hooks.py b/addons/mc_education_theme/hooks.py new file mode 100644 index 0000000..e7c0be5 --- /dev/null +++ b/addons/mc_education_theme/hooks.py @@ -0,0 +1,28 @@ +import base64 + +from odoo.tools.misc import file_open + + +def post_init_hook(env): + """Metatroncube's own logo and favicon for the public website - a + fixed brand asset, not tied to whichever school company happens to + be active, matching the marketing homepage + (views/homepage_templates.xml). + + Odoo ships two demo website records out of the box + (website.default_website, website.website2), both created with + noupdate=True. A plain write targeting either from this + module's own data files is silently skipped - no error, nothing in + the log - exactly the same trap demo/mc_cast_users_demo.xml already + documented for an unrelated field. Running this as real Python + instead isn't subject to that guard. + + Only runs on a fresh install of this module, per Odoo's own + post_init_hook contract - it will not re-fire on `-u` of a database + that already had this module installed before this hook existed. + """ + with file_open("mc_education_theme/static/img/logo.png", "rb") as f: + logo = base64.b64encode(f.read()) + with file_open("mc_education_theme/static/img/favicon.png", "rb") as f: + favicon = base64.b64encode(f.read()) + env["website"].search([]).write({"logo": logo, "favicon": favicon}) diff --git a/addons/mc_education_theme/static/img/favicon.png b/addons/mc_education_theme/static/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..1823514d87679fdb1ca4c431c0777c684a459fe8 GIT binary patch literal 75281 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 HuS5SIg{J#e literal 0 HcmV?d00001 diff --git a/addons/mc_education_theme/static/img/logo.png b/addons/mc_education_theme/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..29569bca858e2a5be995c50e6e5bcf8138de99d3 GIT binary patch literal 14677 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 literal 0 HcmV?d00001 diff --git a/addons/mc_education_theme/tests/test_theme.py b/addons/mc_education_theme/tests/test_theme.py index f629a46..3bc50ca 100644 --- a/addons/mc_education_theme/tests/test_theme.py +++ b/addons/mc_education_theme/tests/test_theme.py @@ -1,3 +1,5 @@ +from lxml import etree + from odoo.tests.common import HttpCase, TransactionCase @@ -23,6 +25,20 @@ class TestTheme(TransactionCase): # distinct, not the same record twice under different refs. self.assertNotEqual(main.id, waterloo.id) + # Contact fields specifically, not just name/colour/logo: the + # contact us page and site footer now read phone/email/street + # live off whichever company is active (see + # contactus_templates.xml, footer_templates.xml) - a company + # still carrying stock Odoo's own demo placeholder here + # (+1 555-555-5556, info@yourcompany.com) would put that + # placeholder right back in front of the demo audience, on a + # page built specifically to stop showing it. + for company in (main, waterloo): + self.assertTrue(company.phone) + self.assertNotIn("555-555-5556", company.phone) + self.assertTrue(company.email) + self.assertNotIn("yourcompany", company.email) + def test_portal_sidebar_has_no_odoo_branding(self): html = str(self.env["ir.qweb"]._render("portal.portal_record_sidebar", { "classes": "", "title": False, "entries": False, @@ -71,6 +87,94 @@ class TestTheme(TransactionCase): self.assertIn("One platform", arch) self.assertIn('position="replace"', arch) + def test_login_page_has_no_odoo_branding(self): + # A third, separate "Powered by Odoo" occurrence - the backend + # login screen's own hardcoded link, distinct from the portal + # sidebar text and the web.brand_promotion badge above. Unlike + # website.homepage, web.login_layout isn't website-scoped (no + # per-website COW view involved), so _get_combined_arch() here + # isn't subject to the same-transaction cache-timing quirk + # documented on the homepage test - this is a reliable check. + # + # _get_combined_arch() returns an lxml Element, not a string - + # str(element) gives its memory-address repr (""), which would make assertNotIn trivially, silently + # pass no matter what the template actually contains. Caught by + # spot-checking the header widget fix below the same way and + # seeing that exact non-answer instead of real markup. + # etree.tostring() is the real serialization. + arch = etree.tostring(self.env.ref("web.login_layout")._get_combined_arch()).decode() + self.assertNotIn("Powered by", arch) + self.assertNotIn("odoo.com", arch) + + def test_contactus_page_shows_real_company_not_placeholder(self): + # Stock Odoo hardcodes "My Company" and a fake US street address + # in the contact sidebar - exactly the kind of placeholder + # content shared/DEMO_SCRIPT.md's "what must NOT appear" list + # bans, and it was live on this page before today. Checking the + # view's own arch rather than a live render for the same reason + # as the login test above - res_company resolution needs a + # website request context this TransactionCase doesn't have, + # and the substitution itself is fully verifiable from the + # template source: it reads res_company fields instead of + # hardcoding text. + arch = str(self.env.ref("mc_education_theme.contactus_page_branding").arch_db) + self.assertNotIn("My Company", arch) + self.assertNotIn("Fake Buena Vista", arch) + self.assertNotIn("yourcompany.example.com", arch) + self.assertIn("res_company.name", arch) + self.assertIn("res_company.email", arch) + + def test_site_footer_shows_real_company_not_placeholder(self): + # website.footer_custom is active on EVERY website page, not + # just contact us - fixing the contact page's own sidebar and + # missing this would have left the identical + # yourcompany.example.com / +1 555-555-5556 / "Products, + # Services, Legal" placeholder visible underneath it, on every + # single page of the site. + arch = str(self.env.ref("mc_education_theme.footer_branding").arch_db) + self.assertNotIn("yourcompany.example.com", arch) + self.assertNotIn("555-555-5556", arch) + self.assertNotIn("passionate people", arch) + self.assertIn("res_company.name", arch) + self.assertIn("/admissions/apply", arch) + + def test_header_phone_mail_widget_shows_real_company_not_placeholder(self): + # A fourth occurrence, in the header rather than the footer: + # website.header_text_element is a library of variants + # (sentence, list, phone_mail, mail, mail_stretched, a + # default), found after the footer fix above made the same + # fake number's continued presence, higher up the same page, + # obvious. First pass fixed only "phone_mail", assumed to be + # this site's active variant - wrong: the two spots actually + # rendering on the real page (desktop nav, mobile offcanvas) + # both turned out to use the plain default branch instead, + # caught only by re-checking the live page rather than trusting + # that assumption. Checking every variant with contact info in + # it here, not just the one that happened to be live on this + # particular header configuration - "sentence" and "list" carry + # no phone/email at all and are correctly untouched. + arch = etree.tostring( + self.env.ref("website.header_text_element")._get_combined_arch() + ).decode() + self.assertNotIn("555-555-5556", arch) + self.assertNotIn("yourcompany.example.com", arch) + + phone_mail_branch = arch.split("'phone_mail'", 1)[1].split("t-elif", 1)[0] + self.assertIn("res_company.phone", phone_mail_branch) + self.assertIn("res_company.email", phone_mail_branch) + + mail_branch = arch.split("'mail'", 1)[1].split("t-elif", 1)[0] + self.assertIn("res_company.email", mail_branch) + + mail_stretched_branch = arch.split("'mail_stretched'", 1)[1].split("t-elif", 1)[0] + self.assertIn("res_company.phone", mail_stretched_branch) + + # The default (t-else) branch is last, has no following + # t-elif to split on - it runs to the end of the widget instead. + default_branch = arch.rsplit("t-else", 1)[1] + self.assertIn("res_company.phone", default_branch) + def test_backend_cast_logins_exist_in_the_right_groups(self): # shared/DEMO_SCRIPT.md's cast table names six logins. Two # (parent@demo.school, student@demo.school) are created by @@ -120,6 +224,16 @@ class TestTheme(TransactionCase): f"{user.login} should have Internal User access via group_school_staff's implied_ids", ) + def test_website_logo_and_favicon_are_metatroncubes_own(self): + # hooks.post_init_hook loads these from static/img/ onto every + # website record - only runs on a genuinely fresh install (see + # hooks.py), which is exactly the situation this test runs + # under. An already-installed database needs the one-off manual + # application documented in hooks.py's own docstring. + for website in self.env["website"].search([]): + self.assertTrue(website.logo, f"website {website.name!r} has no logo") + self.assertTrue(website.favicon, f"website {website.name!r} has no favicon") + class TestMarketingHomepageHttp(HttpCase): """Content correctness is covered in TestTheme via _get_combined_arch() @@ -134,3 +248,11 @@ class TestMarketingHomepageHttp(HttpCase): def test_homepage_route_serves_successfully(self): response = self.url_open("/") self.assertEqual(response.status_code, 200) + + def test_login_route_serves_successfully(self): + response = self.url_open("/web/login") + self.assertEqual(response.status_code, 200) + + def test_contactus_route_serves_successfully(self): + response = self.url_open("/contactus") + self.assertEqual(response.status_code, 200) diff --git a/addons/mc_education_theme/views/contactus_templates.xml b/addons/mc_education_theme/views/contactus_templates.xml new file mode 100644 index 0000000..966bed6 --- /dev/null +++ b/addons/mc_education_theme/views/contactus_templates.xml @@ -0,0 +1,161 @@ + + + + + diff --git a/addons/mc_education_theme/views/footer_templates.xml b/addons/mc_education_theme/views/footer_templates.xml new file mode 100644 index 0000000..f982dad --- /dev/null +++ b/addons/mc_education_theme/views/footer_templates.xml @@ -0,0 +1,137 @@ + + + + + + + + diff --git a/addons/mc_education_theme/views/homepage_templates.xml b/addons/mc_education_theme/views/homepage_templates.xml index 34c2a90..b190b77 100644 --- a/addons/mc_education_theme/views/homepage_templates.xml +++ b/addons/mc_education_theme/views/homepage_templates.xml @@ -58,11 +58,7 @@ linear-gradient(180deg, var(--navy) 0%, var(--navy-2) 100%); padding:26px 0 70px; color:#EDEFF7; } - .mc-topbar{ display:flex; align-items:center; justify-content:space-between; gap:16px; padding:8px 0 46px; } - .mc-logo{ display:flex; align-items:center; gap:11px; } - .mc-logo .mark{ width:34px; height:34px; } - .mc-logo .wordmark{ font-family:'Manrope',sans-serif; font-weight:800; font-size:1.28rem; color:#fff; line-height:1; } - .mc-logo .tagline{ font-size:.6rem; letter-spacing:.16em; color:#AEB6D6; margin-top:3px; } + .mc-topbar{ padding:8px 0 46px; } .mc-pill{ font-size:.72rem; letter-spacing:.06em; text-transform:uppercase; font-weight:600; color:#EFE9FF; background:linear-gradient(90deg, var(--indigo), var(--indigo-2)); @@ -141,18 +137,12 @@

+
- Built for Schools
diff --git a/addons/mc_education_theme/views/login_templates.xml b/addons/mc_education_theme/views/login_templates.xml new file mode 100644 index 0000000..8e7e1fd --- /dev/null +++ b/addons/mc_education_theme/views/login_templates.xml @@ -0,0 +1,53 @@ + + + + +