Version History (1.6.x and earlier)

Version 1.6.3

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

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

Version 1.6.2

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

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

Version 1.6.1

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)

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

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

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

New Features

For Users

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

For Administrators

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

For Developers

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

Other Changes

Security

  • 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.

General

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

For Developers

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

Bug Fixes

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

Version 1.5.4

Minor bug fixes, 29th November 2012.

Bug Fixes

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

Other Changes

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

Version 1.5.3

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

New Features

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

Bug Fixes

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

Other Changes

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

Version 1.5.2

More minor bug fixes, 29th April 2012.

Bug Fixes

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

Version 1.5.1

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

Bug Fixes

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

Other Improvements

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

Version 1.5 (release)

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

New Features

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

Bug Fixes

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

Version 1.5 beta 2

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

New Features

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

Bug Fixes

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

Other Changes

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

Version 1.5 beta 1

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

Major New Features

For Users and Administrators

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

For Developers

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

Other New Features

Functionality

  • Added ability to store an archive of private messages, showing users their previous correspondence.
  • Added option to show a different theme to users on mobile devices.
  • Added option to add a custom field to questions, and display its value publicly on question pages.
  • Added optional custom messages on ask, answer, comment and registration forms.
  • Added option to set whether users are allowed to answer their own questions.
  • Added option to automatically close questions if an answer was selected.
  • Added paging of answers on a question page, with an option of how many per page.
  • Added option to shorten comment lists beyond a certain length, and show all by clicking.
  • Moved related questions to a widget which can also be displayed on the right of question pages.
  • Page elements now appear or disappear using jQuery slide and fade effects.
  • Extended 'Unanswered' page to list questions with no selected answer or no upvoted answers.
  • Allow browsing by category on all listing pages if QA_ALLOW_UNINDEXED_QUERIES is set in qa-config.php.
  • Added category descriptions as popups in the category navigation, and below the question category selector.
  • Added option to show full dates if posts are more than a certain number of days old.
  • Added option not to show 'Ask a Question' link in main navigation.
  • Page listing activity for a user now includes recent edits by the user.
  • Added information about posts that were closed, moved, retagged, etc... to the 'All Activity' page.
  • Added <LINK REL="prev"...> and <LINK REL="next"...> tags for search-engine friendly pagination.

Administration

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

For Developers

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

Other Changes

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

Bug Fixes

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

Key Source Code Changes

  • Removed all use of global variables outside of functions, to enable Q2A to run entirely within a local scope.
  • Moved reCAPTCHA functionality to a plugin, and activity count and ask box widgets to core modules.
  • The database connection is now set to UTF-8 encocding, so BINARY casts and _utf8 introducers no longer needed.
  • Removed version information from all files except qa-base.php to enable easier forking and diffing.
  • The functions below from Q2A 1.4.x have been removed or are not backwards compatible:
    • qa_answer_validate()
    • qa_base_db_connect()
    • qa_base_db_disconnect()
    • qa_captcha_error()
    • qa_captcha_html()
    • qa_captcha_possible()
    • qa_captcha_validate()
    • qa_comment_validate()
    • qa_cookie_report_action()
    • qa_db_categoryslugs_sql()
    • qa_db_posts_recount()
    • qa_db_tag_count_qs_selectspec()
    • qa_db_unanswered_qs_selectspec()
    • qa_feed_load_ifcategory()
    • qa_handle_email_validate()
    • qa_length_validate()
    • qa_logged_in_user_selectspec()
    • qa_notify_validate()
    • qa_options_load_options()
    • qa_options_pending_selectspecs()
    • qa_page_q_add_c_form()
    • qa_page_q_comment_follow_list()
    • qa_page_q_do_comment()
    • qa_page_q_edit_a_form()
    • qa_page_q_edit_c_form()
    • qa_page_q_edit_q_form()
    • qa_page_q_load_q()
    • qa_page_q_post_rules()
    • qa_post_index()
    • qa_post_parent_to_answer()
    • qa_profile_field_validate()
    • qa_question_validate()
    • qa_search_max_match_anchor()
    • qa_user_report_action()
    • qa_vote_error_html()
  • The new CSS classes below should be added to custom themes (start by copying from qa-theme/Default/qa-styles.css):
    • qa-activity-count
    • qa-activity-count-item
    • qa-activity-count-data
    • qa-c-item-expand
    • qa-favorite-button
    • qa-favorite-hover
    • qa-favorite-image
    • qa-favoriting
    • qa-form-tall-suffix
    • qa-notice-close-button
    • qa-notice-close-hover
    • qa-notice
    • qa-q-item-buttons
    • qa-q-item-content
    • qa-q-item-flags
    • qa-q-view-closed-content
    • qa-q-view-closed
    • qa-q-view-extra-content
    • qa-q-view-extra
    • qa-related-q-item
    • qa-related-q-list
    • qa-unfavorite-button
    • qa-unfavorite-hover

Version 1.4.3

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

Bug Fixes

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

Version 1.4.2

Minor fixes and improvements, 12th September 2011.

New Features

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

Bug Fixes

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

Code Changes

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

Version 1.4.1

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

Bug Fixes

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

Other Changes

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

Version 1.4 (release)

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

Minor Changes

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

Version 1.4 beta 2

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

New Features

Other Changes

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

Bug Fixes

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

Version 1.4 beta 1

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

Major New Features

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

Other New Features

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

Other Changes

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

Bug Fixes

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

Source Code Changes

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

Version 1.4 developer preview

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

New Features

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

Other Changes

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

Bug Fixes

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

Source Code Changes

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

Version 1.3.3

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

Bug Fixes

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

Version 1.3.2

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

Bug Fixes

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

Other Changes

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

Source Code Changes

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

Version 1.3.1

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

Source Code Changes

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

Bug Fixes

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

Version 1.3 (release)

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

Bug Fixes

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

Version 1.3 beta 2

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

New Features

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

Other Changes

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

Bug Fixes

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

Version 1.3 beta 1

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

New Features

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

Other Changes

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

Bug Fixes

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

Source Code Changes

(Relevant for those who have modified the Q2A core.)

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

Version 1.2.1

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

New Features

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

Other Changes

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

Bug Fixes

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

Version 1.2 (release)

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

New Features

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

Other Changes

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

Bug Fixes

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

Version 1.2 beta 1

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

New Features

Functionality

  • 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.

Security

  • 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.

Layout

  • 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.

Miscellaneous

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

Other Changes

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

Bug Fixes

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

Version 1.0.1 (release)

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

Other Changes

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

Bug Fixes

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

Version 1.0.1 beta

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

New Features

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

Other Changes

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

Bug Fixes

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

Version 1.0 (release)

Final release of version 1.0, 9th April 2010.

New Features

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

Other Changes

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

Bug Fixes

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

Version 1.0 beta 3

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

New Features

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

Other Changes

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

Bug Fixes

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

Version 1.0 beta 2

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

New Features

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

Other Changes

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

Bug Fixes

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

Version 1.0 beta 1

First public version, 4th February 2010.