Version History

Version 1.8.4 - Download

Security improvement and some bug fixes, 7th May 2020.

  • Security fix: prevent use of <embed> and <object> tags.
  • Treat blob ids as strings due to size limitations.
  • Fix negative upvoteCount wrongly displayed.
  • Fix file input field causing problems on SnowFlat theme.
  • Avoid magic quotes deprecation notice on PHP 7.4.
  • Prevent duplicated vote events.

Version 1.8.3 - Download

Minor bug fixes, 12th January 2019.

  • Fix voting on follow-on question 'comments'.
  • Fix selection of answers trying to close questions.
  • Fix titles wrapping in SnowFlat theme.
  • Fix cache trim function.
  • Clear question cache when posts are hidden.
  • Fix minimum tags error when using only categories.
  • Fix MySQL reserved keyword clash.

Version 1.8.2 - Download

Several bug fixes, including improvements to the Q&A microdata, 20th December 2018.

  • Fix closed questions by selected answer not displayed as closed.
  • Fix tag background color in Classic theme.
  • Fix 'no permissions' message in WYSIWYG editor upload.
  • Fix errors in structured data.
  • Add ^site_url parameter to email notifications.
  • Fix event logger issue with Unicode characters.
  • Fix searching/indexing in Thai language.
  • Add confirmation for email unsubscribe.
  • Fix plugin version comparison (when plugin version is later than official release).
  • Fix Q2A version comparison (for pre-release versions e.g. 1.8.0-beta vs 1.8.0).
  • Fix Ubuntu font in SnowFlat theme on Windows.

Version 1.8.1 - Download

Many small bug fixes and improvements, 1st December 2018.

  • Update cached tag count when deleting posts.
  • Fix some scenarios where ^userpoints records are not present.
  • Update hidden HTML to avoid mistakenly being detected as malware.
  • Fix missing email confirmation link in user account.
  • Revert to using PHPMailer autoloader.
  • Prevent browser content encoding error in PHP 5.3.
  • Fix anonymous user images not being displayed.
  • Add placeholder text to search box.
  • Fix various notices on PHP 7.2.
  • Fix file uploads in CKEditor.
  • Enlarge default CKEditor font size.
  • Avoid sending emails to blocked and unapproved users.
  • Correct protocol when generating the site URL.
  • Fix PHP Notice with array URL parameters.
  • Upgrade CKEditor (4.11.1), jQuery (3.3.1).

Version 1.8.0 (release) - Download

Final release of major feature upgrade, 8th February 2018.

  • Fix missing function qa_get_gravatar_url() when using Wordpress integration.
  • Added total unanswered questions to Admin > Stats.
  • Fix MySQL query errors when using SQL mode IGNORE_SPACE.

Version 1.8.0 beta 2 - Download

Second beta of major feature release, 23rd December 2017.

  • Fixed errors with output buffering and gzip compression.
  • Fixed non-ANSI group-by queries in MySQL 5.7.
  • Fixed notices on PHP 7.2.
  • Fixed points recalculation when converting answers to comments.
  • Added generic .qa-post-content class to replace old .entry-content which was removed.
  • Fixed non-unique cache keys.
  • Reworked file cache to securely allow cache inside web root.
  • Fixed issue with PHPMailer's autoloader on PHP 7.2.
  • Removed (non-functional) clipboard from CKEditor.

Version 1.8.0 beta 1 - Download

First beta of major feature release, 26th September 2017.

New features

  • Performance has been improved by around 20% on average (even more on questions with many answers).
  • Added caching system. Currently caches question data, related questions and category list for anonymous users. Caches can be stored in files or in memory (requires Memcached PHP extension).
  • Added comment voting. Comments may be voted up or down, and points may be given as with answers (default is no points).
  • Added ability to enable/disable plugins. For backwards compatibility, by default plugins cannot be disabled (except by removing the plugin folder entirely). Plugin developers must "opt-in" to this feature using the load_order property in the plugin's metadata.json. See the plugin documentation.
  • Added support for IPv6 addresses.
  • microdata is now used throughout Q2A.
  • Number formatting characters (decimal point, thousands separator) can be specified in language files.
  • Numbers (for votes, views etc) can be compacted e.g. 1.3k instead of 1300.
  • Added option to block certain usernames.
  • Out-of-the-box Joomla integration is now included.
  • Changed the category naviation to a widget, so it can be moved to different positions.
  • Widget plugins can now be placed on pages created by page plugins.
  • Password security has been upgraded from sha1 to use PHP's password_hash function where available.
  • Password reset method has been greatly simplified.
  • Questions are now checked for "double posting" when submitting.
  • Added Newest users page, along with Permissions options for who can view the New or Special users pages.
  • Simplified closing questions to use one field for closing with a note or as a duplicate.
  • Added option to prevent users closing their own questions (i.e. limit to only admins/moderators).
  • Anonymous user naming is now optional.

Other notable changes

  • Tested on PHP 7.0 and 7.1.
  • Coding style has been improved and made consistent across the codebase.
  • Forms on the question view page have been changed and reordered. Custom themes that override the q_view_main, a_list_item, a_item_main, c_list_item, c_item_main methods may need to make changes.
  • 'Favorite' button on question pages moved outside <h1> tag. Themes may need to make changes.
  • Upgraded CKEditor (4.7), jQuery (3.2), and other libraries. Custom jQuery code may need updating; see the jQuery upgrade guide.
  • Hidden form fields can now be specified in a consistent way with regular fields (e.g. including extra attributes).
  • Added date/time to user votes. This can be used by plugins to check things like voting history. Existing votes in the system are given the same date as the post during the database upgrade.
  • Removed option "All new users must be approved" (approve_user_required) in favor of using the regular Permissions settings. Administrators relying on this option should update their Permissions settings to allow "Approved users only" where appropriate.
  • Made improvements to hotness calculations, and added option to disable hotness calculation on every page view. (Slightly improves efficiency but hotness values may become out of date.)
  • Separated out functions from qa-include/qa-page.php into qa-include/app/page.php. External code and Plugins can include only the latter file in order to use its functions.
  • Update check in Admin panel uses latest Q2A version from GitHub rather than Q2A site.
  • Added the HttpOnly flag to cookies.
  • Used hash_equals to avoid timing attacks.
  • Added meta description to category pages.
  • Added theme-specific classes to <body> tag.
  • Post character limit increased to 12000.
  • JavaScript files have been combined into qa-global.js.
  • Significantly reduced in-page JavaScript code duplication.
  • Redirect to canonical question URL.
  • Hidden posts now show hidden follow-on questions and questions shown as duplicates. This makes it clearer for Administrators why a post cannot be deleted.
  • Added replyto support for qa_send_email.
  • Allowed users to see their own private user fields.
  • Added 'success' key to $qa_content array for displaying success messages.
  • Stopped logging security form violations unless in debug mode
  • Adsense plugin has been updated to use responsive code.
  • Improved avatar handling API.

Bug fixes

  • Selected answers are deselected when hidden.
  • Fixed error with special characters in tags when using 'Index' URL Structure.
  • Fixed error deleting questions where another is closed as a dupliate of it.
  • Updated reCAPTCHA to use the site language.
  • Changed Gravatar URLs to use HTTPS.
  • Automatically redirect to external user login if used.
  • Fixed PHP warnings on AJAX requests in some situations.
  • Fixed unencoded URLs not being detected when closing questions.
  • Fixed visibiliy of option_allow_private_messages in admin page.
  • Better font sizing in Tag Cloud plugin.
  • "Remove accents from question URLs" now removes all non-ASCII characters.
  • Fixed file_get_contents usage on PHP 7.1.
  • Fixed issue where $qa_content['script'] was reset.
  • Fixed widgets not appearing on user subpages (wall, activity etc).
  • Fixed Facebook login issues with old API.
  • Fixed integer handling on PHP 7.1.
  • Fixed missing username in private messages when user is deleted.
  • Removed self-reply buttons and reply buttons for deleted users on Private message pages.
  • Improved navigation on Private message pages.
  • Fixed miscellaneous invalid HTML.
  • Various other minor theme/layout fixes.

Key source code changes

Changed language keys

  • users/email_code_another (renamed from users/reset_code_another)
  • users/email_code_emailed (renamed from users/reset_code_emailed)
  • users/email_code_label (renamed from users/reset_code_label)
  • users/email_code_wrong (renamed from users/reset_code_wrong)
  • main/vote_disabled_hidden_post (renamed from main/vote_disabled_hidden_a & main/vote_disabled_hidden_q)
  • main/vote_disabled_my_post (renamed from main/vote_disabled_my_a & main/vote_disabled_my_q)
  • question/close_reason_title (changed)
  • emails/confirm_body (changed)
  • users/confirm_emailed (changed)
  • users/send_password_button (removed)
  • main/view_q_must_be_approved (changed to add link)
  • profile/post_wall_must_be_approved (changed to add link)
  • question/answer_must_be_approved (changed to add link)
  • question/ask_must_be_approved (changed to add link)
  • question/comment_must_be_approved (changed to add link)

New events

  • c_vote_down
  • c_vote_up
  • c_vote_nil

New CSS classes

  • .qa-success
  • .qa-form-tall-help, .qa-form-wide-help
  • Comment voting may require new styles:
    • .qa-c-list-item .qa-voting
    • .qa-c-list-item .qa-vote-first-button
    • .qa-c-list-item .qa-vote-second-button
    • .qa-c-list-item .qa-vote-one-button

Version 1.7.5 - Download

Important security fix and other minor improvements, 9th August 2017.

  • Security fix - prevent creation of multiple users during installation.
  • Use site language for reCAPTCHA.
  • Add site language to HTML tag.
  • Change from / reply-to for feedback form.
  • Fix missing icon on private messages in SnowFlat theme.
  • Fix users being unable to see all their own profile fields.
  • Minor fixes to post validation.

Version 1.7.4 - Download

Admin security fix and other minor improvements, 14th March 2016.

  • Various minor fixes to SnowFlat theme.
  • Support Wordpress database port.
  • Disable SSL checks in email if SMTP security is disabled.
  • Only allow admins to check plugin versions.

Version 1.7.3 - Download

Many small bug fixes and improvements, 3rd February 2016.

  • Fix missing error message when post content too short.
  • Fix empty question title, answer or comment passing validation.
  • Handle 4-byte Unicode characters (prevent blank usernames).
  • Various minor fixes to SnowFlat theme.
  • Fix error message during JavaScript recalc scripts.
  • Remove link to hidden duplicate/follow-on questions.
  • Fix private messages link being shown for SSO/Wordpress sites.
  • Fix custom registration URLs with Wordpress integration.
  • Increase default size of Facebook avatars.
  • Fix slow query when migrating files to/from disk.
  • Fix issues when uploaded files are missing from disk or database.

Version 1.7.2 - Download

Many small bug fixes and improvements, 17th November 2015.

  • Fix warning under certain conditions on closed questions.
  • Fix meta description not showing on re-routed home pages.
  • Fix missing server-side check regarding allow_multi_answers option.
  • Fix missing title errors when recategorizing questions.
  • Fix database error when profile fields are missing.
  • Fix incorrect link styling for categories privileges in user profile.
  • Prevent blank paragraphs in CKeditor.
  • Fix potential infinite loop in JavaScript from qa_set_display_rules.
  • Change URL test string to avoid Apache mod_security issues.
  • Various minor fixes to themes.
  • Use local Ubuntu font by default.
  • Fix reCAPTCHA dependency on allow_url_fopen configuration.
  • Fix links/redirects to post anchors.
  • Add highlight for answer/comment anchors.
  • Allow PDFs to be displayed in-browser.
  • Add filename for image downloads.
  • Prevent usernames containing . or ..
  • Allow non-default port in MySQL connection.

Version 1.7.1 - Download

Many small bug fixes and improvements, 27th July 2015.

  • Fixed errors with microformats.
  • Fixed inconsistencies in SnowFlat theme between small screen responsive styles and mobile-detected styles.
  • Fixed issue with multiple reCAPTCHAs per page.
  • Fixed PHP notice when 'age of post' option is turned off.
  • Fixed text direction on login forms for RTL themes.
  • Allowed CKEditor config to be overriden more easily.
  • Reinstates CKEditor smiley plugin and added an admin button to fix missing image links.
  • Fixed upvote/downvote styles (when using separate counters) in SnowFlat theme.
  • Various minor style/alignment fixes in SnowFlat theme.
  • Improved the style of debug information.
  • Fixed missing theme initialization calls in AJAX requests.
  • Improved snippets in the mouseover-layer plugin.

Version 1.7 (release) - Download

Final release of first community-developed version, 7th January 2015.

  • Updated reCAPTCHA plugin.
  • Fixed some errors with microformats.
  • Added confirmation dialog when resetting admin options.

Version 1.7 beta 2 - Download

Minor improvements and fixes on the first beta, 7th December 2014.


  • Metadata for plugins, themes and languages can now be stored in a metadata.json file.
  • Upgraded to jQuery 1.11.
  • Added an initialize() function to the theme class. Theme/plugin developers can use this for any initialization that needs to occur before content is output (previously many authors did this in the doctype() function). If this function is overridden, authors must call through to parent::initialize() so that all plugins/themes can run their initialization too.
  • New DB function qa_db_num_rows() as a wrapper for mysqli_result::num_rows.
  • Added a .qa-warning CSS class to all themes for plugins to use.
  • Added option to hide post updates meta information.
  • The 'selected' state of menu items is now determined in a different way: if the navigation subarray has the key 'selected_on' then it will match the specified paths against the beginning of the requested URL. Otherwise it will look for an exact match with the array key. Example:
      'url' => qa_path_html('tags'),
      'label' => qa_lang_html('main/nav_tags'),
      'selected_on' => array('tags$', 'tag/'),

Bug Fixes

  • Fixed issue where a plugin's option_default method was not being called.
  • Fixed missing tables warning in installation.
  • Fixed HTML output before session_start on install.
  • Use password field on install.
  • Plugins not sorted by name rather than directory name.
  • Fixed various layout issues with SnowFlat theme.
  • Fixed missing styles for custom sections in SnowFlat theme.
  • Fixed issue with navigation items not being selected or multiple items being selected (see above change).
  • Fixed front page URL not being properly mapped.

Version 1.7 beta 1 - Download

First community-developed version of Question2Answer, 6th November 2014.

New Features

  • New responsive Snow theme.
  • Private messages page, listing all PMs received and sent.
  • Ability to add a required checkbox on registration form (e.g. for Terms & Conditions acceptance).
  • Switched to mysqli as the mysql library is deprecated.
  • Include exact join date in user profiles.
  • Added [closed] to closed questions where appropriate.
  • Linked title on question page.
  • Similar questions list (from Ask page) is now overridable in the theme (q_ask_similar() function). Default display is a list.
  • New 'text direction' site option (only has an effect if the theme is built for it). Themes can also now access $this->isRTL to check if a site is using right-to-left text and act accordingly (e.g. include an alternate stylesheet).
  • Users/Tags pages use a new "block layout" instead of the old nonsemantic table layout. Theme developers can activate this by setting the class member $ranking_block_layout to true. The Snow, Classic and Candy themes have this, but SnowFlat does not as yet.
  • Language metadata can be stored in a metadata.php file (see qa-lang/en-GB for an example). Currently this only supports display_name as the language name, but will be improved and expanded to themes and plugins in the future.

Other Notable Changes

  • Minimum PHP 5.1.6+ requirement.
  • Upgrade CKeditor plugin (v4.4).
  • Various classes have been refactored for PHP 5 to include function and member visibility.
  • Added some basic unit tests in the qa-tests folder (Github-only). See qa-tests/ for instructions.
  • An 'autoloader' has been added to begin transition away from an include-oriented structure. (Currently only used for debug class.)
  • The qa-include folder has been restructured, with related files moved to subfolders (qa-app-* to the app folder, modules to the plugins folder, etc).
  • Select elements in forms can be given the match_by parameter to set the selected option using the array key instead of value.
  • Better parsing of URLs in posts.
  • Upgrade PHPMailer (v5.2.7).
  • Pagination on blocked users page.

Bug Fixes

  • Added many missing button tooltips.
  • Correct anchor links on comment edit/save buttons.
  • Usernames with hash symbols now work on the Nginx server.
  • Fixed issue that allowed a user to bypass a question's minimum length.
  • Fixed issue with capitalized table prefixes in plugins.
  • Fixed issue that allowed users to vote on posts before claiming them.
  • Fixed issue that allowed users to favorite themselves.
  • Show error when file uploads exceed the server's limits.

Potentially Breaking Changes

  • Q2A now requires PHP 5.1.6+.
  • Plugin metadata must now be near the beginning of the file (within the first 8 kilobytes).
  • The init_queries function in plugins is now passed the case-sensitive, canonical table names and not lowercased names. This means that string comparisons are now correct where site owners are using capitalized table prefixes (e.g. QA_*). However, it may potentially break a plugin in one situation: when a developer has manually called strtolower on the table they are checking against.
  • qa-class.phpmailer.php and qa-class.smtp.php have been moved to qa-include/vendor/PHPMailer/. These files should not have been used directly by outside code - the built-in Q2A functions like qa_send_email should be used instead. If custom code is required, simply include qa-include/vendor/PHPMailer/PHPMailerAutoload.php and the required mail classes will be automatically loaded.

New CSS Classes Required

  • .qa-q-title-list (<ul>, basic question title list)
  • .qa-q-title-item (<li>, question title list item)
  • .qa-ask-similar (<div>, surrounding block for similar questions)
  • .qa-ranking-item (<span>, for top users/tags pages; other related classes need replacing too)

Deprecated Functions

  • qa-app-admin.php/qa_admin_addon_metadata: use qa_addon_metadata instead.
  • qa-app-posts.php/qa_post_userid_to_handle: use qa_userid_to_handle instead.
  • qa-app-format.php/qa_account_sub_navigation: use qa_user_sub_navigation instead.
  • qa-app-limits.php/qa_limits_remaining: use qa_user_limits_remaining instead.
  • qa-app-options.php/qa_options_set_pending: no longer required.
  • qa-app-posts.php/qa_post_userid_to_handle: use qa_userid_to_handle instead.
  • qa-theme-base.php/qa_html_theme_base: PHP4-style constructor is no longer supported; please use __construct method instead.
  • qa-theme-base.php/post_avatar: use avatar instead.
  • qa-theme-base.php/ranking_table: table layout is no longer recommended.
  • qa-theme-base.php/ranking_table_item: same as above.
  • qa-theme-base.php/ranking_spacer: same as above.

Version 1.6.3 - Download

Last version developed exclusively by Gideon, with minor bug fixes and interface tweaks, 19th January 2014.

  • Combined sub-navigation for user profile and account/favorites pages.
  • Allowed any wall post (beyond the first page) to be deleted.
  • Excluded ( ) [ ] brackets when automatically detecting URLs.
  • Allowed changes of category to be performed as a silent edit.
  • Fixed recalculation of user points when using external user integration with textual userids.
  • Stopped sending passwords out in user registration emails.
  • Filtered out <FORM> tags from being displayed in the content of posts.
  • Excluded irrelevant tables when calculating database size for admin/stats page.
  • Excluded closed questions from listings on the 'Unanswered' page.
  • Increment the counters which limit rate of posting when posts are queued, not approved.
  • Send the direct link for a comment (instead of its parent) in notification emails regarding comments.
  • Applied word censoring to the contents of wall posts sent out in email notifications.
  • Applied word censoring to the titles of items in search results.
  • Applied word censoring when showing tags in the tag cloud widget.
  • Fixed WordPress integration (and sample external user integration code) to work with any Q2A URL structure.
  • Prevented blocked users from changing their user profile.
  • Fixed PHP warning on several different pages if all extra user fields are removed.
  • Added an indication if a user is blocked on their account page.
  • Added user email confirmation status to the admin page for moderating user registrations.
  • Show maximum rate for wall posts and private messages in admin panel in all appropriate cases.
  • Allowed custom pages to be saved and viewed directly in a single click.
  • Ensured that no category can be specified when asking a question, if admin permits this.
  • Fixed PHP warning on ask page if tags are not being used on a Q2A site.
  • Fixed bug in 'queued' parameter passed to filter modules when determining whether a new post has to be moderated.
  • Only show category links on Unanswered page if QA_ALLOW_UNINDEXED_QUERIES is set to true.
  • Fixed several minor issues in the Snow theme.
  • Improved behavior of WYSIWYG editor in non-Javascript or Android browsers.

Version 1.6.2 - Download

More minor bug fixes on the 1.6 release, 31st July 2013.

  • Linked 'asked' word on question pages to the question page itself.
  • Removed navigation link to user wall if using external user integration (bug).
  • Fixed PHP notices in deprecated qa_limits_remaining() function (bug).
  • Worked around a bug in some versions of MySQL, which prevented avatars showing in some cases (bug).
  • Fixed Apache rewriting issue that prevented viewing wall or activity tabs for usernames containing & or # characters (bug).
  • Fixed PHP notice when editing a question if categories are not being used (bug).
  • Stopped enforcing minimum number of tags if tags are not being used (bug).
  • Fixed nonsensical hidden times showing for some posts on admin pages (bug).
  • Fixed automatic recalculation of necessary database information in a few admin scenarios (bug).

Version 1.6.1 - Download

A few minor presentation-related fixes from the 1.6 release, 7th July 2013.

  • Removed inactive option to disable adding names to anonymous posts.
  • Worked around a bug in some versions of MySQL which prevented avatars showing on wall posts.
  • Worked around a WebKit rendering bug when updating the voters tooltip via Ajax.
  • Fixed vertical centering of fields in the Snow theme for Internet Explorer 10.

Version 1.6 (release) - Download

Final release of the first version I'm not embarrassed by, 27th June 2013.

  • Added ability to add or delete wall posts from a user's wall page as well as their profile page.
  • Removed answer count boxes from pages listing all of a user's answers.
  • Removed error message on login form if the 'Login' button is clicked at the top of the Snow theme.
  • Fixed database issue preventing multiple custom links pointing to the same URL.
  • Fixed upgrading the database from some versions of MySQL that have InnoDB disabled.
  • Fixed a couple of minor issues in the default Snow theme.

Version 1.6 beta 2 - Download

Minor tweaks and fixes from the first beta, 20th June 2013.

  • Added viewing of all posts on a user's wall via a separate page.
  • Showed answer votes on the list of a user's answers instead of votes on the related questions.
  • Removed views counter and vote display from several question lists where they are not relevant.
  • Separated out anti-spam limits for private messages and wall posts by a user.
  • Made the active plugin options form more prominent on the plugin administration page.
  • Converted all HTML tags to lower case.
  • Improved editing of category-specific user privileges.
  • Added functions and functionality in qa-app.posts.php to reflect new possible operations on posts.
  • Fixed favoriting and unfavoriting of categories on question list pages.

Version 1.6 beta 1 - Download

First beta of major feature upgrade, 6th June 2013.

New Features

For Users

  • Added walls for posting messages on user profile pages (if admin allows it).
  • Added ability for anonymous users to include a name for display with their posts.
  • Added highlighting of user favorite questions, tags, categories and users where those entities appear.
  • Added more information to user's news feed so that it's clear why each item appears there.
  • Added new and improved design for user profile pages in the default Snow theme.
  • Added separate pages for each user showing their recent activity, all questions and all answers.
  • Added option to show the number of views on question pages.
  • Added avatar at top of default Snow theme for logged in users.
  • Improved display of private message history to match user wall posts.

For Administrators

  • Added per-category privilege levels, e.g. to allow a user to be an expert in one category only.
  • Added optional user moderation, where new users must wait for approval, or have reduced privileges.
  • Added option to store all uploaded content in disk files rather than in the database.
  • Added ability for privileged users to make silent edits to the content of posts.
  • Added ability for custom user fields to be shown on the user registration form.
  • Added option to control whether moderated posts show their time of creation or time of approval.
  • Added mouseover showing who flagged and voted on each post, for privileged users only.
  • Added option for posts to be queued again for moderation when they are edited.
  • Added ability for some custom user fields to be shown to privileged users only.
  • Added optional notification email for admin whenever a new user registers.
  • Added option to moderate posts based on whether the author has enough points.
  • Added count of flagged and queued posts in the admin sub-navigation menu.
  • Improved layout of plugins section of admin panel to only show one set of options at a time.

For Developers

  • Added internal image upload API for use by WYSIWYG editor and other plugins.
  • Added reorder_parts(), form_reorder_fields() and form_reorder_buttons() methods for reordering theme elements.
  • Added qa-part-* classes to HTML pages to allow targeting of specific page forms via CSS.
  • Improved error reporting for eval()'d code from overrides and layers by showing the source file name.
  • Improved error reporting in some other places by removing the @ sign where possible.

Other Changes


  • Added protection from Cross-Site Request Forgery (CSRF) attacks in all forms.
  • Information displayed for fatal errors no longer includes full file paths.
  • No longer display failed database queries to the user.
  • Blocked users and IPs are still able to view question pages.
  • When hiding all posts from a user or IP address, also reject queued posts from that user/IP.


  • Users are warned if they have reached a rate limit before they write a new post.
  • Posts which were hidden while queued for moderation can now be reshown.
  • Facebook login now occurs on a separate page, for better future compatibility.
  • If a question has no answers, don't include an empty <H2> tag on the question page.
  • Removed qa-*-hover CSS classes and related Javascript, whose only purpose was IE6 support.
  • Updated to CKEditor 3.6.6 and Facebook PHP SDK 3.2.2.

For Developers

  • The load_module() method in modules is now passed the module type and name as extra parameters.
  • Duplicate Javascript includes in $qa_content['script_src']) are now removed.
  • Adding terminating semicolons (;) after all Javascript statements to allow Javascript compression methods.
  • Language checking script now considers language phrases used in plugins.
  • The functions below from Q2A 1.5.x have been removed or are not backwards compatible:
  • The new CSS classes below should be added to custom themes (start by copying from qa-theme/Default/qa-styles.css):

Bug Fixes

  • Prevent registration from an external user identity provider if the email already matches an account.
  • Fixed display of avatars (and PHP error) for some list items when using external user integration.
  • Moderation by third party filter modules is now reapplied when a hidden post is reshown by its author.
  • Fixed erroneous updating of the last write IP address for some users when deleting an answer.
  • Filtered out ASCII control characters from the content displayed in XML feeds.
  • Fixed bug when creating a user from an external identity source on systems with case sensitive MySQL table names.
  • Convert . to _ in variable names when building $_GET array to match PHP's behavior.
  • Fixed bug where users with blank email addresses could generate an error by clicking to confirm.
  • Prevent the deletion of an answer which had a related question asked, to avoid SQL error.
  • Ensure that 'answered' and 'commented' links on question pages use the canonical URL for the question.
  • Fixed invalid CSS class names for some individual navigation items.
  • Fixed silent Javascript error in Snow theme on non-question pages.
  • Removed login form on Snow theme when using external user integration.

Version 1.5.4 - Download

Minor bug fixes, 29th November 2012.

Bug Fixes

  • Prevented multiple accounts with the same email address when logging in via an external identity provider.
  • Updated Facebook plugin for change in location of user avatar URLs in Facebook Graph API response.
  • Fixed functionality of 'Remember' checkbox in login form at the top of the Snow theme.
  • Fixed reference to background image in Candy theme CSS file.
  • Fixed partial log out when multiple Q2A sites share users and logins.
  • Fixed rare PHP notice when viewing an IP address page.
  • Added verification of content of uploaded images in WYSIWYG editor.

Other Changes

  • Added Ajax-style loading spinners for non-Ajax operations which perform heavy writes to the database.
  • Reset the created time of moderated posts to the moment when the posts are approved.
  • Updated Snow theme with several visual improvements and tweaks.
  • Updated to htmLawed 1.1.14 and CKEditor 3.6.5.

Version 1.5.3 - Download

New default theme plus minor fixes and enhancements, 26th September 2012.

New Features

  • Added new Snow theme by Q2A Market, selected by default in new installations.
  • Added loading spinners for all Ajax page actions awaiting a server response (except voting).
  • Added support for OpenSearch, allowing Q2A sites to be searched directly from browsers and search engines.
  • Added support for avatars with external user management, including when integrating with WordPress.
  • Added support for automatic detection and linking of URLs within HTML formatted content.

Bug Fixes

  • Fixed MySQL error when adding events under external user integration with textual user identifiers.
  • Fixed incorrect highlighting of custom page links if their path begins with the path of the current page.
  • Fixed some HTML validation errors by changing HTML tags and ordering.
  • Fixed occasional PHP notice when viewing an IP address page.
  • Prevented posts belonging to deleted users from being claimable by other users.
  • Fixed dual use of the CSS class qa-nav-sub-selected.
  • Fixed display of names containing a forward slash (/) in the category menu.
  • Fixed PHP notice displayed if captchas are activated but no captcha module is available.
  • Prevented the IP address of the approver of a post from being assigned to the post's author.
  • Fixed auto-complete for tags containing ampersands.
  • Fixed the number of tags available for auto-complete (now 1,000 by default).
  • Fixed the 'Delete hidden posts' button leaving behind some hidden questions without dependents.
  • Fixed MySQL error when indexing a post containing a very long word, if MySQL is in strict mode.
  • Prevented caret jumping into tags field when asking a question in Internet Explorer.
  • Fixed momentary expansion of the page header casued by the Facebook Login button.
  • Fixed censoring of single-character Chinese, Japanese and Korean (CJK) ideographic words.
  • Question pages which are paginated now include the page number in their canonical URLs.

Other Changes

  • Added new CSS classes on question or answer lists where all voting is disabled.
  • Added new CSS class to identify zero answer counts in question lists.
  • Added new <SPAN> and CSS class to wrap post avatars and meta information.
  • Updated to CKEditor 3.6.4 and jQuery 1.7.2.
  • Prevented maximum login rate being set to zero, which could lock administrators out.
  • Blocked IP addresses can no longer send messages through the feedback form.
  • Restricted the qa-check-lang.php language checking script to administrators only.
  • Added parameter to qa_sanitize_html() to distinguish between storage and display.

Version 1.5.2 - Download

More minor bug fixes, 29th April 2012.

Bug Fixes

  • Fixed problem with newly uploaded avatars not showing up correctly in Internet Explorer.
  • Fixed navigation bugs when the home page is mapped to a question list and there are categories.
  • Page requests from iPads are no longer considered as coming from a mobile device.

Version 1.5.1 - Download

Minor fixes and improvements on 1.5 release, 18th March 2012.

Bug Fixes

  • Fixed "Could not create a valid and unique handle" error when logging in via Facebook with a long name.
  • Online theme and plugin version checking now works correctly with version numbers ending .0.
  • Fixed highlighting of 'Recent' tab on 'Questions page' even if another tab is selected.
  • If using single sign-on integration, don't show link to 'My details' on user's favorites page.
  • Fixed 'command_on_as' typo in option name in qa-page-admin-default.php.
  • Fixed divide by zero error generated by XML Sitemap page if all questions have the same hotness.
  • Prevented long words in question titles from breaking out of related questions sidebar.
  • Fixed notice when PHP's getimagesize() function doesn't return all documented elements - see here.
  • Disabled Facebook and other login modules if Q2A is running with external user integration.
  • Fixed 'answered' and 'commented' links on question page if using long URL structures.
  • Use https:// for Gravatar image URLs if the outer page was requested with HTTPS.
  • Improved plugin version checking comparisons to work with differences after 2 or more decimal points.
  • Allow the category to be removed from a question during editing, if categories are optional.
  • Fixed issue with stripslashes() when using WordPress integration and multiple select fields.
  • List of blocked users will no longer go past the edge of the page, if there are many.

Other Improvements

  • Online plugin version checking now checks the required Q2A and PHP versions for the upgrade.
  • Uploaded transparent PNGs are now drawn on a white rather than a black background.
  • Allowed the logged in user to be indicated as blocked when using single sign-on integration.
  • Made the label for most checkboxes clickable, along with the checkbox itself.
  • Added VERSION.txt file containing the Q2A version number.
  • Added qa_post_set_created() function in qa-app-posts.php to change the created date of a post.

Version 1.5 (release) - Download

Final release of major feature update, 18th January 2012.

New Features

  • Added admin option to allow users to log in by email only (i.e. not by username).

Bug Fixes

  • Fixed reading of notification checkbox value when submitting answer or comment forms via Ajax.
  • Fixed bug where question page jumps immediately to the answer form if it is shown.
  • Fixed 'reply' buttons on question comments if Javascript is disabled or a comment was just added.
  • Apply moderation settings correctly if anonymous users are treated less strictly than some registered users.
  • Fixed error with passing func_get_args() as a parameter that appears in some versions of PHP.

Version 1.5 beta 2 - Download

Mainly bug fixes from the first beta, 4th January 2012.

New Features

  • Added optional minimum required PHP version to plugin metadata.
  • Added event module event to indicate when an IP address is blocked or unblocked.
  • Added functions in qa-app-users.php to map between userids and handles, for plugin developers.

Bug Fixes

  • Added support for widgets on 'My Favorites' and 'My Updates' page.
  • Prevented server configuration errors if Apache does not have mod_rewrite.
  • If a filter module modifies the content of a post, send updated plain text to later filter modules.
  • Hid some admin options that were not relevant due to the settings of other options.
  • Included custom page content when reindexing a site, for third party search modules.
  • Added call to unindex_post() in search modules when reindexing a site.
  • Fixed problem creating tables while upgrading the database in MySQL 5.5 or later.
  • Fixed reference to QA_DEBUG_PERFORMANCE before it was defined in qa-index.php.
  • Fixed display of the default avatar on anonymous posts.
  • Fixed error when using Facebook Login plugin on PHP 4.x - plugin now explicitly requires PHP 5.
  • Fixed undefined function error from qa_get_logged_in_points() when integrating with external users.
  • Worked around MySQL bug which could cause custom pages to be unavailable to users who are not logged in.
  • Added qa-nav-*-selected CSS class to custom links when appropriate.
  • Allowed usernames to be interpreted case-insensitively when integrating with external users.
  • Fixed display of usernames on questions in full-width related questions widget.
  • Fixed Javascript bug when using Facebook Login plugin in Internet Explorer 6.
  • Fixed problem where refresh was required to log in or log out with Facebook in some browsers.
  • Fixed some layout and graphics issues in Internet Explorer 6.

Other Changes

  • Allow moderation of posts by users with few points, even if anonymous posts aren't moderated.
  • Allow captcha to be shown for posts by unconfirmed users, even if anonymous posts don't have a captcha.
  • Added $categoryid parameter to index_post() function in search modules.
  • Added support for new move_post() function in search modules for changing a post's category.
  • Added $request parameter to index_page() function in search modules.
  • The Javascript returned by update_script() in editor modules is now always called before post submission.

Version 1.5 beta 1 - Download

First beta of major feature update, 14th December 2011, also on GitHub.

Major New Features

For Users and Administrators

  • Added moderation of posts by anonymous or unconfirmed users, or users with insufficient points.
  • Added ability to close a question as a duplicate of another question, or with an explanatory note.
  • Added user favoriting of questions, users, tags and categories.
  • Added personalized news feeds, showing activity for users' favorites and responses to their content.
  • Added mass mailing, allowing admins to send an email to all registered users (with opt out).
  • Added Ajax support for adding answers and comments, instead of requiring a page refresh.
  • Added Ajax support for many other one-click operations on answers and comments.
  • Added option to send all emails directly via SMTP, rather than PHP's mail() function.

For Developers

  • Added overrides, allowing plugins to replace or wrap over 150 core Q2A functions.
  • Added plugin filter modules which validate and/or modify many types of user input.
  • Added plugin search modules which implement a custom indexer and/or search engine.
  • Added plugin captcha modules which provide human verification interfaces like reCAPTCHA.
  • Added plugin process modules which can run code at specific stages of Q2A's response processing.
  • Added init_queries() method allowing plugin modules to perform some database setup.
  • Added ability for plugins to register their own language files for easy internationalization.
  • Added tables for extendable meta information on posts, users, tags and categories (see qa-db-metas.php).

Other New Features


  • Added ability to store an archive of private messages, showing users their previous correspondence.
  • Added option to show a different theme to users on mobile devices.
  • Added option to add a custom field to questions, and display its value publicly on question pages.
  • Added optional custom messages on ask, answer, comment and registration forms.
  • Added option to set whether users are allowed to answer their own questions.
  • Added option to automatically close questions if an answer was selected.


  • Added paging of answers on a question page, with an option of how many per page.
  • Added option to shorten comment lists beyond a certain length, and show all by clicking.
  • Moved related questions to a widget which can also be displayed on the right of question pages.
  • Page elements now appear or disappear using jQuery slide and fade effects.
  • Extended 'Unanswered' page to list questions with no selected answer or no upvoted answers.
  • Allow browsing by category on all listing pages if QA_ALLOW_UNINDEXED_QUERIES is set in qa-config.php.
  • Added category descriptions as popups in the category navigation, and below the question category selector.
  • Added option to show full dates if posts are more than a certain number of days old.
  • Added option not to show 'Ask a Question' link in main navigation.
  • Page listing activity for a user now includes recent edits by the user.
  • Added information about posts that were closed, moved, retagged, etc... to the 'All Activity' page.
  • Added <LINK REL="prev"...> and <LINK REL="next"...> tags for search-engine friendly pagination.


  • Added new admin panels listing flagged and queued posts, accessible to non-admins where appropriate.
  • Added Ajax buttons for one-click operations on hidden, queued and flagged posts in admin panel.
  • Added ability for admins to manually assign bonus points to particular users.
  • Added update notices displayed at the top of the page for first-time visitors or new registered users.
  • Added separate permission setting for downvoting, to prevent negative behavior.
  • Added separate permission setting for retagging and recategorizing questions.
  • Added easy phrase customization, using a qa-lang-*.php file in the qa-lang/custom directory.
  • Added ability to make custom pages or links only visible to users of a certain level.
  • Added separate points settings for receiving up vs down votes on posts.
  • Page listing activity from an IP address now shows whether posts are already hidden.
  • Added option requiring email address confirmation to complete registration.
  • Added limit on new user registrations per IP address per hour.
  • Added ability to completely delete users from the database.
  • Added display of the Q2A build date and database size in the 'Stats' section of the admin panel.

For Developers

  • Added ability for plugins to display per-user update notices at the top of Q2A pages (see qa-db-notices.php).
  • Added support for theme metadata in qa-styles.css files, for display in admin panel.
  • Added support for online version checking of third-party themes and plugins.
  • Added $this->context in theme class to help theme functions find out more about what they're showing.
  • Added some additional useful elements in the $params array for some events sent to event modules.
  • If QA_DEBUG_PERFORMANCE is on, show number or rows and columns returned by each database query.
  • Layer classes are now renamed to include their source file, making error debugging easier.
  • The qa_fatal_error() function now shows a backtrace of the calling stack.

Other Changes

  • Updated to CKEditor 3.6.2, jQuery 1.7.1, htmLawed 1.1.10 and Google's reCAPTCHA.
  • Facebook Login plugin migrated to OAuth 2.0 and Facebook PHP SDK 3.1.1.
  • The login rate limit per IP address now applies to successful as well as unsuccessful login attempts.
  • Shortened and clarified descriptions for many admin options.
  • Added support for Bengali and Traditional Chinese languages.
  • Retrieve options in a separate database query, unless QA_OPTIMIZE_DISTANT_DB is set in qa-config.php.
  • Removed QA_EXTERNAL_LANG and QA_EXTERNAL_EMAILER from qa-config.php - use plugin overrides instead.
  • Changed URL structure for retrieving user avatar image JPEGs.
  • Editor modules can define load_script(), focus_script() and update_script() methods to work with Ajax.

Bug Fixes

  • Fixed HTML escaping of titles of similar questions displayed on 'Ask a Question' page.
  • Fixed application of permission setting requiring email confirmation and a minimum number of points.
  • Fixed problem integrating with WordPress in network/multisite mode.
  • Fixed high level functions in qa-app-posts.php to work with external user management.
  • Fixed bug where including # or $ in some URLs could lead to a database query error.
  • Worked around MySQL deadlock errors (errno 1213) by waiting a short time then retrying.

Key Source Code Changes

  • Removed all use of global variables outside of functions, to enable Q2A to run entirely within a local scope.
  • Moved reCAPTCHA functionality to a plugin, and activity count and ask box widgets to core modules.
  • The database connection is now set to UTF-8 encocding, so BINARY casts and _utf8 introducers no longer needed.
  • Removed version information from all files except qa-base.php to enable easier forking and diffing.
  • The functions below from Q2A 1.4.x have been removed or are not backwards compatible:
  • The new CSS classes below should be added to custom themes (start by copying from qa-theme/Default/qa-styles.css):

Version 1.4.3 - Download

Quick fix for bug introduced in previous version, 27th September 2011.

Bug Fixes

  • Fixed table locking bug preventing the creation of users from external identity providers.

Version 1.4.2 - Download

Minor fixes and improvements, 12th September 2011.

New Features

  • Added the ability for administrators to remove a user's avatar.
  • Added category question pages and category pages in XML sitemap, with options for control.
  • Allowed widgets to be embedded in custom pages.
  • Added Welsh (Cymraeg) to list of supported languages.

Bug Fixes

  • Added ideographic space, comma and full stops as recognized punctuation, for CJK support.
  • Fixed bug which removed periods (.) from the names of files uploaded in WYSIWYG editor.
  • Display tag auto-suggestion and auto-completion even if a tag error message is showing.
  • Worked around bug in MySQL 4.1.22 which affected retrieval of category information.
  • Added synchronization to prevent duplicate users being created from external identity providers.
  • Fixed PHP warning messages which appear under several unusual circumstances.

Code Changes

  • Treat false or '' responses from option_default() module functions the same as null.
  • Added raw user information in $qa_content['raw'] on user-related pages, for access by custom themes or layers.

Version 1.4.1 - Download

Minor fixes and source code changes from 1.4 release, 10th July 2011.

Bug Fixes

  • Fixed MySQL error when setting a vote or flag on a post, if MySQL is in strict mode.
  • Fixed potential security issue in some browsers by escaping / slashes in Javascript variable values.

Other Changes

  • Added optional RSS feed for hot questions.
  • When converting an answer to a comment, only mark the post as edited if its content changed.
  • Retrieve user's IP address through new function qa_remote_ip_address() in qa-base.php.
  • Added link to the language checking page in the admin interface, to encourage complete translations.
  • Added white-space:nowrap; style to prompt in Ask Box Widget, to prevent wrapping in some languages.

Version 1.4 (release) - Download

Final release of major feature update, 13th June 2011.

Minor Changes

  • Include raw information in $qa_content['q_view']['raw'] when editing a question.
  • Re-sanitize HTML and apply the 'Open entered links in new window' setting when a question page is viewed.
  • Increased minimum font size in tag cloud widget to 5 pixels.

Version 1.4 beta 2 - Download

Minor fixes and improvements on the first beta, 2nd June 2011.

New Features

Other Changes

  • Also allow mapping of the home page via $QA_CONST_PATH_MAP in qa-config.php.
  • Changed order of elements in <HEAD> to encourage CSS files to load first.
  • Pre-check there is enough memory to deal with uploaded images to prevent silent errors.
  • Q2A database errors are now included in the server's error log via PHP's error_log() function.
  • Redirect from URLs prefixed /qa to the home page if the pages are identical.

Bug Fixes

  • Fixed database error when asking a question with no category via the 'Ask a Question' widget.
  • Fixed error shown in browser if question form is submitted while a jQuery Ajax request is in transit.
  • Fixed XML error in sitemap caused by blank lines at the end of qa-wysiwyg-upload.php.
  • Fixed display of newlines in confirmation that a private message has been sent.
  • Fixed error when upgrading the database if two Q2A sites are sharing the same user database.
  • Fixed bug in hierarchical category selector when no sub-category is selected.

Version 1.4 beta 1 - Download

First beta of major feature update, 25th May 2011.

Major New Features

  • Added hierarchical sub-categories up to 4 levels deep.
  • Added uploading of images and other content within WYSIWYG editor.
  • Added list of hot questions, with customizable weightings for hotness calculation.
  • Added basic private messaging between users.
  • Added points-based permissions, i.e. actions that require a user to have a certain number of points.
  • Added optional counting and display of question views.
  • Added flagging of posts, including admin notifications and automatic hiding.

Other New Features

  • Added listing of questions by most votes, most answers and most views.
  • Added widget plugin which provides a count of questions, answers, comments and users.
  • Added category descriptions which are shown on 'Browse Categories' page.
  • Added button on IP page to hide all previous posts from a blocked IP address.
  • Added button on user page to hide all previous posts from a blocked user.
  • Added ability to customize URL fragments for standard Q2A pages ($QA_CONST_PATH_MAP in qa-config.php).
  • Added option to open all user-entered links in a new window.
  • Added option to only separate tags by commas, allowing tags to contain spaces.
  • Added option not to allow users with posts to change their usernames.
  • Added option to require login and/or email confirmation to view questions.
  • Added option to control whether users are sent notifications by default.
  • Added option to set the length of SEO-friendly question URLs.
  • Added option to temporarily suspend user registrations, to help deal with spam.
  • Added separate option for the length of the 'All Activity' page.
  • Added user- and IP-based limits of the number of file uploads per hour.
  • Added list of each user's extra privileges on their profile page.
  • Improved language checker output (qa-check-lang.php) including generation of PHP for missing phrases.

Other Changes

  • Asking a question now takes place in a single page, using Ajax for updating.
  • Ranking of search results now takes question hotness into consideration.
  • Large objects (BLOBs) stored in the database now record who created them, and when.
  • Posts are no longer marked as edited if they were saved but their title and content were not changed.
  • Ask box widget passes through the appropriate category from the page it was shown on.
  • Unanswered questions can not currently be browsed by category (to save on database indexes).
  • IP page now shows whether a post from a particular IP address has been hidden.

Bug Fixes

  • Fixed security issue where other PHP code running on a shared server could spoof a Q2A login via PHP sessions.
  • Fixed warnings output by PHP due to calls to date() before a timezone was set.
  • Fixed inaccurate message shown when voting is only allowed on the question page.
  • Fixed display of incorrect user points for recent edits on the 'All Activity' page.
  • Fixed bug which always showed 10 items on user pages independent of the admin setting.
  • Fixed divide-by-zero error on user pages if admin has set no points for voting.
  • Fixed possible overflow of user-entered content outside the main content section.
  • Fixed overflow of meta information on edited comments into the button area.
  • Fixed bug (introduced in 1.4 developer preview) requiring custom themes to have a qa-theme.php file.

Source Code Changes

  • Transitioned from jxs to the popular jQuery Javascript library, which plugins can now assume is present.
  • Added qa-app-posts.php for easy manipulation of questions, answers and comments in PHP.
  • Added several utility functions to suspend notifications, indexing, event reporting and updating of counts.
  • Updated CKEditor to version 3.5.4.
  • Q2A fatal errors are now included in the server's error log via PHP's error_log() function.
  • Added CSS classes qa-nav-main-hot, qa-nav-cat..., qa-...-flags, qa-view-count... and qa-browse-cat...

Version 1.4 developer preview - Download

Preview of new plugin functionality coming in version 1.4, plus other small changes, 4th April 2011.

New Features

  • Added support for event modules in plugins, which are notified about important Q2A events.
  • Added support for widget modules in plugins, which show extra pieces of content on Q2A's pages.
  • Added support for layers in plugins, which allow modification of the HTML for any part of a page.
  • Added support for option_default() method in modules, allowing them to provide default option values.
  • Added layer plugin which shows the content of questions when the user mouses over their title.
  • Added widget plugin which provides a basic ask box that can be shown on many pages.
  • Added widget plugin which provides basic support for Google Adsense ads.
  • Added widget plugin which provides a tag cloud showing most popular tags.
  • Added event plugin which logs important Q2A events to a database table and/or log files.
  • Allow multiple Question2Answer sites to share a single user base, via new settings in qa-config.php.

Other Changes

  • Index individual words within tags, so searches can now match part of multi-word tags.
  • Welcome emails now also sent to users who log in via an external identity provider such as Facebook.

Bug Fixes

  • Allow multiple Chinese, Japanese and Korean (CJK) ideographs within tags or words in question URLs.
  • Fixed layout of custom pages for admin users when no side panel is shown.
  • Prevent Facebook plugin showing login button if Q2A logout didn't complete.

Source Code Changes

  • Split qa-page-home.php into separate files for each type of question list, to make it simpler.
  • Updated to latest versions of Services_JSON (1.0.3) and CKEditor (3.5.2).
  • Added widget-related CSS classes, which third-party themes should implement.

Version 1.3.3 - Download

Quick fix for bug introduced in version 1.3.2, 16th March 2011.

Bug Fixes

  • Fixed bug in which custom header or footer was repeated within the page body.

Version 1.3.2 - Download

Small improvements and bug fixes plus more changes for theme and plugin developers, 14th March 2011.

Bug Fixes

  • Fixed Facebook Login plugin which was retrieving partial user details after change in Facebook API.
  • Worked around MySQL bug which caused truncation of long usernames containing non-ASCII characters.

Other Changes

  • Identify Chinese, Japanese and Korean (CJK) ideographs as separate words for indexing and searching.
  • Allow automatic login ('Remember me') to the same account from multiple browsers.
  • Searching by username now works with multi-word usernames, if the search query contains nothing else.

Source Code Changes

  • All HTML is output from within the theme class, to allow full control by custom themes.
  • External PHP code no longer needs to define QA_BASE_DIR or call qa_base_db_connect().
  • An error failure handler is no longer required to connect to the database (default automatically used).

Version 1.3.1 - Download

Source changes to help theme and plugin developers, plus a few bug fixes, 1st February 2011.

Source Code Changes

  • Added CSS classes to <BODY> tag to allow per-category and per-template styling.
  • Added extra CSS class to answers count box if a best answer has been selected.
  • Pass the level (e.g. editor) of users to the theme layer for use by advanced themes.
  • Allow page and editor modules to add CSS files or other HTML tags in the <HEAD> of a page.

Bug Fixes

  • HTML sanitizer now allows Flash content (e.g. YouTube movies added via WYSIWYG editor).
  • Users who log in via an external identity provider now have their last login time updated.
  • Set the locale so that strtolower() doesn't break UTF-8 characters under Windows/IIS.

Version 1.3 (release) - Download

Final release of major feature update, 23rd November 2010.

Bug Fixes

  • Fixed handling of Unicode characters in XML sitemap page plugin.
  • Fixed positioning of avatars in question lists for Candy theme.

Version 1.3 beta 2 - Download

Addressed some minor issues and requests from the first beta, 11th November 2010.

New Features

  • Added option to show avatars in question lists.
  • Added option to show default avatar for users who have none.
  • Added field showing latest available Q2A version in 'Stats' page in 'Admin' panel.

Other Changes

  • Improved layout and auto focusing of WYSIWYG editor on some browsers.
  • Added HTML integration points on the login and register pages for login plugins.
  • Use MySQL's time rather than PHP's to calculate time deltas, in case the two are different.

Bug Fixes

  • Stopped showing errors for items with hidden parents in the recent activity list on user pages.
  • Show an explanatory error message if an image upload failed instead of a PHP error.
  • Try using curl to access the Facebook API if file_get_contents for URLs has been disabled.
  • When restoring a user's session if the PHP session is lost, restore the login source as well.

Version 1.3 beta 1 - Download

First beta of major feature update, 4th November 2010, now licensed under GPL.

New Features

  • Added plugin architecture with four initial plugin types: login, page, editor, viewer.
  • Added WYSIWYG text editor plugin based on CKEditor.
  • Added user avatars, either uploaded directly or from Gravatar.
  • Added support for Facebook single sign-on via a login plugin.
  • Added custom fields on user profile pages.
  • Added custom user titles based on points.
  • Added XML Sitemap for search engines via a page plugin.
  • Added usernames of authors to all email notifications.
  • Added permalinks to answers and comments on question pages.
  • Added 'Edit this page' button on custom pages for administrators.
  • Added maintenance mode to allow site to be temporarily taken down.
  • Added links to canonical URLs in <HEAD> of question pages (for SEO).
  • Added RSS auto-discovery in <HEAD> of all appropriate listing pages.
  • Added version information to 'Stats' page in 'Admin' panel.

Other Changes

  • The 'All Activity' page now includes recently edited posts.
  • All POST requests are redirected to prevent browser warnings when refreshing or clicking back.
  • Apostrophes within words are now ignored when indexing, searching or building search-friendly URLs.
  • User pages now show combined recent activity instead of separate questions and answers.
  • IP address pages now show more detailed activity, including recent edits.

Bug Fixes

  • Clicking 'I wrote this' updates the last editing user if appropriate.
  • 'Page not found' error no longer shown for tag 0 (zero).
  • Hidden follow-on questions are now shown to admins, and must now be deleted before their parent answer.
  • Fixed mislabelling of anonymous posts as 'by me' in some versions of PHP.

Source Code Changes (relevant for those who have modified the Q2A core)

  • The first parameter (usually $db) for the database connection has been removed from all functions.
  • To make a direct query to the Q2A database, use qa_db_connection() to retrieve the connection.
  • All options are now retrieved for every page request so qa_options_set_pending() is no longer necessary.
  • To retrieve an option, use qa_opt('OPTION_NAME') instead of qa_get_option($db, 'OPTION_NAME').
  • Page content is supplied by return from page files, rather than being set in the global $qa_content.
  • Many parameters for qa_post_html_fields() and related functions were combined in the $options array parameter.
  • Most Q/A/C validation, creation, modification and indexing functions have additional parameters.

Version 1.2.1 - Download

Addressed some minor issues from 1.2 release, 29th July 2010.

New Features

  • Added a (very basic) categories page which lists categories and question counts.

Other Changes

  • Improved detection of URLs to work better with posts containing HTML code.
  • Show username of logged in users on their own posts instead of 'by me'.

Bug Fixes

  • Fixed issue with some posts from anonymous users mistakenly displayed as 'by me'.
  • Display information in profile about field on multiple lines as entered.
  • Respond with appropriate HTTP 404 header for all 'not found' pages.

Version 1.2 (release) - Download

Final release of major feature update, 20th July 2010.

New Features

  • Added option to hide 'Questions' tab.
  • Added option to only allow voting on question page.
  • Added option to require a minimum number of question tags.
  • Added option to allow only one answer per user.
  • Added option to order answers by the number of votes.
  • Added option to control when the answer form is immediately shown on question pages.
  • Added option to show or hide 'reply' button by comments (instead of old 'comment' buttons).

Other Changes

  • Detect and link URLs in RSS feeds if appropriate option is set.
  • Show user's own vote more clearly if up and down votes are being displayed separately.
  • Take categories into account when calculating the list of related questions.

Bug Fixes

  • Fix double slash added to default site URL if Q2A was installed at domain root.
  • Show specified <META> description on home page even if it has custom content.
  • Don't include email confirmation link in welcome email to Super Administrator.
  • Fixed PHP warning generated by RSS feed page when not including full text in feeds.
  • Fixed number_format PHP warning generated by Admin statistics page in PHP 5.3.
  • Set explicit default values on database columns for compatibility with MySQL strict mode.
  • Changed search query to work around UNION bug in MySQL 4.1.4 and other versions.

Version 1.2 beta 1 - Download

First beta of major feature update, 27th June 2010.

New Features


  • Added categories which can be used instead of, or along with, tags.
  • Added RSS feeds for most question listing pages.
  • Added deleting of hidden posts and admin button to delete all hidden.
  • Added custom pages and links to be shown in navigation tabs.
  • Added detailed permissions settings for most operations.
  • Added new Expert and Moderator user levels.


  • Added optional email confirmation for registered users.
  • Added display of IP addresses on anonymous posts.
  • Added pages which show recent activity from an IP address.
  • Added display of IP addresses of recent activity on user pages (for moderators or admins).
  • Added ability to block users and/or IP addresses.
  • Added bad word filter to censor out selected words.
  • Added rate limit for login attempts per IP address.


  • Added appropriate META description and keywords tags on question pages.
  • Added option to set explicit META description tag for front page.
  • Added option to show a custom home page instead of recent questions and answers.
  • Added option to show custom HTML in the side panel, below the sidebar box.
  • Added options to hide most top navigation tabs.
  • Added activity page that combines recent questions, answers and comments.
  • Added display of number of up and down votes cast on user pages.
  • Added option to hide age of questions, answer and comments.


  • Added separate points settings for users casting up and down votes.
  • Added option for maximum number of characters in question title.
  • Added option for maximum number of question tags allowed.
  • Added option for whether to show the selected answer first.

Other Changes

  • Most question titles link consistently to the top of question pages.
  • Added separate 'answered' or 'commented' link where appropriate.
  • Main admin tab navigates back to the last viewed admin page.
  • Added character prefix before element IDs in HTML to pass formal HTML validation.
  • Added 404 header and suggestion of what to do next on 'Page not found' pages.
  • Hidden questions now shown as grayed out text instead of using diagonal 'hidden' background.
  • Added hyphen separators in email notifications to make user content more prominent.
  • Added setting in qa-config.php to switch off Gzip HTML compression.
  • Added header to Ajax responses to work around servers that send unexpected prefixes.
  • All database indexes and foreign keys now named explicitly, to make future upgrades easier.

Bug Fixes

  • Clicking log in or register from a page with a URL parameter now keeps that parameter.
  • After running an ALTER TABLE query, relock MySQL tables, since locks can be lost.
  • Changed queries to work around LEFT JOIN bug in MySQL 5.1.46 and 5.1.47.

Version 1.0.1 (release) - Download

Cleared up some remaining issues related to URL paths, 23rd May 2010.

Other Changes

  • Removed PHP closing tags (?>) to help prevent accidental output by users modifying files.

Bug Fixes

  • Substituted encodeURIComponent() for escape() in Javascript to preserve Unicode.
  • Fixed some problems with the new URL structures introduced in 1.0.1 beta.
  • Introduced a more rigorous URL structure test and fixed some edge cases.

Version 1.0.1 beta - Download

Minor fixes with a focus on installation issues, 11th May 2010.

New Features

  • Added more options for page URL structure.
  • Extended language checking script (qa-check-lang.php) to test translations.

Other Changes

  • Don't show reCAPTCHA on the feedback form if the user is logged in.
  • When adding comments, switch user notification on by default.
  • Improved error reporting when database installation or upgrade fails.

Bug Fixes

  • Fixed viewing page for a tag which was used in two different accented forms.
  • Fixed submitting comments and answers on questions with % symbols.
  • Fixed QA_BASE_DIR on setups with no $_SERVER['SCRIPT_FILENAME'].
  • Fixed installing on servers which can't use index.php/x style URLs (e.g. 1&1).
  • Fixed vote display on list of recently answered questions on user pages.
  • Don't allow answers to be converted into comments where comments aren't allowed.

Version 1.0 (release) - Download

Final release of version 1.0, 9th April 2010.

New Features

  • Added reCAPTCHA support for feedback and forgot password pages.
  • Added documentation for functions in the source code.

Other Changes

  • Show the site name on its own in the HTML title of the home page.
  • Pass the page request to the theme class to enable custom pages.
  • Added individual CSS classes to navigation items to allow per-item styling.
  • Apply rate limits when claiming a post or converting an answer to a comment.
  • Improved aesthetics and wording during the installation process.
  • Doubled the height of the text area when adding or editing comments.
  • Stopped using several PHP functions which cause warnings under PHP 5.3.
  • Email field now focuses when anonymous users click the checkbox above.

Bug Fixes

  • Fixed incorrect reference to $qa_db when sending notification of new questions.
  • Fixed ugly mouseover effect for icon buttons in Candy theme.
  • Fixed error given by some MySQL configurations when logging out.

Version 1.0 beta 3 - Download

Third public version, 31st March 2010. Feature complete preview of the 1.0 release.

New Features

  • Added second theme (Candy).
  • Added support for reCAPTCHA for user registration and anonymous posts.
  • Added optional tab for unanswered questions.
  • Added ability for author or editor to convert an answer into a comment.
  • Added 'Remember me' checkbox on login to store cookie in browser.
  • Added admin panel showing hidden questions, answers and comments.
  • Added admin option to be emailed when a new question is asked.
  • Added number of comments to admin statistics page.
  • Added switch for display of user points alongside usernames.

Other Changes

  • Users now prevented from directly opening include files from their web browser.
  • All files now use Windows (CRLF) line endings for easy editing.
  • After posting an answer or comment, the page is scrolled to the new content.
  • Logged in sessions no longer expire while the browser window is open.
  • Duplicate submissions of answers or comments now detected.
  • All users shown on the 'Users' page, even if they have no activity.

Bug Fixes

  • Improve reliability of pop-up tooltips on buttons in Internet Explorer.
  • When using external users, allow viewing of pages for users with no activity.
  • Fixed requests to pages for tags or users with unusual characters.
  • Fixed layout where a question has a large number of tags.
  • Be forgiving if some $_SERVER elements are not set by the PHP environment.
  • Changed date() to gmdate() to prevent warnings in some PHP versions.
  • Fixed external user sample code to work with empty array parameters.
  • Custom text is properly included in user welcome emails.

Version 1.0 beta 2 - Download

Second public version, 8th March 2010. A mostly complete preview of the 1.0 release, some small things left to do.

New Features

  • Added comments on questions and answers.
  • Added related questions.
  • Many new notifications, e.g. if an answer is selected or a question is commented on.
  • Allow the number of up votes and down votes for each post to be displayed separately.
  • Allow voting to be enabled or disabled for questions or answers.
  • Store and display user who last modified a post, and when they modified it.
  • Users who log in after posting can reclaim the post as their own.
  • Added website to user profile, which is linked with rel=nofollow.
  • Added an admin option to insert custom content into page <HEAD>.

Other Changes

  • Show gray arrows instead of nothing when a user cannot vote on their own post.
  • Show more information about votes given and received on user page.
  • Don't allow the author of a hidden post to reshow it, if it was hidden by an editor.
  • Improved style of buttons and positioning of forms on question page.
  • Improved speed of search within content of posts.
  • Added 'Best answer' under star if an answer was selected.
  • Show 'by anonymous' for a post if it was not by a registered user.
  • Disallow user editing their profile on the user page (they use My Account).
  • Allow voting in every case where vote counts are shown for a post.
  • Changed order of input fields on register page to be more intuitive.
  • Prompt users to enter hyphens to create multi-word tags.
  • Show suggested next step at bottom of some more low-content pages.
  • Don't show answer form on question pages by default unless it has no answers.
  • Added link to online documentation if .htaccess file not working.
  • Added individual CSS classes to buttons to allow different styling.

Bug Fixes

  • Allow viewing of pages for tags containing ampersands (&).
  • Allow clicking auto-complete tags with ampersands and $ signs.
  • Disallow + and / characters in usernames due to URL problems.
  • Set appropriate count to zero in words table if a word is no longer used.
  • Make tabs and leading spaces visible in post content.
  • Don't allow a comment or answer to be viewed out of context by requesting its postid.
  • Include anonymous questions when counting how many times a user had their answer selected.
  • Initiate Gzip page compression code earlier, to prevent content encoding errors on some setups.
  • Fix database error when indexing content if a word was not added to the words table.
  • Add DirectoryIndex and commented RewriteBase directives to .htaccess file.
  • Ajax voting code now refreshes more HTML code, to get pluralization right.

Version 1.0 beta 1 - Download

First public version, 4th February 2010.