For easy browsing and comparison of previous versions, see the Github archive of Question2Answer releases (curated by Q2APro).
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.
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.
- 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.
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
- 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.
- 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
- 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
- Allow non-default port in MySQL connection.
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
- 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
- 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/'),
- 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 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/README.md for instructions.
- An 'autoloader' has been added to begin transition away from an include-oriented structure. (Currently only used for debug class.)
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.
- 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).
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.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
<ul>, basic question title list)
<li>, question title list item)
<div>, surrounding block for similar questions)
<span>, for top users/tags pages; other related classes need replacing too)
qa-app-options.php/qa_options_set_pending: no longer required.
qa-theme-base.php/qa_html_theme_base: PHP4-style constructor is no longer supported; please use
__construct method 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.
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.
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
# 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).
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.
- 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.
- 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.
- Added internal image upload API for use by WYSIWYG editor and other plugins.
form_reorder_buttons() methods for reordering theme elements.
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.
- 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.
- Updated to CKEditor 3.6.6 and Facebook PHP SDK 3.2.2.
load_module() method in modules is now passed the module type and name as extra parameters.
$qa_content['script_src']) are now removed.
- 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
- 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.
_ 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.
- Removed login form on Snow theme when using external user integration.
Minor bug fixes, 29th November 2012.
- 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.
- 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.
New default theme plus minor fixes and enhancements, 26th September 2012.
- 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.
- 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
- 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.
- 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.
More minor bug fixes, 29th April 2012.
- 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.
Minor fixes and improvements on 1.5 release, 18th March 2012.
- 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
- 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.
'command_on_as' typo in option name in
- 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.
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.
- 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.
VERSION.txt file containing the Q2A version number.
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.
- Added admin option to allow users to log in by email only (i.e. not by username).
- 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.
- 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.
- 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.
- 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
- 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.
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 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.
- 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.
$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.
$request parameter to
index_page() function in search modules.
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
- 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.
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
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
- 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.
<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
- 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.
- Added ability for plugins to display per-user update notices at the top of Q2A pages (see
- 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.
$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.
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.
qa_fatal_error() function now shows a backtrace of the calling stack.
- 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 - use plugin overrides instead.
- Changed URL structure for retrieving user avatar image JPEGs.
- Editor modules can define
update_script() methods to work with Ajax.
- 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
$ 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
Quick fix for bug introduced in previous version, 27th September 2011.
- Fixed table locking bug preventing the creation of users from external identity providers.
Minor fixes and improvements, 12th September 2011.
- 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.
- 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.
'' responses from
option_default() module functions the same as
- Added raw user information in
$qa_content['raw'] on user-related pages, for access by custom themes or layers.
Minor fixes and source code changes from 1.4 release, 10th July 2011.
- 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
- 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
- Added link to the language checking page in the admin interface, to encourage complete translations.
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.
- 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.
- Also allow mapping of the home page via
- 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
- Redirect from URLs prefixed
/qa to the home page if the pages are identical.
- 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
- 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 (
- 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.
- 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.
- 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
Source Code Changes
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
- Added CSS classes
Version 1.4 developer preview - Download
Preview of new plugin functionality coming in version 1.4, plus other small changes, 4th April 2011.
- 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
- 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.
- 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
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.
Quick fix for bug introduced in version 1.3.2, 16th March 2011.
- Fixed bug in which custom header or footer was repeated within the page body.
Small improvements and bug fixes plus more changes for theme and plugin developers, 14th March 2011.
- 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.
- 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
- An error failure handler is no longer required to connect to the database (default automatically used).
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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- Page content is supplied by
return from page files, rather than being set in the global
- 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.
Addressed some minor issues from 1.2 release, 29th July 2010.
- Added a (very basic) categories page which lists categories and question counts.
- 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'.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.
- 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.
- Removed PHP closing tags (?>) to help prevent accidental output by users modifying files.
- 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.
- Added more options for page URL structure.
- Extended language checking script (qa-check-lang.php) to test translations.
- 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.
- 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.
- Added reCAPTCHA support for feedback and forgot password pages.
- Added documentation for functions in the source code.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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>.
- 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.
- 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.