MailChimp-integration for Plone!
- Assign interest groups to existing content and automatically expose the result sets as RSS-feeds.
- Sign up form in both portlet- and view format, complete with an optional selection of interest groups.
- Create newsletter campaigns from existing content using the dashboard, with conditional interest group merge tags.
- Moderation built-in.
Define a set of interest groups for one or more lists, configure Plone with your API key and start tagging content.
- Plone 3 and 4 are supported.
- Works with both Archetypes or Dexterity content.
The product is currently localized into:
Contributions are welcome!
- Fix issue with creating campaigns when segments span multiple groupings. [tmog]
- Add option to make interests required when subscribing via list subscribe form. [tmog]
- Renamed feed.pt to feed.pt.xml to ensure i18ndude works for translations, and correct a pep8 related issue. [bosim]
- Updated translations in general including danish translations. [bosim]
- Translations for portlet titles and descriptions are now in the plone domain. [bosim]
- Some Plone 4.3+ changes. [senner]
- Use date and time as upper limit in campaign portlet to include todays content. [tmog]
- Don’t fail when no name is entered [tmog]
- Moved catalog indexes to setuphandlers to avoid indexes being emptied when profile is run. [tmog]
- Fixed broken subscribe form. Bug introduced with pre-selected interest groups feature on subscribe portlet.
- Fixed interest groups selection (on assignment) being ignored when select_interest_groups was False.
- Add dependency on BeautifulSoup. It’s required for the default static newsletter renderer.
- Update title and description of newsletter portlet. So we can tell the difference between newsletter and campaign.
- Use context description on main subscribe form if there is one and the form is rendered in a custom context. Added for flexibility. [tmog]
- Main subscribe form no longer registered on plone site. Means flexibility to view the form in a custom context. Tip: use a Link as default_page in you context. [tmog]
- Added hook to register named IGroupExtras utilities. Can be used in custom code to inject results into a feed. [tmog]
- Ensure campaign template does not fail if items have no getObject. This adds flexibility when customising. [tmog]
- Added control panel option to ignore interest groupings. Ignored groupings will be filtered from the feed vocabulary. [tmog]
- Sort items for RSS-feed by publication date.
- Fixed compatibility with Python 2.4.
- The RSS-feed now defines only pubDate` for each entry and not also ``dc:date. According to the w3 validation service, “An item should not include both pubDate and dc:date”.
- When creating new campaigns, we now specify a segment that filters away any subscribers who are not interested in anything we’re sending. [tmog]
- Correctly hide form fields that have the ‘show’ attribute set to false.
- The campaign preview view is adapted to the parent context.
- Use Five-based template class such that e.g. z3c.jbot can override the template.
- The feed schedule field is now set up with its own write permission.
- The subscription form handler now redirects to itself, with all widgets removed (but displaying a status message).
- The campaign preview view is now adapted to the current context instead of the site.
- Fixed issue where interest group filtering would incorrectly get applied on the outer level which would then be repeated unnecessarily.
- Fixed encoding issue.
- Hidden field corresponds to ‘public’, ‘show’ is something else.
- Use the interest grouping title intead of the group title in the campaign template.
- The default subject line now includes the date.
- Attempt to translate field names.
- Fixed issue where the moderation portlet would incorrectly return items that would not need moderation.
- Added control panel action to remove non-existing feeds from content.
- “System” fields (those in all-caps) are now no longer shown on the subscription form.
- Require that ‘Anonymous’ is included in allowed roles and groups.
- The subscription form now includes a “Select all” checkbox.
- Update moderation items widget when one or more items have been approved. This ensures that the rendered view is correctly updated.
- Fixed encoding issue that affected the rendering of a status message for ‘bumped items’.
- An item which has no scheduled date, but is approved, now correctly gets today’s date assigned. This fixes an issue where the item would not appear in the moderation form after approval. With this change, it will appear at least on the day of approval.
- Use Plone’s standard identifier normalization to convert interest groups into form tokens on the automatically generated subscription form.
- Fixed issue with acquisition-wrapping such that subscription form defaults actually work.
- Subscription form would incorrectly load interest groupings for all available lists.
- Log every API call to MailChimp.
- If a campaign can’t be created, show the error message in the status message, not just the log.
- The subscription form now displays defined ‘text’ and ‘dropdown’ merge vars as fields.
- The previous release had a bugfix which did not address the issue correctly. This should be fixed now.
- Made the schema extension adapter browser-layer aware, to avoid extending schemas on sites where the package is not installed (editing objects would fail if chimpfeed was not installed). [sunew]
- Fixed an issue setting up chimpfeed on a vanilla plone site, where the feeds setting is initialized to None. [sunew]
Fixed an issue where the moderation portlet would fail when an item set for moderation would not have a defined schedule date.
This shouldn’t happen in practice, because the publication date is used instead of a schedule date, but the catalog data might be incorrect.
- The list subscribe form now validates the e-mail address input.
- You can define feeds manually in addition to the ones pulled automatically from a selected list. This is now also clarified in the help texts.
- Added local utility IApiUtility (defined in interfaces) to expose methods for accessing the API, to be used my third party customizations.
- Show unmoderated items even if they’re scheduled for a past date.
- Added an option to exclude items scheduled after today’s date when preparing a campaign.
- Adding RSS publication date, formatted as RFC 822.
- Fixed an issue where KSS validation would not work properly in the subscribe form.
- Fixed an off-by-one bug in the date comparison logic. Items are now correctly included from the provided “start” date.
- feedSchedule is now defined as a DateIndex.
It’s now possible to restrict the collection of interest groups to those from a particular list. This can help clear up confusion about which interest groups are available, but importantly, also helps alleviate network latency when many lists are defined for an account (because we must query the interest groups per list, in sequence).
Added a subscription form, available from the control panel (there’s a link for each defined mailinglist).
Interest groups are now conflated with feeds. These are now always defined in MailChimp.
Previously, a manager needed to set up a list of feeds manually. These were just strings that did not tie into MailChimp’s interest groups directly. This is now changed.
- Feed URLs in the control panel are now listed in the same order as they are defined.
Added new schema extension to give items an explicit feed category.
Available categories are configured in the control panel.
It’s now possible to create and schedule a a new campaign based on the items currently active.
This is implemented as a new portlet. It is intended that the portlet be added to the editor’s dashboard.
Note that content is grouped by their interest group marking, and uses MailChimp’s conditional markup to tailor the newsletter to each user. The sorting of the groups is pluggable via a utility.
The portlet includes a date which sets the lower date boundary on what items are active. The upper boundary defaults to today’s date which is matched with the item schedule date.
When a campaign is created, tomorrow’s date is set as the new lower date boundary such that no items are immediately active for a subsequent campaign.
- Fixed compatibility issues with legacy libraries.
- Provide title explicitly; the RSS template checks for this attribute using explicit acquisition.
- Added optional portlet description field.
- Fixed bug that would make the schema extension fail with Archetypes-based content.
- Do not extend schema (or add via behavior) if product is not installed (settings not available).
- Use “Publishing date” when feed schedule is unset.
- The feed now only includes items in the ‘published’ workflow state.
- Fixed issue on Archetypes where the feed schedule date would default to today’s date (instead of None).
- Fixed issue where effective_date would return 0 due to explicit acquisition. The attribute is now declared as “acquired” which informs the explicit wrapper to yield the contained attribute.
- Fixed issue where an RSS-feed would fail for content which does not provide a getText method.
Fixed issue where the Archetypes schema extender would replace existing fields (if using the same names), for example "feeds".
Instead, the extender now ignores such content types (a warning is logged).
- Plone 3 compatibility.
- Fixed issue where subscription using first name only (single name, when split on space) would cause an exception.
- Bump schedule date to today’s date on moderation, if date is in the past. This ensures that the item will be shown on the moderation screen.
- Fixed issue with custom schema mutator which would not function correctly with schema caching; we are able to work around it using Archetypes’ storage API directly.
- Fixed incorrect package dependency.
- Add support for configuring an RSS summary display of included items.
- Add support for Dexterity-based content.
- Make content moderation requirement optional.
- Add link to content for moderation.
- The moderation portlet now correctly gets the class 'portletModeration'.
Added simple approval system where items are explicitly made available after some date, and separately approved (guarded by a custom permission).
To upgrade, you must run the “catalog” setup step and perform the require indexing.
- Initial public release.