def update_opengraphable_objects(context, new_ct): g_marker = queryUtility(IOpengraphMarkerUtility) if not g_marker: return options = IAnnotations(context) ct = getToolByName(context, 'portal_catalog') olds_pt = options.get('old_content_types', []) if new_ct == olds_pt: return adds = [] for new in new_ct: if new in olds_pt: olds_pt.remove(new) else: adds.append(new) nb_items, bad_items = g_marker.update(context, adds, olds_pt) updated = u'%d %s' % (nb_items, _(u'objects updated.')) if not bad_items: message = updated else: message = u'%s, %d %s: %s' % (updated, len(bad_items), _(u'update(s) on object(s) failed'), ','.join(bad_items), ) pu = getToolByName(context, 'plone_utils') pu.addPortalMessage(message)
def update_opengraphable_objects(context, new_ct): g_marker = queryUtility(IOpengraphMarkerUtility) if not g_marker: return ct = getToolByName(context, 'portal_catalog') query = {'object_provides': 'collective.opengraph.interfaces.IOpengraphable'} pt = [item.portal_type for item in ct.searchResults(query)] olds_pt = list(set(pt)) adds = [] for new in new_ct: if new in olds_pt: olds_pt.remove(new) else: adds.append(new) if len(olds_pt)==0 and len(adds)==0: return nb_items, bad_items = g_marker.update(context, adds, olds_pt) updated = u'%d %s' % (nb_items, _(u'objects updated.')) if not bad_items: message = updated else: message = u'%s, %d %s: %s' % (updated, len(bad_items), _(u'update(s) on object(s) failed'), ','.join(bad_items), ) pu = getToolByName(context, 'plone_utils') pu.addPortalMessage(message)
def update_opengraphable_objects(context, new_ct): g_marker = queryUtility(IOpengraphMarkerUtility) if not g_marker: return ct = getToolByName(context, 'portal_catalog') query = { 'object_provides': 'collective.opengraph.interfaces.IOpengraphable' } pt = [item.portal_type for item in ct.searchResults(query)] olds_pt = list(set(pt)) adds = [] for new in new_ct: if new in olds_pt: olds_pt.remove(new) else: adds.append(new) if len(olds_pt) == 0 and len(adds) == 0: return nb_items, bad_items = g_marker.update(context, adds, olds_pt) updated = u'%d %s' % (nb_items, _(u'objects updated.')) if not bad_items: message = updated else: message = u'%s, %d %s: %s' % ( updated, len(bad_items), _(u'update(s) on object(s) failed'), ','.join(bad_items), ) pu = getToolByName(context, 'plone_utils') pu.addPortalMessage(message)
class IOpengraphSettings(Interface): """Opengraph default settings """ app_id = schema.TextLine(title=_(u"Facebook app id"), required=False) api_secret = schema.TextLine(title=_(u"Facebook api secret"), required=False) admins = schema.TextLine(title=_(u"Admins"), required=False) default_type = schema.Choice( title=_(u"Default type"), description=_(u"A default opengraph type metatag"), required=True, vocabulary="collective.opengraph.types", ) types = schema.List(title=_(u'Type of contents'), required=False, default=[], description=_(u"A list of types which can be selected " "for opengraph type metatag"), value_type=schema.TextLine(title=u"Type")) content_types = schema.List( title=_(u'Content types'), required=False, description=_(u"A list of types which can be tagged " "by opengraph metatag"), value_type=schema.Choice( title=_(u"Content types"), source="plone.app.vocabularies.ReallyUserFriendlyTypes"))
class IOpengraphMetatags(Interface): """ Returns opengraph metadata """ metatags = schema.Dict( title = _(u'List of opengraph metatags'), required = True, default = {}, description = _(u"A dict of opengraph metatags " "which will be used by the opengraph viewlet"), key_type = schema.TextLine(title=u"Metatag name"), value_type = schema.TextLine(title=u"Metatag value"))
class OpengraphControlpanelForm(extensible.ExtensibleForm, form.EditForm): successMessage = _(u'Data successfully updated.') noChangesMessage = _(u'No changes were applied.') formErrorsMessage = _(u"There were some errors.") form.extends(form.EditForm, ignoreButtons=True) fields = field.Fields(IOpengraphSettings) label = _(u'Configure Collective Opengraph') def __init__(self, context, request): super(OpengraphControlpanelForm, self).__init__(context, request) self.ptool = getToolByName(self.context, 'plone_utils') @button.buttonAndHandler(_(u'Apply'), name='apply') def handle_apply(self, action): data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return registry = getUtility(IRegistry) settings = registry.forInterface(IOpengraphSettings, check=False) IAnnotations( self.context)['old_content_types'] = settings.content_types changes = self.applyChanges(data) if changes: self.status = self.successMessage if not self.context.restrictedTraverse( '@@opengraph_sitewide_enabled')(): notify(OpengraphSettingsEvent(self.context, data)) else: self.status = self.noChangesMessage self.ptool.addPortalMessage(self.status, 'info') self.request.response.redirect(self.back_link) @button.buttonAndHandler(_(u'Cancel'), name='cancel') def handle_cancel(self, action): self.ptool.addPortalMessage(self.noChangesMessage, 'info') self.request.response.redirect(self.back_link) @property def back_link(self): return back_to_controlpanel(self)['url']
def __call__(self): noLongerProvides(self.context, IOpengraphable) plone_utils = getToolByName(self.context, 'plone_utils') message = _(u"The opengraph tags has been disabled") plone_utils.addPortalMessage(message) self.request.response.redirect(self.context.absolute_url())
def __call__(self): alsoProvides(self.context, IOpengraphable) plone_utils = getToolByName(self.context, 'plone_utils') plone_utils.addPortalMessage(_(u"The opengraph tags has been enabled")) self.request.response.redirect(self.context.absolute_url())