It does not matter how slowly you go as long as you do not stop. -- Confucius
First they ignore you, then they laugh at you, then they fight you, then you win. –- Mahatma Gandhi
Credit Antonin Steinhauser (asteinhauser) for discovery and responsible disclosure.
Ticket #742 replaces Authlogic with the latest Devise (4.3.0) which has wider adoption. This change requires a database migration on the User model. Please note:
- Most User fields are renamed and can hence be rolled back. Existing Authlogic passwords will continue to work.
- Users will be forced logged out. Existing user sessions will not be kept and the fields
persistence_token, single_access_token, perishable_token
will be dropped from the database. - Though the migration is generally safe we recommend to make a backup of your database before migrating.
The Devise change will break any OAuth login plugins which depend on Authlogic. You can configure OAuth for Devise using the guides here.
The login URL routes have been changed to use the defaults of Devise.
Mailers related to user password reset, etc. are changed to use the defaults of Devise.
PaperClip now only depends on aws-sdk-s3
instead of aws-sdk
. For more info see thoughtbot/paperclip#2481.
Replace the Cocaine gem with Terrapin. https://github.com/thoughtbot/terrapin/ Apart from the namespace change, this is a drop in replacement.
The underlying framework is now rails 5.2.*
Ruby 2.4 has reached end of life and is no longer activity tested against.
- #794 Fix defect with unpermitted params in advanced search
- 2bc6184779a26070496e6f4caefa0cc9ba555d7b Remove broken support for delete links on arrays.
- #851 upgrade paper_trail
- Security fixes CVE-2019-16109, CVE-2019-16676, CVE-2019-5477, CVE-2019-16892
- Dependency updates
#665 Support for Ruby 2.3 has been dropped, with test coverage for 2.4 and 2.5 enabled.
If you consume fat free crm as an engine and re-use any factories, you'll need to upgrade to FactoryBot.
Lead.update_with_permissions
is removed, use user_ids and group_ids inside attributes instead and call lead.update_with_account_and_lead_counters
FatFreeCRM::Permissions.save_with_permissions
is removed, use user_ids and group_ids inside attributes and call save
FatFreeCRM::Permissions.update_with_permissions
is removed, use user_ids and group_ids inside attributes and call update_attributes
- CVE-2018-8048 (loofah gem)
- CVE-2018-3741 (rails-html-sanitizer gem)
- #768 Fix comment creation on entities
- #762 #764 Fix bug in select menu
- #759 Improve zero revenue display
- #753 Opportunities sort by weighted amount
- #749 Fix unsafe reflection and mass assignment
- CVE-2017-0889
- #724 Fixes #589 Autocomplete regression
- #723 Fixes #687 Passing string to define a callback is not supported.
CVE-2017-0889
CVE-2017-0889
CVE-2017-0889
- #709 Revert accidental minimum ruby version 2.4 changes (#665)
- Fix #687 Passing string to define a callback is not supported.
Fix #687
This release replaces Chozen with Select2 consistently across the app. This may break plugins which rely on Chozen. To fix any issues please migrate to Select2 or add Chozen to your plugins.
To improve performance, a number of counter caches have been added.
Users with large amounts of records may find certain database migrations taking a large amount of time, as each record is cached upfront.
See #647 #654 Adopt min ruby version of 2.3.0 and apply safe navigiation rubocop rules
-
#691 Wording
-
#688 Preparation for Devise
-
#686 Bundle update
-
#683 Rubocop: Refactoring
-
#680 Alternative build setup
-
#682 Rubocop: Hashrockets
-
#693 Update Japanese translations
-
#697 Minor security improvements
-
#703 #696 Replace Chozen with select2
-
#678 Find an account by name when name is in params (fixes #397)
-
#673 Improve JS escaping
-
#671 Devise Readiness (+ thread-safety): Refactor User.my scope
-
#670 Fix #563 invalid default custom field minlength
-
#668 Rubocop fixes for xls/rss builder classes
-
#667 Rubocop: Autocorrect various assignment-if statements, case statements, etc.
-
#666 Various rubocop corrected items
-
#661 Bundle Update on 2018-01-06
-
#655 Upgrade rubocop
-
#658 Upgrade Bootsnap gem, fixing an issue with windows
- #653 Fix regression with emails
- #633 Upgrade to rails 5.1.0
- #641 Swap default server from thin/unicorn to puma
- #631 Clean up locale files
- #612 DEPRECATION WARNING: #table_exists? currently checks both tables and views
This release upgrades to rails 5.0.0.
Be aware of rails/sprockets#426 if you were using FFCRM as an engine.
- #500 - Upgrade rails
- #554 - Upgrade authlogic
- #614 - Rails5 warnings
- #643 Use FixtureSet instead of Fixtures module
- #642 Cleanup: Use Ruby style guide syntax for arrays
- #640 Speed up builds with Bootsnap
- #639 Code cleanup: Remove block-end comments (extracted from Rubocop PR)
- #637 Replace render :text with render :plain (Rails 5.1 prep)
- #636 Upgrade Migrations (preparation for Rails 5.1)
- #635 Fix alias_method_chain via @johnnyshields
- #632 Fix Travis CI chrome runs; Travis now requiring Chrome as an addon
- #628 Security Update on 2017-11-29
- #626 Use headless Chrome browser for feature testing
- #623 Fix license Rake task
- #617 Bundle Update on 2017-07-19
This release is aimed at minor updates and ruby 2.4 compatability via the relevant rails updates.
Other improvements include:
- #480 Improve select2 behaviour
This release is aimed at getting as many dependencies as possible up to date without significant refactoring.
- Refactoring: Tests prefer build, build_record over
FactoryGirl.create
where possible - Refactoring: View tests minimize DB interaction greatly
- Refactoring:
@user.check_if_needs_approval
must be explicitly called in rake tasks or similar, it is no longer a before_create hook - Refactoring:
@user.destroyable?
must be called in rake tasks or similar, it is no longer a before_destroy check - Various gem updates
- Upgrade to Paperclip 5 (see https://github.com/thoughtbot/paperclip/wiki/Upgrade-Paperclip-4x-to-5x)
- Upgrade to paper_trail 6+ (https://github.com/airblade/paper_trail/blob/master/CHANGELOG.md)
- Various security fixes
- Enable CORS headers
- Ruby 2.0 or less dropped from CI
- Fixes #413 and #414 - bold tag being escaped on user profile.
- Fix for CVE-2015-1585 - CSRF vulnerability.
Full list: https://github.com/fatfreecrm/fat_free_crm/compare/v0.13.5...v0.13.6
- Update gems
- Fixed #337 Added index on Versions created_at
- [Security] Team section should not display opportunities current user is not allowed to see...
- Update to rails 3.2.20
- Fixed issue #347
- Fixed issue #349
- Fixed #351 - missing interpolation argument.
- Fixed #353 - observes is a prototype function that is no longer used.
- Fixed #283 - email max length is 254 according to IETF
- Fix avatar issue in recent_activity
- Merge pull request #354
- Fixed custom field handling of html entities.
- Merge pull request #355
- Fixed issue #374 - global lists missing from UK translation file.
- Fix #356 - default SMTP session should have no auth
Full list: https://github.com/fatfreecrm/fat_free_crm/compare/v0.13.4...v0.13.5
- Fixed XSS vulnerability in helper method.
- Use rails_autolink gem which contains updated XSS fixes.
- Fixed XSS vulnerability if email data is manipulated.
Full list: https://github.com/fatfreecrm/fat_free_crm/compare/v0.13.3...v0.13.4
- Fixed bug where starts_on was being used instead of ends_on. a0f69d7
- fixes bug with toggling select/create account when converting lead 7c76b9c
- Russian locale fixes.
- Add entity_observer to list of observers when running as an engine.
- Allow notification emails to be sent from a particular address. Many
- Convert tag select box to Select2. We're deprecating Chosen
- Enable fallback translations.
- Fixed 'end of week' spec in tasks using Timecop.
- Fixed bug with recent items box replacement.
- #311 - problem with Thor being reference before it is loa
- Fixed some bugs related to sorting custom fields.
- #334 Added byebug for ruby2+. 5dca0ba
- Update rails
- Update gems
- removes prototype-rails dependency
- replaces prototype with jquery
Full list: https://github.com/fatfreecrm/fat_free_crm/compare/v0.13.2...v0.13.3
- Fixed issue with secret token not being saved if DB does not exist.
- Lock down routes.
- Remove stub hook
- Remove unneccessary function
- Don't spam gmail by default
- consider_all_requests_local should be off by default in production mode
- Remove pysch by default (optimise for ruby 2 now)
- Fixed regular expression logic to be more sensitive to newline attacks.
- users_controller requires security on its actions.
- Send emails to file in development mode
- Don't show user list if not logged in.
- Remove old 'rake acceptance' task 2d4411a
- Refactored secret token generation code
- Hide password related attributes from the logs.
- File syntax layout tweak.
- Escape autocomplete output safely.
- Locked down available views in Task.
- sanitize list.url
- Don't generate secret token in test mode.
- Don't raise secret token generation error during tests.
Full list https://github.com/fatfreecrm/fat_free_crm/compare/v0.13.0...v0.13.1
- Add user_id to lists table
- Add campaign to opportunity advanced search.
- Add id to export formats.
- Added ActiveSupport lazy load hooks for all models in Fat Free CRM.
- Added timeago library to enable future caching of search results.
- Atom and RSS feeds now deal with cases where user doesn't exist.
- Better solution to internationalizing jquery.timeago plugin.
- Configurationise the uniqueness constraint for account first names
- Convert settings from syck to psych and remove dependency on Syck.
- Enforce available locales in latest version of I18n.
- German translations
- Introducing client-side unobtrusive javascript for new comments.
- Peg paper_trail to v2.7
- Replaces rjs with erb/haml
- Updated to latest rails version
Bug fixes
- Ensure user isn't deleted if they still have tasks.
- Fix delete button not showing
- Fix global list save problem
- Closes #268: Replace the contents of "div#leads_pagination"
- #242 and #245. Fix cohsen_select helper to be able to
- Fixed issue #282
- Fixed issue with account categories inclusion matcher.
- Fixed issue with timeago plugin not precompiling. Resolves issue #286
- Fixed issue#281 - psych v2 is not supported.
- Fixed one_submit_only js format and fixed red background highlight
- Fixed uninitialized constant 'Version' error on dashboard ATOM/RSS
- #270. Fixed procfile command for heroku.
- #273 from notentered/testFixes
- #279 from roadt/bugfix
- #284 from roadt/bugfix
- #287 from szetobo/fix_test_case
- #288 from szetobo/update_scope
- rake ffcrm:setup no longer nukes the database before starting.
Full changes: https://github.com/fatfreecrm/fat_free_crm/compare/v0.12.3...v0.13.0
No changes
- users_controller requires security on its actions.
- Refactored secret token generation code to generate and persist a secret token in the DB if one doesn't exist
- Don't show user list if not logged in.
- Hide password related attributes from the logs.
- consider_all_requests_local should be off by default in production mode
- Fixed issue with secret token not being saved if DB does not exist.
- Strengthen case to generate unique secret token.
- Ensure requests are protected.
- Add custom serializers for xml and json.
- Fixed sql injection in timeline method.
- Refactor activity_user to remove possible SQL injection points.
- Update gems to compile through
- Ruby 1.9 support only (no ruby 1.8 and not yet ruby 2)
- Fixed version pagination bug thanks to reubenjs
- Can set default stage for opportunities
- First name can now be optional on leads, contacts and accounts (if desired)
- Number of search results is now displayed
- Fixed pagination ordering when displaying entities that belong to a master entity (e.g. opportunities inside a contact)
- Fixed tests
- Fixed avatar upload bug (by updating paperclip gem)
- Can now search for campaigns in opportunities advanced search
- Added ActiveSupport lazy load hooks for cleaner plugin integration
- Fixed bug where MS Smartquotes broke the dropbox (Thanks bitgangsta)
- Updated German translations (thanks Phillip Ullmann)
- Display relationship between contact and it's corresponding lead in the sidebar (thanks Phillip Ullmann)
- Changed Fat Free CRM license to MIT, see MIT-LICENSE file.
- Updated countries list
- Please see an important fix for country data: https://github.com/fatfreecrm/fat_free_crm/wiki/The-Countries-Problem-and-How-to-Fix-It
- 0.11.4 will be the last ruby 1.8 release
- Comments can be added when items are created
- Dashboard shows assigned accounts and opportunities
- Now uses Rails 3.2
- Added Group tab in admin section
- Added jQuery datepicker
- Custom fields are now included in XLS export
- Updated Chinese translations
- Added Ransack / RansackUI search
- Added a Team tab to the interface
- Added ability to add new item views via plugins
- Better html email parsing
- Users can subscribe to contacts/accounts etc
- Use CanCan for permissions
- Add jQuery UI
- German translation updates
- Added Travis continuous integration service
- Rails 3 compatibility
- Added a few view hooks
- Dropbox now understands alt_email
- Updated translation file format
- Export includes full_name where applicable
- CSS bug fixes
- Swedish & Italian translations
- Controllers respond to JSON requests
- Several hundred other commits...
- Added Gemfile and Gemfile.lock.
- Installed plugins.
- Merged with crossroads/rails3 fork; (runs 'rake crm:setup').
- Generated empty Rails3 project.
- Release 0.10.1.
- Updated CHANGELOG and CONTRIBUTORS files.
- Added clickable labels to tasks sidebar checkboxes.
- Added missing Polish translations (thanks, Kamil!)
- Fixed deprecation warnings about plugins/**/tasks (thanks, Nathan!)
- Fixed Rails Engines deprecation warnings (thanks, Nathan!)
- [rake crm:setup] command now also runs plugin migrations (thanks, Nathan!)
- Checkboxes now have clickable labels (thanks, Steve!)
- Load 'awesome_print' gem (if available) in development mode (thanks, Nathan!)
- Added 'javascript_includes' hook (thanks, Nathan!)
- Properly set the account value when attaching a contact to the account (closed LH #165)
- Fixed failing dropbox specs by rescuing proper exception (Rails 2.3.8).
- Added PrependEngineViews library module to let Fat Free CRM plugins override default views.
- Minor UI tweaks.
- Added view hooks after top section (thanks, Ben!)
- Fixed default access for objects created by dropbox (thanks, Steve!)
- Stopped emails being associated with Campaigns that don't exist (thanks, Steve!)
- Fixed plugins tab initialization when the 'settings' table had not been created yet (thanks, Nathan!)
- Fixed activerecord deprecation warnings (thanks, Nathan!)
- Fixed factory generator for email (thanks, Nathan!)
- Added rules to .gitignore to ignore any plugins starting with crm_* (thanks, Nathan!)
- Display absolute dates in addition to relative ones (thanks, Peter!)
- Add absolute dates and fix relative dates for campaigns (thanks, Peter!)
- Make sure Task selection popup doesn't affect Quick Find.
- Close asset selection popup on .
- Finished refactoring to move #attach logic from application controller to models.
- Germal translation fixes (thanks, Ralf!)
- Removed Rails deprecation warnings (thanks, Ralf!)
- Fat Free CRM by default requires Rails 2.3.8.
- Bundled will_paginate and faker as vendor/gems.
- Made dropbox email address comparision was case-insensitve (thanks, Ralf!)
- Removed duplicate association Opportunity#account (was: has_one + belongs_to) (thanks, Ralf!)
- Multiple fixes for Rails 2.3.8 upgrade (thanks, Ralf!)
- Don't auto-complete user create/edit forms (thanks, Alexander!)
- Multiple fixes in Germal translation (thanks, Ralf!)
- If a contact has no name, fill in the account name instead (thanks, Peter!)
- Sort contacts by last name by default (thanks, Peter!)
- Fixed named scope condition syntax in the Opportunity model (thanks, Elad!)
- Refactored to move #attach logic from application controller to models.
- Refactored to move #discard logic from application controller to models.
- Added controller#attach specs.
- Added more comprehensive controller#discard specs.
- Allow searching by email for Accounts, Contacts, and Leads.
- Added #discard controller specs.
- Allow explicit controller name when refreshing sidebar.
- Handle #discard requests the same way #attach are handled (i.e. in parent object controller).
- Moved common #attach handler to application controller.
- Strike through completed tasks in the auto_complete list.
- Implemented #discard for tasks.
- Implemented selecting and attaching tasks.
- Allow auto_complete for tasks.
- Implemented #attach for Opportunities and #attach/#discard for Contacts.
- Added #attach routes to handle requests to attach existing assets to related item.
- Use default permissions when creating an account from within a contact (thanks, Matthiew!)
- Removed 'Custom' opportunity stage and replaced it with comment in config/settings.yml.
- Named scope fix for Postgres/Heroku (closes LH #213).
- pt-BR updates (thanks, Enderson!)
- Don't count lost opportunities towards Account total (closes LH #205).
- Fixed vertical offset of asset selection popup.
- Made multiple selection popups coexist on a single page.
- Fixed issue with linking to edit/delete for models with multipart names (thanks, Nicholas!)
- Added load_select_popups_for() helper on asset landing pages.
- Refactored to add sections with [Create/Select...] on landing pages.
- Initial prototype of seleting related asset from the asset's landing page.
- Added discard action related specs.
- Do not offer :converted status choice when creating new lead (closes LH #199).
- Added simplified Chinese translation (thanks, James Zhang!)
- Initial implementation of discarding attached opportunity.
- Final dropbox touches before merging it all to the master branch.
- Avoid collision with .email CSS class which is used to display Task category strip.
- Dropbox related localizations.
- More work on the dropbox library.
- Allow to detach an account when editing a contact or an opportunity (closes LH #184).
- Added migration to have index on permissions (thanks, Yura!)
- Added link_to_email to Bcc: to dropbox if it has been set up (closes LH #183).
- Pushed [rails3] branch to Github, let the porting start :-)
- Replaced Facebox with Modalbox (closes LH #170).
- Check if new [background_info] setting is properly loaded.
- Merged in dropdown calendar localization patches (thanks, Yura!)
- Updated list of contributors.
- Version 0.9.10
- More work on to support scheduling tasks with specific time deadline.
- Refactored compound address code to support field hints.
- Added French locale (thanks, Cédric!)
- Added new hook hook in user profile template (thanks, Jose Luis!)
- Added :background_info option to Settings making it optional
- Refactored background info in forms and sidebar views
- Fixed fixtures and factories for the new Address model
- Added support for creating tasks with specific time deadline (thanks, Yura!)
- Added support for compound addresses (thanks, Jose Luis!)
- Fixed for :quote_ident issue with Postgres (thanks, Matt!)
- Added missing translations to the rest of locale files.
- Added localization support for dropdown calendar (thanks, Yura!)
- Added background info field to all major models (thanks, Jose Luis!)
- Added hook to sidebar index template (thanks, Jose Luis!)
- Default permissions are now configurable in settings.yml (thanks, Jose Luis!)
- More localization tweaks for date formats and tasks (thanks, Kamil and Yura!)
- Minor refactoring.
- Updated Russian locale files (thanks, Roman!)
- Updated task editing to support localization (thanks, Yura!)
- Added email attribute to Accounts -- run rake db:migrate (thanks, Jose Luis!)
- Updated README to mention http://demo.fatfreecrm.com
- Fixed few i18n omissions in locale files.
- Added support for editing and deleting notes (thanks, Jose Luis!)
- Added Polish translation (thanks, Kamil!)
- Fixed task time zone specs (thanks, Tom!)
- Small tweak to better support Heroku deployments (thanks, Ryan!)
- Updated Russian translation (thanks, Roman!)
- Pulled remaining English strings out of JavaScript (thanks, Gavin!)
- Added missing message to locale files.
- Added Spanish translation (thanks, Beatriz!)
- Fixed text encoding issues with Ruby 1.9/MySQL and HAML (thanks, Gavin!)
- Added :per_user_locale setting (default is false).
- Added some CSS eye candy (drop shadows and options links).
- Version 0.9.9b
- Updated Thai and Portuguese language translations.
- Implemented REST API for fetching asset notes (thanks, Adrian!)
- Return stringified hook data when called from within templates, and the actual data otherwise.
- Version 0.9.9a -- Happy New Year!
- Added [rake crm:settings:show] task.
- Minor fixes.
- More Ruby 1.9 compatibility fixes: all specs pass.
- Fixed Ruby 1.9 compatibility issues with I18n.t (thanks, Gavin!)
- Fixed rendering of callback hooks to be compatible with Ruby 1.9.
- Fixed password reset submission form (thanks, Roman!)
- XSS cleanup across views and models (thanks, Louis!)
- Refactoring permissions templates (thanks, Rit!)
- Updated README file.
- Version 0.9.9 (yay!)
- Fixed deprecation warning when adding a new comment.
- Fixed Apache/Passenger issue of not being able to load tab settings.
- Merged in I18n branch: Fat Free CRM could be easily localized now by dropping in config/locales file.
- Added exception handling and custom 500 status code template.
- Make sure no activity records are left behind when model record gets deleted from the database.
- Fixed broken sidebar search in Admin/Users.
- Refactored sidebar rendering to explicitly check if template file exists.
- Upgraded [simple_column_search] plugin that adds search support for Postgres.
- More I18n tweaks in views.
- Metallica show at HP Pavilion in San Jose!
- Added optional PLUGIN=plugin parameter to "rake crm:settings:load" task.
- Sorted locale keys, synced up English, Portuguese, and Russian locale files.
- Happy birthday, Fat Free CRM is one year old!
- Added Thai language translation (thanks, Apirak!)
- Streamlined CSS styles to fix text wrapping.
- Added explicit CSS value to fix tabs height (thanks, Apirak!)
- Fixed time calculations for dashboard activities.
- Restructured settings to take advantage of locale.
- NOTE: re-run crm:settings:load
- Moved hardcoded setting values from config/settings.yml to locale.
- Merged with lanadv/i18n branch (thanks, Lana!)
- Adjust total campaign revenue when related opportunity is won (LH #121).
- Refresh campaign sidebar when updating related opportunity (LH #121).
- Refresh campaign sidebar when rejecting or converting related lead (LH #121).
- Display newly created opportunity when converting lead from campaign page (LH #121).
- Writing specs for LH #121.
- Correctly set opportunity campaign and source when converting a lead (LH #119).
- Show correct campaign name and source when adding a lead from campaign landing page.
- Update lead counters when reassigning leads between campaigns (LH #117).
- Implemented I18n for options across all models.
- Correctly show opportunity summary when opportunity stage hasn't been specified.
- Update Campaign summary when creating or deleting related lead or opportunity.
- Fixed "rake crm:setup" task to be compatible with ruby 1.9.
- Introduced Sortable module, more work on I18n.
- Allow renaming both main and admin tabs (see config/settings.yml).
- Refactored gravatars to always show default image if gravatar is missing.
- Fixed Facebox usage within Admin area.
- Release 0.9.8a.
- Fixed SASS deprecation warnings making it compatible with Heroku again (thanks, Jim!).
- Refactored Facebox library (again!) to take into account [base_url] setting.
- Include modules from "lib/fat_free_crm.rb" so that they're loaded when running rake.
- Added Language option stubs to user's profile.
- Disabled tab highlighting when showing user's profile.
- Include all Fat Free CRM modules from Rails initializer.
- Added FatFreeCRM::I18n module.
- Merged localization commits onto i18n branch (thanks, Lana!)
- Make sure opportunity name does not exceed 64 characters (thanks, Rit!)
- Changed required Rails version to v2.3.4
- Updated model annotations for schema version #023.
- Release 0.9.8.
- Added full support for deploying Fat Free CRM in subdirectory (see config/settings.yml).
- Made Facebox library work with the project is deployed in subdirectory.
- Happy birthday, Diana!
- Setting up Apache with the latest Passenger.
- Prevent multiple form submissions by pressing [Submit] button twice.
- Fixed apparent MySQL migration error on Windows/XP.
- Moved [uses_user_permission] code from plugin to core library.
- Added inspector logging.
- Added [rake crm:hooks] task that enumerates the hooks (thanks, Eric!)
- Removed [uses_mysql_uuid] plugin and deprecated support for UUIDs.
- Adjusted activity timestamp to reflect UTC offset (thanks, Andrew!)
- Allow creating opportunities with non-unique name.
- Added :auto_complete controller hook.
- Added sidebar hooks on asset landing pages.
- crm_tags: added support for showing tags on asset landing pages.
- Added hooks for inline CSS styles and JavaScript epilogue.
- crm_tags: added JavaScript and CSS stylesheets for tags.
- crm_tags: make sure tags stay unique when searching.
- crm_tags: Made controller methods work with query string that contains tags.
- crm_tags: Proof of concept of combining query string with hash-prefixed tags.
- Added hooks to model view partials.
- Added hooks to model view partials.
- More work on [crm_tags] plugin.
- Merged String#to_url (thanks, Rit!)
- Fixed task completion bug for tasks with specific due date (thanks, Andrew!)
- Added more task model specs.
- Merged in Andrew's patch that solves disappearing tasks puzzle (thanks, Andrew!)
- Created task model specs that prove Andrew's theory.
- Added [get_*] controller hooks.
- Refactored FatFreeCRM::Callback.hook to simplify and support hook chains.
- Implemented controller hooks in [crm_tags] plugin.
- Added [*_top_section_bottom] view hooks.
- Make Rails not to reload core classes when developing a plugin.
- More work on [crm_tags] plugin and its view hooks.
- Injecting [acts_as_taggable_on] to existing models.
- Started with [crm_tags] plugin.
- Release 0.9.7.
- Open up [Quick find] on click rather than on mouseover.
- Added bounce effect to the login screen (fun!).
- Added CONTRIBUTORS file.
- Added overlay to the facebox library.
- Upgraded Rails Engines plugin (edge 2009-06-16).
- Boot Rails Engines right after Rails boots itself up.
- Make sure [rake crm:setup:admin] can actually assign admin attribute (thanks Rit!)
- Correctly assign and revoke admin rights in Admin/Users (thanks Rit!)
- Refactored Tabs code to avoid duplication.
- Fixed user signup vulnerability (thanks, Rit!)
- Suppress terminal echo when asking for admin password in [rake crm:setup:admin] task.
- Get flip_subtitle working in IE8 (thanks, Hamish!)
- Make sure simple_column_search does not escape period and single quote (thanks, Rit!)
- Don't suspend Admin users (thanks, Rit!)
- Moved [crm_sample_tabs] plugin into separate repository.
- Merged plugin tab support into the master branch.
- Some refactoring and more comments explaining the examples in [crm_sample_plugin].
- Make sure we can run Rake tasks when Settings are missing.
- Reload User class in [rake crm:setup] task to make sure migration attributes are set.
- Make sure the user has been authenticated before checking whether she is awaiting approval.
- Implemented #tab method for plugin registration.
- Added [crm_sample_tabs] plugin with the tab registration prototype.
- Implemented user approvals in Admin/Users and closed LH #29.
- Release 0.9.6.
- Implemented :needs_approval setting for user signups.
- Added new :user_signup setting (see config/settings.yml).
- User signups are only allowed if :user_signup is set to :allowed or :needs_approval.
- Added support for unattended [rake crm:setup] and [rake crm:setup:admin] tasks.
- Warn about database reset in [rake crm:setup] task.
- Removed dependency on Highline gem and removed it from vendors/gems.
- Added [:user_signup] setting and started with the signup permissions.
- Added view hooks on landing pages of all major models.
- More work on [crm_issues] plugin.
- Work on [crm_issues] plugin.
- Implemented plugin dependencies to be able to change plugin loading order.
- Pass on [lead.id] when converting it into a contact (LH #86).
- Corrected format of opportunity closing date (GH #7).
- Reviewed pccl fork and [fat_free_issues] plugin.
- Added user search and pagination to Admin/Users.
- Adding search and pagination to Admin/Users.
- Installed [Highline] gem in vendor/gems for [rake crm:setup:admin] task.
- Implemented [rake crm:setup:admin] task to create admin user.
- Added :before_destroy filters for User model.
- Implemented deleting users in Admin interface.
- Refactored flash messages to set notice/warning class on the fly.
- Added confirmation when deleting an user (Admin/Users/Delete).
- Upgraded [acts_as_commentable] plugin for Ruby 1.9 compatibility.
- Updated tab settings to allow Fat Free CRM to run from a subdirectory (thanks, okyada!).
- Updated [rake crm:settings:load] task to ensure Rails 2.3.3 compatibility.
- Implemented Admin > [Edit User] form.
- Implemented Admin > [Create User] form.
- Include all application helpers except the ones in /admin/helpers subdirectory (GH #5).
- Make sure editing assets doesn't change asset owner (LH #79).
- Implemented [Suspend] and [Reactivate] when managing users.
- Prevent suspended user from logging in.
- Updated authentication to allow creating users with blank passwords.
- More work on Admin/Users: added list of users and [Create User] form.
- Added [suspended_at] to User model, fixed typo (LH #81).
- Fixed ActionMailer password reset issue (thanks, James!).
- Use truncate() instead of shorten() for multibyte chars (thanks, Dima!).
- Increased the size of the textarea when adding notes (LH #80).
- More work on building the Admin infrastructure.
- Building Admin infrastructure.
- Dropped open_id related tables, added [admin] flag to [users] table.
- Added timezone support.
- Fixed a typo that affected individual permissions (thanks, Guillermo!)
- Refactored password reset controller and related views.
- Merged in Spanish translation from chillicoder/master (thanks, Martin!).
- Release 0.9.5.
- Made UUID support optional (affects MySQL v5+ users only).
- Removed task-specific flash area; changed to use generic flash messages instead.
- Store current user in the class to make it easier to access it from observers.
- Removed password length restriction to allow blank passwords.
- Upgraded HAML/SASS to version 2.2.2 (Powerful Penny) and made it a plugin.
- Ruby 1.9.1 compatibility fixes.
- Happy birthday, Lana!
- Annotated models for schema version #19.
- Implemented Profile > Change Password.
- Added ability to show flash notices from RJS templates.
- Removed [open_id_authentication] plugin since it's no longer needed.
- First gathering at #fatfreecrm channel on irc.freenode.net (thanks, Eric!)
- Completed upgrade to Authlogic 2.1.2
- Removed support for OpenID authentication
- Upgrading to Authlogic 2.1.2
- Moved avatars in separate directories based on who the avatar belongs to.
- Implemented avatar_for() to encapsulate uploaded image, gravatar, and default icon.
- Fixed Paperclip bug when :url option is a lambda and not a string.
- Release 0.9.4.
- Finished with user avatar upload, including controller and view specs.
- Back home from Pismo Beach.
- On my way to Pismo Beach, CA.
- More tweaks for Profile > Upload Avatar form.
- Replaced [mini_magick/has_image] combo with [paperclip] plugin.
- Installed [responds-to-parent-plugin].
- Added [Avatar] model.
- Implemented Ajax avatar uploads through hidden frame.
- Installed [mini_magick] gem and [has_image] plugin.
- Finished [Edit Profile] form which now updates all other page elements.
- Use root route instead of home (thanks, Dr.Nic!)
- Added user controller and view specs.
- Converted [Edit Profile] form to Ajax, implemented update.
- Added copyright notices (thanks, Michael!).
- Added routes and Ajax form stubs for [Edit Profile], [Upload Avatar], and [Change Password].
- More work on user profile.
- Applied patches to fix an issue with comments and their formatting (thanks, Eric!).
- Another iteration on User Profiles; all users now have personal profile page.
- Fixed form validation issue on asset landing pages (closes GH #3).
- Refactored form validation specs.
- Release 0.9.3.
Combined [Preferences] and [Profile] into single [Preferences] menu item.
- Hide [Create...] form before showing [Edit...] to make sure initial focus gets set properly.
- Rewrote config/settings.yml to use more familiar Ruby-like syntax.
- Fat Free CRM website is up at http://www.fatfreecrm.com
- Assets now show all related tasks, even if they were not created or assigned by current user.
- Release 0.9.2.
- Revamping the way a list of tasks is shown on related asset page.
- Added [completed_by] field to Task model to be able to show who completed the task.
- Fixed task creation issue on landing pages; added missing task stylesheets.
- Simplified version handling to avoid unnecessary database queries.
- Fixed Rails 2.3 incompatibility (expand/collapse in forms and [Cancel] for notes).
- Changed defaults to more reasonable values (thanks, Lana!).
- Updated Readme file (added links to direct downloads and Google Groups).
- Installed [facebox-for-prototype] JavaScript library.
- Implemented About box showing version number and helpful links (rerun rake crm:setup!)
- Upgraded to work with Rails 2.3.2
- Upgraded [rspec], [rspec-rails], and [open-id-authentication] plugins.
- Upgraded [acts-as-paranoid] plugin.
- Fixed task title naming issue.
- Fixed opportunity unique index issue (SQLite).
- Tagged 0.9.0 to build downloadable distributions on Github.
- Finished user options for the Recent Activity (LH #46).
- Fixed sporadic spec failures when running with SQLite.
- Implemented options for Opportunities and Contacts.
- Started with the options for the Recent Activity.
- Implemented options for Accounts.
- Implemented options for Leads.
- Happy birthday, Rema!
- Implemented :sort_by option for Campaigns.
- Wrote specs and finished [Options] for Campaigns.
- Implemented :per_page, and :format user preferences for Campaigns.
- Revisited user Preference model and wrote full spec coverage.
- Refactored application.js to simplify remote form updates.
- Updated stylesheets to support long and brief list formats.
- Added [Options] form for Campaigns with all preferences stubbed.
- Happy birthday, Sophie!
- Work on adding [Options] inline form and related controller actions.
- Implemented crm.Menu class and added menu related CSS styles.
- Fixed opportunity assignment issue reported by Deepu (LH #49).
- Fixed similar issue with the contact assignments.
- Fixed account sidebar issue when shipping/billing addresses are missing.
- Server installation and configuration at Linode.
- Refactored auto_complete to use before_filter.
- Created shared behavior specs to test auto_complete.
- Display a message when no quick find matches were found.
- Uninstalled [auto_complete] plugin since we're not using it.
- Signed up for Linode.com
- Happy birthday, Laura!
- Implemented jumpbox (called "Quick Find").
- More work on jumpbox.
- Restructured application's JavaScript and added crm.Popup class.
- Added "Jump to..." link that shows the jumpbox (see LH #45).
- Happy birthday, Dad!
- Fixed JavaScript and CSS caching issues in production environment.
- Gracefully handle use cases when previous or related asset is deleted or protected.
- Make sure commentable object exists and is accessible to current user.
- Implemented specs for Comments controller.
- Added missing and protected object handling for #convert, #promote, #reject (Leads).
- Added new [tracked_by] named scope for Tasks.
- Added missing and protected object handling for Tasks.
- Refactored rescue clause to use respond_to_not_found().
- Added missing and protected object handling for #update and #delete (all except Tasks).
- Added missing object handling for #edit action (all core objects except Tasks).
- If object permissions prevent access, treat the object as missing.
- Refacoring: use more idiomatic Rails named scope (User#except).
- Added missing object handling for #show action (all core objects except Tasks).
- Added controller routing specs for new routes.
- Replaced explicit MySQL trigger creation with [add_uuid_trigger].
- Started with LH #34 (Gracefully handle missing objects).
- Replaced regular flash messages with non-sticky ones.
- Make sure search box gets shown after creating, updating, or deleting an account.
- Implemented search for campaigns, opportunities, accounts, and contacts.
- Made it easier to reject leads (LH #35).
- Added sidebar summary for accounts.
- Added web presence links for leads and contacts.
- Added company field to leads search.
- Implemented live search for leads that can be reused in other controllers.
- Fixed demo data generation to produce random recently viewed items list.
- More work on simplifying search.
- Created initial implementation of live search (Leads only so far).
- Installed [simple_column_search] plugin.
- Initial implementation of live search for Leads.
- Implemented prototype search box for Leads with stubbed controller.
- Started with live search (LH #22).
- Last bit of paging refactoring before closing LH #18.
- Implemented Ajax pagination for Opportunities.
- Simplified paging by using single proxy to store and retrieve current page.
- Implemented Ajax pagination for Contacts.
- Implemented Ajax pagination for Campaigns.
- Implemented Ajax pagination for Accounts.
- Implemented Ajax pagination for Leads.
- Started to explore alternative approach to pagination (see Leads).
- Initial implementation of on demand paging (Accounts only so far).
- Fixed SQLite incompatibilities (thanks, James!)
- Restructured pagination templates and added specs.
- Researched on demand paginations, and [will_paginate].
- Installed [will_paginate] plugin.
- Happy birthday -- we're 5 month old ;-)
- Make sure tasks don't get onto recently viewed items list.
- Added "completed", "reassigned", and "rescheduled" activity logs for tasks (closes LH #17).
- Filter activities based on asset permissions, even for deleted assets.
- Pulled in first patches from fork (thanks, Scott!)
- Filter activities based on asset permissions (existing assets only so far).
- Honor object permissions when displaying activity log (LH #17).
- Finished with recently viewed items sidebar panel (LH #28).
- Refresh recently viewed items when creating, editing, or deleting core objects.
- Scraped the idea of demo factories -- fixtures are easier to use and maintain.
- Updated demo fixtures and crm:demo:load task to simulate user activities and recently viewed items.
- Implemented "commented on" user activity type.
- Back from LA and UCSB.
- More work on demo factories: loading users and accounts.
- Creating, updating, or deleting core assets also updates recently viewed items list.
- Fixed missing uuid generation caused by observing models.
- Harv Ecker is up in San Francisco tonight.
- Initial implementation of recently visited items.
- Lovely IRS weekend.
- Added activity tracking for recently viewed items.
- Added activity named scopes to select records by user and action.
- Fixed activity time-stamp format in Dashboard.
- Created Activity model, related table, and factory.
- Basic initial implementation of activity observers and recent activity.
- Created specs for activity observers.
- Added quick reschedule links to [Edit Task].
- Finished with editing tasks.
- Introduced called_from_(index|landing)_page? helpers.
- A couple of bug fixes (hiding [Lead Convert] and handling HTTP :delete).
- More tweaks rescheduling and reassigning tasks.
- Added :before_update hooks for task along with related model specs.
- Renamed [task.due_at_hint] to [task.bucket] to simplify naming conventions.
- Initial implementation of task rescheduling and reassigning.
- Moved [Edit Task] cancellation logic from controller to view.
- Added view specs for task#destroy, fixed a couple task related bugs.
- Refactored view specs.
- Finished [Edit Lead] views and view specs.
- Started with [Edit Task] form and related views.
- Refactored create, edit, and complete task views and created the specs.
- More work on [Edit Lead] views and specs.
- More work on [Edit Lead] form (leads controller and its specs).
- Finished with [Edit Campaign] including controller and view specs.
- Fixed updating permissions bug in [uses_user_permissions] plugin.
- Fixed editing shared permissions for opportunities, contacts, and accounts.
- Refactored custom Rails initializers and added custom date format.
- Finished with [Edit Opportunity] including full controller and views specs.
- Fixed JavaScript bug caused by not wiping out hidden create form.
- Use String#shorten instead of truncate() helper.
- More work on [Edit Opportunity] and its specs.
- Finished with [Edit Contacts] including full controller and views specs.
- Finishing touches for [Edit Contacts] forms.
- Moved sidebar to the lefthand column, changes location of Sass templates.
- Added [x] close button to all inline forms.
- More work on [Edit Contact] form (spec coverage pending).
- Fixed task controller specs when due tomorrow == due this week.
- Added spec coverage for [Edit Contact].
- Added [x] form control, link_to_cancel and link_to_close helpers.
- More work on editing a contact.
- Updated view specs to use Factories, 100% pass.
- Updated task controller specs to use Factories.
- A week of transition to [factory_girl] is over: 317 specs, all green.
- Refactored leads controller specs using factories.
- Started refactoring leads controller specs.
- Implemented specs for Account views and Home controller.
- Implemented specs for Campaigns controller.
- Implemented specs for Settings model.
- 100% spec code coverage for Accounts, Contacts, and Opportunities.
- Installed [factory_girl] plugin.
- Created model factories for all core models.
- Rewrote account controller specs to use factories instead of mocks.
- Started refactoring opportunity controller specs to use factories instead of mocks
- Added #as_hash and #invert class methods to Settings
- Put in place inline for Lead editing and conversion.
- Started with inline forms for Task editing.
- Depreciated contexts, refactored application's JavaScript.
- Put in place inline edit forms for Campaigns, Accounts, Contacts, and Opportunities.
- More work on inline edit and create forms.
- Moved context code to module and made it available to controllers and views.
- Started with [Edit Contact] form.
- Implemented [Edit Account] form.
- Implemented basic functions of [Edit Campaign].
- Moved some JavaScript code from helpers to application.js.
- Added support for showing interchangeable inline forms (Convert and Edit).
- Refactored saving/restoring context for inline forms.
- Refactored tools menu in lists to use block div.
- Refactored lead conversion to use remote form.
- Started with the [Edit Lead] inline form.
- Refactored lead star rating to always show 5 stars (grayed out or not).
- Removed [notes] field from core models and forms.
- Created v0.1 "Steinitz" milestone and tickets for "Steinitz" release.
- Set up GitHub service hook to integrate commits with the Lighthouse.
- Implemented Lead and Contact summary sidebar for individual Leads and Contacts.
- Added core extension library.
- Implemented Opportunity summary sidebar for individual Opportunity.
- Added gravatar support for leads and contacts.
- Added [gravatar] plugin and implemented gravatars for notes.
- Github commits are up on Twitter at http://twitter.com/fatfreecrm
- More refactoring to simplify handling of inline forms.
- Implemented adding related tasks for Leads, Accounts, Contacts, and Opportunities.
- Refactored tasks, added ability to create related tasks (Campaigns only so far).
- Implemented adding opportunities from the [Campaign] landing page.
- Implemented adding opportunities from [Contact] landing page.
- Implemented adding contacts from [Opportunity] landing page.
- Three months anniversary ;-).
- Implemented adding leads from the [Campaign] landing page.
- Implemented adding contacts from the [Account] landing page.
- Implemented adding opportunities from the [Account] landing page.
- Updated README file.
- Adding parent object support for inline forms.
- Major refactoring to support inline form embedding throughout the system.
- Simplified storing expand/collapse state for form sections.
- Started refactoring to support inline form embedding.
- Converted [Create...] forms to remote to be able to reuse them inline.
- Refactored javascript and stylesheet includes for popup calendar control.
- Consolidated scattered inline stylesheets into single shared partial.
- Refactored styles, added [Campaign] to [Lead] and [Opportunity] landing pages.
- Added [Contacts] and [Opportunities] to [Account] landing page.
- Added [Accounts] and [Opportunities] to [Contact] landing page.
- Added [Accounts] and [Campaigns] to [Opportunity] landing page.
- Refactored JavaScript code to automatically set focus on first form field.
- Save shown/hidden state of [post a note] form for all commentable models.
- Updated controller and view specs to support commentables.
- Added comments fixture to generate sample comments for all the core models.
- Implemented adding notes for campaign.
- Added notes for other core models (Account, Contact, Lead, and Opportunity).
- More design work on campaign landing page (adding comments, etc.)
- Implemented Campaign Summary sidebar for the campaign landing page.
- Generated [Comment] scaffold and created database migration.
- Added [acts_as_commentable] to core models.
- Added visible/invisible helpers to flip element's visibility style.
- Installed [acts_as_commentable] plugin.
- More work designing simple and consistent landing pages.
- Researching and mocking up landing pages for campaigns and leads.
- Implemented creating and assigning tasks for the specific date from the calendar.
- Converted remaining forms to HAML and the stylesheet to SASS.
- Added custom logger to highlight logged messages.
- Added [task_at_hint] field to [tasks] table to capture due date request.
- Refactored task model and crm.date_select_popup() in application.js.
- Created initial implementation of adding a new task (all except specific date).
- Refactored tasks code to simplify filtering.
- Implemented flipping between dropdown and calendar popup.
- Updated task related controller and view specs.
- Finished implementing after_filter callback hook in [web-to-lead] plugin.
- Implemented tasks deletion for all three views.
- More fun with SASS stylesheets -- pretty cool stuff.
- More work researching application's after_filter and making it work right.
- Added [app_after_filter] hook and moved the rest of [web-to-lead] code to plugin.
- Started converting CSS to SASS.
- Added README.rdoc and sample database configuration files, updated sample users.
- Added :app_before_filter hook, extracted [web-to-lead] code and moved it to plugin.
- Tweaks to login and signup forms (to be converted to HAML soon).
- Updated task related controller and view specs.
- Extracted sample plugin and moved it into separate Git repository.
- SuperBowl!!
- Refactored tasks controller to offload most of sidebar and filter processing to task model.
- Impletented tasks/complete for pending tasks.
- [Create new task] and [Assign new task] forms now save/restore their display state.
- Implemented task filtering for all three views.
- Added completion checkboxes and created initial implementation.
- Ruby 1.9.1 final was released today!
- Added new named scopes to support assignments and completed tasks.
- Added sidebar filters for completed tasks.
- Added CSS styles for single-line lists and redesigned task templates.
- Unpacked gem dependencies to /vendor/gems (ruby-openid, haml, and faker).
- Check whether database connection is available in [uses_mysql_uuid] plugin.
- Made task filters work for pending and assigned tasks.
- Implemented task selector to switch between pending, assigned, and completed tasks.
- Major overhaul of task templates to support three task views.
- Changed rake's namespace from [app] to [crm].
- Added sidebar tasks filtering by due date.
- Added CSS styles for selector control.
- Added prototype selector control for tasks.
- Added support for inline forms and added [Create New Task] form.
- Updated task named scopes to evaluate them on each request rather than on server startup.
- Added task categories and due dates to system settings.
- Completed first implementation of Tasks index page.
- Added named scopes for tasks model, created tasks fixtures.
- Two months anniversary ;-).
- Moved permissions related code to [uses_user_permissions] Rails plugin.
- Refactored models to make use of [uses_user_permissions] plugin.
- Moved permission model to [uses_user_permissions] plugin.
- Updated [Task] model and database schema for [Tasks] table.
- Implemented list delete for accounts, campaigns, leads, and opportunities.
- Generated Tasks scaffold.
- Added [Tasks] tab to default settings, renamed [Home] tab to [Dashboard].
- Implemented list delete for contacts.
- Refactored Setting.opportunity_stage to make sure the insertion order is preserved.
- Implemented opportunities filtering by stage.
- Welcome, Mr. President.
- Improved login/logout flash messages.
- Refactored list templates to use collection partials.
- Added sidebar for Campaigns to filter them out by status.
- More fine tuning of plugins and callback hooks.
- Sample plugin now implements view, controller, and controller filter hooks.
- Implemented FatFreeCRM::Plugin and FatFreeCRM::Callback modules.
- Created first sample Fat Free CRM plugin!
- Uninstalled Searchlogic plugin and added Rails Engines.
- Fixed :my scope to use LEFT OUTER JOINs with permissions.
- Experimenting with application plugins.
- Exploring infrastructure for application plugins.
- Added :my named scope for main models to support permissions.
- Refactored all controllers to use :my permission-based scopes.
- Refactored [Leads/Index] and [Leads/Filter] to use collection partial.
- Added missing database indices.
- Added rendering of local sidebar template if it's available.
- Added sidebar for Leads and implemented initial version of leads filtering by status.
- Replaced account template stubs with actual contact and opportunity numbers.
- Added web-to-lead submission hook to Leads controller (thanks bitdigital)!
- Made campaign and lead models track lead-to-opportunity conversion ratio.
- Implemented backend for [Opportunity/New].
- Refactored models validation code.
- Added fixtures for join tables.
- Converted [Opportunity/Show] to HAML and created [Opportunity/New] form (with backend stub).
- Simplified submission for forms with account create/select.
- Added app-specific rake tasks -- app:setup, app:demo, and app:reset.
- Updated [uses_mysql_uuid] plugin to explicitly check for MySQL v5 or later.
- Updated database migrations and rake tasks to make them database-type neutral.
- Fat Free CRM now works with MySQL v4 and SQLite!
- Implemented backend for [Contact/New].
- Made model functions more general for better code reuse.
- Figured out how to make [has_one :through] work and save the join record.
- Restructured [uses_mysql_uuid] to use proper module nesting and extend base with SingletonMethods.
- Fixes in opportunity/index and contact/delete.
- Created [Contact/New] form (with backend stub).
- Moved common JavaScript functions to application namespace.
- Finished refatoring [Lead/Convert].
- Started with index page for contacts.
- Streamlined [Lead/Convert] to make it use objects and default values.
- Added [assigned_to] to accounts and [access] to opportunities.
- Updated [Account/New] form.
- Refactoring of [Lead/Convert] using [fields_for].
- Implemented backend for [Lead/Convert] - create contact along with optional account and opportunity.
- Fixed [uses_mysql_uuid] to work with AR validations.
- Minor database schema changes.
- Created [account_contacts], [account_opportunities], and [contact_opportunities] join tables.
- Implemented HTML designs and JavaScript for [Lead/Convert] and [Contact/New] forms (with backend stubs).
- More design work on [Lead/Convert] and [Contact/New] forms.
- Added new view/edit/delete icons, started with [Lead/Convert].
- Minor changes in [opportunities] migration.
- More work on opportunity index page.
- Fixed find() class override in [uses_mysql_uuid] plugin.
- Added opportunity stage settings and colors.
- Created opportunities fixtures and started with opportunity index page.
- Added find() override in [uses_mysql_uuid] plugin to make it possible to use find() instead of find_by_uuid().
- Added [contacts] and [opportunities] database migrations.
- Generated [opportunity] scaffold, added [contacts] fixtures.
- Some model and javascript refactoring.
- Another sweep at specs to make them pass with the introduction of UUIDs.
- Update campaign lead count and conversion ratio when creating a new lead.
- Make sure :uuid gets reloaded from the database and not from cached attributes.
- Added extra fields to [User] model and implemented [User/Edit profile].
- Created [uses_mysql_uuid] plugin.
- Converted account, campaign, contact, lead, and user models to use UUIDs.
- Updated controllers to use find_by_uuid() instead of find().
- Updated routes to recognize and extract UUID from URLs.
- Updated controller and view specs.
- Added permissions section to [Lead/New] form.
- Added validation and saving to [Lead] model to actually create new leads.
- Moved form section toggling to application helper and home controller.
- Implemented section toggling in account and campaign forms.
- Added [toll_free_phone] field to accounts.
- Added .top and .req styles for field labels.
- Show/hide form sections based on session where we now store expand/collapse state.
- Redesigned [Lead/New] and revamped related CSS styles.
- Reorganized global settings to make it easier to access them at runtime.
- Toggle sections using link_to_remote() to be able to store toggle status in a session.
- Reveal/hide form sections using toggle/slide visual effect.
- Metallica show at Oakland Coliseum was totally amazing!
- Replaced stub text fields with autocomplete in [Leads/New].
- Implemented ratings JavaScript library to show star ratings.
- Updated [leads] schema, more polishing for [Leads/New] form.
- Added flash confirmation messages for deletes.
- Work on [Leads/New] form (campaign autocomplete, etc.)
- Updated designs for leads, campaigns, and opportunities using left-hand strips.
- Implemented new design for accounts index page.
- More work on leads index page.
- Added leads fixture that uses [faker] gem.
- Restructured status settings to use :label and :color.
- Work on leads schema, model, and fixtures.
- Insalled [annotate_models] plugin and generated model annotations.
- Generated campaign fixtures.
- Updated [Campaign] model to include actual vs. targets.
- Added permissions to [Campaign/New].
- Cleaned up specs and fixtures.
- New tableless design for campaign index page.
- Added new .list CSS styles.
- Made select date popup work with Safari.
- Made calendar_date_select work with field getting focus (campaign/new).
- More work on list of campaigns page.
- Implemented [Campaing/New] with dates validation and status set.
- More work polishing campaigns.
- Added rake task to reset the application (rake app:reset).
- Automatically set focus on first form field.
- Work on [campaigns] database schema and model.
- Started with [Campaigns/New], integrated calendar_date_select for start/end dates.
- Implemented account deletion.
- Fixes for header and signup page layout.
- Installed [advanced_errors] plugin to have full control over the message text.
- Implemented [Account/New] validating account data and preserving submitted form values.
- More work on polishing accounts index page.
- Added Preferences controller stub and header link.
- Updated tabs helper to use global settings to show tabs.
- Updated spec fixtures to use randomly generated dates and counts.
- Converted all layouts to haml.
- Added LICENSE file with the GNU Affero General Public License.
- Fixed auto-generated specs to make them all pass.
- Implemented hash methods for user preferences.
- Added [Setting] and [Preference] models.
- Added [campaigns], [leads], and [contacts] scaffolds.
- Added [config/settings.yml] with default application settings.
- Created [lib/tasks/settings.rake] to load default settings to the database.
- Implemented [Setting] model.
- Created [Permission] polymorphic model, added fixtures to load sample users, accounts, and permissions.
- More work on [accounts] model, CSS styles, and [add account] form.
- Added tabbed and tabless layouts, implemented tabs and current tab tracking.
- Applied CSS styles to all tabless forms (login, sign up, and forgot password).
- Created two column layout for the main contents area.
- Created [Accounts] scaffold and added [Accounts] tab.
- Implemented sign up, login, logout, and forgotten password using [authlogic] plugin.
- Installed [open_id_authentication] plugin.
- Modified [users] table to work with [authlogic] plugin, added tables for openid authentication.
- Installed plugins: [authlogic], [searchlogic], [calendar_date_select], [auto_complete], [in_place_editor], and [haml].
- Added [sessions] and [users] tables, created [User] model.
- Installed Rspec and [acts_as_paranoid] plugins.
- Created the project and posted it on GitHub.