Dropped features
- Dropped support for old versions of PHP (8.4 is now the minimum)
- Removed the half-implemented Hellban system - it didn't work reliably, and it made other things worse - if anybody really wants this, feel free to open a feature request
- Various extensions were removed for being redundant, for example "Bulk Download" (creates a .zip) and "Bulk Export" (creates a .zip, with metadata) are now a single extension that includes a "with metadata" checkbox. If you find features are missing after upgrade, check the extension list.
Major new features
- Far more extensive configuration system
- Far more extensive permissions system
- Far more extensive CLI interface (
php index.php list) - Several new extensions (bone quality, handle audio, post descriptions, ratings blur, robots.txt, terms & conditions, tombstones)
Major changed features
- Docker "latest" tag now means "latest stable branch" - if you still want to be tracking the work-in-progress, use "dev"
- Instead of trying to handle all media formats, the default image/video/audio handlers only handle web-standard formats
- There are new "image++" and "video++" handlers, which will convert to web-standard formats at upload time
- "Convert format at upload time" behaviour removed from the transcode extensions
- Avatars split out of core, into separate "Gravatar" and "Post Avatars" extensions
- CAPTCHA split out of core, into separate "ReCaptcha" an "Simple Captcha" extensions
- Click-to-zoom split out of core, into separate "Zoom to Fit", "Zoom to Click", and "Zoom Lightbox" extensions
- OpenTelemetry for logs, metrics, and traces
Compatibility notes
Configuration
SPEED_HAXsystem config is removed; the various things it enabled are now part of the regular Board Config settings (Under the "Advanced" option)STATSD_HOSTsystem config is removed, statsd is configured with regular Board Config settings- Avatar support is no longer built-in to
User, we now have multiple avatar providers to choose from- "Gravatar" is the provider used in all versions of Shimmie so far, if you just want to carry on like before, enable this extension
- Instead, or in addition, there is now an extension to set cropped parts of posts as avatars
- Both can be enabled at the same time -- if the user has a post avatar, that'll be shown; else if they have an email address configured, a gravatar will be shown; else the avatar slot will be empty
- CAPTCHA support is now added with extensions (eg, the ReCaptcha extension). If a captcha extension is enabled, then captchas will be added around the site, and specific user classes can skip them based on class permissions.
Theme development
- Theme classes should now have a
const KEY = "extension_id";to connect them to the extension with the same ID - The
Page $pageparameter has been dropped from a bunch of theme functions - themes should now consistently use theCtx::$pageglobal - Generating HTML by string concatenation is now deprecated, everything should use MicroHTML.
- If you have custom themes, they may need updating - the quick and dirty way is to wrap your HTML strings in
\MicroHTML\rawHTML(...)
- If you have custom themes, they may need updating - the quick and dirty way is to wrap your HTML strings in
- Theme overrides changed from
CustomFooThemetoMyThemeFooTheme- eg the danbooru2 override for
FooThemeisDanbooru2FooTheme
- eg the danbooru2 override for
- Common elements (thumbnail, paginator) moved from
ThemelettoCommonElementsTheme, which can be overridden in the normal way, withMyThemeCommonElementsTheme - Each theme's custom
Pageshould now be namedMyThemePageand inherit fromPage
Extension Development
Imageclass replaced withPost-- "Image" terminology is now split into more specific terms:- "Post" - An uploaded bit of media along with metadata like tags
- "Media" - An uploaded file
- "Image" - An actual image, like a png or jpeg file
- global variables deprecated in favour of a
Contextclass - for quick compatibility, replace egglobal $database;with$database = Ctx::$database - Event listener functions (
onXyz(XyzEvent $event) {...}) now use the#[EventListener]attribute for metadata like event priorityExtension::get_priority()removed
- Total overhaul of the Board Config / User Config pages
- Settings should now all be defined in
config.phpfiles for each extension $config->get_{int|string|...}()functions replaced with a single$config->get()whose type depends on which config variable is being fetched
- Settings should now all be defined in
- Major overhaul of the Permission system
- Permissions should now be defined in
permissions.phpfiles for each extension - The old gigantic
Permissionsclass got broken into many pieces, egPermissions::CREATE_COMMENTis nowCommentPermission::CREATE_COMMENT - Permission IDs (the strings used to uniquely identify a permission) are mostly unchanged
- (Work in progress)
UserClasses andPermissions are stored in the database rather than inuser-classes.conf.php
- Permissions should now be defined in
- Removed
global $user_config;andUserConfig::get_for_user($id);-- use$user->get_config();instead - Removed
SCORE_LOG_*constants in favour of theShimmie2\LogLevelenum Extension/ExtensionInfo/ etc classes are now grouped byconst KEY = "extension_id";instead of by class name$page->set_redirect($url)now impliesmode=REDIRECT;$page->set_data(...)impliesmode=DATA, etc - no need to manually call$page->set_mode(...)unless you're doing something weird
Core development
- Total re-organisation of files in
core/- One file per PHP class - it's not quite PSR-4 (the whole app is a single namespace spread across many folders), but it's going in that direction
- Various random unorganised functions got put into classes, eg
is_bot()becameNetwork::is_bot(),log_error()becameLog::error() - Folders in 2.12 mostly map to files in 2.11 - eg the one giant "search.php" is now several medium-sized files in a "search" folder
- Test classes live next to their tested classes
- Load balancing algorithm changed from
Flexihash(because that library hasn't been updated in years, and isn't php8.4 compatible) to Weighted Rendezvous Hashing (Which is much simpler, better at balancing, and almost as fast)
New Contributors
- @BadMannersXYZ made their first contribution in #1238
- @Mjokfox made their first contribution in #1239
- @wfscans made their first contribution in #1291
- @Terrails made their first contribution in #1415
- @ermnick made their first contribution in #1516
- @Miyuutsu made their first contribution in #1741
- @gabbah-draws made their first contribution in #1751
- @xifize made their first contribution in #1795
Full Changelog: v2.11.5...v2.12.0