Use MentionDAO to store mentions when crawling
Suppress duplicate mentions

If the same mention is added twice, don't count it twice in tu_mentions.
Avoid test failures based on variable timezone support
Selectively disable XSS filter for trusted HTML in messages
* Added ConfigurationException, ControllerAuthException
* Remove html message from exceptions
* Catch new exception in root controller, and set proper error HTML message
* Added disable_xss functionality to messaging system
* Allow trusted markup to render unfiltered
Closes #1155, closes #1164, closes #1172
Facebook usernames with apostrophes bugfix
Avoid fatal error "Argument 2 passed to OwnerInstanceMySQLDAO::doesOwnerHaveAccessToInstance must be an instance of Instance, null given" when network username doesn't exist
Update copyright notice to 2012
Validate user password as they type during installation, registration, and password change
* Addedd addHeaderCSS() and tests for root controller
* Added jquery validate and validate password libs
* Added form and password as you type validation to registration, reset password & installation form
* Overide some default validation code to support Thinkup rules
* Add .ignore feature to skip second passwd field for DB  on install page
Closes #1074, closes #1225
Fix TestOfTestController failure with variable site_root_path
Make RSS crawler refresh apply to each owner

Make the RSS crawler refresh apply to each owner instead of being
system-wide.  Previously, it was possible for some instances to never be
crawled if another owner's crawler always ran before it.  Now, when
checking for stale instances that need to be crawled, only look at the
current user's instances rather than all of them.
Twitter Streaming: explicitly set timezone & add documentation link
Merge pull request #1227 from cwarden/per-owner-refresh-rate

Make RSS crawler refresh apply to each owner
Create a script to automatically generate the basic set of files and folders needed for plugin development and started documentation
Clean up and enhance automated plugin maker
* Fill in missing function bodies which throw errors in the webapp. Now when the script is done running, the plugin skeleton is fully functional in the web interface.
* Added sample plugin settings to work from based on HelloThinkUp plugin
* Fixed incorrect case of plugin folder name and controller file
* Fleshed out documentation
* Moved the plugin maker to the /extras/dev/ folder, where developer tools like these will live
* Closes #418, closes #1189, closes #1212
Issue #959: Configurable location for writable directory
- Use new config.inc.php $THINKUP_CFG["datadir_path"] value, defaults to 'data' under the thinkup root
- Directories moved under 'data': 'compiled_view', 'cache', 'logs'
- Added helper functions:
-- Utils::getDataPath($str) - absolute path to data - if $str given, data/$str
-- Utils::getBackupPath($str) - data/backup/$str
-- Plugin->getDataPath($str) - data/plugins/$plugin_folder_name/$str
Make writable directory location configurable, closes #959
* Created new FileDataManager class, moved data directory-specific Utils functions into it
* When config.inc.php datadir_path value doesn't exist, default to source_root_path/data/
* Avoid "Can't write to file" data folder permissions problems during export and backup
* Gracefully handle missing config file during installation, and missing datadir_path value in existing config
* Automatically create compiled_view folder if it doesn't already exist
* Expand and clarify documentation
Refactored Loader class
Documentation: switch to Bootstrap theme, update copyright year
Update docs/source/_templates/bootstrap/relations.html
Docs Bootstrap theme: Buttonize prev and next links
Issue #505: Enable app title customization
* Add app_title_prefix to config file, render app name as $prefix."ThinkUp"
* Make all page titles and email notifications reference full app title name
* Add tests and documentation
Closes #505, closes #1184