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