For easy browsing and comparison of previous versions, see the Github archive of Question2Answer releases (curated by Q2APro).
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.5.5).
- 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.
More 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.