<?xml version="1.0" encoding="utf-8"?>
				<!-- generator="e107" -->
				<!-- content type="news" -->
				<rss  version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:atom="http://www.w3.org/2005/Atom"
					xmlns:dc="http://purl.org/dc/elements/1.1/"
					xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
					xmlns:media="http://search.yahoo.com/mrss/"
				>
				<channel>
				<title>e107 Bootstrap CMS Open Source : news</title>
				<link>/</link>
				<description>e107 is an open-source website content management system designed for maximum flexibility and ease of use.</description>


				<language>en-gb</language>
				<copyright></copyright>
				<managingEditor>e107inc@nospam.com (admin)</managingEditor>
				<webMaster>e107inc@nospam.com (admin)</webMaster>
				<pubDate>Wed, 10 Jun 2026 14:15:27 -0700</pubDate>
				<lastBuildDate>Wed, 10 Jun 2026 14:15:27 -0700</lastBuildDate>
				<docs>http://backend.userland.com/rss</docs>
				<generator>e107 (https://e107.org)</generator>
				<sy:updatePeriod>hourly</sy:updatePeriod>
				<sy:updateFrequency>1</sy:updateFrequency>
				<ttl>60</ttl>
				<atom:link href="https://e107.org/e107_plugins/rss_menu/rss.php?cat=news&amp;type=4&amp;topic=" rel="self" type="application/rss+xml" />

					<image>
					<title>e107 Bootstrap CMS Open Source : news</title>
					<url>https://d14cgbx38rqnr5.cloudfront.net/thumb.php?src=e_IMAGE%2Fbutton.png&amp;w=100&amp;h=0</url>
					<link>/</link>
					<width>88</width>
					<height>31</height>
					<description>e107 is an open-source website content management system designed for maximum flexibility and ease of use.</description>
					</image>
<item>
<title>e107 v2.3.6 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-3-6-bootstrap-cms-released.html</link>
<description><![CDATA[<blockquote>
<p>[!CAUTION]
<strong>v2.3.6 is a bug-fix release for sites on v2.3.5 or earlier.</strong>
Upgrade from v2.3.5 or earlier 2.x. If your site tracks the <code>master</code> branch, you are already past v2.3.6, so installing it would be a downgrade. v2.4.x is planned to be the next forward step.</p>
</blockquote>
<h2>Highlights</h2>
<ul>
<li><strong>[Security] Command injection in <code>resize_image()</code> (<a href="https://github.com/e107inc/e107/security/advisories/GHSA-3j33-c9v4-4p42">GHSA-3j33-c9v4-4p42</a>).</strong> The ImageMagick <code>convert</code> command line did not shell-escape its destination filename; reachable via news submission with the right combination of prefs. (<a href="https://github.com/e107inc/e107/commit/794a179f">https://github.com/e107inc/e107/commit/794a179f</a>)</li>
<li><strong>Host-header recovery for sites locked out by v2.3.4 / v2.3.5.</strong> The <a href="https://github.com/e107inc/e107/security/advisories/GHSA-7pmw-jwvr-cq2x">GHSA-7pmw-jwvr-cq2x</a> killswitch now case-folds, strips <code>www.</code>, and strips trailing ports before comparison, and returns a logged 503 instead of a bare <code>die()</code>. Closes #5627 and #5634. (<a href="https://github.com/e107inc/e107/commit/aba3b169">https://github.com/e107inc/e107/commit/aba3b169</a>)</li>
<li><strong><code>trusted_hosts</code> SitePref for parked, staging, and multi-host setups.</strong> Authorise additional incoming hostnames from <em>Admin → Preferences</em> without touching <code>e107_config.php</code>. (<a href="https://github.com/e107inc/e107/commit/c2bb246b">https://github.com/e107inc/e107/commit/c2bb246b</a>)</li>
<li><strong>PHP 8 fatal-error sweep.</strong> <code>thumb.php</code> (#5664), <code>fpw.php</code> on v1-style themes (#5653), the FAQ cron registration, and the admin nav / user-handler bare-constant reads all stop crashing on PHP 8. (<a href="https://github.com/e107inc/e107/commit/59aef4f1">https://github.com/e107inc/e107/commit/59aef4f1</a>, <a href="https://github.com/e107inc/e107/commit/02a79729">https://github.com/e107inc/e107/commit/02a79729</a>, <a href="https://github.com/e107inc/e107/commit/0635801a">https://github.com/e107inc/e107/commit/0635801a</a>, <a href="https://github.com/e107inc/e107/commit/b1290139">https://github.com/e107inc/e107/commit/b1290139</a>)</li>
</ul>
<h2>For Administrators</h2>
<h3>Added</h3>
<ul>
<li><strong><code>trusted_hosts</code> SitePref.</strong> New textarea below the Site URL row in <em>Admin → Preferences</em>. Paste additional hostnames one per line (e.g. <code>staging.example.com</code>, <code>example.org</code>); the server-side normaliser strips schemes/paths and de-duplicates case-insensitively, so <code>https://staging.example.com/</code> saves as <code>staging.example.com</code>. The pref is purely additive: requests whose <code>Host</code> matches the configured <code>siteurl</code> continue to pass without listing it here. Ref <a href="https://github.com/e107inc/e107/security/advisories/GHSA-7pmw-jwvr-cq2x">GHSA-7pmw-jwvr-cq2x</a>, #5627. (<a href="https://github.com/e107inc/e107/commit/c2bb246b">https://github.com/e107inc/e107/commit/c2bb246b</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>
<p><strong>Host-header validation (security).</strong> <code>www.</code> and the bare apex now match each other, hostnames compare case-insensitively, and trailing ports are stripped before comparison, so <code>https://example.com:8080/</code> matches <code>https://example.com/</code>. Sites that were stuck on the "Site Configuration Issue Detected" page after upgrading from v2.3.3 should now boot again without manual SQL edits.</p>
<p>The check itself still requires the request <code>Host</code> to match the configured <code>siteurl</code> (or fall under one of its subdomains, or be listed in <code>trusted_hosts</code>). Ref <a href="https://github.com/e107inc/e107/security/advisories/GHSA-7pmw-jwvr-cq2x">GHSA-7pmw-jwvr-cq2x</a>. (<a href="https://github.com/e107inc/e107/commit/aba3b169">https://github.com/e107inc/e107/commit/aba3b169</a>)</p>
</li>
<li>
<p><strong>Host-mismatch response.</strong> The bare <code>die('Site Configuration Issue Detected. ...')</code> that returned <code>200 OK</code> with one line of plain text is replaced by a <code>503 Service Unavailable</code> with a short HTML body that points the operator at the server error log. The diagnostic detail (configured siteurl, request Host) is written via <code>error_log()</code>, which previously sat after the <code>die()</code> and never fired.</p>
<p>The visible page intentionally does not echo the incoming <code>Host</code>, the configured siteurl, or any admin URL. The diagnostic surface stays in the log, which already requires server access. (<a href="https://github.com/e107inc/e107/commit/aba3b169">https://github.com/e107inc/e107/commit/aba3b169</a>)</p>
</li>
</ul>
<h3>Fixed</h3>
<ul>
<li><strong>Thumbnail rendering on PHP 8.</strong> <code>thumb.php</code> boots the framework directly without <code>class2.php</code>, so <code>E107_DEBUG_LEVEL</code> was never defined for that request; the first call that opened a DB handle (typically when the SitePrefs disk cache was cold) hit a PHP 8+ fatal in <code>e_db_pdo::__construct()</code> and broke every thumbnail on the site. Now guarded with <code>defset()</code>. Fixes #5664. (<a href="https://github.com/e107inc/e107/commit/59aef4f1">https://github.com/e107inc/e107/commit/59aef4f1</a>)</li>
<li><strong>Thumbnail database credentials.</strong> With the <code>E107_DEBUG_LEVEL</code> fatal out of the way, <code>thumb.php</code> then failed with <code>SQLSTATE[HY000] [2002] No such file or directory</code> because its manual bootstrap chain never populated the MySQL config the PDO connector reads. The bootstrap now routes through <code>e107::initCore()</code> (the same call <code>class2.php</code> uses), so credentials are set before the first DB call. Follow-up to #5664 / #5665. (<a href="https://github.com/e107inc/e107/commit/02a79729">https://github.com/e107inc/e107/commit/02a79729</a>)</li>
<li><strong>Forgot-password page on v1-style themes.</strong> <code>fpw.php</code> fataled with <code>Undefined constant LAN_112</code> when the active theme had no <code>theme.xml</code> (the legacy theme path uses <code>e107_core/templates/legacy/fpw_template.php</code>, which still references the old constant). The BC shim that mapped <code>LAN_112</code> → <code>LAN_FPW22</code> only fired in the members-only branch; it now fires before every downstream template require, regardless of branch. Fixes #5653. (<a href="https://github.com/e107inc/e107/commit/d9725b91">https://github.com/e107inc/e107/commit/d9725b91</a>)</li>
<li><strong>Other legacy templates.</strong> Any legacy core template under <code>e107_core/templates/legacy/</code> that referenced a dropped v1.x <code>LAN_*</code> constant could fatal on PHP 8 with a single missed reference. <code>e107::predefineLegacyLans()</code> now tokenises each legacy template before it loads and auto-defines any missing <code>LAN_*</code> with its own name as a value, emitting an <code>E_USER_WARNING</code> per auto-define so the maintainer trail stays visible. Wired into the six legacy require sites (<code>fpw.php</code> ×2, <code>search.php</code>, <code>signup.php</code>, <code>user.php</code>, <code>usersettings.php</code>). Refs #5653. (<a href="https://github.com/e107inc/e107/commit/b1290139">https://github.com/e107inc/e107/commit/b1290139</a>)</li>
<li><strong>Admin navigation icons and user-handler permissions on PHP 8.</strong> <code>sitelinks_class::setIconArray()</code> built the admin nav map from ~40 <code>E_32_*</code> constants and <code>user_handler::$core_perms</code> referenced dozens of <code>ADLAN_*</code> / <code>ADMSLAN_*</code> / <code>E_16_*</code> / <code>E_32_*</code> entries, all loaded lazily by the admin language file as bare reads. PHP 8 promotes bare reads of undefined constants to fatal <code>Error</code>s, so any caller that hit these before the admin language file loaded crashed. Both sites are now wrapped in <code>defset()</code> so the undefined case returns the empty default. (<a href="https://github.com/e107inc/e107/commit/0635801a">https://github.com/e107inc/e107/commit/0635801a</a>)</li>
<li><strong>FAQ plugin cron registration on PHP 8.</strong> <code>e107_plugins/faqs/e_cron.php</code> referenced <code>LANA_FAQ_CRON_1</code>, <code>LANA_FAQ_CRON_2</code>, and <code>LAN_AUTOMATION</code> at admin cron-registration time, which runs before <code>English_admin.php</code> is loaded. PHP 8 turned the bareword fallback into a fatal; the registration path now uses <code>defset()</code>. (<a href="https://github.com/e107inc/e107/commit/21f7b584">https://github.com/e107inc/e107/commit/21f7b584</a>)</li>
<li><strong><code>strftime()</code> deprecation on PHP 8.1+.</strong> <code>StrptimeTrait::buildMonthArrays()</code> called PHP's <code>strftime()</code> to localise month names. PHP 8.1 deprecated the function and PHP 9 will remove it, so the <code>@</code>-suppressed call still landed in <code>error_log</code>. Both calls are now routed through the <code>eShims::strftime()</code> polyfill that already exists in the tree. (<a href="https://github.com/e107inc/e107/commit/295ce2a1">https://github.com/e107inc/e107/commit/295ce2a1</a>)</li>
</ul>
<h2>For Developers</h2>
<h3>Added</h3>
<ul>
<li>
<p><strong><code>e107::predefineLegacyLans($path)</code> token-scan safety net for legacy templates.</strong> Tokenises the requested template, finds bare <code>LAN_*</code> token references (skipping function/method/class/static contexts and call sites), and <code>define()</code>s any that are still missing with their own name as value. Token extraction is cached on <code>hash_file('sha256', $path)</code> keyed entries (APCu when available, otherwise a file under <code>e_CACHE</code>); a process-local memo short-circuits repeat resolutions. Warm-cache cost is roughly 6 µs vs the ~4 µs baseline.</p>
<p>Wired into <code>fpw.php</code>, <code>search.php</code>, <code>signup.php</code>, <code>user.php</code>, and <code>usersettings.php</code>. The wrappers call it immediately before the existing <code>require</code>/<code>include</code> so caller-scope template variables (<code>$FPW_TABLE</code>, <code>$SIGNUP_BODY</code>, etc.) remain assignable. Refs #5653. (<a href="https://github.com/e107inc/e107/commit/b1290139">https://github.com/e107inc/e107/commit/b1290139</a>)</p>
</li>
<li><strong><code>trusted_hosts</code> SitePref plumbing.</strong> A new <code>e107::isAllowedHost()</code> private helper composes the allow-list from <code>parse_url(siteurl)['host']</code> plus the entries saved in <code>trusted_hosts</code>. The pref reads as a newline-separated list; the saver normalises (scheme/path strip, case-fold dedup) before writing back. (<a href="https://github.com/e107inc/e107/commit/c2bb246b">https://github.com/e107inc/e107/commit/c2bb246b</a>)</li>
<li>
<p><strong>Docker-based parallel test environments.</strong> <code>e107_tests/bin/e107-tests</code> is a new CLI that spins up an isolated PHP + Apache + MySQL stack per worktree (<code>up | down | reset | clean | install | urls | status | logs | shell | db-shell | exec | run | list</code>). Each worktree + matrix combo gets a deterministic compose project name derived from the worktree path, so parallel sessions never collide on container names, networks, volumes, or host ports. A new <code>config.docker.yml</code> layer slots into the existing config cascade (<code>sample</code> → <code>yml</code> → <code>docker</code> → <code>local</code>).</p>
<p>Existing deployers (<code>local</code>, <code>sftp</code>, <code>cpanel</code>, <code>none</code>) and the CI workflows are untouched. (<a href="https://github.com/e107inc/e107/commit/9b5f40ea">https://github.com/e107inc/e107/commit/9b5f40ea</a>)</p>
</li>
<li><strong>Test coverage.</strong> <code>resize_handlerTest</code> exercises the ImageMagick branch of <code>resize_image()</code> with three command-substitution payloads and asserts no marker file is created and no <code>id</code>-style output leaks into a filename. <code>e107HostValidationTest</code> covers the case-fold, www-strip, and port-strip behaviour of <code>e107::isAllowedHost()</code> plus <code>trusted_hosts</code> composition. <code>e107RequireLegacyTemplateTest</code> covers the tokeniser context filtering, define/warn behaviour, scope preservation, missing-file return value, and the #5653 regression case. (<a href="https://github.com/e107inc/e107/commit/794a179f">https://github.com/e107inc/e107/commit/794a179f</a>, <a href="https://github.com/e107inc/e107/commit/c2bb246b">https://github.com/e107inc/e107/commit/c2bb246b</a>, <a href="https://github.com/e107inc/e107/commit/b1290139">https://github.com/e107inc/e107/commit/b1290139</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>
<p><strong><code>language::bcDefs()</code> no-argument default expanded.</strong> The boot-time call from <code>class2.php:590</code> previously defined only <code>LAN_180 → LAN_SEARCH</code>. Legacy templates that referenced any other dropped v1.x constant whose replacement happens to live in <code>English/English.php</code> still fataled on PHP 8. The default now covers ~20 boot-resolvable aliases: generic actions (<code>LAN_406</code> / <code>LAN_419</code> / <code>LAN_435</code>), the v1 download prefix (<code>LAN_dl_7..LAN_dl_35</code>), and a defined-as-empty group for dropped-without-replacement constants.</p>
<p>Conflict policy: where the same legacy constant had divergent mappings across per-entrypoint shims (<code>LAN_7..LAN_10</code>, <code>LAN_112</code>, <code>LAN_122</code>, etc.) the global default deliberately omits them and per-entrypoint shims remain authoritative. Mappings whose replacement lives in a lazy <code>lan_*.php</code> cannot be resolved at boot (<code>defined()</code> returns <code>false</code> and the entry silently no-ops); those are still handled by per-entrypoint <code>language::bcDefs()</code> calls after the relevant <code>e107::coreLan()</code>. Refs #5653. (<a href="https://github.com/e107inc/e107/commit/d2ef6b10">https://github.com/e107inc/e107/commit/d2ef6b10</a>)</p>
</li>
<li><strong>Host comparison helper.</strong> A new <code>e107::normaliseHost()</code> lowercases, strips a trailing <code><img class='e-emoticon' src='https://static.e107.org//e107_images/emotes/default/tongue.png' alt="tongue"  />ort</code>, and strips a leading <code>www.</code> before comparison. Plugins that previously did their own <code>Host</code>-header guards should switch to <code>e107::isAllowedHost()</code> so the <code>trusted_hosts</code> allow-list composes correctly. (<a href="https://github.com/e107inc/e107/commit/aba3b169">https://github.com/e107inc/e107/commit/aba3b169</a>)</li>
<li><strong><code>resize_image()</code> shell escaping.</strong> The <code>convert</code> command line now passes the destination through <code>escapeshellarg()</code> and casts the integer geometry/quality args. If you maintain a fork or call <code>resize_image()</code> directly from a plugin, no migration is required, but any caller that previously relied on quoting the destination itself can drop that quoting. Ref <a href="https://github.com/e107inc/e107/security/advisories/GHSA-3j33-c9v4-4p42">GHSA-3j33-c9v4-4p42</a>. (<a href="https://github.com/e107inc/e107/commit/794a179f">https://github.com/e107inc/e107/commit/794a179f</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>
<p><strong><code>thumb.php</code> bootstrap.</strong> The manual bootstrap chain (<code>prepare_request</code> / <code>setDirs</code> / <code>set_constants</code> / ...) is replaced by <code>e107::initCore()</code> fed the same <code>mySQL</code>-prefixed <code>$sql_info</code> <code>compact()</code> array <code>class2.php</code> passes.</p>
<p>Note the v2.3.x <code>e107::_init()</code> does not translate keys the way master's <code>e107::setMySQLConfig()</code> does, so the array must go in prefixed. The master-style <code>str_replace('mySQL', '', $k)</code> translation breaks v2.3.x because <code>e_db_pdo</code> still reads <code>$config['mySQLserver']</code> etc. Follow-up to #5664 / #5665. (<a href="https://github.com/e107inc/e107/commit/02a79729">https://github.com/e107inc/e107/commit/02a79729</a>)</p>
</li>
<li><strong><code>submitnews.php</code> title slug.</strong> The slug used to build the destination filename for resize is now confined to <code>[A-Za-z0-9_]</code> before reaching <code>resize_image()</code>, so shell metacharacters never escape the filter even if a future caller relaxes the filename quoting. Ref <a href="https://github.com/e107inc/e107/security/advisories/GHSA-3j33-c9v4-4p42">GHSA-3j33-c9v4-4p42</a>. (<a href="https://github.com/e107inc/e107/commit/794a179f">https://github.com/e107inc/e107/commit/794a179f</a>)</li>
<li>
<p><strong><code>resize_handlerTest</code> teardown sentinel.</strong> <code>tearDown()</code> ran even when <code>setUp()</code> had short-circuited via <code>markTestSkipped()</code> (CI images without ImageMagick); in that case <code>$savedPref === null</code> took the <code>unset($GLOBALS['pref'])</code> branch and wiped the global pref array for every following test in the shuffled unit-suite run. A <code>prefMutated</code> sentinel now flips true only after <code>_before()</code> mutates <code>$pref</code>, and <code>_after()</code> bails out early otherwise.</p>
<p>Locally invisible because ImageMagick was usually installed and the early-skip branch wasn't taken. (<a href="https://github.com/e107inc/e107/commit/8cf19729">https://github.com/e107inc/e107/commit/8cf19729</a>)</p>
</li>
<li>
<p><strong>CI on the legacy PHP cells.</strong> <code>actions/checkout@v3</code> was reclassified to a Node 20 action, which requires glibc 2.27+; the official <code>php:5.6</code> / <code>php:7.0</code> images are on Debian 9 (glibc 2.24) and the action errors before its main logic. The two legacy cells now use an inline <code>git fetch</code> + <code>git checkout</code> against the run SHA.</p>
<p>The <code>php:5.6</code> × <code>mysql:8.0</code> and <code>php:7.0</code> × <code>mysql:8.0</code> combinations have also been dropped via <code>matrix.exclude</code>. Mysql:8 starts with <code>character-set-server=utf8mb4</code> by default and the PDO driver in those PHP versions doesn't recognise the charset, failing the connection handshake before any test runs. (<a href="https://github.com/e107inc/e107/commit/d024d205">https://github.com/e107inc/e107/commit/d024d205</a>, <a href="https://github.com/e107inc/e107/commit/756dc92c">https://github.com/e107inc/e107/commit/756dc92c</a>)</p>
</li>
<li><strong>Composer audit no longer blocks resolution.</strong> Composer 2.9.x refuses to resolve package versions affected by a Packagist security advisory at install time. Every <code>twig/twig</code> between v1.28 and v3.20 carries at least one advisory, leaving v3.26.0 as the only resolution candidate; v3.26.0 requires PHP 8.1+, so the PHP 7.4 cell of the unit-test matrix failed <code>composer update</code>. The test harness is dev-only and never ships with a release, so the audit's resolution-time block is now disabled via <code>config.audit.block-insecure: false</code>. <code>composer audit</code> still runs after install and reports any advisories. (<a href="https://github.com/e107inc/e107/commit/46351d1a">https://github.com/e107inc/e107/commit/46351d1a</a>)</li>
<li><strong>Matrix CI design restored.</strong> The "Collapse 5×5 matrix into one host-orchestrated job" experiment that landed during the v2.3.5 cycle was reverted: single jobs ran ~20 minutes end-to-end vs ~5 minutes per cell under master's parallel matrix, and exhibited intermittent docker / mysql container startup races at the per-cell DB pre-create step. v2.3.x CI is back to the matrix layout that mirrors master, with the legacy PHP cells extended via the inline-checkout and matrix.exclude pair above. (<a href="https://github.com/e107inc/e107/commit/da47684c">https://github.com/e107inc/e107/commit/da47684c</a>)</li>
<li><strong><code>language::bcDefs()</code> graveyard collisions on v2.3.x.</strong> Pre-defining <code>LAN_199</code>, <code>LAN_406</code>, and <code>LAN_419</code> at boot collided with v2.3.x's lazy <code>lan_search.php</code> and <code>lan_upload.php</code> (which still use <code>define()</code>; master converted them to array form in #5465). PHPUnit's <code>convertWarningsToExceptions=true</code> escalated the "Constant already defined" warning and aborted mid-load. Those three entries are dropped on this branch; the lazy LAN files remain authoritative. (<a href="https://github.com/e107inc/e107/commit/f1b4bf27">https://github.com/e107inc/e107/commit/f1b4bf27</a>)</li>
</ul><br />]]></description>
<dc:creator>admin</dc:creator>
<pubDate>Sun, 24 May 2026 03:40:34 -0700</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-3-6-bootstrap-cms-released.html</guid>
</item>

<item>
<title>e107 v2.3.5 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-3-5-bootstrap-cms-released.html</link>
<description><![CDATA[<blockquote>
<p>[!CAUTION] <strong>v2.3.5 is a security release for sites on v2.3.4 or earlier.</strong> Upgrade from v2.3.4 or earlier 2.x. If your site tracks the <code>master</code> branch, you are already past v2.3.5, so installing it would be a downgrade. v2.4.x is planned to be the next forward step.</p>
<p>[!IMPORTANT] v2.3.5 ships a single fix for a CSRF vulnerability in the AJAX comment moderation endpoints. Sites that allow user comments and have at least one logged-in moderator or admin should upgrade promptly.</p>
</blockquote>
<h2>Highlights</h2>
<ul>
<li><strong>[Security] CSRF on AJAX comment moderation (<a href="https://github.com/e107inc/e107/security/advisories/GHSA-m4hh-m278-jwg5">GHSA-m4hh-m278-jwg5</a>).</strong> The AJAX <code>delete</code>, <code>approve</code>, and <code>edit</code> branches in <code>comment.php</code> previously executed when only the payload and the <code>ADMIN</code> gate were present, so a cross-origin POST without an <code>e-token</code> would still go through. A logged-in moderator visiting an attacker page could be made to block, approve, or edit comments without their knowledge. The endpoints now reject any mutation request that lacks a valid form token, and the front-end UI threads the token through the delete/approve/edit anchors so legitimate clicks keep working. (<a href="https://github.com/e107inc/e107/commit/a46a77a6">https://github.com/e107inc/e107/commit/a46a77a6</a>)</li>
</ul>
<h2>For Administrators</h2>
<h3>Changed</h3>
<ul>
<li><strong>AJAX comment moderation (security).</strong> <code>/comment.php?mode=delete</code>, <code>?mode=approve</code>, and <code>?mode=edit</code> now return <code>{"msg":"Unauthorized access!","error":true}</code> when the request omits or fails the <code>e-token</code> check. The shipped front-end UI was updated in lockstep, so this is transparent for legitimate use. If you maintain a custom theme that replaces the comment-options or comment-edit shortcodes, see the developer note below. Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-m4hh-m278-jwg5">GHSA-m4hh-m278-jwg5</a>. (<a href="https://github.com/e107inc/e107/commit/a46a77a6">https://github.com/e107inc/e107/commit/a46a77a6</a>)</li>
</ul>
<h2>For Developers</h2>
<h3>Changed</h3>
<ul>
<li>
<p><strong>Comment-options shortcodes now emit <code>data-token</code>.</strong> <code>comment_shortcodes::sc_comment_delete()</code> and the comment-edit anchor render a <code>data-token</code> attribute populated from <code>e_TOKEN</code>. The corresponding handlers in <code>front.jquery.js</code> read it back and include <code>e-token</code> in the AJAX payload. If you ship a fork of these shortcodes or a custom AJAX client that talks to <code>/comment.php</code>, mirror the change — without it your delete/approve/edit calls will be rejected. Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-m4hh-m278-jwg5">GHSA-m4hh-m278-jwg5</a>. (<a href="https://github.com/e107inc/e107/commit/a46a77a6">https://github.com/e107inc/e107/commit/a46a77a6</a>)</p>
<p><strong>Token enforcement is local to <code>comment.php</code> for now.</strong> The central <code>session_handler::check()</code> still only validates the token when one is present. If you add new AJAX mutation branches to <code>comment.php</code> or to similar endpoints, guard them explicitly with <code>e107::getSession()->checkFormToken($_POST['e-token'])</code> until the central gate is tightened.</p>
</li>
</ul><br />]]></description>
<dc:creator>admin</dc:creator>
<pubDate>Sun, 17 May 2026 18:09:51 -0700</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-3-5-bootstrap-cms-released.html</guid>
</item>

<item>
<title>e107 v2.3.4 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-3-4-bootstrap-cms-released.html</link>
<description><![CDATA[<blockquote>
<p>[!CAUTION]
<strong>v2.3.4 is a bug-fix release for sites on v2.3.3 or earlier.</strong>
Upgrade from v2.3.3 or earlier 2.x. If your site tracks the <code>master</code> branch, you are already past v2.3.4, so installing it would be a downgrade. v2.4.x is planned to be the next forward step.</p>
<p>[!IMPORTANT]
v2.3.4 collects the most overdue work in the queue: security advisory fixes for password reset, comment editing, and Media Manager imports; the PHP 8.x compatibility patches that have been accumulating; and the bug fixes that really needed to ship. It's not a feature release; the goal is to give v2.3.x sites a stable point release they can adopt while v2.4 work continues separately.</p>
</blockquote>
<h2>Highlights</h2>
<ul>
<li><strong>[Security] Critical Broken Access Control on comment edit (<a href="https://github.com/e107inc/e107/security/advisories/GHSA-5w63-63rh-99q6">GHSA-5w63-63rh-99q6</a>).</strong> <code>comment.php</code> previously allowed any authenticated user to overwrite another user's comment by passing that comment's <code>itemid</code>. The <code>updateComment()</code> SQL now requires the row's <code>comment_author_id</code> to match the editor's <code>USERID</code>, so cross-user edits return "Update Failed" instead of succeeding silently. (<a href="https://github.com/e107inc/e107/commit/23961a8f">https://github.com/e107inc/e107/commit/23961a8f</a>)</li>
<li><strong>[Security] Server-Side Request Forgery in Media Manager imports (<a href="https://github.com/e107inc/e107/security/advisories/GHSA-92fr-7h4f-22pp">GHSA-92fr-7h4f-22pp</a>).</strong> <code>e_file::getRemoteFile()</code> and <code>getRemoteContent()</code> now reject URLs that resolve to private, loopback, link-local, or otherwise reserved IP addresses, and limit cURL to HTTP/HTTPS. Sites that legitimately need to fetch from intranet hosts can opt back in by defining <code>e_REMOTE_FILE_ALLOW_PRIVATE</code> to <code>true</code>. (<a href="https://github.com/e107inc/e107/commit/5f98cc9f">https://github.com/e107inc/e107/commit/5f98cc9f</a>, <a href="https://github.com/e107inc/e107/commit/40b2d111">https://github.com/e107inc/e107/commit/40b2d111</a>)</li>
<li><strong>[Security] Host Header Injection in password reset (<a href="https://github.com/e107inc/e107/security/advisories/GHSA-7pmw-jwvr-cq2x">GHSA-7pmw-jwvr-cq2x</a>).</strong> The emailed password-reset link no longer trusts the incoming HTTP <code>Host</code> header. Requests with a <code>Host</code> that doesn't match the configured <code>siteurl</code> are rejected, and <code>fpw.php</code> now refuses to run at all if <code>siteurl</code> is unset rather than falling back to HTTP_HOST. (<a href="https://github.com/e107inc/e107/commit/04511f9f">https://github.com/e107inc/e107/commit/04511f9f</a>, <a href="https://github.com/e107inc/e107/commit/b0dee823">https://github.com/e107inc/e107/commit/b0dee823</a>, <a href="https://github.com/e107inc/e107/commit/c4f9f71b">https://github.com/e107inc/e107/commit/c4f9f71b</a>)</li>
<li><strong>[Security] Privilege hardening.</strong> Media Manager preferences and avatar settings now require Main Admin. The default userclass visibility and edit permissions are also Main Admin by default (previously Admin). (#5489, #5477)</li>
<li><strong>Admin area usability.</strong> Numerous fatal-error and rendering fixes across admin search, admin UI grids, mailout, polls, datetimepicker, phpinfo, and legacy admin pages. (#5211, #5464, #5271, #5473)</li>
<li><strong>Email reliability.</strong> Fixes to CC handling, DKIM identity, persistent-recipient leakage across <code>sendEmail()</code> calls, and IP logging in notifications. (#5498, #5535, #5545)</li>
<li><strong>PHP 8.x compatibility.</strong> Several warnings and fatals on PHP 8.0–8.5 removed from <code>db_verify</code>, <code>thumb.php</code>, <code>file_class</code>, <code>theme_handler</code>, and rating-/forum-info rendering. (#4501, #5443, #5482)</li>
<li><strong>Forum info restored.</strong> <code>sc_foruminfo</code> now renders active-user counts and the newest member again. Two long-standing bugs had been hiding the whole block: the <code>SELECT</code> for the newest user was commented out, and the <code>e_TRACKING_DISABLED</code> ternary condition was inverted so the block was only shown when tracking was <em>disabled</em>, which is never the default. (<a href="https://github.com/e107inc/e107/commit/0e23f651">https://github.com/e107inc/e107/commit/0e23f651</a>, <a href="https://github.com/e107inc/e107/commit/54e4b9de">https://github.com/e107inc/e107/commit/54e4b9de</a>)</li>
</ul>
<blockquote>
<p>[!NOTE]
A note from the maintainer, @Deltik:</p>
<blockquote>
<p>v2.4 is going to need more time before it's at the quality level the e107 community deserves. Here's what's upcoming:</p>
<ul>
<li><strong>MyISAM → InnoDB</strong> as the default engine, for crash recovery, row-level locking, and proper transactions</li>
<li><strong>utf8mb3 → utf8mb4</strong> for native emoji support and full Unicode in usernames, posts, and comments</li>
<li><strong>Implicit FULLTEXT indexes</strong> that work on InnoDB, so search no longer pins us to MyISAM</li>
<li><strong>JWT-backed CAPTCHAs</strong> where the challenge carries its own server-signed solution token, eliminating the need to stash state in a guest session</li>
<li><strong>No more sessions for guests.</strong> Every anonymous visitor today gets a server-side session row; that goes away.</li>
<li><strong>New admin area skin</strong> with a collapsible sidebar, badges, and mobile navigation</li>
<li><strong>Bootstrap 5.3 + FontAwesome 6</strong> UI refresh across the front-end and admin</li>
<li><strong>Admin change history with revert</strong> for auditable database edits</li>
<li><strong>Custom domains per page and static URL mapping</strong> for editorial control over URLs</li>
<li><strong>Schema.org (JSON-LD) support</strong> for better SEO, with news schema baked in</li>
<li><strong>Sitemap index support</strong> for sites past the single-sitemap limit</li>
<li><strong>Image alt-attribute management</strong> in Media Manager</li>
<li><strong>Plugin test runner</strong> so plugin authors can ship PHPUnit/Codeception tests with their plugins</li>
<li><strong>The community PR backlog</strong> finally getting reviewed and processed</li>
</ul>
</blockquote>
</blockquote>
<h2>For Administrators</h2>
<h3>Added</h3>
<ul>
<li>Misconfiguration error on <code>fpw.php</code> when the <code>siteurl</code> preference is empty, so admins get a visible signal instead of silently broken password-reset emails. (<a href="https://github.com/e107inc/e107/security/advisories/GHSA-7pmw-jwvr-cq2x">GHSA-7pmw-jwvr-cq2x</a>, <a href="https://github.com/e107inc/e107/commit/04511f9f">https://github.com/e107inc/e107/commit/04511f9f</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li><strong>Comment editing (security).</strong> <code>comment.updateComment()</code> now scopes the SQL update to the editor's own user id, so cross-user comment edits via <code>/comment.php?mode=edit</code> are rejected. Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-5w63-63rh-99q6">GHSA-5w63-63rh-99q6</a>. (<a href="https://github.com/e107inc/e107/commit/23961a8f">https://github.com/e107inc/e107/commit/23961a8f</a>)</li>
<li><strong>Remote file fetching (security).</strong> <code>e_file::getRemoteFile()</code> and <code>getRemoteContent()</code> now block private, loopback, link-local, and reserved IP ranges by default and limit cURL to HTTP/HTTPS. Define <code>e_REMOTE_FILE_ALLOW_PRIVATE = true</code> to opt back in for intranet/self-hosted use. Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-92fr-7h4f-22pp">GHSA-92fr-7h4f-22pp</a>. (<a href="https://github.com/e107inc/e107/commit/5f98cc9f">https://github.com/e107inc/e107/commit/5f98cc9f</a>, <a href="https://github.com/e107inc/e107/commit/40b2d111">https://github.com/e107inc/e107/commit/40b2d111</a>)</li>
<li><strong>Password reset (security).</strong> <code>fpw.php</code> now refuses to process any request when the <code>siteurl</code> preference is unset, and builds the reset link from the pref directly rather than from <code>SITEURL</code> (which could be derived from <code>HTTP_HOST</code>). Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-7pmw-jwvr-cq2x">GHSA-7pmw-jwvr-cq2x</a>. (<a href="https://github.com/e107inc/e107/commit/04511f9f">https://github.com/e107inc/e107/commit/04511f9f</a>)</li>
<li><strong>Host header validation (security).</strong> The core URL bootstrap now rejects requests whose <code>Host</code> header doesn't match the configured <code>siteurl</code> or the <code>site_hosts</code> config entry, with subdomain support. Misconfigured setups now fail fast with a "Site Configuration Issue" message. (#5458, <a href="https://github.com/e107inc/e107/security/advisories/GHSA-7pmw-jwvr-cq2x">GHSA-7pmw-jwvr-cq2x</a>, <a href="https://github.com/e107inc/e107/commit/b0dee823">https://github.com/e107inc/e107/commit/b0dee823</a>, <a href="https://github.com/e107inc/e107/commit/c4f9f71b">https://github.com/e107inc/e107/commit/c4f9f71b</a>)</li>
<li><strong>Media Manager permissions (security).</strong> Media Manager <em>Preferences</em> and <em>Avatar</em> settings now require Main Admin. Media Category management is restricted to the <code>A2</code> permission. (#5489)</li>
<li><strong>Userclass defaults (security).</strong> Default userclass visibility and edit permissions now default to Main Admin instead of Admin. (#5477)</li>
<li><strong>Admin area theme gate.</strong> Non-bootstrap3 admin themes that were known to break the admin area are no longer accepted; the admin falls back to a working theme. (<a href="https://github.com/e107inc/e107/commit/3b7097e0">https://github.com/e107inc/e107/commit/3b7097e0</a>)</li>
<li><strong>Site redirection.</strong> <code>www.</code> → bare-domain (and vice versa) handling was refactored out of <code>class2.php</code> into a dedicated method. (#5097)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fatal errors on the admin search page (#5211), the admin-UI with custom method attribute+filter (#5464), the polls form column selector (#5271), and the plugin-repair extended-user-field path (#5483).</li>
<li>Admin user area: avatar rendering (#5146), extended user fields restored after plugin refresh (#5483), unbanned users keeping "not verified" status (<a href="https://github.com/e107inc/e107/commit/e875515d">https://github.com/e107inc/e107/commit/e875515d</a>), oversized navigation icons (#5345).</li>
<li>Admin email/mailout: CC recipients added correctly, DKIM identity corrected, recipients no longer persist across multiple <code>sendEmail()</code> calls, core prefs no longer stored on instance, mailout mailer-type restriction that was blocking pref saves. (#5498, #5535, #4123, #5355)</li>
<li>Admin log: query-speed optimization and indexing improvements, duplicate column removed from the rolling log, debug SQL query output. (#5490, #5473)</li>
<li>Admin phpinfo page: responsive layout, dark-on-dark text readability in modern-light theme, refactored rendering for theme compatibility, and sidebar menu added to legacy admin pages. (<a href="https://github.com/e107inc/e107/commit/730245ef">https://github.com/e107inc/e107/commit/730245ef</a>, <a href="https://github.com/e107inc/e107/commit/929f5494">https://github.com/e107inc/e107/commit/929f5494</a>, <a href="https://github.com/e107inc/e107/commit/48b30bc8">https://github.com/e107inc/e107/commit/48b30bc8</a>)</li>
<li>Password reset: Bootstrap 5 fpw template rendering. (#5336)</li>
<li>Avatars: remote file checks (#5146, #5387), missing-avatar fallback (<a href="https://github.com/e107inc/e107/commit/295a5dad">https://github.com/e107inc/e107/commit/295a5dad</a>), default avatar rendering (<a href="https://github.com/e107inc/e107/commit/81ae03c3">https://github.com/e107inc/e107/commit/81ae03c3</a>), MIME type handling for remote images (#5387), <code>.wav</code> audio (#5390) and video dimension handling (#5396) in the media parser.</li>
<li>Forum plugin: <code>newforumposts_menu</code> page rendering (#5340), shortcodes now use <code>e_HTTP</code> for <code>online.php</code> links (PR #5340), <code>sc_foruminfo</code> now renders the active-users block and the newest-member link (previously hidden by an inverted condition, with the underlying user lookup query commented out) (<a href="https://github.com/e107inc/e107/commit/0e23f651">https://github.com/e107inc/e107/commit/0e23f651</a>, <a href="https://github.com/e107inc/e107/commit/54e4b9de">https://github.com/e107inc/e107/commit/54e4b9de</a>).</li>
<li>Ratings: widget renders cleanly for items that have not been rated yet; previously a missing rating row triggered a PHP warning that became a fatal on PHP 8.5. (<a href="https://github.com/e107inc/e107/commit/db358ca1">https://github.com/e107inc/e107/commit/db358ca1</a>)</li>
<li>News plugin: language loading (#5465), body/extended search scope (#5523).</li>
<li>Signup: COPPA links updated (#5121), duplicate <code>LAN_ERROR_*</code> constants removed (#3438).</li>
<li>Notifications: IPv4 format on <code>user_ban_flood</code> (#3612), IP populated in <code>notify_class</code> (#5545), mcp_token tracker ignored in application tracker (#5288).</li>
<li>Core boot: database warning in <code>class2.php</code> (#5220), missing creation-log entry ID (#5317), config-hash handling (#5120), override-class conflict (#5114), SEF URL in the admin user-settings nav link (#5082).</li>
<li>Download plugin: duplicate assignment in <code>download_shortcodes</code> (<a href="https://github.com/e107inc/e107/commit/c55de23b">https://github.com/e107inc/e107/commit/c55de23b</a>), missing <code>DOWNLOAD_CAT_CAPTION</code> template var initialization (<a href="https://github.com/e107inc/e107/commit/83bd620e">https://github.com/e107inc/e107/commit/83bd620e</a>, <a href="https://github.com/e107inc/e107/commit/a996b769">https://github.com/e107inc/e107/commit/a996b769</a>).</li>
<li>Theme modern-dark: admin nav dropdown alignment. (#5406)</li>
<li>File Inspector: graceful handling of <code>tmpfile()</code> failure in phar loaders. (<a href="https://github.com/e107inc/e107/commit/da1b6f9c">https://github.com/e107inc/e107/commit/da1b6f9c</a>)</li>
</ul>
<h2>For Developers</h2>
<h3>Added</h3>
<ul>
<li><code>e_file::isUrlSafe($url)</code> helper that validates a URL against private/reserved IP ranges and the HTTP/HTTPS scheme; called by <code>getRemoteFile()</code> and <code>getRemoteContent()</code>. IPv4-mapped IPv6 inputs (e.g. <code>::ffff:127.0.0.1</code>) are canonicalized to their IPv4 form before the range check so they cannot bypass it. Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-92fr-7h4f-22pp">GHSA-92fr-7h4f-22pp</a>. (<a href="https://github.com/e107inc/e107/commit/5f98cc9f">https://github.com/e107inc/e107/commit/5f98cc9f</a>, <a href="https://github.com/e107inc/e107/commit/40b2d111">https://github.com/e107inc/e107/commit/40b2d111</a>)</li>
<li>Scaffold for <code>XmlAdminIcons</code> in <code>plugin_class</code> (with rename guard in <code>media_class</code>). (#5295)</li>
</ul>
<h3>Changed</h3>
<ul>
<li><strong>Comment ownership check.</strong> <code>comment::updateComment()</code> now constrains its SQL update to <code>comment_author_id = USERID</code>. If you maintain a fork or plugin that calls this method on behalf of another user (moderator tooling, cron-based imports), expect those calls to silently no-op and refactor toward a moderator-aware helper. Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-5w63-63rh-99q6">GHSA-5w63-63rh-99q6</a>. (<a href="https://github.com/e107inc/e107/commit/23961a8f">https://github.com/e107inc/e107/commit/23961a8f</a>)</li>
<li><strong><code>e_file</code> SSRF defense.</strong> <code>getRemoteFile()</code> and <code>getRemoteContent()</code> reject URLs that resolve to private/loopback/reserved IPs and any non-HTTP(S) scheme; cURL <code>CURLOPT_PROTOCOLS</code>/<code>CURLOPT_REDIR_PROTOCOLS</code> are pinned to HTTP/HTTPS. IPv4-mapped IPv6 addresses are canonicalized to IPv4 before the range check, so <code>::ffff:10.0.0.1</code> is treated as <code>10.0.0.1</code> and blocked. Define <code>e_REMOTE_FILE_ALLOW_PRIVATE = true</code> in <code>e107_config.php</code> to bypass for legitimate intranet use. Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-92fr-7h4f-22pp">GHSA-92fr-7h4f-22pp</a>. (<a href="https://github.com/e107inc/e107/commit/5f98cc9f">https://github.com/e107inc/e107/commit/5f98cc9f</a>, <a href="https://github.com/e107inc/e107/commit/40b2d111">https://github.com/e107inc/e107/commit/40b2d111</a>)</li>
<li><strong>Password reset link construction.</strong> <code>fpw.php</code> builds the reset URL from <code>e107::getPref('siteurl')</code> directly instead of the <code>SITEURL</code> constant. If you rely on <code>SITEURL</code> in similar contexts elsewhere, consider doing the same for anything that leaves the server (emails, webhooks, signed URLs). Ref: <a href="https://github.com/e107inc/e107/security/advisories/GHSA-7pmw-jwvr-cq2x">GHSA-7pmw-jwvr-cq2x</a>. (<a href="https://github.com/e107inc/e107/commit/04511f9f">https://github.com/e107inc/e107/commit/04511f9f</a>)</li>
<li><strong>Language file tooltips.</strong> Inline tooltip LAN constants standardized; some constants were consolidated. (#5465)</li>
<li><strong>Permissions schema.</strong> Media Manager and userclass permissions tightened — plugins that depended on Admin (<code>A</code>) access to Media Manager prefs or avatars will now need Main Admin (<code>0</code>). (#5489, #5477)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li><strong>PHP 8.x compatibility.</strong> Fatal errors and warnings removed from <code>db_verify_class</code> (#4501), <code>thumb.php</code> (<a href="https://github.com/e107inc/e107/commit/aaa71257">https://github.com/e107inc/e107/commit/aaa71257</a>), <code>file_class</code> (<code>finfo</code>/<code>getimagesize</code> warnings) (#4501), <code>theme_handler</code> empty path warning (#5482), <code>validator_class</code> fatal (#5443), <code>rater::render()</code> (<a href="https://github.com/e107inc/e107/commit/db358ca1">https://github.com/e107inc/e107/commit/db358ca1</a>) and <code>sc_foruminfo()</code> (<a href="https://github.com/e107inc/e107/commit/0e23f651">https://github.com/e107inc/e107/commit/0e23f651</a>, <a href="https://github.com/e107inc/e107/commit/8c390f4f">https://github.com/e107inc/e107/commit/8c390f4f</a>) — PHP 8.5 promoted the "<code>list()</code> on <code>false</code>" case to a new fatal warning.</li>
<li><strong><code>e_parse::cleanHtml()</code>.</strong> HTML5 void elements (<code><source></code>, <code><wbr></code>, etc.) are now normalized before serialization so <code>saveHTML()</code> output is identical across libxml versions. libxml < 2.13 parsed <code><source></code> as non-void and captured following content as its child; the new pre-serialization pass promotes that content to a sibling, and a complementary post-<code>saveHTML</code> pass strips the stray <code></source></code> (and other void-element closing tags) that older libxml still emits, so every libxml ends up with the spec-compliant form. (<a href="https://github.com/e107inc/e107/commit/b63d11a2">https://github.com/e107inc/e107/commit/b63d11a2</a>, <a href="https://github.com/e107inc/e107/commit/87abb7f7">https://github.com/e107inc/e107/commit/87abb7f7</a>)</li>
<li><strong><code>e_parse_class</code>.</strong> Base64 image data-URL generation when a file is set (<a href="https://github.com/e107inc/e107/commit/bc6b51d4">https://github.com/e107inc/e107/commit/bc6b51d4</a>), avatar upload path handling (<a href="https://github.com/e107inc/e107/commit/105fe205">https://github.com/e107inc/e107/commit/105fe205</a>).</li>
<li><strong>Plugin builder.</strong> Admin links, table-name test typo. (<a href="https://github.com/e107inc/e107/commit/8c319720">https://github.com/e107inc/e107/commit/8c319720</a>, <a href="https://github.com/e107inc/e107/commit/d241ab64">https://github.com/e107inc/e107/commit/d241ab64</a>, <a href="https://github.com/e107inc/e107/commit/d4a665a2">https://github.com/e107inc/e107/commit/d4a665a2</a>)</li>
<li><strong>Form handler.</strong> Help-icon rendering, optgroup class identifiers, DST-related test stability. (#5214, #5269)</li>
<li><strong>JavaScript.</strong> Invalid-element tab switch issue in admin/front JS. (#5230)</li>
<li><strong>Update routines.</strong> Clear update info after GitHub update in admin boot/db, minor <code>update_routines.php</code> tweak (#5481), warning suppression in <code>admin/auth.php</code> for invalid language values (#5443).</li>
<li><strong>Caching.</strong> Fatal in <code>plugin_class.php</code> cache-path resolution. (#5484)</li>
</ul><br />]]></description>
<dc:creator>admin</dc:creator>
<pubDate>Sat, 25 Apr 2026 21:43:56 -0700</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-3-4-bootstrap-cms-released.html</guid>
</item>

<item>
<title>e107 v2.3.3 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-3-3-bootstrap-cms-released.html</link>
<description><![CDATA[<p>The wait is finally over! e107 v2.3.3 Bootstrap CMS is finally out. This marks the last release that will support PHP 5.6. <br>This release supports all versions of PHP from 5.6 through to 8.2.</p>
<p>Enjoy!</p>
<h2>Features</h2>
<ul>
<li>Add missing setMetaTitle() method to e_admin_response <a href="https://github.com/e107inc/e107/issues/5112">#5112</a></li>
<li>Change length of newsfeed_image field in db <a href="https://github.com/e107inc/e107/issues/5108">#5108</a></li>
<li>Add option to alt_auth plugin <a href="https://github.com/e107inc/e107/issues/5107">#5107</a></li>
<li>Improve system notifications handling in the admin area. <a href="https://github.com/e107inc/e107/issues/5106">#5106</a></li>
<li>Display current time when settings timezone in admin preferences. <a href="https://github.com/e107inc/e107/issues/5099">#5099</a></li>
<li>Add option to e_file::getRemoteFile() to prevent time out on larger files or slow connections. <a href="https://github.com/e107inc/e107/issues/5098">#5098</a></li>
<li>Allow developers to choose which fields to export in e107Export(). <a href="https://github.com/e107inc/e107/issues/5094">#5094</a></li>
<li>Render favicon in admin area the same way as on frontend <a href="https://github.com/e107inc/e107/issues/5062">#5062</a></li>
<li>Add option to email any critical error message to an admin <a href="https://github.com/e107inc/e107/issues/4986">#4986</a></li>
<li>Add {NEWS_MODIFIED} shortcode for modified date <a href="https://github.com/e107inc/e107/issues/4978">#4978</a></li>
<li>Add FontAwsome 6 support <a href="https://github.com/e107inc/e107/issues/4969">#4969</a></li>
<li>Add support for PUT or JSON POST to e_file::initCurl() method <a href="https://github.com/e107inc/e107/issues/4941">#4941</a></li>
<li>Provide more options to resize the rich text editor. (bbarea, Tinymce) <a href="https://github.com/e107inc/e107/issues/4927">#4927</a></li>
<li>Allow plugins to provide their own routing for notifications. <a href="https://github.com/e107inc/e107/issues/4922">#4922</a></li>
<li>Allow plugins to use their own email templates when using e107::getEmail()->sendEmail(); <a href="https://github.com/e107inc/e107/issues/4919">#4919</a></li>
<li>Improved Database SQL Verify page use of space by using 3 columns. <a href="https://github.com/e107inc/e107/issues/4907">#4907</a></li>
<li>Admin-UI: Allow for entry of Primary ID in create/edit modes if needed. <a href="https://github.com/e107inc/e107/issues/4906">#4906</a></li>
<li>Enhance e107 to allow for third-party email address validation. <a href="https://github.com/e107inc/e107/issues/4900">#4900</a></li>
<li>Update plupload <a href="https://github.com/e107inc/e107/issues/4887">#4887</a></li>
<li>Add eventName to Featurebox like News <a href="https://github.com/e107inc/e107/issues/4841">#4841</a></li>
<li>Add dedicated Pages/Menus "delete" perms <a href="https://github.com/e107inc/e107/issues/4827">#4827</a></li>
<li>Allow plugins to create siteLinks in areas other than the main navigation. <a href="https://github.com/e107inc/e107/issues/4810">#4810</a></li>
<li>Exclude the currently viewed news item for the 'latest news' menu. <a href="https://github.com/e107inc/e107/issues/4786">#4786</a></li>
<li>Custom SEO title for News and Pages <a href="https://github.com/e107inc/e107/issues/4783">#4783</a></li>
<li>Add This Week, This Month and This Year to Admin-UI date filtering options. <a href="https://github.com/e107inc/e107/issues/4778">#4778</a></li>
<li>Allow developers to set the URL that users will be directed to after they log out <a href="https://github.com/e107inc/e107/issues/4777">#4777</a></li>
<li>Add support for images in plugin-generated sitemaps. <a href="https://github.com/e107inc/e107/issues/4760">#4760</a></li>
</ul>
<h2>Fixes</h2>
<ul>
<li>Comments without ajax issue <a href="https://github.com/e107inc/e107/issues/5111">#5111</a></li>
<li>Cron Schedule might not trigger with some timezones set in the preferences. <a href="https://github.com/e107inc/e107/issues/5096">#5096</a></li>
<li>Admin-UI: Using the label 'True' or 'False' in a select (dropdown) displays incorrect labels. <a href="https://github.com/e107inc/e107/issues/5093">#5093</a></li>
<li>Plugin Builder - Generated customPage method contains an error. <a href="https://github.com/e107inc/e107/issues/5092">#5092</a></li>
<li>Errors showing up in error_log when running cron. <a href="https://github.com/e107inc/e107/issues/5091">#5091</a></li>
<li>Admin-UI: renderValue() of type boolean ignores custom true/false readParm string values when inline editing is not enabled. <a href="https://github.com/e107inc/e107/issues/5089">#5089</a></li>
<li>activatejavascript.org as found in default header is a broken link <a href="https://github.com/e107inc/e107/issues/5087">#5087</a></li>
<li>Array order not being retained by x-editable inline dropdown/checkbox list. <a href="https://github.com/e107inc/e107/issues/5083">#5083</a></li>
<li>PHP 8.1 - Fatal error: Uncaught Error: Undefined constant "USERNAME" in ***ehandlersmail.php on line 451 <a href="https://github.com/e107inc/e107/issues/5080">#5080</a></li>
<li>"Force user to update settings" breaks home page for logged in users on PHP 8 <a href="https://github.com/e107inc/e107/issues/5052">#5052</a></li>
<li>An Admin with only "Quick Add User" permission can see all users and access inline edit for all <a href="https://github.com/e107inc/e107/issues/5045">#5045</a></li>
<li>Force user to update settings causes fatal error im PHP 8.2 <a href="https://github.com/e107inc/e107/issues/5041">#5041</a></li>
<li>sendEmail() may render an 'info' message "Could not access file:" under some circumstances. <a href="https://github.com/e107inc/e107/issues/5020">#5020</a></li>
<li>Emptying browser cache adds "Empty Thumbnail Cache" to the system logs. <a href="https://github.com/e107inc/e107/issues/5017">#5017</a></li>
<li>Admin-UI: Setting readonly=true for a field containing an array value, posts 'Array' in the form results. <a href="https://github.com/e107inc/e107/issues/5016">#5016</a></li>
<li>e107 corrupts form-submitted array values when GET method is used. <a href="https://github.com/e107inc/e107/issues/5005">#5005</a></li>
<li>Canonical URL is not consistent when parked domains are in use. <a href="https://github.com/e107inc/e107/issues/4994">#4994</a></li>
<li>Fatal errors - userposts.php - IMODE is not defined <a href="https://github.com/e107inc/e107/issues/4966">#4966</a></li>
<li>Banner plugin - banner_campaign is saving only first campain <a href="https://github.com/e107inc/e107/issues/4959">#4959</a></li>
<li>$_GET contains 'configure' key on all pages of admin area. <a href="https://github.com/e107inc/e107/issues/4945">#4945</a></li>
<li>Flexpanel layout is not working <a href="https://github.com/e107inc/e107/issues/4940">#4940</a></li>
<li>Cron 'Last-Run' value in admin area is always empty <a href="https://github.com/e107inc/e107/issues/4933">#4933</a></li>
<li>National characters in title are not converted to sef url correctly. <a href="https://github.com/e107inc/e107/issues/4925">#4925</a></li>
<li>sendMail() not using latest PHPMailer methods. <a href="https://github.com/e107inc/e107/issues/4924">#4924</a></li>
<li>data-modal-submit attribute fails when an input tag is used instead of a button tag <a href="https://github.com/e107inc/e107/issues/4923">#4923</a></li>
<li>Anomoly with some plugins losing their entry from e_url_list after upgrading others. <a href="https://github.com/e107inc/e107/issues/4917">#4917</a></li>
<li>FAQs - PHP 8 error <a href="https://github.com/e107inc/e107/issues/4916">#4916</a></li>
<li>Bootstrap-notify won't display alerts in admin area <a href="https://github.com/e107inc/e107/issues/4915">#4915</a></li>
<li>Wrong HTML markup for date field in advanced search <a href="https://github.com/e107inc/e107/issues/4904">#4904</a></li>
<li>PHP 8 - Fatal error LAN_PLUGIN_DOWNLOAD_NAME in comment's search <a href="https://github.com/e107inc/e107/issues/4890">#4890</a></li>
</ul>
<h2>User Contributions</h2>
<ul>
<li>Bump guzzlehttp/guzzle from 7.4.3 to 7.4.4 in /e107_tests by @dependabot <a href="https://github.com/e107inc/e107/pull/4791">#4791</a></li>
<li>Bump guzzlehttp/guzzle from 7.4.4 to 7.4.5 in /e107_tests by @dependabot <a href="https://github.com/e107inc/e107/pull/4796">#4796</a></li>
<li>Some corrections by @yesszus <a href="https://github.com/e107inc/e107/pull/4788">#4788</a></li>
<li>4844: File Inspector: Do not traverse above the base directory by @Deltik <a href="https://github.com/e107inc/e107/pull/4845">#4845</a></li>
<li>4830: Sensible no delete log in <code>admin_log_ui::maintenanceProcess()</code> by @Deltik <a href="https://github.com/e107inc/e107/pull/4831">#4831</a></li>
<li>Add support for wrappers in contact menu by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4850">#4850</a></li>
<li>Fix for #4860 and correct fix for #3983 - correct second authorization by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4864">#4864</a></li>
<li>Login flow consistency: Do not use redirect in admin area login box by @Deltik <a href="https://github.com/e107inc/e107/pull/4865">#4865</a></li>
<li>sef-url for RSS news - category news #4868 by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4870">#4870</a></li>
<li>Add support for wrapper in custom menus by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4873">#4873</a></li>
<li>Bump twig/twig from 3.4.1 to 3.4.3 in /e107_tests by @dependabot <a href="https://github.com/e107inc/e107/pull/4877">#4877</a></li>
<li>Fix #4847 - mistypo in route by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4882">#4882</a></li>
<li>add wrapper support on fpw page #4883 by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4884">#4884</a></li>
<li>Fix for #4895 - wrong message chatbox plugin by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4896">#4896</a></li>
<li>4897 class parameter for CB_AVATAR shortcode by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4898">#4898</a></li>
<li>Tests: MDEV-29446 workaround: Ignore COLLATE clause in SHOW CREATE TABLE by @Deltik <a href="https://github.com/e107inc/e107/pull/4913">#4913</a></li>
<li>Hotfix for tests failing after PHP 8.2 released by @Deltik <a href="https://github.com/e107inc/e107/pull/4921">#4921</a></li>
<li>missing national character from toAscii() by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4926">#4926</a></li>
<li>4929: Fix type mismatch in usage of <code>e107forum::getForumClassMembers()</code> by @Deltik <a href="https://github.com/e107inc/e107/pull/4931">#4931</a></li>
<li>4938: Workaround for PHP 8.2.0 segmentation fault / assertion error by @Deltik <a href="https://github.com/e107inc/e107/pull/4939">#4939</a></li>
<li>Reintroduce automated acceptance tests by @Deltik <a href="https://github.com/e107inc/e107/pull/4943">#4943</a></li>
<li>fix for ranks in top.php #4967 by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4975">#4975</a></li>
<li>Fix news category breadcrumbs by @RichardBarrell <a href="https://github.com/e107inc/e107/pull/4982">#4982</a></li>
<li>deprecated static::method() calls for PHP 8.2 by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/4988">#4988</a></li>
<li>news: Fix category link in both breadcrumb and menu by @Deltik <a href="https://github.com/e107inc/e107/pull/4984">#4984</a></li>
<li>4991: Fix improper array access in sc_signup_extended_user_fields by @Deltik <a href="https://github.com/e107inc/e107/pull/4993">#4993</a></li>
<li>Bump guzzlehttp/psr7 from 2.4.3 to 2.5.0 in /e107_tests by @dependabot <a href="https://github.com/e107inc/e107/pull/4995">#4995</a></li>
<li>partial fix #4517 - fix for settings of plugin.xml by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/5029">#5029</a></li>
<li>Fix #5025: Type error when sending a PM without the attachment field by @Deltik <a href="https://github.com/e107inc/e107/pull/5027">#5027</a></li>
<li>Fix #5013 False Error if UEF type DBField has no records by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/5014">#5014</a></li>
<li>fix #5031 for false error when deleting plugin DB field by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/5032">#5032</a></li>
<li>Fix #4517 UEF settings in plugin.xml - fix for parms by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/5033">#5033</a></li>
<li>Fix #5000 user profile UEF change added to event by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/5036">#5036</a></li>
<li>fix for feed logo image #4866 by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/5015">#5015</a></li>
<li>fix for type checkboxes and filtering #4474 by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/5048">#5048</a></li>
<li>Missing preferences in bootstrap5 #4683 by @Jimmi08 <a href="https://github.com/e107inc/e107/pull/5058">#5058</a></li>
<li><code>db_verify::getIndex()</code>: Support <code>index_col_name</code> optional parts by @Deltik <a href="https://github.com/e107inc/e107/pull/5055">#5055</a></li>
<li>Unify logic of <code>e_user_model::checkAdminPerms()</code> and <code>getperms()</code> by @Deltik <a href="https://github.com/e107inc/e107/pull/5070">#5070</a></li>
<li>install.php: PHP 8.2 exception handler signature compatibility by @Deltik <a href="https://github.com/e107inc/e107/pull/5073">#5073</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li>@RichardBarrell made their first contribution <a href="https://github.com/e107inc/e107/pull/4982">#4982</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/e107inc/e107/compare/v2.3.2...2.3.3">https://github.com/e107inc/e107/compare/v2.3.2...2.3.3</a></p><br />]]></description>
<dc:creator>admin</dc:creator>
<pubDate>Thu, 23 Nov 2023 13:08:11 -0800</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-3-3-bootstrap-cms-released.html</guid>
</item>

<item>
<title>e107 v2.3.2 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-3-2-bootstrap-cms-released.html</link>
<description><![CDATA[<p>This release included a bunch of bug fixes and improvements. Be sure to check out the new Bootstrap5 theme skins by Bootswatch!</p>
<h2>What's Changed</h2>
<ul>
<li>Handle previously unhandled exceptions with <code>social</code> plugin and Hybridauth by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Deltik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Deltik">@Deltik</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1089795773" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4643" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4643/hovercard" href="https://github.com/e107inc/e107/pull/4643">#4643</a></li>
<li>Bump twig/twig from 3.3.4 to 3.3.8 in /e107_tests by <a class="user-mention" data-hovercard-type="organization" data-hovercard-url="/orgs/dependabot/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/dependabot">@dependabot</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1131519558" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4691" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4691/hovercard" href="https://github.com/e107inc/e107/pull/4691">#4691</a></li>
<li>New API to concatenate an array of HTML attributes by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Deltik/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Deltik">@Deltik</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1125244247" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4688" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4688/hovercard" href="https://github.com/e107inc/e107/pull/4688">#4688</a></li>
<li>fix for templating signature bbcodes by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1174218579" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4709" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4709/hovercard" href="https://github.com/e107inc/e107/pull/4709">#4709</a></li>
<li>use the same markup (bootstrap) for pagination in forum and topic by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1177079714" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4714" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4714/hovercard" href="https://github.com/e107inc/e107/pull/4714">#4714</a></li>
<li>Forum breadcrumbs on topic view with 3 forums <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="758843127" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4286" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4286/hovercard" href="https://github.com/e107inc/e107/issues/4286">#4286</a> by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1175597284" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4710" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4710/hovercard" href="https://github.com/e107inc/e107/pull/4710">#4710</a></li>
<li>fix for not clearing forum cache by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1181939601" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4716" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4716/hovercard" href="https://github.com/e107inc/e107/pull/4716">#4716</a></li>
<li>fix for access / check for access to forum type in forum post by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1182622275" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4717" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4717/hovercard" href="https://github.com/e107inc/e107/pull/4717">#4717</a></li>
<li>Fix for Forum permissions for creating topics by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1182625561" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4718" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4718/hovercard" href="https://github.com/e107inc/e107/pull/4718">#4718</a></li>
<li>Update theme.html by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/brwnie/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/brwnie">@brwnie</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1081489813" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4632" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4632/hovercard" href="https://github.com/e107inc/e107/pull/4632">#4632</a></li>
<li>Fix for Recalculation forum replies in Tools by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1182979841" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4721" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4721/hovercard" href="https://github.com/e107inc/e107/pull/4721">#4721</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1184560869" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4724" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4724/hovercard" href="https://github.com/e107inc/e107/issues/4724">#4724</a> forum - possibility to add forum ID as column by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1185336391" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4729" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4729/hovercard" href="https://github.com/e107inc/e107/pull/4729">#4729</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1177096053" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4715" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4715/hovercard" href="https://github.com/e107inc/e107/issues/4715">#4715</a> correct display of Last Post info by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1184527871" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4723" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4723/hovercard" href="https://github.com/e107inc/e107/pull/4723">#4723</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1104751877" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4659" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4659/hovercard" href="https://github.com/e107inc/e107/issues/4659">#4659</a> forum main admin as silent moderator by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1186942775" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4730" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4730/hovercard" href="https://github.com/e107inc/e107/pull/4730">#4730</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1175898666" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4712" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4712/hovercard" href="https://github.com/e107inc/e107/issues/4712">#4712</a> canonical URLs for paged forum topic by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1187886030" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4733" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4733/hovercard" href="https://github.com/e107inc/e107/pull/4733">#4733</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="364461666" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/3470" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/3470/hovercard" href="https://github.com/e107inc/e107/issues/3470">#3470</a> login error message is loaded 2x by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1187891852" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4734" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4734/hovercard" href="https://github.com/e107inc/e107/pull/4734">#4734</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1108972105" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4670" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4670/hovercard" href="https://github.com/e107inc/e107/issues/4670">#4670</a> ranks issue for first level by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1187899123" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4735" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4735/hovercard" href="https://github.com/e107inc/e107/pull/4735">#4735</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1174207444" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4708" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4708/hovercard" href="https://github.com/e107inc/e107/issues/4708">#4708</a> load bbcode buttons only if HTML is allowed for user by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1187864899" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4732" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4732/hovercard" href="https://github.com/e107inc/e107/pull/4732">#4732</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1105871630" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4665" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4665/hovercard" href="https://github.com/e107inc/e107/issues/4665">#4665</a> correct user last visit information by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1190626316" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4741" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4741/hovercard" href="https://github.com/e107inc/e107/pull/4741">#4741</a></li>
<li><a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="703800822" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4245" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4245/hovercard" href="https://github.com/e107inc/e107/issues/4245">#4245</a> stay on correct page after editing paginated topic by <a class="user-mention" data-hovercard-type="user" data-hovercard-url="/users/Jimmi08/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/Jimmi08">@Jimmi08</a> in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1190671392" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4742" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4742/hovercard" href="https://github.com/e107inc/e107/pull/4742">#4742</a></li>
</ul>
<p><a href="https://github.com/e107inc/e107/milestone/20?closed=1" target="_blank" rel="noopener" class="btn btn-primary"><strong>Full Changelog</strong></a>: <a class="commit-link" href="https://github.com/e107inc/e107/compare/v2.3.1...v2.3.2"></a></p>
<p></p><br />]]></description>
<dc:creator>admin</dc:creator>
<pubDate>Thu, 07 Apr 2022 16:26:04 -0700</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-3-2-bootstrap-cms-released.html</guid>
</item>

<item>
<title>e107 v2.3.1 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-3-1-bootstrap-cms-released.html</link>
<description><![CDATA[<p>e107 v2.3.1 is finally here, and with it a bunch of new features, improvements and bug fixes.</p>
<ul>
<li>
<p><strong>Support for PHP 5.6 through PHP 8.1</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="988290752" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4554" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4554/hovercard" href="https://github.com/e107inc/e107/pull/4554">#4554</a>) – e107 v2 now adds PHP 8.0 and 8.1 support while maintaining support for PHP 5.6.</p>
</li>
<li>
<p><strong>New Admin Theme Skins</strong> - <em>Modern Light</em> and <em>Modern Dark</em>. May now be selected during initial installation of e107.</p>
</li>
<li>
<p><strong>Collapsible Navigation Panel</strong> - Option to reduce left-panel admin area navigation to icons only, for increased screen real-estate where it matters.</p>
</li>
<li>
<p><strong>Database session handler performance improvement</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="1007186902" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4575" data-hovercard-type="pull_request" data-hovercard-url="/e107inc/e107/pull/4575/hovercard" href="https://github.com/e107inc/e107/pull/4575">#4575</a>) – e107 v2.3.0 introduced a non-blocking session handler backed by the database; however, a missing index causes gradually slower performance the more rows there are in the session table. This release fixes that bug by adding the missing index through a database update (migration).</p>
</li>
<li>
<p><strong>Thumbnail Generator</strong> rebuilt to use Intervention library.</p>
</li>
<li>
<p><strong>WebP image support</strong> (<a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="752524162" data-permission-text="Title is private" data-url="https://github.com/e107inc/e107/issues/4270" data-hovercard-type="issue" data-hovercard-url="/e107inc/e107/issues/4270/hovercard" href="https://github.com/e107inc/e107/issues/4270">#4270</a>) – e107 can now serve WebP images to compatible browsers and convert existing images on-the-fly. Requires PHP 7.0+ with <a href="https://www.php.net/manual/en/image.installation.php" rel="nofollow">the GD WebP extension installed</a>.</p>
</li>
<li>
<p><strong>More reliable file uploads</strong> – A common complaint with e107 v2.3.0 was rejected file uploads. To fix this, e107 now recognizes files based on their MIME type.</p>
</li>
<li>
<p><strong>Increased protection against cross-site scripting (XSS)</strong> – There is now improved layering of HTML tag rendering to reduce the likelihood of corrupting pages with bad HTML.</p>
</li>
<li>
<p><strong>Increased protection against cross-site request forgery (CSRF)</strong> – Nonces have been added to some forms to prevent external sites from submitting them unbeknown to the authenticated user.</p>
</li>
<li>
<p><strong>New theming features</strong> – Theme developers can now take advantage of <a href="https://getbootstrap.com/docs/5.0/getting-started/introduction/" rel="nofollow">Bootstrap 5</a> and customisable breadcrumbs.</p>
</li>
<li>
<p><strong>SEO optimizations</strong> for Google, Facebook (Open Graph) and Twitter.</p>
</li>
<li>
<p><strong>New "Hero" plugin</strong> for home page carousel management. Supports animated bullet points and buttons. (see e107.org home page for example)</p>
</li>
<li>
<p><strong>News item Previous/Next navigation</strong> shortcode options.</p>
</li>
<li>
<p><strong>jQuery updated</strong> to v3.6.0</p>
</li>
<li>
<p><strong>FontAwesome updated</strong> to v5.14.0</p>
</li>
</ul>
<ul></ul>
<p>For a full list of changes, please <a href="https://github.com/e107inc/e107/milestone/19?closed=1" target="_blank" rel="noopener">go here.</a></p>
<p>Please see our <a href="/download">downloads section</a> to download a copy.</p>
<p>Thank you for continuing to use e107. Please feel free to tell us what you think about e107 in our <a href="https://gitter.im/e107inc/e107" target="_blank" rel="noopener">Gitter chatroom!</a></p><br />]]></description>
<dc:creator>CaMer0n</dc:creator>
<pubDate>Thu, 02 Dec 2021 14:50:00 -0800</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-3-1-bootstrap-cms-released.html</guid>
</item>

<item>
<title>e107 v2.2.1 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-2-1-bootstrap-cms-released.html</link>
<description><![CDATA[<p>After the release of 2.2.0, we have been working on crushing some bugs that did have some impact on functionality. <br>We have therefore decided to release 2.2.1 sooner rather than later, and recommend everyone to update. </p>
<p>Please note that the 2.2.0 release was a major release with some important notes. Please refer to the previous post for more information on that release, including an overview of numerous great new features which were added! </p>
<h3>New features:</h3>
<ul>
<li>Added new <code>News</code> shortcode <code>{NEWS_AUTHOR_EUF}</code> to retrieve Extended User Fields (e.g. <code>{NEWS_AUTHOR_EUF: field=biography}</code>)</li>
</ul>
<h3>Fixes &amp; Improvements:</h3>
<ul>
<li>Fixed a database check/update issue that occurred when the database name contains a hyphen (<code>-</code>) (#3800)</li>
<li>Fixed an issue with the Menu Manager preview not loading in some cases (#3815)</li>
<li>Fixed frontpage button link to Admin Area (#3775)</li>
<li>Fixed an issue with inserting a new custom page when using PHP 7.3 (#3812)</li>
<li>Added tablerender id to error pages (#3801)</li>
<li>Fixed an issue with (un)seralization (#2990)</li>
<li>Fixed comment author avatar not showing correctly in comment form (#3813)</li>
<li>Fixed issue in <code>Download</code> plugin with batch userclass options</li>
<li>Fixed issue in <code>Forum</code> plugin with forum mderator userclass recognition (#3814), with the Userlist shortcode links (#3809), and added placeholder option in <code>{SEARCH}</code> shortcode</li>
<li>Several <code>Forum</code> template optimizations for Bootstrap 4 (#2969)</li>
<li>Several PHP 7.3 compatibility improvements</li>
</ul>
<p>For a full list of changes, please <a href="https://github.com/e107inc/e107/milestone/17?closed=1" target="_blank">go here.</a></p>
<p>Please see our <a href="/get-started">downloads section</a> to download a copy.</p>
<p>Thank you for continuing to use e107. Please feel free to tell us what you think about e107 in our <a href="https://gitter.im/e107inc/e107" target="_blank">Gitter chatroom!</a></p><br />]]></description>
<dc:creator>Moc</dc:creator>
<pubDate>Wed, 29 May 2019 03:00:00 -0700</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-2-1-bootstrap-cms-released.html</guid>
</item>

<item>
<title>e107 v2.2.0 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-2-0-bootstrap-cms-released.html</link>
<description><![CDATA[<p>We are very excited to announce the release of e107 v2.2.0!</p>
<p>This major release contains numerous new fatures as well as a great bunch of bug fixes and additional improvements. We recommend everyone upgrade immediately! Additionaly there are some important notes that should be considered when updating to the latest version. Please read these carefully!</p>
<h3>Important notes:</h3>
<ul>
<li>The minimum PHP version as of 2.2.0 is now set to <strong>5.6</strong>. Using <strong>PHP 7.1+ is recommended</strong>.</li>
<li>If you use any PHP version lower than 5.6, your website may break!</li>
<li>Bootstrap 4 Library has been updated to latest version: 4.3.1. See examples in the <code>bootstrap4</code> theme</li>
<li>FontAwesome has been updated to the latest version 5.7.2. See examples in the <code>_blank</code> theme (theme.xml and theme.php)</li>
<li>
<code>db_Fetch()</code> in <em>e_LEGACY_MODE</em> permanently removed. Old plugins should use <code>e107::getDb->fetch('both');</code> if this is still required.</li>
<li>Changes to <code>comments</code>: Any reference to <code>#comments-container</code> (div ID) in the theme must be changed to <code>.comments-container</code> (div class) (#1944)</li>
</ul>
<h3>New features:</h3>
<ul>
<li>GDPR features: added "Privacy Policy" and "Terms and conditions" preferences. Added <code>{SIGNUP_GDPR_PRIVACYPOLICY_LINK}</code> and <code>{SIGNUP_GDPR_TERMSANDCONDITIONS_LINK}</code> shortcodes. (#3175 and #3579).</li>
<li>Admin Login with email address is now functional</li>
<li>
<code>Chatbox</code> plugin: new default templates added (#3630)</li>
<li>Constats <code>SITENAME</code> <code>SITEDESCRIPTION</code> can be overridden using English<em>custom.php or English</em>global.php plugin LAN files.</li>
<li>Added more styling functionality to <code>{SIGNUP_IMAGES}</code> and <code>{SIGNUP_SIGNUP_TEXT}</code> (#3582) and <code>{LOGIN_*}</code> shortcodes (#3466)</li>
<li>Added event triggers for rate/like functionality: <code>user_like_submitted</code> &amp; <code>user_rate_submitted</code> (#3552)</li>
<li>Added <code>load()</code> method for the <code>e_admin</code> addon. See <code>_blank</code> plugin for examples. (#3695)</li>
<li>New MySQL database export method integrated to increase performance when creating a backup</li>
<li>"Under the hood" preparations to clean-up existing code (improving code quality) and introduction of new (database) interfaces for better support of up-to-date technology and easier 'hookings' of other/external interfaces (e.g. databases)</li>
<li>For developers: automated tests added in <code>e107-test/code> repository <a class="e-url" href="https://github.com/e107inc/e107-test" target="_blank">https://github.com/e107inc/e107-test</a> (to prevent bugs from being introduced, rather than having to fix them after they are an issue) </code>
</li>
<li>FontAwesome is now used by the NextPrev</li>
<li>New method added <code>e107::getUserClass()->getUsersInClass</code>
</li>
<li>News <code>e_related</code>, added <code>{RELATED_DATE}</code> shortcode</li>
<li>Added <code>afterPrefsSave()</code> method in Admin-UI (#3799)</li>
</ul>
<h3>Fixes &amp; Improvements:</h3>
<ul>
<li>Several improvements to plugin installation and related addons (#3531, #3536, #3592)</li>
<li>Improvements to plugin identification when checking for updates (#3711)</li>
<li>Several fixes to the <code>Private Messenger</code> plugin (#1758, #3413)</li>
<li>Several fixes to the <code>Banner</code> plugin (#3141)</li>
<li>Several fixes to the <code>FAQ</code> plugin</li>
<li>Several fixes to the <code>Forum</code> plugin: not being able to move a forum post (#3619), forum moderators permissions (#3490), deleting of last post (#3490), forum pagination, newforumposts plugin (#3757), inline editing of forum name was changing SEF URL (#3798)</li>
<li>Several fixes to the <code>Download</code> plugin (#3201, #3189, #3199, #2486, #3787)</li>
<li>Fixed an issue where the verification of LAN pack would falsely return errors (#3632)</li>
<li>Fixes to <code>'type' => 'country'</code> in the Admin-UI (#3644)</li>
<li>Enhancements to the 'search' functionality in Admin-UI across different fields</li>
<li>User Extended Field <code>country</code> correctly displayed in User Profile (#3646)</li>
<li>User Extended Fields 'read' permission is now properly checked (#1799)</li>
<li>Avatars now support 'crop' to allow for non-square images. Simple usage: <code>{USER_AVATAR: w=150&amp;h=150&amp;crop=1&amp;shape=circle}</code> (#3721)</li>
<li>Fixed an issue with the Admin Area > Preferences page crashing on specific Windows server environments (#3625)</li>
<li>Fixed an issue with the SEF URL configuration when social network tracking queries were used (e.g. Facebook links) (#3546)</li>
<li>Several improvements to theme layout detection</li>
<li>Improved <code>user_forum_post_report</code>, <code>user_forum_post_report</code> and <code>user_forum_topic_created_probationary</code> event triggers (#3618)</li>
<li>Improved filetypes and filesize checks when uploading files (#3507, #3460)</li>
<li>Added <code>/contact</code> SEF URL (#3566)</li>
<li>Fixed an issue with navigation (site links) icons not resizing properly (#3712)</li>
<li>Fixed an issue with <code>list()</code> method in the the <code>e_admin</code> addon (#3695)</li>
<li>Fixed an issue with userclasses being reset when 'probationary' user was automatically promoted to 'normal' user (#3657)</li>
<li>Rewritten "password reset" functionality to support webmail software pre-loading links. Links expire in 10 minutes now. (#3443)</li>
<li>"Required fields" indicator now properly showing on signup page and usersettings (profile) (#3676)</li>
<li>Relative datestamp now properly distinguishes between past and future dates (#3605)</li>
<li>Improved backwards compatibility when using BBcodes and WYSIWYG editor</li>
<li>Fixed an issue with Admin Help text not displaying in correct language (#3485)</li>
<li>Several enhancements to handle deprecated <code>mysql_*()</code> methods and improved PDO usage</li>
<li>Several compatibility fixes with Bootstrap 4 (#2962, #2969, and others)</li>
<li>Several PHP 7 compatibility fixes (#3216, #3596, #3562 and others)</li>
<li>PHPMailer upgraded to 5.2.27</li>
<li>plupload upgraded to v2.3.6</li>
<li>And dozens more fixes and improvements</li>
</ul>
<p>For a full list of changes, please <a href="https://github.com/e107inc/e107/milestone/16?closed=1" target="_blank">go here.</a></p>
<p>Please see our <a href="/get-started">downloads section</a> to download a copy.</p>
<p>Thank you for continuing to use e107. Please feel free to tell us what you think about e107 in our <a href="https://gitter.im/e107inc/e107" target="_blank">Gitter chatroom!</a></p><br />]]></description>
<dc:creator>Moc</dc:creator>
<pubDate>Sun, 19 May 2019 08:25:18 -0700</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-2-0-bootstrap-cms-released.html</guid>
</item>

<item>
<title>e107 v2.1.9 Bootstrap CMS Released</title>
<link>https://e107.org/blog/e107-v2-1-9-bootstrap-cms-released.html</link>
<description><![CDATA[<p>We're happy to announce the release of e107 v2.1.9!</p>
<p>This release contains some great improvements as well as bug fixes. We recommend everyone upgrade immediately. </p>
<h3>New features</h3>
<ul>
<li>It is now possible to override the chosen editor pref (WYSIWYG), using the e107::getForm()->bbarea() method by changing the $options array, e.g. $options['wysiwyg'] = 'tinymce4' (#3330)</li>
<li>Added option define('X-FRAME-SAMEORIGIN', false); in e107_config to allow for external websites including an e107 website through an iframe (#3101)</li>
</ul>
<h3>Fixes &amp; improvements:</h3>
<ul>
<li>Fixed issue in update routine caused by an incorrect version number (#3302 #3311)</li>
<li>Added backwards compatibility fix to handle old data formatting better (#3305)</li>
<li>Fixed issue with multiple userclass selection in the Admin UI (#3249)</li>
<li>The CSS file ensuring backwards compatibility for non-boostrap or legacy themes (backcompat.css) is now correctly loaded</li>
<li>Fixed issue with LAN's not loading properly on contact.php page</li>
<li>Fixed issue with parsing the sign (#3307)</li>
<li>Fixed issue with 'To' textbox not showing in mail-out functionality (#3303)</li>
<li>Fixed issue with missing navigation text in Admin Area when using 'medium' width devices</li>
<li>Improved support for SVG icons (#1958)</li>
<li>Fixed several issues related to the displaying of comments (#2425 #2281 #2937)</li>
<li>Fixed issue so 'Items per page' option is now respected on custom pages (#3188)</li>
<li>Added default custom fields to Bootstrap 3 template (#3103)</li>
<li>Improved support for Cyrillic characters on registration and login (#2440)</li>
<li>Plugin Builder generated output improved with examples of custom filter and batch options.</li>
<li>Fixed an issue with the language packs not displaying in the Admin Area (#3059)</li>
<li>Added e_gsitemap addon to News and Download plugin (#2606)</li>
<li>Fixed an issue with error pages and redirection (#3179)</li>
<li>Added new event triggers and notifications for the Forum plugin: user_forum_topic_created_probationary, user_forum_topic_updated, user_forum_topic_moved, user_forum_topic_deleted, user_forum_topic_split, user_forum_post_created, user_forum_post_updated, user_forum_post_deleted, user_forum_post_report</li>
<li>Added BBcode template for Forum plugin (#3317)</li>
<li>New preferences in Forum plugin which allow to choose between BBcode or TinyMCE editor (#3318)</li>
<li>Fixed issues with Forum plugin URLs (#3171)</li>
<li>Fixed URL issue in Forum plugin when moving a forum topic (#3244)</li>
<li>Improved Forum parsing: forum titles are only shown using plain text (no HTML or BBcode) (#3245)</li>
<li>Fixed an issue in the forum plugin when marking a forum topic as 'read' (#3338)</li>
<li>Fixed issue in the featurebox plugin which caused debug information to show (#3290 #3074)</li>
<li>Fixed issue with incorrect 'update required' message showing for the featurebox plugin</li>
<li>Several PHP 7 compatibility fixes</li>
<li>And dozens more fixes and improvements</li>
</ul>
<p>For a full list of changes, please <a href="https://github.com/e107inc/e107/milestone/15?closed=1" target="_blank">go here.</a></p>
<p>Please see our <a href="/get-started">downloads section</a> to download a copy.</p>
<h4>Important Update</h4>
<p>Anyone experiencing core-prefs backward compatibility issues after this upgrade, please use this <a href="https://github.com/e107inc/e107/files/2315138/e107_2.1.9_bc_patch.zip" target="_blank">patch</a>. </p>
<p>Thank you for continuing to use e107!</p><br />]]></description>
<dc:creator>admin</dc:creator>
<pubDate>Wed, 22 Aug 2018 10:00:00 -0700</pubDate>
<guid isPermaLink="true">https://e107.org/blog/e107-v2-1-9-bootstrap-cms-released.html</guid>
</item>


				</channel>
				</rss>