Esempio n. 1
0
 def force_link_target(self, doc, target):
     for el in _find_external_links(doc):
         if target is None:
             if 'target' in el.attrib:
                 del el.attrib['target']
         else:
             el.set('target', target)
Esempio n. 2
0
 def force_link_target(self, doc, target):
     for el in _find_external_links(doc):
         if target is None:
             if 'target' in el.attrib:
                 del el.attrib['target']
         else:
             el.set('target', target)
Esempio n. 3
0
    def _handle_save(self, redirect_to, target=None, fields=None):
        self.create_attachment()

        self.errors = {}
        self.context.validate(REQUEST=self.request, errors=self.errors, data=1, metadata=0)
        if self.errors:
            for msg in self.errors.values():
                self.addPortalStatusMessage(msg)
            return self.errors

        allowed_params = set(['comment', 'oc-target', 'text_file', 'title', 'text', 'attachmentFile', 'submitted', 'text_text_format', 'attachmentTitle', 'task|save'])
        new_form = {}
        for k in self.request.form:
            if k in allowed_params:
                new_form[k] = self.request.form[k]
        
        # don't call process form, because we do our own cleaning of html
        # self.context.processForm(values=self.request)

        page_title = new_form['title']
        page_text = new_form['text']
        # XXX check description on news page
        description = new_form.get('description', None)

        # Between zope and various weird web browsers, the text could/will
        # be a str encoded in utf-8.  Let's make sure it's Python
        # unicode before we pass it to lxml.
        if isinstance(page_text, str):
            try:
                page_text = page_text.decode('utf-8')
            except UnicodeDecodeError:
                # XXX should we pass here?  if so, please replace this comment with why
                # maybe the error handling on xinha_to_wicked should go here
                pass 

        clean_text = self._clean_html(page_text)
        #XXX here we clean the isempty attributes that xinha puts on external links
        #this can interfere with creating wicked links
        doc = fromstring(clean_text)
        for el in _find_external_links(doc):
            if el.get('isempty', u''):
                del el.attrib['isempty']
        if isinstance(clean_text, unicode):
            clean_text = tostring(doc, encoding=unicode)
        else:
            clean_text = tostring(doc, encoding='utf-8')
        #XXX will for sure remove this when xinha is upgraded

        try:
            text = xinha_to_wicked(clean_text)
        except UnicodeDecodeError, e:
            self._bad_text = clean_text
            error_string = e.object[e.start:e.end+1]
            self.addPortalStatusMessage(u'The following text contains unsupported characters between characters %s and %s: "%s" (%s)\nPlease change this text before saving.' % (
                    e.start, e.end+1, error_string.decode('utf-8', 'replace'), repr(error_string)))
            return