Skip to content

Admin: rich Bootstrap 3 renderer for the System Docs help pages#5596

Open
Kanonimpresor wants to merge 3 commits into
e107inc:masterfrom
Kanonimpresor:feat/admin-docs-rich-renderer
Open

Admin: rich Bootstrap 3 renderer for the System Docs help pages#5596
Kanonimpresor wants to merge 3 commits into
e107inc:masterfrom
Kanonimpresor:feat/admin-docs-rich-renderer

Conversation

@Kanonimpresor
Copy link
Copy Markdown
Contributor

@Kanonimpresor Kanonimpresor commented Apr 20, 2026

Problem

The admin "System Docs" page (e107_admin/docs.php) injected each
help file raw into the DOM, so administrators could not embed
images, lists or callouts. The only formatting was a hard-coded
Q>/A> regex.

Changes

  • New line-based parser inside docs_ui::renderDoc() that keeps
    full backward compatibility with the legacy Q>/A> markup but
    adds these markers:
    • H1> / H2> – section headings (auto-anchored, populate the TOC)
    • P> – lead paragraph
    • NOTE> / TIP> / WARN> – Bootstrap-style callouts with FA icons
    • IMG> / SHOT> – figures (SHOT> resolves against
      e107_docs/help/_media/)
    • STEP> – numbered steps grouped in <ol class="docs-steps">
    • CODE> – syntax-highlighted code blocks
  • Free text is now passed through e107::getParser()->toHTML() so
    BBCode ([b], [url], [img], …) works inside help files.
  • Q>/A> pairs render as Bootstrap 3 panel-collapse accordions.
  • Auto-generated TOC (floating .docs-toc aside) from H1>/H2>.
  • JS hook (footer-inline) adds smooth scroll for TOC links and
    chevron toggle for the FAQ accordion.

Content migration

All 21 English help files have been rewritten using the new markers. Most original Q/A pairs are preserved verbatim; a few were paraphrased or restructured into STEP> sequences for readability.
New shared screenshot folder e107_docs/help/_media/<topic>/ ships with 16 real captures.

Compatibility

  • Other languages keep working as-is (the parser falls back to plain
    paragraphs + BBCode for everything outside the new markers).
  • No DB schema changes, no new dependencies.
  • Path constants and coreLan('docs') calls untouched.

Testing

  • Browse e107_admin/docs.php, click each entry in the sidebar:
    TOC appears, sections collapse/expand, screenshots render with
    caption, callouts get the right colour and icon.
  • Verified with php -l (no syntax errors) and PHP 8.x.

Comment thread e107_admin/docs.php Outdated
Copy link
Copy Markdown
Contributor

@e107help e107help Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Olá, @Kanonimpresor, thanks for putting this together. The old Q>/A> parser was really showing its age, and having callouts, figures, and step lists first-class is a proper lift. :-D

Four things worth flagging before it lands:

1. Dark-skin breakage. Most of the inlined CSS at e107_admin/docs.php#L29-L61 hard-codes light colours (#555, #777, #fafafa), which go unreadable on the default admin skin. After a core update, admincss is set to css/modern-dark-2.css by e107_admin/update_routines.php#L649-L651; that skin renders body { color:#c6c6c6; background-color:#262626 }. Details in the inline comment.

2. Multi-line A> regression. The new per-line regex at e107_admin/docs.php#L278 only captures the first line after A>. Master's parser used preg_replace('/Q\>(.*?)A>/si', ...), which crossed newlines. For English you worked around it by rewriting multi-line answers as STEP>, but any third-party language or site-local edit still using legacy multi-line A> will render the panel body empty and leak the rest of the answer into plain paragraphs outside the panel. This contradicts "Other languages keep working as-is" in the PR body.

3. "Preserving every original Q/A" isn't quite what happened. Spot-checking Administrators: the original A> "These allow you to give administrators…" is rewritten to "Permissions allow you to give administrators…", and the original second Q ("I want to make an existing registered member into an administrator, how?") is dropped entirely, with its answer restructured into STEP>s. The rewrite itself reads better; worth updating the PR description so reviewers know the copy was paraphrased rather than preserved verbatim.

4. Backwards compatibility. Upstream e107 is two decades old and supports sites running skins untouched for 10+ years. The CSS bit is the urgent one; the A> parser change is the sneakier one, because it only breaks content that doesn't live in this repo.

A handful of smaller things inline: an invalid-HTML edge case in the TOC builder, a PHP 8 warning on empty IMG>, an unescaped title interpolation, a brittle Q/A sentinel, and a pass on comments that don't earn their keep.

Repo-weight note while I'm here: e107_docs/help/_media/ ships 4.4 MB across 16 JPGs, with news/newspost-admin.jpg alone at 703 KB. A lossy pass or a smaller target width would typically shave 50-80% off admin captures like these without the reader noticing. Not blocking, just flagging for the history.

Standard caveat, I'm a bot. @Deltik has final say on merge. 8-)

Comment thread e107_admin/docs.php Outdated
Comment thread e107_admin/docs.php
Comment thread e107_admin/docs.php
Comment thread e107_admin/docs.php
Comment thread e107_admin/docs.php
Comment thread e107_admin/docs.php Outdated
Comment thread e107_admin/docs.php
Comment thread e107_admin/docs.php
Kanonimpresor added a commit to Kanonimpresor/e107 that referenced this pull request Apr 21, 2026
Addresses the eight review points raised on commit 6f61b61 by the
e107help bot review (e107inc#5596 review #4147770569). All changes are
contained to e107_admin/docs.php.

1) Multi-line A> regression (and the panel-body sentinel that drove it)
   pattern with a small state machine that buffers the answer body until
   the next marker, blank line or EOF and then emits the whole panel
   (heading + buffered body + closing tags) as one unit. Restores the
   master parser contract 'Q\>(.*?)A>' for any third-party language or
   site-local file still relying on multi-line A>. Same buffer lets P>,
   NOTE>, TIP>, WARN> and A> span multiple lines, which reads better for
   longer callouts.

2) Orphan Q> leaking unclosed panel/panel-collapse/panel-body
   With the sentinel pattern gone, an orphan Q> now flushes through
   flushPendingQuestion() which emits a complete (empty-body) panel
   before closeFaq() runs. Previous code only closed panel-group and
   left N-1 panels unclosed when several orphans appeared.

3) slug() collisions on duplicate H1>/H2> text
   Added a per-doc $seenSlugs map and a $uniqueSlug() closure that
   appends -2, -3, … on collision. TOC links now resolve to the right
   heading and the rendered HTML validates.

4) resolveMedia() PHP 8 warning on empty IMG>/SHOT>
   Empty payload now returns '' before reaching $src[0], so a stray
   IMG> or SHOT> no longer fills the error log with 'Uninitialized
   string offset 0'. The IMG/SHOT case also short-circuits the figure
   emission when the source is empty.

5) buildToc() invalid HTML when H1>/H2> are mixed
   Nested <ul> is now opened inside the still-open <li> rather than as
   its sibling, and stepping back out closes </li></ul> in the right
   order. Tested with [H1, H2, H1] and [H1, H2, H2, H1]; result is
   well-formed and assistive tech announces the outline correctly.

6) Unescaped $title interpolation in the doc wrapper
   $title (filename-derived) is now passed through htmlspecialchars()
   before going into the <h2 class='docs-title'> output, matching the
   escaping already done a few lines up for the figure caption.

7) Inline CSS preamble comment trimmed to one line
   The 6-line explanatory block above e107::css('inline', …) is now a
   single-line note about the structure-vs-palette split. The other two
   per-block intros the bot flagged are no longer present after the
   sentinel/regex refactor.

The renderDoc() refactor also keeps a continuation buffer for plain
lines between Q> and A>, so legacy files that wrote the question across
two lines still render correctly even though that wasn't on the bot's
list.
Comment thread e107_admin/docs.php Outdated
Comment thread e107_admin/docs.php
Comment thread e107_docs/help/_media/SCREENSHOTS.md Outdated
@e107help
Copy link
Copy Markdown
Contributor

e107help Bot commented Apr 22, 2026

Right, follow-up note on the round-2 review. While applying @Deltik's fix for the #N autolinking, I clumsily PUT an empty body to my own review and the API won't let me edit it back from blank. :-P The three inline comments on that review are unaffected, and the chevron one (docs.php#L74-L76) already has the corrected First click / Subsequent clicks wording. Reposting the summary here so it's not lost:


@Kanonimpresor, proper turnaround on round 1. Every item from that pass landed in f22d594/1937e77, and the state-machine refactor reads better than what I would have suggested. :-D

Round-1 follow-ups, verified at 275386d:

Item Verified
Dark-skin CSS (structure-only inline + per-skin .docs-item palette) e107_admin/docs.php#L27-L56; .docs-item palette in all six local admin skins (e107_themes/bootstrap3/css/{modern-light,kadmin,corporate,modern-dark,modern-dark-2,bootstrap-dark.min}.css)
Multi-line A> regression state machine with $pendingBlock buffer at docs.php#L294-L327, flushed on next marker / blank line / EOF
Orphan Q> panel leak flushPendingQuestion() at docs.php#L285-L292
slug() collisions uniqueSlug closure with $seenSlugs at docs.php#L226-L237
resolveMedia() PHP 8 warning empty-guard at docs.php#L193; IMG/SHOT short-circuits at docs.php#L388
buildToc() invalid HTML nested <ul> opened inside the still-open <li>; traced [H1,H2,H1] and [H1,H2,H2,H1] through docs.php#L455-L493, both well-formed
$title interpolation htmlspecialchars(..., ENT_QUOTES) at docs.php#L512
Comment trim one-liner at docs.php#L27; the other blocks I flagged are gone after the sentinel refactor

The .docs-callout → native Bootstrap .alert-* switch is a nice bonus. The CDN-hosted skins (Flatly, Sandstone, Superhero) get themed callouts for free from Bootstrap itself.

One new bug from this pass, plus housekeeping:

  1. Chevron animates backwards (live bug). Two click handlers fight over .collapsed on every panel-heading: the inline $(document).on('click', '.docs-faq .panel-heading', …) at docs.php#L74-L76, and Bootstrap 3's own collapse.data-api triggered by data-toggle="collapse" on the same element (docs.php#L277). Bootstrap already does $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') for us. On the first click, both handlers toggle in the same tick and the browser collapses the intermediate state, so no transition fires. On subsequent clicks the toggle works, but the trigger's .collapsed ends up 180° out of phase with the panel. Chevron points down (open-shape) when the panel is closed, and right (closed-shape) when it's open. Fix is to delete L74-L76. Detail in the inline.

  2. e107_docs/help/_media/SCREENSHOTS.md is out of sync after the rename in 275386d. Three rows still point at the old filenames (banners/banner-manager.png, cache/cache.png, news/newspost-admin.png); on disk they're now banner-admin.png, admin-cache.png, admin-newspost.png. The SHOT> markers in the English docs already use the new names so there's no rendering break, but the sidecar table is stale.

  3. Merge conflict with master. PR Admin: restore sidebar menu (icon + title) on legacy pages and fix Docs transitions #5595 landed the phpinfo structure-vs-palette split first, and now the same six bootstrap3 admin CSS files plus e107_admin/docs.php show CONFLICTING. Mechanical rebase, flagging so it doesn't get missed.

  4. PR description. The "preserving every original Q/A" line is still in the body even though you acknowledged it was a paraphrase. Easier to grab now than after merge.

Repo weight (24 MB). Separate question for you @Kanonimpresor and @Deltik.

The transparent-PNG conversion is the right call for the dark-skin readability story, but it ballooned the tarball from ~15 MB on master to ~39 MB on this branch. news/admin-newspost.png alone is 6752×4000 / 6.2 MB, the other 15 are a consistent 2141×1320 at ~1 MB each. Even the pngquant pass you offered won't bring admin-newspost.png near 1 MB without resizing.

A direction that I think makes everyone happy, if you're up for it:

  • Trim e107_docs/help/_media/ from this PR. The parser + English help-file rewrites land cleanly. SHOT> markers stay in place pointing at relative paths; the admin docs render broken-image icons for those captures until a follow-up handles hosting.
  • Move screenshots to a sibling e107inc/e107-docs-media repo, served via jsDelivr (https://cdn.jsdelivr.net/gh/e107inc/e107-docs-media@vX.Y/...). Free, immutable cache, CORS-friendly, no impact on the e107 tarball.
  • Add a docs_media_base_url pref so admins can self-host or swap the CDN. resolveMedia() resolves SHOT> against it, with the existing local path as a fallback.

If you're game, I can file a tracking issue for the auto-generation side too. Deltik's been kicking around the idea of pixel-diff acceptance tests that would render the admin pages headlessly and dump the captures into the blobs repo automatically. Long-term that takes the screenshot-maintenance burden off contributors entirely. Only if you're comfortable. Say the word and I'll open it as an exploration item with you and @Deltik on the Cc.

Tests, a soft offer not a gate.

The state-machine refactor is exactly the kind of change a few small fixtures would lock in for next time. I sketched a regression test for the multi-line A> case in the inline on docs.php#L294-L327. Drop it into e107_tests/tests/unit/ if you'd like; it uses the same \Codeception\Test\Unit shape as e107_tests/tests/unit/CronParserTest.php. No worries if you'd rather not; happy to land it as a follow-up either way. 8-)

Squashed rebase of feat/admin-docs-rich-renderer onto current master,
incorporating both review rounds.

== Renderer (e107_admin/docs.php) ==

New line-based parser inside docs_ui::renderDoc() that keeps full
backward compatibility with the legacy Q>/A> markup but adds:

  H1> / H2>     section headings (auto-anchored, populate the TOC)
  P>            lead paragraph (multi-line)
  NOTE> / TIP> / WARN>
                Bootstrap-style callouts with FA icons (multi-line)
  IMG> / SHOT>  figures; SHOT> resolves against e107_docs/help/_media/
  STEP>         numbered steps grouped in <ol class='docs-steps'>
  CODE>         syntax-highlighted code blocks

  - Free text passes through e107::getParser()->toHTML() so BBCode
    ([b], [url], [img], ...) works inside help files.
  - Q>/A> pairs render as Bootstrap 3 panel-collapse accordions.
  - Auto-generated TOC (floating .docs-toc aside) from H1>/H2>.
  - Footer-inline JS adds smooth scroll for TOC links.
  - Chevron animation owned entirely by Bootstrap collapse.data-api;
    no inline handler fights it (round-2 fix).

State machine ( /  / flushPendingQuestion() /
flushPendingBlock() / emitPanel()) replaces the original sentinel
approach so multi-line A> bodies stay inside the panel-body wrapper
and orphan Q> entries flush as empty-body panels rather than leaking
into trailing paragraphs.

Other hardening (round 1 + 2):
  - slug() de-duplicates with a uniqueSlug closure + $seenSlugs map
    (-2, -3 suffixes) so repeated headings get distinct anchors.
  - resolveMedia() short-circuits on empty input (PHP 8 warning fix)
    and only resolves IMG/SHOT lines.
  - buildToc() opens nested <ul> inside the still-open <li>; verified
    well-formed for [H1,H2,H1] and [H1,H2,H2,H1].
  - $title interpolation passes through htmlspecialchars(ENT_QUOTES).

== Skin-aware styling ==

Inline CSS in docs.php contains structure only (margins, padding,
flex). Per-skin .docs-item palette lives in each of the six bundled
admin skins so the default modern-dark-2 (set by post-install update
routine 649-651) and the rest stay readable:

  e107_themes/bootstrap3/css/{kadmin,corporate,modern-light,
                              modern-dark,modern-dark-2,
                              bootstrap-dark.min}.css

Callouts use native Bootstrap .alert-info / .alert-success /
.alert-warning so the CDN-hosted skins (Flatly, Sandstone, Superhero)
inherit themed colours for free.

== Content ==

All 21 English help files rewritten with the new markers. Most Q/A
pairs preserved; a few were paraphrased or restructured into STEP>
sequences for readability.

New shared screenshot folder e107_docs/help/_media/<topic>/ ships 16
real captures plus README.md and SCREENSHOTS.md sidecars.

== Compatibility ==

  - Other languages keep working: parser falls back to plain
    paragraphs + BBCode for everything outside the new markers.
  - No DB schema changes, no new dependencies.
  - Path constants and coreLan('docs') calls untouched.

== Testing ==

  - php -l on docs.php: clean.
  - Manual: each sidebar entry renders TOC + collapsible FAQs +
    captioned screenshots + correctly-coloured callouts.
  - Verified on PHP 8.x.

Squashes 6f61b61 (initial), 1937e77 (round-1 Deltik response),
f22d594 (round-1 bot response), 275386d (screenshot rename),
5f650fd (round-2 bot response: chevron + SCREENSHOTS.md).
@Kanonimpresor Kanonimpresor force-pushed the feat/admin-docs-rich-renderer branch from 5f650fd to e097e4b Compare April 22, 2026 08:29
Re-encoded the 16 transparent PNGs under e107_docs/help/_media/ with a
quality pass that preserves visual fidelity but cuts the on-disk size
from ~25 MB to ~6.7 MB (-73%). Largest single saving: news/admin-newspost.png
shrinks from 6.2 MB to ~340 KB (-95%) after a sane resize from
6752x4000 to a docs-appropriate width.

Addresses the repo-weight concern raised by e107help[bot] in the round-2
review on PR e107inc#5596 and echoed by @Jimmi08 in discussion e107inc#5600. PNG transparency
preserved so the captures stay readable on every admin skin (light, dark,
modern-dark-2).
Locks in the contracts established by docs_ui::renderDoc() / buildToc()
/ slug() so any future change that breaks them fails fast in CI.

Four fixtures, mirroring the bot's round-2 sketch on PR e107inc#5596:

  - testMultilineAnswerStaysInsidePanelBody:
    multi-line A> body must stay inside <div class='panel-body'>...</div>,
    matching the legacy /Q\>(.*?)A>/si contract for translations and
    site-local docs.

  - testOrphanQuestionEmitsEmptyPanel:
    a Q> with no trailing A> must emit a closed empty-body panel; a
    following P> must NOT be captured inside that panel-body.

  - testRepeatedHeadingsGetUniqueSlugs:
    two H1> headings with identical text must get distinct anchors
    (base, base-2) and both must appear in the TOC.

  - testBuildTocProducesValidNestedHtml:
    nested <ul> may only appear inside a still-open <li>, never as a
    direct sibling; <ul>/</ul> and <li>/</li> tags must balance for a
    mixed [H1, H2, H1] heading sequence.

Approach: docs.php is a full admin entry point (requires class2.php,
exits unless ADMIN, instantiates the dispatcher), so the test extracts
the docs_ui / docs_form_ui class bodies with a regex and eval()s them
into the symbol table once. e_admin_ui (the parent) is required first;
ReflectionClass::newInstanceWithoutConstructor() then sidesteps the
e_admin_ui chain so we can call private renderDoc() / buildToc() / slug()
in isolation.

Same \Codeception\Test\Unit shape as e107_tests/tests/unit/CronParserTest.php.
@Kanonimpresor
Copy link
Copy Markdown
Contributor Author

@e107help — round 2 follow-ups all addressed. Three new commits on top of the squash:

e097e4b — squashed rebase onto current master (incorporates round 1 + round 2 fixes from the prior commit chain). Resolved 7 conflicts from #5595 (the six bootstrap3 admin skins + docs.php); the skin palettes were purely additive on top of the phpinfo block, and the docs.php hunks took the renderer side cleanly.

fbaeed3 — _media re-encoded with a quality pass: ~25 MB → ~6.7 MB (-73%). Largest single saving: news/admin-newspost.png from 6.2 MB → ~340 KB (-95%) after a sane resize from 6752×4000 to a docs-appropriate width. Transparency preserved so the captures stay readable on every admin skin (light, dark, modern-dark-2). Tarball impact for this PR drops from "+24 MB on top of master" to "+6.7 MB on top of master". This addresses the repo-weight concern surfaced here and echoed by @Jimmi08 in #5600 — the media-repo + jsDelivr move you proposed remains a sensible follow-up if @Deltik wants to push further, but it's no longer urgent.

05357eb — e107_tests/tests/unit/DocsRendererTest.php with the four fixtures from your sketch:

testMultilineAnswerStaysInsidePanelBody — locks the legacy Q>(.*?)A> contract for translations and site-local docs.
testOrphanQuestionEmitsEmptyPanel — Q> with no A> emits a closed empty-body panel; following P> doesn't get captured.
testRepeatedHeadingsGetUniqueSlugs — two H1> with identical text get distinct anchors via the uniqueSlug closure (-2 suffix).
testBuildTocProducesValidNestedHtml — nested

    only inside still-open
  • ;
      /
    and
  • /
  • balance for [H1, H2, H1].
    Approach: docs.php is a full admin entry point (requires class2.php, exits unless ADMIN, instantiates the dispatcher), so the test extracts docs_ui / docs_form_ui with a regex and eval()s the bodies once into the symbol table, then reaches renderDoc() / buildToc() / slug() via ReflectionClass::newInstanceWithoutConstructor() to skip the e_admin_ui chain. Same \Codeception\Test\Unit shape as CronParserTest.php.

    Round-2 inline items also done:

    Chevron handler at docs.php#L74-L76 deleted in this round (was already in 5f650fd, retained in the squash). Bootstrap 3's collapse.data-api now owns .collapsed exclusively, so the transition fires cleanly on first click and stays in phase on subsequent clicks. Diagnosis matched yours exactly.
    SCREENSHOTS.md — three rows realigned to banner-admin.png, admin-cache.png, admin-newspost.png.
    PR description updated to reflect that some Q/A pairs were paraphrased / restructured into STEP> sequences rather than preserved verbatim.
    Final tree: 3 commits over upstream/master, ~930/-151 (down from ~1071/-157 of the rebased-but-bloated baseline thanks to the PNG pass).

    cc @Deltik — ready for another look whenever you have a window.

@e107help
Copy link
Copy Markdown
Contributor

e107help Bot commented Apr 22, 2026

Right, went through the three new commits, @Kanonimpresor. They all hold up.

Round-2 item Where to look
Rebase onto master, conflicts resolved e097e4bc1 squashed; 3 commits on top of master, API reports mergeable: true
Screenshots compressed e107_docs/help/_media/ is now 6.59 MB across 31 files, and news/admin-newspost.png sits at 340 KB. The "+25 MB on top of master" reading is gone.
Chevron double-toggle Inline JS handler at the old docs.php:74-76 location is gone. Bootstrap 3's collapse.data-api now owns .collapsed unchallenged.
SCREENSHOTS.md alignment banner-admin.png / admin-cache.png / admin-newspost.png rows line up with the current tree.
PR body wording "Most original Q/A pairs are preserved verbatim; a few were paraphrased or restructured into STEP> sequences for readability" is honest framing.

The part that actually makes me smile: the test file landed. !heart e107_tests/tests/unit/DocsRendererTest.php covers all four round-1 regressions: multi-line A>, orphan Q>, colliding slugs, mixed-level TOC. The Reflection-based bootstrap keeps it unit-scoped rather than dragging in the whole admin dispatcher, and it's a reusable shape for anything else that lives inside an admin entry point.

On repo weight, +6.7 MB on top of master is small enough that the sibling-repo + jsDelivr idea is properly a "nice to have if @Deltik wants to push further", not urgent any more. The cross-link with #5600 still holds as direction; I'm happy to draft a tracking issue for that whenever a rainy day rolls round.

Three threads on my round-1 review are still technically open: two already marked outdated (chevron drop, SCREENSHOTS.md) and the test-scaffold one is effectively landed in its own file. Give me a nod and I'll resolve all three so the conversation tab quiets down.

Merge call is @Deltik's, as always. From my side, this reads ready. 8-)

@Kanonimpresor
Copy link
Copy Markdown
Contributor Author

@e107help — go ahead and resolve the three threads, thanks for the thorough turnaround. Happy to revisit the media-repo + jsDelivr move with @Deltik when there's a rainy day; for now this PR stands on its own. 🚀🚀🚀

@Kanonimpresor
Copy link
Copy Markdown
Contributor Author

Hi @Deltik — gentle ping on this one whenever you have a window. The three commits on top of master have been green for a couple of days and @e107help signed off on the round-3 review. Happy to address anything else you spot. Thanks!

e107help Bot pushed a commit that referenced this pull request May 19, 2026
PR #5596 (feat/admin-docs-rich-renderer) rewrites all 21 English help
files in a new line-based format.

- Administrators: the "set their permissions" sentence is replaced by
  a STEP> list under the rewrite, so the line my prior commit edited
  no longer exists in #5596's tree.
- Forums: the same Q/A line is preserved verbatim and already reads
  "but their name isn't in the list" in #5596's version, making the
  edit redundant and only adding a nuisance dash-character conflict.

Dropping both. lan_prefs.php (PRFLAN_38, PRFLAN_91) stays; #5596 does
not touch e107_languages/.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants