def handleApply(self, action): """ Save (create or update) a tag """ data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return ajax = 'ajax' in self.request.form manager = IImageTagsManager(self.context) id, tag, new_tag = manager.save_tag(data) if not errors: # Special treatment for ajax/non-ajax save if not ajax: if new_tag: message = _(u"Tag '${title}' added.", mapping={u'title': tag['title']}) else: message = _(u"Tag '${title}' updated.", mapping={u'title': tag['title']}) self.request.response.redirect('%s/@@imagetags-manage' % self.context.absolute_url()) IStatusMessage(self.request).addStatusMessage(message, type='info') else: # Return XML response self.request.response.redirect( '%s/@@imagetags-newtag?id=%s' % (self.context.absolute_url(), id))
def __init__(self, context, request): self.context = aq_inner(context) self.request = request self.helper = getMultiAdapter((self.context, self.request), name="imagetags-helper") self.default_image = self.helper.image() self.manager = IImageTagsManager(self.context)
def __call__(self, id): manager = IImageTagsManager(self.context) tag = manager.get_tag(id) image = getMultiAdapter((self.context, self.request), name="imagetags-img") self.tag_id = id self.tag_box = "<![CDATA[%s]]>" % (image.tag_box(id=id, data=tag)) self.tag_title = "<![CDATA[%s]]>" % (image.tag_title(id=id, data=tag)) return self.index()
def __call__(self, id): manager = IImageTagsManager(self.context) tag = manager.get_tag(id) image = getMultiAdapter((self.context, self.request), name="imagetags-img") self.tag_id = id self.tag_box = '<![CDATA[%s]]>' % (image.tag_box(id=id, data=tag)) self.tag_title = '<![CDATA[%s]]>' % (image.tag_title(id=id, data=tag)) return self.index()
def __init__(self, context, request): self.context = aq_inner(context) self.request = request self.embedded = True # Get tag manager to get sorted tags manager = IImageTagsManager(self.context) self.tags = manager.get_sorted_tags() # Get helper to get default image helper = getMultiAdapter((self.context, self.request), name="imagetags-helper") self.default_image = helper.image() # Get settings from portal_registry for ImageTags registry = queryUtility(IRegistry) settings = registry.forInterface(IImageTagsSettings) self.iframe_enabled = settings.iframe_enabled self.taglist_height = settings.iframe_taglist_height
def updateWidgets(self): """ If 'id' parameter is in the request set values for widgets based on the chosen tag. """ super(form.EditForm, self).updateWidgets() self._updateWidgets() request = self.request id_field = 'id' if id_field in request.form: id = request.form[id_field] manager = IImageTagsManager(self.context) tag = manager.get_tag(id) if not tag is None: for x in tag: self.widgets[x].value = tag[x] self.widgets['id'].value = id
def handleApply(self, action): """ Save (create or update) a tag """ data, errors = self.extractData() if errors: self.status = self.formErrorsMessage return ajax = 'ajax' in self.request.form manager = IImageTagsManager(self.context) id, tag, new_tag = manager.save_tag(data) if not errors: # Special treatment for ajax/non-ajax save if not ajax: if new_tag: message = _(u"Tag '${title}' added.", mapping={u'title': tag['title']}) else: message = _(u"Tag '${title}' updated.", mapping={u'title': tag['title']}) self.request.response.redirect('%s/@@imagetags-manage' % self.context.absolute_url()) IStatusMessage(self.request).addStatusMessage(message, type='info') else: # Return XML response self.request.response.redirect('%s/@@imagetags-newtag?id=%s' % (self.context.absolute_url(), id))
def migrate_1001_1010(context, logger=None): """ Replace all dots in tag ids with hyphens. This slightly enhances performance especially in JavaScript and also simplifies code """ if logger is None: logger = logging.getLogger('collective.imagetags') catalog = getToolByName(context, 'portal_catalog') brains = catalog(object_provides=IImageWithTags.__identifier__) for brain in brains: object = brain.getObject() manager = IImageTagsManager(object) tags = manager.get_tags() for tag_id in tags: if '.' in tag_id: tag_data = tags[tag_id] tag_data['id'] = tag_id.replace('.', '-') manager.remove_tags(ids=[ tag_id, ]) manager.save_tag(tag_data) logger.info('%s objects migrated with new tag ids' % len(brains))
def migrate_1001_1010(context, logger=None): """ Replace all dots in tag ids with hyphens. This slightly enhances performance especially in JavaScript and also simplifies code """ if logger is None: logger = logging.getLogger('collective.imagetags') catalog = getToolByName(context, 'portal_catalog') brains = catalog(object_provides=IImageWithTags.__identifier__) for brain in brains: object = brain.getObject() manager = IImageTagsManager(object) tags = manager.get_tags() for tag_id in tags: if '.' in tag_id: tag_data = tags[tag_id] tag_data['id'] = tag_id.replace('.', '-') manager.remove_tags(ids=[tag_id,]) manager.save_tag(tag_data) logger.info('%s objects migrated with new tag ids' % len(brains))
class ManageTags(BrowserView): """ Tag management browser view """ implements(IManageTags) def __init__(self, context, request): self.context = aq_inner(context) self.request = request self.helper = getMultiAdapter((self.context, self.request), name="imagetags-helper") self.default_image = self.helper.image() self.manager = IImageTagsManager(self.context) def __call__(self): """ This browser view can be called in a get/post request to remove existing tags. """ request = self.request if 'form.widgets.remove' in request.form: ids = request.form['form.widgets.remove'] removed = self.manager.remove_tags(ids=ids) if 'ajax' in request.form: request.response.setHeader('content-type', 'application/json; charset=utf-8') response_body = {'removed': [id.encode('utf-8') for id in ids]} response_http = json.dumps(response_body) request.response.setHeader('content-length', len(response_http)) return response_http else: count_removed = len(removed) if count_removed==1: message = _(u'${count} tag removed.', mapping={u'count': count_removed}) elif count_removed>1: message = _(u'${count} tags removed.', mapping={u'count': count_removed}) if count_removed>0: IStatusMessage(self.request).addStatusMessage(message, type='info') return self.index() else: return self.index() def url(self): """ This browser view url """ return '%s/@@%s' % (self.context.absolute_url(), self.__name__) # The following methods are now provided by IImageTagsManager adapter def get_tag(self, id, create_on_fail=False): """ Get a given tag based on id. If create_on_fail = True, it will create a new placeholder (dictionary) if the tag is not found. """ return self.manager.get_tag(id, create_on_fail) def get_tags(self): """ Get all tags """ return self.manager.get_tags() def get_sorted_tags(self): """ Sorted list of tags """ return self.manager.get_sorted_tags() def save_tag(self, data): """ Save a tag and create it (assigning an automatic id) if it's a new one """ return self.manager.save_tag(data)
class ManageTags(BrowserView): """ Tag management browser view """ implements(IManageTags) def __init__(self, context, request): self.context = aq_inner(context) self.request = request self.helper = getMultiAdapter((self.context, self.request), name="imagetags-helper") self.default_image = self.helper.image() self.manager = IImageTagsManager(self.context) def __call__(self): """ This browser view can be called in a get/post request to remove existing tags. """ request = self.request if 'form.widgets.remove' in request.form: ids = request.form['form.widgets.remove'] removed = self.manager.remove_tags(ids=ids) if 'ajax' in request.form: request.response.setHeader('content-type', 'application/json; charset=utf-8') response_body = {'removed': [id.encode('utf-8') for id in ids]} response_http = json.dumps(response_body) request.response.setHeader('content-length', len(response_http)) return response_http else: count_removed = len(removed) if count_removed == 1: message = _(u'${count} tag removed.', mapping={u'count': count_removed}) elif count_removed > 1: message = _(u'${count} tags removed.', mapping={u'count': count_removed}) if count_removed > 0: IStatusMessage(self.request).addStatusMessage(message, type='info') return self.index() else: return self.index() def url(self): """ This browser view url """ return '%s/@@%s' % (self.context.absolute_url(), self.__name__) # The following methods are now provided by IImageTagsManager adapter def get_tag(self, id, create_on_fail=False): """ Get a given tag based on id. If create_on_fail = True, it will create a new placeholder (dictionary) if the tag is not found. """ return self.manager.get_tag(id, create_on_fail) def get_tags(self): """ Get all tags """ return self.manager.get_tags() def get_sorted_tags(self): """ Sorted list of tags """ return self.manager.get_sorted_tags() def save_tag(self, data): """ Save a tag and create it (assigning an automatic id) if it's a new one """ return self.manager.save_tag(data)