Skip to content

Commit 91ecfd3

Browse files
committed
fix(spp_branding_kit): address all code review feedback from Gemini
CRITICAL fixes: - Fix configuration parameter key mismatch: All parameters now use consistent openspp.* prefix in both ir_config_parameter.xml and res_config_settings.py HIGH priority fixes: - Replace broad cron job disabling with specific external IDs to avoid disabling unrelated jobs - Move debug mode check before super().web_client() to prevent unnecessary rendering MEDIUM priority fixes: - Fix addons_path in README to point to parent directory containing modules - Make company branding multi-company safe by updating all companies, not just ID 1 - Complete uninstall_hook to remove all openspp.* parameters using LIKE operator - Remove duplicated session info logic from _get_frontend_session_info method - Remove incomplete search_panel_select_range implementation - Refactor duplicated app filtering code into helper methods _get_paid_app_filter() and _apply_paid_app_filter() - Remove incorrect MODELS.md documentation file - Make tests more robust by creating dummy test modules in setUp() Additional improvements: - Add favicon icon.png from spp_audit_config module - Fix URL formatting with trailing slashes in ir_config_parameter.xml - Improve test assertions to use specific module instances - Enhance code maintainability with DRY principle applied to filtering logic
1 parent 364aca4 commit 91ecfd3

File tree

9 files changed

+134
-187
lines changed

9 files changed

+134
-187
lines changed

spp_branding_kit/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ For complete debranding, install these modules from the
5151

5252
```bash
5353
cd /path/to/your/custom-addons
54-
git clone [repository-url] openspp_branding_kit
54+
git clone [repository-url] spp_branding_kit
5555
```
5656

5757
### 2. Install OCA Dependencies (Recommended)
@@ -67,7 +67,7 @@ Add the module paths to your `odoo.conf`:
6767

6868
```ini
6969
[options]
70-
addons_path = /path/to/openspp_branding_kit,/path/to/server-brand,/path/to/odoo/addons
70+
addons_path = /path/to/your/custom-addons,/path/to/server-brand,/path/to/odoo/addons
7171

7272
# Recommended security settings
7373
list_db = False

spp_branding_kit/__init__.py

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,20 @@ def post_init_hook(env):
4040
brand_promotion.active = False
4141
_logger.info("Disabled Odoo brand promotion message")
4242

43-
# Disable update notification cron jobs (search by model/method)
44-
Cron = env["ir.cron"].sudo()
45-
46-
# Disable module update related cron jobs
47-
module_update_crons = Cron.search(
48-
[
49-
"|",
50-
"|",
51-
("model", "=", "ir.module.module"),
52-
("model", "=", "publisher_warranty.contract"),
53-
("cron_name", "ilike", "module"),
54-
]
55-
)
56-
for cron in module_update_crons:
57-
if cron.active:
58-
cron.active = False
59-
_logger.info(f"Disabled cron job: {cron.name}")
43+
# Disable specific Odoo telemetry and update cron jobs by their external IDs
44+
crons_to_disable = [
45+
"mail.ir_cron_module_update_notification", # Module update notification
46+
"base.ir_cron_res_partner_clear_caches", # Partner cache clearing (if telemetry related)
47+
]
48+
49+
for cron_xml_id in crons_to_disable:
50+
try:
51+
cron = env.ref(cron_xml_id, raise_if_not_found=False)
52+
if cron and cron.active:
53+
cron.active = False
54+
_logger.info(f"Disabled cron job: {cron.name} ({cron_xml_id})")
55+
except Exception as e:
56+
_logger.debug(f"Could not disable cron {cron_xml_id}: {e}")
6057

6158
# Disable theme store menu if it exists
6259
theme_menu = env["ir.ui.menu"].sudo().search([("name", "ilike", "Theme Store")], limit=1)
@@ -67,19 +64,19 @@ def post_init_hook(env):
6764
except Exception as e:
6865
_logger.warning(f"Error during branding setup: {e}")
6966

70-
# Update company information
67+
# Update company information for all companies
7168
try:
7269
Company = env["res.company"].sudo()
73-
main_company = Company.browse(1) # Main company
74-
if main_company.exists():
75-
main_company.write(
70+
companies = Company.search([])
71+
for company in companies:
72+
company.write(
7673
{
7774
"report_header": "OpenSPP Platform",
7875
"report_footer": "OpenSPP - Open Source Social Protection Platform",
7976
"website": "https://openspp.org",
8077
}
8178
)
82-
_logger.info("Updated main company branding")
79+
_logger.info(f"Updated branding for {len(companies)} companies")
8380
except Exception as e:
8481
_logger.warning(f"Error updating company data: {e}")
8582

@@ -92,15 +89,16 @@ def uninstall_hook(env):
9289
"""
9390
_logger.info("OpenSPP Branding Kit: Running uninstall cleanup...")
9491

95-
# Remove the hide_paid_apps parameter
92+
# Remove all openspp.* configuration parameters
9693
try:
9794
IrConfigParam = env["ir.config_parameter"].sudo()
98-
param = IrConfigParam.search([("key", "=", "openspp.hide_paid_apps")])
99-
if param:
100-
param.unlink()
101-
_logger.info("Removed hide_paid_apps parameter")
95+
params = IrConfigParam.search([("key", "=like", "openspp.%")])
96+
if params:
97+
param_count = len(params)
98+
params.unlink()
99+
_logger.info(f"Removed {param_count} OpenSPP configuration parameters")
102100
except Exception as e:
103-
_logger.warning(f"Error removing configuration parameter: {e}")
101+
_logger.warning(f"Error removing configuration parameters: {e}")
104102

105103
# Optionally re-enable Odoo branding elements
106104
# This is commented out by default to maintain debranding even after uninstall

spp_branding_kit/controllers/main.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,19 @@ class OpenSPPHome(Home):
1515
@http.route()
1616
def web_client(self, s_action=None, **kw):
1717
"""Override web client to enforce debug mode restrictions"""
18-
res = super().web_client(s_action, **kw)
19-
20-
# Check if debug mode is restricted to admins
18+
# Check if debug mode is restricted to admins BEFORE rendering
2119
if kw.get("debug", False):
2220
config_parameter = request.env["ir.config_parameter"].sudo()
2321
debug_admin_only = config_parameter.get_param("openspp.debug_admin_only", "True") == "True"
2422

2523
if debug_admin_only and request.session.uid:
2624
# Check if current user is admin
27-
user = request.env.user.browse(request.session.uid)
28-
if not user._is_admin():
29-
# Redirect non-admin users trying to access debug mode
30-
return request.redirect("/web?debug=0")
25+
if not request.env.user._is_admin():
26+
# Remove debug parameter and redirect
27+
kw.pop("debug", None)
28+
return request.redirect("/web", 303)
3129

32-
return res
30+
return super().web_client(s_action, **kw)
3331

3432

3533
class OpenSPPBrandingController(http.Controller):

spp_branding_kit/data/ir_config_parameter.xml

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,119 +5,119 @@
55

66
<!-- System Information Parameters -->
77
<record id="param_system_name" model="ir.config_parameter">
8-
<field name="key">system.name</field>
8+
<field name="key">openspp.system_name</field>
99
<field name="value">OpenSPP Platform</field>
1010
</record>
1111

1212
<record id="param_system_version" model="ir.config_parameter">
13-
<field name="key">system.version</field>
13+
<field name="key">openspp.system_version</field>
1414
<field name="value">1.0.0</field>
1515
</record>
1616

1717
<!-- Support and Documentation URLs -->
1818
<record id="param_support_url" model="ir.config_parameter">
19-
<field name="key">support.url</field>
20-
<field name="value">https://openspp.org/support</field>
19+
<field name="key">openspp.support_url</field>
20+
<field name="value">https://openspp.org/</field>
2121
</record>
2222

2323
<record id="param_documentation_url" model="ir.config_parameter">
24-
<field name="key">documentation.url</field>
25-
<field name="value">https://openspp.org/documentation</field>
24+
<field name="key">openspp.documentation_url</field>
25+
<field name="value">https://docs.openspp.org/</field>
2626
</record>
2727

2828
<record id="param_community_url" model="ir.config_parameter">
29-
<field name="key">community.url</field>
30-
<field name="value">https://openspp.org/community</field>
29+
<field name="key">openspp.community_url</field>
30+
<field name="value">https://openspp.org/</field>
3131
</record>
3232

3333
<!-- Telemetry Configuration -->
3434
<record id="param_openspp_telemetry_enabled" model="ir.config_parameter">
35-
<field name="key">openspp.telemetry.enabled</field>
35+
<field name="key">openspp.telemetry_enabled</field>
3636
<field name="value">True</field>
3737
</record>
3838

3939
<record id="param_openspp_telemetry_endpoint" model="ir.config_parameter">
40-
<field name="key">openspp.telemetry.endpoint</field>
40+
<field name="key">openspp.telemetry_endpoint</field>
4141
<field name="value">https://telemetry.openspp.org</field>
4242
</record>
4343

4444
<!-- Disable External Services -->
4545
<record id="param_disable_external_links" model="ir.config_parameter">
46-
<field name="key">disable.external.links</field>
46+
<field name="key">openspp.disable_external_links</field>
4747
<field name="value">True</field>
4848
</record>
4949

5050
<!-- Custom Footer Text -->
5151
<record id="param_footer_copyright" model="ir.config_parameter">
52-
<field name="key">footer.copyright</field>
52+
<field name="key">openspp.footer_copyright</field>
5353
<field name="value">© OpenSPP Project - Open Source Social Protection Platform</field>
5454
</record>
5555

5656
<!-- Email Configuration -->
5757
<record id="param_email_from_name" model="ir.config_parameter">
58-
<field name="key">email.from.name</field>
58+
<field name="key">openspp.email_from_name</field>
5959
<field name="value">OpenSPP Platform</field>
6060
</record>
6161

6262
<!-- Report Configuration -->
6363
<record id="param_report_footer_text" model="ir.config_parameter">
64-
<field name="key">report.footer.text</field>
64+
<field name="key">openspp.report_footer_text</field>
6565
<field name="value">Generated by OpenSPP Platform</field>
6666
</record>
6767

6868
<!-- Login Page Configuration -->
6969
<record id="param_login_page_title" model="ir.config_parameter">
70-
<field name="key">login.page.title</field>
70+
<field name="key">openspp.login_page_title</field>
7171
<field name="value">OpenSPP - Social Protection Platform</field>
7272
</record>
7373

7474
<record id="param_login_page_subtitle" model="ir.config_parameter">
75-
<field name="key">login.page.subtitle</field>
75+
<field name="key">openspp.login_page_subtitle</field>
7676
<field name="value">Secure Access Portal</field>
7777
</record>
7878

7979
<!-- Database Manager Configuration -->
8080
<record id="param_database_manager_disabled" model="ir.config_parameter">
81-
<field name="key">database.manager.disabled</field>
81+
<field name="key">openspp.database_manager_disabled</field>
8282
<field name="value">True</field>
8383
</record>
8484

8585
<!-- Custom Favicon Path -->
8686
<record id="param_favicon_path" model="ir.config_parameter">
87-
<field name="key">favicon.path</field>
87+
<field name="key">openspp.favicon_path</field>
8888
<field name="value">/openspp_branding_kit/static/description/icon.png</field>
8989
</record>
9090

9191
<!-- Theme Configuration -->
9292
<record id="param_theme_primary_color" model="ir.config_parameter">
93-
<field name="key">theme.primary.color</field>
93+
<field name="key">openspp.theme_primary_color</field>
9494
<field name="value">#2c3e50</field>
9595
</record>
9696

9797
<record id="param_theme_secondary_color" model="ir.config_parameter">
98-
<field name="key">theme.secondary.color</field>
98+
<field name="key">openspp.theme_secondary_color</field>
9999
<field name="value">#34495e</field>
100100
</record>
101101

102102
<!-- Analytics and Tracking -->
103103
<record id="param_google_analytics_disabled" model="ir.config_parameter">
104-
<field name="key">google.analytics.disabled</field>
104+
<field name="key">openspp.google_analytics_disabled</field>
105105
<field name="value">True</field>
106106
</record>
107107

108108
<!-- Custom Error Messages -->
109109
<record id="param_error_message_404" model="ir.config_parameter">
110-
<field name="key">error.message.404</field>
110+
<field name="key">openspp.error_message_404</field>
111111
<field name="value">Page not found in OpenSPP Platform</field>
112112
</record>
113113

114114
<record id="param_error_message_403" model="ir.config_parameter">
115-
<field name="key">error.message.403</field>
115+
<field name="key">openspp.error_message_403</field>
116116
<field name="value">Access denied. Please contact your OpenSPP administrator.</field>
117117
</record>
118118

119119
<record id="param_error_message_500" model="ir.config_parameter">
120-
<field name="key">error.message.500</field>
120+
<field name="key">openspp.error_message_500</field>
121121
<field name="value">An error occurred in OpenSPP Platform. Please try again later.</field>
122122
</record>
123123

spp_branding_kit/models/ir_http.py

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,40 +4,13 @@
44
import logging
55

66
from odoo import models
7-
from odoo.http import request
87

98
_logger = logging.getLogger(__name__)
109

1110

1211
class IrHttp(models.AbstractModel):
1312
_inherit = "ir.http"
1413

15-
@classmethod
16-
def _get_frontend_session_info(cls):
17-
"""Override to add OpenSPP-specific session information"""
18-
session_info = super()._get_frontend_session_info()
19-
20-
# Add OpenSPP configuration to session
21-
IrConfig = request.env["ir.config_parameter"].sudo()
22-
23-
session_info.update(
24-
{
25-
"openspp_system_name": IrConfig.get_param("openspp.system_name", "OpenSPP Platform"),
26-
"openspp_documentation_url": IrConfig.get_param(
27-
"openspp.documentation_url", "https://docs.openspp.org"
28-
),
29-
"openspp_support_url": IrConfig.get_param("openspp.support_url", "https://openspp.org"),
30-
"openspp_show_powered_by": IrConfig.get_param("openspp.show_powered_by", "True") == "True",
31-
"openspp_telemetry_enabled": IrConfig.get_param("openspp.telemetry_enabled", "True") == "True",
32-
"openspp_telemetry_endpoint": IrConfig.get_param(
33-
"openspp.telemetry_endpoint", "https://telemetry.openspp.org"
34-
),
35-
"openspp_debug_admin_only": IrConfig.get_param("openspp.debug_admin_only", "True") == "True",
36-
}
37-
)
38-
39-
return session_info
40-
4114
def session_info(self):
4215
"""Override session info to customize branding"""
4316
result = super().session_info()

0 commit comments

Comments
 (0)