Osclass Changelog: Releases and Upgrade Notes

What changed in the latest Osclass releases

The latest Osclass release is 8.4.0 (2 October 2026). Use this changelog before you upgrade a live classifieds or marketplace site. This page lists 8.4.0, 8.3.1, and 8.3.0, newest first, with notes on compatibility, security, and upgrade impact. Older releases, back to 2010, are in the full version history. Download the matching ZIP from the download page or from previous versions, then test publish, search, payments, and cron on staging.
Osclass 8.4.0Released on
  • IMPORTANT: Minimum PHP version to run Osclass has changed from 7.2 to 7.4 (based on library dependencies).
  • IMPORTANT: Listing statistics now store daily measures on t_item_stats (views, premium views, and optional traffic, contact, commerce and lifecycle counters).
    Collection defaults to standard views, premium views, phone clicks, engaged views, logged-in views, minutes viewed, alert emails, contact forms and reports. Other measures are enabled in Statistics settings (and Listing settings) with Essential, Engagement, Commerce and Full presets.
    User summary and listing charts default to six measures. Statistics settings recommend 4 to 6 so the plot stays readable.
    Chart colors use a 16-color Tableau 10/20 palette so default measures stay distinct. The same colors are used in user charts and admin Statistics. Plugins can change the palette with osc_item_stats_palette, remap keys with osc_item_stats_colors, or override one measure with osc_item_stats_color.
    Front-office user summary charts and inline counters are added through configurable hooks (default user_items_top). An optional user listing chart uses item_top.
    User summary and listing charts are HTML/SVG. Each has its own chart type (default line). Other types: bar, area, stacked bar or stacked area. Chart measures can include listings published and listings live, counted from listing records.
    User summary chart: period tabs span the full width, the plot has a border, Y-axis ticks are whole numbers with no repeats, and the totals table under the chart is omitted. The views measure label is Standard views.
    User and listing SVG charts scale to the container width (no fixed height letterboxing on narrow screens). Point tooltips use a small HTML tip on hover and tap, with a larger invisible hit target around each point. Chart CSS/JS (user-stats.css, user-stats.js) are printed with the chart markup once per page.
    Admin Statistics starts on Overview. Listing details sits under Listings in the menu and replaces the old Reports stats page and plots listing measures with filters, totals, KPI cards for the selected measures, and CSV download. The CSV is written without fputcsv so PHP 8.4 does not add a deprecation notice to the file.
    Statistics page gaps (cards, columns, chart boxes) are 16px.
    Period buttons on admin Statistics are Last 30 days, Last 3 months, Last 12 months and All time. User summary and listing charts let the admin pick which tabs to show (Last 7 days, 14 days, 30 days, 90 days, 3 months, 6 months, 12 months, 24 months, All time). Install and upgrade preselect Last 30 days, Last 90 days, Last 12 months and All time. A period picked on a user chart is stored in the session and used on other user charts for that visit. It is not added to the page URL. Google Charts uses the current loader.
    Dashboard listing charts use the last 30 days and the same Google Charts helper as Statistics pages. Statistics page charts can be added on the dashboard from Backoffice widget settings. Each chart on that page has a Hide checkbox and a column selector on the same row. Period charts (line, area, bar) default to column 2. Mix charts (pie, donut, stacked bar, ranked bars) default to column 3 and can be moved to column 1. Install and upgrade show five charts in column 2, with Listing views first (standard views, premium views and the other Listing details measures), then Listing statistics, Comments statistics, Report statistics and User statistics. Other charts start hidden. Listing views (Overview and dashboard) plots the Listing details measures and uses the same period heading as Statistics (Views in the last 30 days: n. Premium views: n). Other dashboard chart headings show the all-time total, then Last 30 days and the period count.
    Plugins write counters with osc_increase_item_stat() from PHP. osc_increase_item_stats() updates the same measure for many listing ids in one query.
    Do not send orders, favorites or similar through the public item_stats AJAX action.
    Public item_stats AJAX requires the session CSRF token (octoken), accepts one measure per request, and ignores action counters even if a plugin filter lists them.
    Item-page clicks can use data-osc-stat with phone_clicks, contactother_clicks, shares or custom1-3. Filter osc_item_stats_ajax_measures extends that public AJAX allowlist.
    Phone and other-contact clicks use configurable CSS selectors. Engaged views use a configurable visible-time threshold (Statistics settings), default 15 seconds.
    Item-page stats JS waits until the listing config is printed, then records engaged views and minutes viewed. The last tick uses sendBeacon when the tab is closed.
    Minutes viewed count one full visible minute at a time. Alert-match and days-active counters were not added. Alert emails still increment i_num_alerts_sent.
    Comment counters stay in sync with active comments (including rating > 0). Custom 1-3 stay disabled until enabled.
    Daily cron can repair mismatched comment counters from t_item_comment (capped, does not scan all listings). Views, clicks and similar are event counters and are not recalculated.
    Automatic purge of listing statistic rows older than a retention period (default 24 months) is configured in Statistics settings. Daily cron and Tools > Cleanup use the same setting.
    One view per session uses a compact osc_seen session map (bucket => id => 1). osc_session_seen() and osc_is_item_viewed_in_session() share that store. Search, home and premium impressions, listing views and click measures use it. Minutes viewed uses osc_session_seen_inc() in the same map.
    User summary and listing charts can be shown to all signed-in users or only company accounts (user.b_company). Plugins extend the audience list with osc_item_stats_chart_audience_options and the allow check with osc_item_stats_user_can_see_charts.
  • Statistics overview and listing, user, comment and alert pages use a 65/35 layout. Chart bands pair 2 main charts with 3 support charts, or 3 main with 2 support. In a band, the right stack (including 16px gaps) matches the left stack height. Latest listings, users, comments and alerts tables take two chart slots (two cards plus the 16px gap). Google Charts is drawn to the box size and redraws on window resize, zoom and orientation change. Overview keeps KPI cards, area charts for views and new listings, a bar of root categories, and pie/donut mix charts for status. Listings statistics (left column) and a dashboard chart in column 1 use a stacked bar of parent and child category counts.
  • KPI summary cards are on Overview, Listings, Users, Comments, Alerts and Listing details. Tablets keep the 65/35 split; columns stack below 827px. Cards that count the selected period show percent change versus the previous window of the same length (Last 7 days versus the 7 days before that), always with a + or - sign. When the previous window is 0 the card shows +0%. Snapshot cards (Personal, Company) stay all-time totals with no comparison.
  • Period charts show the selected-period total under the widget title (for example, New listings in the last 30 days: 34). Snapshot charts keep the widget title only.
  • Collect from logged-in visitors only does not skip alert-email counters. User summary cards use the same measures as the chart. Admin and user-chart period values are checked against the period lists used on those pages.
    Statistics settings use the same form layout and save flow as other admin settings pages. Chart type, measures, period tabs and CSS selectors stay as saved. If collect checkboxes do not match a named preset, the preset is stored as custom. Listing settings uses the same preset rule.
  • User statistics split new users, new listings and comments into three main charts, with type/status columns on the right and country/region charts in a later band.
  • Alert statistics is a separate page: new alerts, new subscribers, emails sent, matched listings, active alerts by day with expired overlay, account type (guest, personal, company), frequency, status (active, inactive, expired), country and latest alerts. Unsubscribed alerts are not counted. Frequency uses Instant, Hourly, Daily, Weekly and Custom. Expired KPI and daily series count alerts that reached their expire date in the period.
  • Listing statistics keep new listings and views in the first band (country, region and price on the right). Category, phone and latest listings sit in the second band. Alert totals on that page open the Alerts statistics page.
  • Admin Statistics remembers the selected period the same way listing tables remember rows per page (cookie). It stays selected when you leave and come back, until you pick another period. A first visit uses the default period from Statistics settings.
  • Time series: area for volume, line for trend, scatter for daily points, stepped area for comments, combo for two related series (columns plus a line, or area plus bars). Percent stacked area for composition over time (alert account type, comments from registered vs guest). Drag across a period chart to zoom; right-click to reset. Ranked country and region lists use horizontal bars colored by value. Listings by category uses a stacked bar: parent categories on the axis and child categories as stacks. Mixes with fewer than 8 values use pie or donut. Views and premium views stay overlaid, not stacked, because premium views are a subset.
  • Comment statistics add pie and donut charts for rating (with vs without), comments vs replies, and status (pending validation, active, blocked). Blocked includes spam. Mix charts use the same period as the comments chart.
  • Latest lists show an extra line: comments use the commenter name, comment text and a Rating: X of 5 label when a rating is set (not 0); listings show contact name and city; users show email, country and account type; alerts show expired, active or inactive, frequency and account type.
  • Country and region support charts show the top 10 values and group the rest as Other. Listings by category is a stacked bar of parent and child counts; smaller groups are Other.
  • Admin Statistics pages expose hooks so plugins can add charts: admin_stats_load (queue data with osc_admin_stats_add_chart), admin_stats_header, admin_stats_kpi, admin_stats_main, admin_stats_side, admin_stats_after, admin_stats_settings_form and admin_stats_settings_post.
    Filters: admin_stats_charts, admin_stats_plugin_charts, admin_stats_details_data. Chart types: line, area, stacked area, percent stacked area, stepped area, scatter, combo, column, pie, donut, bar, stacked bar.
  • IMPORTANT: New Reports feature replaces legacy "Mark as" feature.
    Logged in users can now report listings and users (from listing detail and public profile) with reason, comment and optional attachment (setting with allowed extensions, stored in oc-content/uploads/report/).
    Report conversation: reporter, reported user (optional feedback) and admin can reply on report via front report page or backoffice.
    Reported user can send one front reply when status is Awaiting feedback; status then changes to In progress.
    New backoffice section Reports with manage reports data table (search, filters, bulk actions, row actions), report edit page with comments history and settings page.
    New settings: enable/disable reports, daily reports limit per user, email notifications, reported user feedback, auto-close, retention and attachments.
    New email templates: email_report_admin and email_report_user (variable event/message/comment placeholders).
    New admin toolbar notifications for new reports and unseen replies, new dashboard widget with report statistics.
    New friendly urls report/item/{id}, report/user/{id}, report/view/{id} with permalink settings.
    New database tables t_report and t_report_comment created, report columns (spam, misclassified, duplicated, offensive, expired) dropped from t_item_stats.
    Old "Mark as" pages, reported listings and stats columns have been removed. Compatibility kept so old themes do not break: osc_item_mark_url, osc_item_mark_disable (false when reports are enabled so sigma 8.3.1 Mark as UI still shows), ItemActions::mark($id, $as), Item::clearStat(), Item::countByMarkas(), osc_item_link_spam / osc_item_link_bad_category / osc_item_link_repeated / osc_item_link_offensive / osc_item_link_expired, osc_admin_toolbar_spam (empty stub). Mark as urls and Mark as form posts now open the report form and select the matching reason.
    Report reason select starts with an empty required "Select a reason..." option.
    Report reasons can be listing-only, user-only or both (filters: osc_report_reason_types, osc_report_reason_applies, osc_report_reasons_for_type).
    Report form field wrappers now include input-box class so theme form styles apply.
    osc_report_item_url and osc_report_user_url accept optional item/user id and optional reason (current listing or profile user if omitted).
    osc_can_report_item and osc_can_report_user hide the report link for own listing or profile (guests still see it).
    osc_report_source_label returns the source label. osc_report_url accepts optional reason.
    Website contact form can fully replace contact email with Contact form reports (type webcontact, no target id). Option is in General settings, disabled by default. Guests follow contact form rules, not report login or daily limits. Hooks: pre_contact_post, filter contact_send_mail.
  • IMPORTANT: Backoffice data tables has been refactored.
    Most of columns in backoffice are now sortable.
    Every data table has pagination, per page selection and filter options.
    Item filter options has been greatly expanded (quick search bar).
    User filter included columns has been expanded.
    New row actions added across multiple data tables (Show logs with same id, show alerts from same user, ...).
    New bulk actions added in multiple sections.
    New class created to create custom data tables in plugins/themes (CustomDataTable.php) with dedicated helper functions (hCustomDataTable.php).
    Refactored ordering/positioning features in data tables (ie Static pages).
  • IMPORTANT: Theme widgets are multilingual.
    Widget HTML is stored per locale in t_widget_description. Code (s_code) and CSS (s_css) are the same for all locales.
    Each widget has a unique internal name used in CSS as wdg-{name}. Device visibility is CSS-based: all, mobile (0-767px) or desktop (768px+).
    Empty widgets print nothing: no wrapper and no empty style tag. osc_count_widgets() counts only widgets that have content or code.
    Older themes keep using osc_show_widgets(), osc_show_widget_content(), osc_show_widgets_by_description() and osc_show_widgets_by_hook() from hUtils.php.
    New helper: osc_widget() (alias of osc_show_widgets). Also osc_count_widgets(), osc_has_widgets(), osc_widget_content(), osc_widget_code().
    Custom sections and locale-strict are in widget settings, opened with the gear on Manage widgets.
    Locale-strict mode shows content only in the current locale. Single-locale widgets keep one content field for all locales.
    Manage widgets is a data table with section filter, position (within the same section), bulk delete and row actions.
  • IMPORTANT: Alerts feature redesign and improvements.
    Alerts sending functionality was completely rewritten to more stable and predictable model.
    New constant defined MAX_ITEMS_PER_ALERT to limit maximum number of items in single alert (defaults to 50).
    Alerts form now support "v2" for advanced json replies in front. It is possible to integrate via hidden input alert_version=v2.
    New feature: alerts expiration + relevant settings (User settings). Expirations enables admin to control and configure default expirations, non-expiring alerts etc. Until now, all alerts were non-expiring.
    Stock English alert notification emails include alert name, frequency, created and expire dates, a search link and a My Account > Alerts link. Intro text uses {ALERT_INTRO} so hourly, daily, weekly and instant each use the matching period. Extra placeholders: {ALERT_ID}, {ALERT_NAME}, {ALERT_FREQUENCY}, {ALERT_DATE}, {ALERT_EXPIRE_DATE}, {ALERT_TRIGGERS}, {USER_ALERTS_LINK}. Upgrade replaces unmodified en_US bodies only; other locales get the My Account sentence if that placeholder is missing.
    Unsubscribe from an email link: first click shows You have been unsubscribed from this alert. A repeat click shows an info message that the alert is already unsubscribed. If you are logged in as a different account, a warning names the alert email. The secret is still honored.
  • Duplicate English flashes and labels now share one msgid where the meaning is the same (settings saved, cannot, email, listing, required fields, admin page titles). Object-specific sentences stay separate. FineUploader tokens and generic bulk "selected items" are unchanged. en_US core, messages, GUI theme, and Sigma theme catalogs were scanned from source and compiled.
  • IMPORTANT: Currencies table in backoffice has been redesigned.
    Manage currencies page now supports row actions, sorting, filtering, pagination etc.
    Added exchange rate feature for currencies.
  • IMPORTANT: Categories management has been redesigned - following standard data tables structure.
    New manage categories page created with standalone edit category page.
    Old category management redesigned and moved to "Quick management" section.
    Category bulk actions support enable, disable, delete, price field and configurable expiration lengths.
    Settings > General > Category settings: choose which expiration options appear in bulk actions (3 days to 48 months). Defaults: 14 days, 1 month, 3 months. Months convert to days (30 per month; 12/24/36/48 months use 365 days per year).
  • IMPORTANT: Custom fields management has been redesigned - following standard data tables structure.
    New manage custom fields page created with standalone edit category page.
    Old custom fields redesigned and moved to "Quick management" section.
  • IMPORTANT: Static pages url is now generated based on current user locale title - not by internal page anymore.
    Static page urls are now localized and match to content locale they present.
  • Languages table has been redesign.
  • Public profile listing search escapes the keyword and only allows known sort columns.
  • TinyMCE listing descriptions keep formatting tags and drop scripts and event handlers.
  • Search keywords with accents stay intact in friendly search URLs.
  • Keyword fields show &, quotes and angle brackets as typed.
  • Sigma theme removal of deprecated donate box and multisite reference.
  • Added new filter item_delete_image that can help manage item image removals.
  • Fixed built-in auto-cron so it does not run on every page load: it uses MINUTELY t_cron (at most once per 5 minutes), claims d_next_exec before the self-request, never nests another cron self-request, and updates t_cron before cron job logic.
  • Osclass unzip will now use ZipArchive::CREATE insetead of ZipArchive::OVERWRITE (4).
    Osclass will now support also other types of zip archives (with back slashes \ and missing explicit folder definitions insize zip).
  • Fix missing space in backoffice header links title.
  • Fix in ajax uploader on function getOriginalName if file is invalid.
  • Removed legacy meta tags in front & back.
  • Removed location as required fields in backoffice
  • Hooks in validation forms now does not require comma to be issued to continue with rules.
  • Fixed problems with jquery validate in backoffice - item form. Added additional-methods js library for jquery validate.
  • Location fields are no more required in backoffice.
  • Fixed overrides of canonical url on search page.
  • Fixed listing and category URLs using a slug from another locale instead of the current user locale.
  • Enhance canonical tag keeps the current locale. It no longer forces the default language code.
  • Duplicate category slugs now use a hyphen suffix (for-sale-1) instead of an underscore (for-sale_1). Listing URLs rewrite an existing uniqueness suffix on output; old underscore URLs still resolve. Stored slugs are not rewritten on upgrade.
  • Hreflang tags generate a listing URL and a search URL for each enabled front-office locale (category slugs and listing title for that locale). Other pages still swap only the language prefix.
  • Long-format language codes in the URL (en-us) no longer send listing clicks back to the home page. The backoffice Home link opens the front office in the site default locale.
  • Fixed extra white spaces on Sigma theme being added on some pages (before html tags).
  • Redis cache fixed issues.
  • jQuery UI default asset has been downgraded from v1.10.2 to v1.8.24 that is more compatible with jquery version osclass use in backoffice.
  • Added new backoffice feature Automatic Cleanup Settings into general settings in backoffice.
  • Added new backoffice feature "Send message" that allows to e-mail users from backoffice via popup.
  • Cascading cateogries select on publish page, when publishing in parent categories is not enabled, jquery validation will not enforce selection of most detailed category level (dynamic).
  • Numerous small updates and improvements, minor error notices fixed.
  • Backoffice & core code has been refactored and optimized.
  • Added new feature in backoffice widgets - maximize box that enlarge given box to full page view.
  • Tools > Configuration info in backoffice has been expanded with additional details.
  • Manage admins page has been optimized and new row action added - link to Manage action logs to see logs by admin.
  • New option added into Settings > Optimization: Database optimization that allow to optimize all Osclass database tables automatically (check, analyze, optimize, flush).
  • Regenerate images section and operations has been optimized and now works smoothly in small batches and can handle thousands of images without negative user experience.
    Added settings to control batch size for both actions - regenerate & refresh images.
  • Edit comments page has been improved with various action buttons.
    New feature to add comment from backoffice.
  • Tools > Backup data has been optimized and now show previous backups with download & delete actions.
  • Tools > Statistics has been added, now merge Location & Category statistics and add User statistics as well to be re-calculated. Layout has been optimized as well.
  • Enhanced security on latest search feature + improved stop words validation.
  • When updating expiration date, Osclass will now check date correctness and completeness and avoid updating item with invalid date.
  • Added install recommendation and handler functions for mb_strlen and mb_substr functions to be available in PHP.
Osclass 8.3.1Released on
  • IMPORTANT: Osclass now fully supports PHP 8.5 version.
    This includes update of all major libraries used by Osclass - incl. PHP mailer.
  • Fixed backoffice bug with search items (by item id).
  • Enhanced curl with headers and descriptive information.
  • Enhancements in Debug/Error log section in backoffice: It is now possible to select any file ending with .log located in oc-content folder (also osclass pay logs).
    UI improvements.
  • IMPORTANT: Major rework on Session and Cookie classes and way how these are defined and stored in browser.
    Update may cause users & admins to be logged out from Osclass.
    All cookies are now stored with "httponly" set to True, means they cannot be read by Javascript.
    In order to be able to read Cookie in Javascript, it's key must contain one of following: "_unsercure", "_unsec", "_js" or start with "ocjs_" and cannot start with "oc_", example: my_id_unsercure, secret_key_unsecure.
    Besides that, all cookies, when SSL is used, has "secure" set to True, so they can only be transmitted over HTTPS.
    These changes will significantly increase Osclass security and protects the cookie from being exposed to man-in-the-middle attacks on unencrypted connections, as well as cross-site scripting.
    New standardized functions created to manage cookies: _get, _set, _drop.
    This fix specific issues when non-friendly urls are stored into cookies causing problems to persist stable cookies like Saved Items Plugin.
    Cookies are now by default encoded, to avoid issues with mod_security and WAF (Access denied with code 403, ... Cookie outside range: 1-255, ...Invalid character in request).
    Cookies key (name) is sanitized and unsupported characters are removed from key.
  • IMPORTANT: Emoji update: Osclass will try to convert whole database into utf8mb4 for better compatiblity.
    This includes change in connection, database and table charset & collate (utf8mb4 / utf8mb4_unicode_ci). All these are changed by Osclass upgrade, but this process may be extensive!
    By default Osclass convert everything in upgrade process. If you getting errors for any reason, set constant UPGRADE_UTF8MB4_SOFT to do just soft charset/collate upgrade.
    In that case only some tables are converted and others may require manual upgrage in PhpMyAdmin.
    Use function osc_utf8mb4_sqls() to see list of remaining SQLs or just execute these directly on database (may take a while).
  • New helper functions osc_{get/set/drop}_{view/cookie/session/param}.
  • Improved management and work with sorting types on search page.
  • Search controller now use "iPerPage" param instead of "iPagesize", besides that allows logged admin to set also higher values (beyond general setting).
  • Added new functions osc_get_prev_url() and osc_get_next_url() to be able to generate prev/next meta tags (head).
  • Correction of osc_search_url() to no include iPage into URL in case it's <= 1.
  • Fixed possible incorrect redirects after user login, caused by invalid URLs being saved into user navigation history.
  • Comment settings link is now visible in Settings menu.
  • Fixed bug with cache and search page, where cache cause pagination not to work.
    Improved cache key generation on search page, added fix to mask dynamic time & timestamp values.
    Added more conditions, filters and hooks included in key generation (does not apply to alerts).
  • New feature in backoffice - Email templates, that checks and removes duplicated email templates created as mistake (usually failed plugin uninstall/reinstall).
  • It is now possible to create theme routes, where file points to theme directory, or to file in "custom" or "plugins" folder in theme directory.
  • Fixed bug with user stats calculation (item counts) those now only include active listings and active comments.
  • Fixed bug that incorrectly shown if email is visible on item page or not (in item form).
  • New dedicated function osc_static_page_url_from_page($page, $locale = '') for static page URL generation created, that works in similar way as function for item URLs
  • New layout for locations management in backoffice to improve user experience.
  • Fixed bug on Sigma theme, when posting of comments for unregistered was disabled, whole comment section was hidden. Now only form to post comment is hidden.
  • Fixed bug when it was possible to post comment using different email then email of logged user.
  • When subdomain type is enabled/disabled, frontend cookies are dropped to avoid problems with duplicated cookies (different cookie domains). Users may also need to clean browser cookies.
  • Fixed bug when user items url was returning 404 page after upgrade to Osclass 8.3.0.
  • New warnings and checks added into Osclass core those will notify admin on home page e.g. about hourly cron not running properly or having built-in cron enabled.
  • Added 2 new functions to help quickly add/drop email templates: osc_email_template_create($internal_name, $title, $text), osc_email_template_delete($internal_name).
  • Fixed & improved feature that enable users to resend validation (activation) link. Link can be sent just once a 5 minutes.
  • Comment reply email notification will now be sent to author of comment that user is replying to - if it's not identical email.
  • Added support for routes super parameter "sParams", where value of 1 merged sParams are exploded into separate params.
    sParams=param1,value1/param2,value2/param3,value3/... ==> param1=value1, param2=value2, param3,value3...
    This helps to easily create and support versatile URLs like custom plugin search, where there are multiple optional parameters and creating many routes does not make sense.
  • Added support for routes query parameters, those are correctly stored as param values.
    If there are params at the end of url in form: ?param1=value1¶m2=value2&... these are stored as param1=value1, param2=value2, etc.
    Before, this query string would likely be attached to last specified route param, if exists.
  • Improved cleaning of static files cache (css, js) when optimization is enabled.
  • Improved API key validation and other features related to external URL response.
  • Added extra action buttons to user profile edit in backoffice.
  • When searching plugin in backoffice, search term is persistent (stored in session) and not automatically cleaned. This helps to search & manage plugins, so after plugin action same selection of plugins is shown.
  • Added option to block site indexing by search engines in Backoffice > Settings > Block indexing.
  • Implemented order by "relevance" on search page, when search pattern is not empty.
  • Fixed pagination problem with custom search rules.
  • Added option to manually sync languages added into Osclass with file system (po files).
  • Upgrade process (automated from osclass-classifieds.com) will now handle if oc-admin or oc-content folder is renamed. For manual upgrades (by uploading & extracting zip), manual folder name change is required.
  • Improved TinyMCE editor on mobile devices.
  • Temp folder (oc-content/uploads/temp) is now regularly cleaned using daily cron.
  • Action logs improvements.
  • Alerts are not send to banned email address anymore.
  • Fixed issue with sending alert emails to non-registered users.
Osclass 8.3.0Released on
  • IMPORTANT: Osclass now fully supports PHP 8.3 & PHP 8.4 version.
  • IMPORTANT: Many core osclass functions has been rewritten and optimized in order to reduce loops and unnecessary database queries.
    Osclass preload categories, cities, regions and countries to session and search directly here instead of doing extra DB calls (only if amount of data is acceptable).
    Massive optimization of functions and queries to preserve results in session & cache and reduce amount of database queries.
  • IMPORTANT: Added brand new feature that allows users to filter items on their user items page & user public profile page.
    Majority of standard search parameters are supported.
    Comes with friendly canonical URL features.
    Set of new functions has been added into models, helpers and controllers to support this feature.
  • IMPORTANT: Optimization of search URL and osc_search_url() function:
    Order column dt_pub_date will not be included in url anymore as it's default order column.
    Order type DESC will not be included in url anymore as it's default sort.
  • IMPORTANT: Major feature "Custom search rules" has been added into Settings > Permalinks.
    It is now possible to create 26 custom search rules based on params those are active in search.
    These rules can be strict or fuzzy - accepting also params not specified in rule settings.
    There is full support for plugin/theme custom parameters and custom field parameters (meta) as well.
    Custom search rules are fully compatible with subdomains.
    Custom rules has top priority above canonical rules. Rules are prioritized (Z - top priority, A - lowest priority)
    Examples:
      • {sCity}/{sCategory} -> /a/bremen/for-sale
      • {sRegion}/{sCity}/{sCategory} -> /b/alabama/bremen/for-sale
      • cat:{sCategory}/city:{sCity}/min-{sPriceMin}-eur -> /c/category:for-sale/city:bremen/min-55-eur
    Examples with fuzzy logic, where extra params are enabled:
      • {sCity}/{sCategory} with {sRegion} -> /a/bremen/for-sale/region,alabama
      • {sRegion}/{sCity} with {sCategory} and {sShowAs} -> /b/alabama/bremen/category,for-sale/view,grid
    This feature is for advanced users and improper setup can cause unexpected behaviour!
  • IMPORTANT: Osclass now supports EMOJI!
    This includes change in connection, database and table charset. All these are changed by Osclass upgrade, but read carefuly!
    Some tables those has foreign key to table t_locale cannot be automatically converted and must be done manually by user that is looking for Emoji support.
    These are for example pages, category and user description tables and keywords table (Item description is converted by Osclass).
    For new installations, everything is created in charset utf8mb4, collate utf8mb4_unicode_ci.
    In case your DB would not support this charset/collate, you must migrate to one that supports it!
  • Canonical search URL as combination of category_city and category_region, that has been using underscore as delimiter, is now configurable via SEARCH_URL_CANONICAL_DELIMITER constant.
    Default value of SEARCH_URL_CANONICAL_DELIMITER has been changed to ":".
  • Added option on search page to apply pattern in search without locale restriction.
    Means search works on all item title & descriptions no matter what is user locale.
  • IMPORTANT: New interface to browse, search and manage logs has been added into Backoffice > Tools > Action logs.
    Note that Osclass was always collecting logs and if logs are collected or not and if logs are automatically cleaned or not, was never available in Osclass.
    Admin is now able to enable/disable logging in Settings > General, setup automatic cleanup by daily cron and define retention policy (ie remove logs after 24 months).
    It is possible to remove single log, cleanup all old logs (in Tools > Data Cleanup) and search in action logs.
    Logs were also enriched with comment and detail fields those will be populated in future, when needed.
    We strongly recommend to every admin, check your logs, update settings and drop old logs those are not required at all - it may lot of database space and optimize performance.
  • IMPORTANT: Alerts - subscriptions major improvements.
    Users can now change alerts frequency in user account area.
    Added extra fields like params, sql and trigger count, in general more options and details in backoffice.
    Improved trigerring of alerts, statistics capturing, search page url for alert, search title and more.
  • Improvements to cron commands and it's parameters. You can now define following params:
    force - to run cron even it's not right time yet - for easier debugging. In this case type of cron must be specified! It will accept &type=all as well. Only available for logged-in admin.
    print - to print summary of cron to see if everything was OK. Only available for logged-in admin.
    type - or cron-type - both params are OK to specify which type of cron to run. New type "all" is supported if force=1.
    Sample URL: https://yourpage.com/index.php?page=cron&type=daily&force=1&print=1
  • Enhanced search features in Backoffice > Users.
    Added search by phone and ZIP, by default search is now wildcard and supports exact match by using double quotes.
  • Enhancements with TinyMCE in backoffice + design updates especially for fullscreen mode.
    Refactor of image uploader script.
    Images from clipboard can now be added for items as well now (same as for static pages & widgets) - only from backoffice!
  • New features for Ban Rules:
    Hits - show number of hits for each ban rule. Each time ban rule is triggered, +1 hit is counted.
    Expire date - it is now possible to set expiration date for bans. Once expired, it is not applied anymore.
  • Widget will now be wrapped into div with class widget and additional html attributes.
    To support widget customizations, new filter widget_content and widget_content_wrap has been added as well.
    Widgets now support paste image from clipboard.
  • Enhanced category record management on listing & search page - reusing one from model instead of quering category table multiple times.
  • Enhancements to osc_item_category_price_enabled function, besides that new functions created: osc_item_category_row, osc_premium_category_row, osc_premium_category_price_enabled.
  • Added new filters for canonical URLs for easier support and customizations.
  • New option to Enhance canonical tags, by using default language code in canonical URLs, removing pagination parameter, sorting parameters etc.
    With enhance canonical url disabled: https://website.com/de-DE/search/sOrder,i_price/iOrderType,asc/category,1
    With enhance canonical url enabled: https://website.com/en-US/category-one-slug
  • Sigma theme: Sort option dt_pub_date desc (default) will now not be included in search filters.
    This change means that for default sort type, search URL get nicer without redundant parameters.
    Numerous design improvements and fixed.
    When price is disabled in category, price will be hidden everywhere in theme.
    Enhanced design for header - my account & logout, added user profile image as well.
  • Function osc_user_public_profile_url() got 2 updates:
    Added 2nd parameter $user where is possible to pass user array and avoid extra database call.
    Added 3rd parameter $mode that supports "username" and "id" values. "username" is default, means that username will be used in public profile URL.
  • Item views (stats) can now be set to count 1 view per page load or 1 view per session.
    Added item views into Sigma item page (below description).
  • Expiration date of listing in backoffice has been moved below category and is now much easier to manage.
    Besides that, it is now possible to update item publish date as well.
  • New function osc_get_theme_hook_compatibility() to get hooks compatibility from theme.
  • New set of functions for Search model to easily remove location from search conditions. Added new function addZip to search by ZIP code.
  • New hooks for structured data.
    Default structured data rating value (in case no comments exists) is now set to 3 instead of 0.
  • User public profile page - it is now possible to enable public profile just for company users or all registered users.
    Added new configuration parameter to user settings to set minimum number of items, that users must have published to have public profile enabled.
    If user does not meet requirements on public profile page, it shows 404 page instead.
  • New features in Appearance > Customization:
    Added new customization field "Custom Javascript", where customized javascript functions and codes can be placed. Content is placed between script tags.
    It is now possible to select hook to be used to show content in front office.
  • Added new options to manage and clean latest searches. Besides hourly, daily and weekly, it's possible to purge latest searches also monthly and yearly.
  • Created new function osc_get_user_row($id), osc_get_item_row($id), osc_get_category_row($id), osc_get_country_row($code), osc_get_region_row($id), osc_get_city_row($id), osc_get_locale_row($code), osc_get_currency_row($id) that retrieve object from database and save it into session to reduce number of DB queries.
  • Improvements in Tools > Import Data:
    Now error message with code is shown in case import to database fail.
    Added support for variables /*TABLE_PREFIX*/ and /*LOCALE_CODE*/.
  • TinyMCE editors has now much more features & options in backoffice that can be especially useful on static pages (no change in front-office).
  • It is possible now to change user registration date from backoffice.
  • It is now possible to stop mail sending via pre_send_mail_filter filter (if returns array('stop' => true)). Besides that function osc_sendMail now has 2nd optional parameter $type.
  • Improvements to various functions & design across Osclass.
  • Permalinks configuration page in backoffice has been redesign and is now much more intuitive.
  • Major enhancements to installation process especially in case something is not supported or installation is failing.
    Improved installation error messages - from database - to provide more details.
  • Default jQuery version is now 3.x (does not impact existing installations - only new).
  • Fixed alerts bulk actions functionality.
  • Fixed bulk action translations in backoffice.
  • Function osc_query_items() now supports much more custom parameters and conditions.
  • Added hooks user_recover_form and user_forgot_password_form.
  • Added "Lookup IP" link into backoffice. It's possible to configure lookup IP service in config.php as constant IP_LOOKUP_SERVICE.
    By default IP_LOOKUP_SERVICE = https://whatismyipaddress.com/ip/{IP_ADDRESS}, where {IP_ADDRESS} is variable replaced by Osclass.
  • Fixes and improvements to latest search functions.
  • Fixed bug on search page, pagination, RLT (Arabic) languages, category search page - page 2 and higher was returning 404. This is now resolved.
  • Fixed bug with category cascading drop downs, when there was more than 4 levels, it might result in incorrect behaviour when chaning categories.
  • Fixed bug when native location names were not applied on regions/cities loaded via ajax.
  • Fixed bug with latest searches purge by number of queries.
  • Created new helper file for currency functions.
  • AjaxUploader was updated to be able to work with it from plugins/themes side not just to upload item images.
  • Cache features (memcache, memcached, redis, ...) are now completely disabled in backoffice.
  • Improvements to backoffice top toolbar design.
  • Added more options to work and control flash messages. New filters enables full control over adding and showing flash messages. Now messages has also keys and raw text.
  • Improvements of market section in backoffice. It is now possible to filter products with expired support. These also get red background. Besides that expired products show price for extension, not full price.
  • Instant alerts (subscriptions) are now executed with minutely cron (before not executed at all).
  • Improvements to Uppy.io image uploader and it's compressor plugin. It is now possible to enable "optimize uploaded images" in media settings to compress original uploaded images (temp folder) and reduce it's dimension.
  • Search page no longer use noindex,nofollow tags as canonical URL should always be provided.
  • Refactor of breadcrumbs code, fixing bug with possibly wrong region and added country to search page breadcrumbs.
  • Improved checks (for view counts and "mark item as") if visitor is real user or bot. Introduced new function osc_visitor_is_real_user() that unify checks.
  • Change in Search class for subdomains - by default, if not explicitely disabled in constructor, every Search class object will get subdomain conditions & filters auto-applied.
    Means, if you are on country-based subdomain, Search class by default filter listings for this country only. Same for Region, City, User and Category.
  • Redesigned function osc_subdomains_filter_conditions($item_table = '') to simplify it's usage in order to apply subdomain conditions and filters.
    New functions create to support this:
      • osc_subdomains_filter_to_search($mSearch, $item_table = '') - use on Search object to instantly apply correct conditions.
      • osc_subdomains_filter_to_dao($object, $item_table = '') - use on DAO object to instantly apply correct conditions.
    It is possible to apply subdomain filters on listing search just by running 'custom_item_query' hook on specific DAO query.
  • Premium views (stats) are now not counted only if user is not admin, is real visitor and is not owner of premium listing.
  • Added support for attachments in web contact form of Sigma theme.
  • Enhanced attachment check when uploading files to contact form. Added file validation to item contact form attachments (mime type).
  • Item expiration notification has been enhanced. It is now possible to set notification 0 days before expiration (-1 to disable). Query getting expiring items has been optimized and redesigned.
  • Sigma theme function osc_uploads_url defined in functions.php must be removed or renamed! It is clashing with core Osclass function and might cause logo not to be correctly displayed. Rename it or update Sigma manually.
  • Remember me checkboxes in front & back office login are now checked by default.
  • Added plugins integrity check that identify plugins those are in incorrect state.
  • Improvements to item url generation when subdomains are enabled.
  • Child themes are no longer considered for update (based on parent theme).
Osclass 8.2.1Released on
  • Fixed bug, where users could only upload 1/2 or allowed number of photos on listings.
  • Fixed several error notices and warnings.

Frequently asked questions

What is the latest Osclass version?
The latest stable Osclass release is 8.4.0, published on 2 October 2026. This page has the notes for 8.4.0, 8.3.1, and 8.3.0.
Does Osclass support PHP 8.5?
Yes. Current Osclass cores are fully compatible with PHP 8.5. The installer still requires PHP 7.4 or newer. Update to a current package if your host runs PHP 8.5.
What should I check before I upgrade Osclass?
Read the security notes, PHP changes, and any manual database steps for the version you are moving to, then test publish, search, payments, and cron on staging. Many updates run during the upgrade. Some releases change session cookies, so users and admins can be logged out after that upgrade.
Where do I download the latest Osclass ZIP?
Download Osclass 8.4.0 from https://osclass-classifieds.com/download. This page lists what changed. It does not host the ZIP.
Where are older Osclass release notes?
Notes from Osclass 8.2.0 back to 1.1 (2010) are on https://osclass-classifieds.com/changelog/archive. An old link such as https://osclass-classifieds.com/changelog#v8-0-0 opens the matching release there.