Skip to content

Commit 928ad4b

Browse files
committed
feat : add string sanitization and truncate to the plugin
1 parent 419dfa7 commit 928ad4b

File tree

4 files changed

+167
-114
lines changed

4 files changed

+167
-114
lines changed

plugins/system/opengraph/language/en-GB/plg_system_opengraph.ini

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,11 @@ PLG_SYSTEM_OPENGRAPH_DESCRIPTION="Open Graph Plugin automatically generates Open
88
; Global OG Settings
99
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_SETTINGS="Global Open Graph Settings"
1010

11-
PLG_SYSTEM_OPENGRAPH_ENABLE_OG_GENERATION="Enable OG Tag Generation"
12-
PLG_SYSTEM_OPENGRAPH_ENABLE_OG_GENERATION_DESC="Enable automatic generation of Open Graph meta tags for improved social media sharing."
11+
PLG_SYSTEM_OPENGRAPH_GLOBAL_DESC="Global defaults used when no article / menu overrides are present."
12+
PLG_SYSTEM_OPENGRAPH_OVERVIEW="Overview & Help"
1313

14-
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_TITLE="Global OG Title"
15-
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_TITLE_DESC="Default Open Graph title used as fallback when no article or category-specific title is available. Leave empty to use site name."
16-
17-
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_DESCRIPTION="Global OG Description"
18-
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_DESCRIPTION_DESC="Default Open Graph description used as fallback when no article or category-specific description is available. Maximum 200 characters."
19-
20-
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_IMAGE="Global OG Image"
21-
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_IMAGE_DESC="Default Open Graph image used as fallback when no article or category-specific image is available. Recommended size: 1200x630 pixels."
22-
23-
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_TYPE="Global OG Type"
24-
PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_TYPE_DESC="Default Open Graph type for your website. 'Website' is recommended for most sites."
14+
PLG_SYSTEM_OPENGRAPH_ENABLE_OG_GENERATION="Enable OpenGraph"
15+
PLG_SYSTEM_OPENGRAPH_ENABLE_OG_GENERATION_DESC="Enable OpenGraph tags generation."
2516

2617
; Override Settings
2718
PLG_SYSTEM_OPENGRAPH_OVERRIDE_SETTINGS="Override Settings"
@@ -90,6 +81,9 @@ PLG_SYSTEM_OPENGRAPH_SHOW_ADVANCED_DESC="Show advanced settings for OpenGraph me
9081
PLG_SYSTEM_OPENGRAPH_TWITTER_CARD_LABEL="Twitter Card Type"
9182
PLG_SYSTEM_OPENGRAPH_TWITTER_CARD_DESC="Select the type of Twitter card to use for this content."
9283

84+
PLG_SYSTEM_OPENGRAPH_TWITTER_CARD_SUMMARY="Summary"
85+
PLG_SYSTEM_OPENGRAPH_TWITTER_CARD_SUMMARY_LARGE_IMAGE="Summary Large Image"
86+
9387
PLG_SYSTEM_OPENGRAPH_TWITTER_TITLE_LABEL="Twitter Title"
9488
PLG_SYSTEM_OPENGRAPH_TWITTER_TITLE_DESC="Custom title for Twitter sharing. Recommended length: 70 characters."
9589
PLG_SYSTEM_OPENGRAPH_TWITTER_TITLE_HINT="Enter a compelling title for Twitter sharing"
@@ -127,3 +121,24 @@ PLG_SYSTEM_OPENGRAPH_TYPE_FIELD_DESC="Select a custom field to use as the OpenGr
127121

128122
PLG_SYSTEM_OPENGRAPH_NO_FIELD_SELECTED="-- No Field Selected --"
129123

124+
PLG_SYSTEM_OPENGRAPH_FB_APP_ID_LABEL="Facebook App ID"
125+
PLG_SYSTEM_OPENGRAPH_FB_APP_ID_DESC="Needed only for Facebook Insights."
126+
127+
128+
PLG_SYSTEM_OPENGRAPH_FEATURES_LABEL="What this plugin does"
129+
PLG_SYSTEM_OPENGRAPH_FEATURES_DESC="• Generates complete Open Graph and Twitter Card metadata on the fly.
• Hierarchical override system: Menu → Article → Category → Global.
• Auto‑picks intro/full images and alt text.
• Smart sanitisation & trimming prevents broken previews."
130+
131+
PLG_SYSTEM_OPENGRAPH_QUICKSTART_LABEL="How to use"
132+
PLG_SYSTEM_OPENGRAPH_QUICKSTART_DESC="1. Enable the plugin.
2. Optional: enter your Facebook App ID above.
3. Edit any article → ‘Open Graph’ tab to override title, description, or image.
4. Clear cache, share your URL and enjoy rich previews!"
133+
134+
PLG_SYSTEM_OPENGRAPH_TIPS_LABEL="Troubleshooting"
135+
PLG_SYSTEM_OPENGRAPH_TIPS_DESC="• Changed an image but Facebook still shows the old one? Clear Joomla & CDN caches, then run Facebook Sharing Debugger.
• Large images (>5 MB) may be ignored by Twitter.
• Verify that og:image is an absolute URL (use the built‑in sanitiser)."
136+
137+
PLG_SYSTEM_OPENGRAPH_MAX_TITLE_LABEL="Max Title Length"
138+
PLG_SYSTEM_OPENGRAPH_MAX_TITLE_DESC="Recommended: ≤60 characters for best display in Facebook and Twitter cards."
139+
140+
PLG_SYSTEM_OPENGRAPH_MAX_DESC_LABEL="Max Description Length"
141+
PLG_SYSTEM_OPENGRAPH_MAX_DESC_DESC="Recommended: ≤160 characters (Twitter truncates beyond this)."
142+
143+
PLG_SYSTEM_OPENGRAPH_MAX_ALT_LABEL="Max Alt Text Length"
144+
PLG_SYSTEM_OPENGRAPH_MAX_ALT_DESC="Recommended: ≤125 characters (based on WCAG guidelines)."
Lines changed: 56 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<extension type="plugin" group="system" method="upgrade" version="6.0">
2+
<extension type="plugin"
3+
group="system"
4+
method="upgrade"
5+
version="6.0">
36
<name>PLG_SYSTEM_OPENGRAPH</name>
47
<author>Joomla! Project</author>
58
<creationDate>2025-06</creationDate>
@@ -8,121 +11,75 @@
811
<authorEmail>[email protected]</authorEmail>
912
<authorUrl>https://joomla.org</authorUrl>
1013
<version>__DEPLOY_VERSION__</version>
11-
<description>PLG_SYSTEM_OPENGRAPH_DESCRIPTION</description>
14+
<description>PLG_SYSTEM_OPENGRAPH_DESCRIPTION</description>
1215
<namespace path="src">Joomla\Plugin\System\Opengraph</namespace>
13-
1416
<files>
1517
<folder plugin="opengraph">src</folder>
1618
<folder>services</folder>
1719
<filename>opengraph.xml</filename>
1820
</files>
19-
2021
<languages>
2122
<language tag="en-GB">language/en-GB/plg_system_opengraph.ini</language>
2223
<language tag="en-GB">language/en-GB/plg_system_opengraph.sys.ini</language>
2324
</languages>
24-
2525
<config>
2626
<fields name="params">
27-
<fieldset name="global_og_settings" label="Global OG Settings">
28-
<field
29-
name="enable_og_generation"
30-
type="radio"
31-
class="btn-group btn-group-yesno"
32-
default="1"
33-
label="PLG_SYSTEM_OPENGRAPH_ENABLE_OG_GENERATION"
34-
description="PLG_SYSTEM_OPENGRAPH_ENABLE_OG_GENERATION_DESC"
35-
>
27+
<fieldset name="global_og_settings"
28+
label="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_SETTINGS"
29+
description="PLG_SYSTEM_OPENGRAPH_GLOBAL_DESC">
30+
<field name="enable_og_generation"
31+
type="radio"
32+
class="btn-group btn-group-yesno"
33+
default="1"
34+
label="PLG_SYSTEM_OPENGRAPH_ENABLE_OG_GENERATION"
35+
description="PLG_SYSTEM_OPENGRAPH_ENABLE_OG_GENERATION_DESC">
3636
<option value="0">JNO</option>
3737
<option value="1">JYES</option>
3838
</field>
39-
40-
<field
41-
name="global_og_title"
42-
type="text"
43-
label="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_TITLE"
44-
description="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_TITLE_DESC"
45-
size="50"
46-
maxlength="255"
47-
/>
48-
49-
<field
50-
name="global_og_description"
51-
type="textarea"
52-
label="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_DESCRIPTION"
53-
description="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_DESCRIPTION_DESC"
54-
rows="3"
55-
cols="50"
56-
maxlength="300"
57-
/>
58-
59-
<field
60-
name="global_og_image"
61-
type="media"
62-
label="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_IMAGE"
63-
description="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_IMAGE_DESC"
64-
directory="images"
65-
/>
66-
67-
<field
68-
name="global_og_type"
69-
type="list"
70-
default="website"
71-
label="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_TYPE"
72-
description="PLG_SYSTEM_OPENGRAPH_GLOBAL_OG_TYPE_DESC"
73-
>
74-
<option value="website">PLG_SYSTEM_OPENGRAPH_TYPE_WEBSITE</option>
75-
<option value="article">PLG_SYSTEM_OPENGRAPH_TYPE_ARTICLE</option>
76-
<option value="blog">PLG_SYSTEM_OPENGRAPH_TYPE_BLOG</option>
77-
<option value="profile">PLG_SYSTEM_OPENGRAPH_TYPE_PROFILE</option>
78-
<option value="video">PLG_SYSTEM_OPENGRAPH_TYPE_VIDEO</option>
79-
<option value="music">PLG_SYSTEM_OPENGRAPH_TYPE_MUSIC</option>
80-
<option value="book">PLG_SYSTEM_OPENGRAPH_TYPE_BOOK</option>
81-
<option value="product">PLG_SYSTEM_OPENGRAPH_TYPE_PRODUCT</option>
82-
<option value="event">PLG_SYSTEM_OPENGRAPH_TYPE_EVENT</option>
83-
</field>
39+
<field name="fb_app_id"
40+
type="text"
41+
label="PLG_SYSTEM_OPENGRAPH_FB_APP_ID_LABEL"
42+
description="PLG_SYSTEM_OPENGRAPH_FB_APP_ID_DESC" />
43+
<field name="max_title_length"
44+
type="number"
45+
default="60"
46+
label="PLG_SYSTEM_OPENGRAPH_MAX_TITLE_LABEL"
47+
description="PLG_SYSTEM_OPENGRAPH_MAX_TITLE_DESC"
48+
min="10"
49+
max="100" />
50+
<field name="max_description_length"
51+
type="number"
52+
default="160"
53+
label="PLG_SYSTEM_OPENGRAPH_MAX_DESC_LABEL"
54+
description="PLG_SYSTEM_OPENGRAPH_MAX_DESC_DESC"
55+
min="50"
56+
max="300" />
57+
<field name="max_alt_length"
58+
type="number"
59+
default="125"
60+
label="PLG_SYSTEM_OPENGRAPH_MAX_ALT_LABEL"
61+
description="PLG_SYSTEM_OPENGRAPH_MAX_ALT_DESC"
62+
min="50"
63+
max="200" />
8464
</fieldset>
85-
86-
<fieldset name="override_settings" label="Override Settings">
87-
<field
88-
name="enable_article_override"
89-
type="radio"
90-
class="btn-group btn-group-yesno"
91-
default="1"
92-
label="PLG_SYSTEM_OPENGRAPH_ENABLE_ARTICLE_OVERRIDE"
93-
description="PLG_SYSTEM_OPENGRAPH_ENABLE_ARTICLE_OVERRIDE_DESC"
94-
>
95-
<option value="0">JNO</option>
96-
<option value="1">JYES</option>
97-
</field>
98-
99-
<field
100-
name="enable_category_override"
101-
type="radio"
102-
class="btn-group btn-group-yesno"
103-
default="1"
104-
label="PLG_SYSTEM_OPENGRAPH_ENABLE_CATEGORY_OVERRIDE"
105-
description="PLG_SYSTEM_OPENGRAPH_ENABLE_CATEGORY_OVERRIDE_DESC"
106-
>
107-
<option value="0">JNO</option>
108-
<option value="1">JYES</option>
109-
</field>
110-
111-
<field
112-
name="fallback_to_site_logo"
113-
type="radio"
114-
class="btn-group btn-group-yesno"
115-
default="1"
116-
label="PLG_SYSTEM_OPENGRAPH_FALLBACK_TO_SITE_LOGO"
117-
description="PLG_SYSTEM_OPENGRAPH_FALLBACK_TO_SITE_LOGO_DESC"
118-
>
119-
<option value="0">JNO</option>
120-
<option value="1">JYES</option>
121-
</field>
65+
<fieldset name="overview_help"
66+
label="PLG_SYSTEM_OPENGRAPH_OVERVIEW">
67+
<field name="about_note"
68+
type="note"
69+
class="alert alert-info"
70+
label="PLG_SYSTEM_OPENGRAPH_FEATURES_LABEL"
71+
description="PLG_SYSTEM_OPENGRAPH_FEATURES_DESC" />
72+
<field name="quickstart_note"
73+
type="note"
74+
class="alert alert-primary"
75+
label="PLG_SYSTEM_OPENGRAPH_QUICKSTART_LABEL"
76+
description="PLG_SYSTEM_OPENGRAPH_QUICKSTART_DESC" />
77+
<field name="tips_note"
78+
type="note"
79+
class="alert alert-info"
80+
label="PLG_SYSTEM_OPENGRAPH_TIPS_LABEL"
81+
description="PLG_SYSTEM_OPENGRAPH_TIPS_DESC" />
12282
</fieldset>
123-
124-
12583
</fields>
12684
</config>
127-
12885
</extension>

0 commit comments

Comments
 (0)