コード例 #1
0
ファイル: PageComment2.py プロジェクト: 130s/roswiki
def sendNotification(pg, comtext, comment, emails, email_lang, trivial):
    
    from MoinMoin import util, user, mail
    request = Globs.macro.request
    
    _ = lambda s, formatted=True, r=request, l=email_lang: r.getText(s, formatted=formatted, lang=l)

    mailBody = _("Dear Wiki user,\n\n"
        'You have subscribed to a wiki page or wiki category on "%(sitename)s" for change notification.\n\n'
        "The following page has been changed by %(editor)s:\n"
        "%(pagelink)s\n\n", formatted=False) % {
            'editor': pg.uid_override or user.getUserIdentification(request),
            'pagelink': pg.request.getQualifiedURL(pg.url(request)),
            'sitename': pg.cfg.sitename or request.getBaseURL(),
    }

    if comment:
        mailBody = mailBody + \
            _("The comment on the change is:\n%(comment)s\n\n", formatted=False) % {'comment': comment}

    # append comment text
    if comtext:
        mailBody = mailBody + "%s\n%s\n" % (("-" * 78), comtext)
    
    return mail.sendmail.sendmail(request, emails,
        _('[%(sitename)s] %(trivial)sUpdate of "%(pagename)s" by %(username)s', formatted=False) % {
            'trivial' : (trivial and _("Trivial ", formatted=False)) or "",
            'sitename': pg.cfg.sitename or "Wiki",
            'pagename': pg.page_name,
            'username': pg.uid_override or user.getUserIdentification(request),
        },
        mailBody, mail_from=pg.cfg.mail_from)
コード例 #2
0
ファイル: notification.py プロジェクト: Glottotopia/aagd
def attachment_added(request, _, page_name, attach_name, attach_size):
    """Formats a message used to notify about new attachments

    @param _: a gettext function
    @return: a dict with notification data

    """
    data = {}

    data['subject'] = _("[%(sitename)s] New attachment added to page %(pagename)s") % {
                'pagename': page_name,
                'sitename': request.cfg.sitename or request.url_root,
                }

    data['text'] = _("Dear Wiki user,\n\n"
    'You have subscribed to a wiki page "%(page_name)s" for change notification. '
    "An attachment has been added to that page by %(editor)s. "
    "Following detailed information is available:\n\n"
    "Attachment name: %(attach_name)s\n"
    "Attachment size: %(attach_size)s\n") % {
        'editor': user.getUserIdentification(request),
        'page_name': page_name,
        'attach_name': attach_name,
        'attach_size': attach_size,
    }

    data['editor'] = user.getUserIdentification(request)
    data['page_name'] = page_name
    data['attach_size'] = attach_size
    data['attach_name'] = attach_name

    return data
コード例 #3
0
ファイル: notification.py プロジェクト: happytk/moin
def attachment_removed(request, _, page_name, attach_name, attach_size):
    """Formats a message used to notify about removed attachments

    @param _: a gettext function
    @return: a dict with notification data

    """
    data = {}

    data["subject"] = _("[%(sitename)s] Removed attachment from page %(pagename)s") % {
        "pagename": page_name,
        "sitename": request.cfg.sitename or request.url_root,
    }

    data["text"] = _(
        "Dear Wiki user,\n\n"
        'You have subscribed to a wiki page "%(page_name)s" for change notification. '
        "An attachment has been removed from that page by %(editor)s. "
        "Following detailed information is available:\n\n"
        "Attachment name: %(attach_name)s\n"
        "Attachment size: %(attach_size)s\n"
    ) % {
        "editor": user.getUserIdentification(request),
        "page_name": page_name,
        "attach_name": attach_name,
        "attach_size": attach_size,
    }

    data["editor"] = user.getUserIdentification(request)
    data["page_name"] = page_name
    data["attach_size"] = attach_size
    data["attach_name"] = attach_name

    return data
コード例 #4
0
ファイル: notification.py プロジェクト: aahlad/soar
def attachment_removed(request, _, page_name, attach_name, attach_size):
    """Formats a message used to notify about removed attachments

    @param _: a gettext function
    @return: a dict with notification data

    """
    data = {}

    data['subject'] = _(
        "[%(sitename)s] Removed attachment from page %(pagename)s") % {
            'pagename': page_name,
            'sitename': request.cfg.sitename or request.url_root,
        }

    data['text'] = _(
        "Dear Wiki user,\n\n"
        'You have subscribed to a wiki page "%(page_name)s" for change notification. '
        "An attachment has been removed from that page by %(editor)s. "
        "Following detailed information is available:\n\n"
        "Attachment name: %(attach_name)s\n"
        "Attachment size: %(attach_size)s\n") % {
            'editor': user.getUserIdentification(request),
            'page_name': page_name,
            'attach_name': attach_name,
            'attach_size': attach_size,
        }

    data['editor'] = user.getUserIdentification(request)
    data['page_name'] = page_name
    data['attach_size'] = attach_size
    data['attach_name'] = attach_name

    return data
コード例 #5
0
    def _sendNotification(self, comment, emails, email_lang, revisions, trivial):
        """
        Send notification email for a single language.
        @param comment: editor's comment given when saving the page
        @param emails: list of email addresses
        @param email_lang: language of emails
        @param revisions: revisions of this page
        @param trivial: the change is marked as trivial
        @rtype: int
        @return: sendmail result
        """
        _ = lambda s, formatted=True, r=self.request, l=email_lang: r.getText(s, formatted=formatted, lang=l)

        mailBody = _("Dear Wiki user,\n\n"
            'You have subscribed to a wiki page or wiki category on "%(sitename)s" for change notification.\n\n'
            "The following page has been changed by %(editor)s:\n"
            "%(pagelink)s\n\n", formatted=False) % {
                'editor': self.uid_override or user.getUserIdentification(self.request),
                'pagelink': self.request.getQualifiedURL(self.url(self.request)),
                'sitename': self.cfg.sitename or self.request.getBaseURL(),
        }

        if comment:
            mailBody = mailBody + \
                _("The comment on the change is:\n%(comment)s\n\n", formatted=False) % {'comment': comment}

        # append a diff (or append full page text if there is no diff)
        if len(revisions) < 2:
            mailBody = mailBody + \
                _("New page:\n", formatted=False) + \
                self.get_raw_body()
        else:
            lines = wikiutil.pagediff(self.request, self.page_name, revisions[1],
                                      self.page_name, revisions[0])
            
            if lines:
                mailBody = mailBody + "%s\n%s\n" % (("-" * 78), '\n'.join(lines))
            else:
                mailBody = mailBody + _("No differences found!\n", formatted=False)
        
        return util.mail.sendmail(self.request, emails,
            _('[%(sitename)s] %(trivial)sUpdate of "%(pagename)s" by %(username)s', formatted=False) % {
                'trivial' : (trivial and _("Trivial ", formatted=False)) or "",
                'sitename': self.cfg.sitename or "Wiki",
                'pagename': self.page_name,
                'username': self.uid_override or user.getUserIdentification(self.request),
            },
            mailBody, mail_from=self.cfg.mail_from)
コード例 #6
0
ファイル: emailnotify.py プロジェクト: steveyen/moingo
def prep_page_changed_mail(request, page, comment, email_lang, revisions, trivial):
    """ Prepare information required for email notification about page change

    @param page: the modified page instance
    @param comment: editor's comment given when saving the page
    @param email_lang: language of email
    @param revisions: revisions of this page (newest first!)
    @param trivial: the change is marked as trivial
    @return: dict with email title and body
    @rtype: dict

    """
    change = notification.page_change_message("page_changed", request, page, email_lang, comment=comment, revisions=revisions)
    _ = lambda text: request.getText(text, lang=email_lang)

    if len(revisions) >= 2:
        querystr = {'action': 'diff',
                    'rev2': str(revisions[0]),
                    'rev1': str(revisions[1])}
    else:
        querystr = {}

    pagelink = "%(link)s\n\n" % {'link': notification.page_link(request, page, querystr)}

    subject = _('[%(sitename)s] %(trivial)sUpdate of "%(pagename)s" by %(username)s') % {
            'trivial': (trivial and _("Trivial ")) or "",
            'sitename': page.cfg.sitename or "Wiki",
            'pagename': page.page_name,
            'username': page.uid_override or user.getUserIdentification(request),
        }

    return {'subject': subject, 'text': change['text'] + pagelink + change['diff']}
コード例 #7
0
def _attachment_changed(request, _, page_name, attach_name, attach_size,
                        change):
    """Formats a message used to notify about new / removed attachments

    @param _: a gettext function
    @return: a dict with notification data
    """
    cfg = request.cfg
    pagename = page_name
    sitename = cfg.sitename or request.url_root
    editor = user.getUserIdentification(request)
    data = {}
    data['editor'] = editor
    data['page_name'] = page_name
    data['attach_size'] = attach_size
    data['attach_name'] = attach_name
    if change == "added":
        data['subject'] = _(cfg.mail_notify_att_added_subject) % locals()
        data['text'] = _(cfg.mail_notify_att_added_intro) % locals()
    elif change == "removed":
        data['subject'] = _(cfg.mail_notify_att_removed_subject) % locals()
        data['text'] = _(cfg.mail_notify_att_removed_intro) % locals()
    else:
        raise UnknownChangeType()
    return data
コード例 #8
0
    def collectpackage(self, pagelist, fileobject, pkgname="", include_attachments=False):
        """ Expects a list of pages as an argument, and fileobject to be an open
        file object, which a zipfile will get written to.

        @param pagelist: pages to package
        @param fileobject: open file object to write to
        @param pkgname: optional file name, to prevent self packaging
        @rtype: string or None
        @return: error message, if one happened
        @rtype: boolean
        @param include_attachments: True if you want attachments collected
        """
        _ = self.request.getText
        COMPRESSION_LEVEL = zipfile.ZIP_DEFLATED

        pages = []
        for pagename in pagelist:
            pagename = wikiutil.normalize_pagename(pagename, self.request.cfg)
            if pagename:
                page = Page(self.request, pagename)
                if page.exists() and self.request.user.may.read(pagename):
                    pages.append(page)
        if not pages:
            return (_('No pages like "%s"!') % wikiutil.escape(pagelist))

        # Set zipfile output
        zf = zipfile.ZipFile(fileobject, "w", COMPRESSION_LEVEL)

        cnt = 0
        userid = user.getUserIdentification(self.request)
        script = [packLine(['MoinMoinPackage', '1']), ]

        for page in pages:
            cnt += 1
            files = _get_files(self.request, page.page_name)
            script.append(packLine(["AddRevision", str(cnt), page.page_name, userid, "Created by the PackagePages action."]))

            timestamp = wikiutil.version2timestamp(page.mtime_usecs())

            # avoid getting strange exceptions from zipfile in case of pre-1980 timestamps
            nineteeneighty = (10 * 365 + 3) * 24 * 3600 # 1970 + 10y + 3d
            timestamp = max(nineteeneighty, timestamp) # zip can not store timestamps before 1980

            zi = zipfile.ZipInfo(filename=str(cnt), date_time=datetime.fromtimestamp(timestamp).timetuple()[:6])
            zi.compress_type = COMPRESSION_LEVEL
            zf.writestr(zi, page.get_raw_body().encode("utf-8"))
            if include_attachments:
                for attname in files:
                    if attname != pkgname:
                        cnt += 1
                        zipname = "%d_attachment" % cnt
                        script.append(packLine(["AddAttachment", zipname, attname, page.page_name, userid, "Created by the PackagePages action."]))
                        filename = AttachFile.getFilename(self.request, page.page_name, attname)
                        zf.write(filename, zipname)
        script += [packLine(['Print', 'Thank you for using PackagePages!'])]

        zf.writestr(MOIN_PACKAGE_FILE, u"\n".join(script).encode("utf-8"))
        zf.close()
コード例 #9
0
def sendNotification(pg, comtext, comment, emails, email_lang, trivial):

    from MoinMoin import util, user
    request = Globs.macro.request

    _ = lambda s, formatted=True, r=request, l=email_lang: r.getText(
        s, formatted=formatted, lang=l)

    mailBody = _(
        "Dear Wiki user,\n\n"
        'You have subscribed to a wiki page or wiki category on "%(sitename)s" for change notification.\n\n'
        "The following page has been changed by %(editor)s:\n"
        "%(pagelink)s\n\n",
        formatted=False) % {
            'editor': pg.uid_override or user.getUserIdentification(request),
            'pagelink': pg.request.getQualifiedURL(pg.url(request)),
            'sitename': pg.cfg.sitename or request.getBaseURL(),
        }

    if comment:
        mailBody = mailBody + \
            _("The comment on the change is:\n%(comment)s\n\n", formatted=False) % {'comment': comment}

    # append comment text
    if comtext:
        mailBody = mailBody + "%s\n%s\n" % (("-" * 78), comtext)

    return util.mail.sendmail(
        request,
        emails,
        _('[%(sitename)s] %(trivial)sUpdate of "%(pagename)s" by %(username)s',
          formatted=False) %
        {
            'trivial': (trivial and _("Trivial ", formatted=False)) or "",
            'sitename': pg.cfg.sitename or "Wiki",
            'pagename': pg.page_name,
            'username': pg.uid_override or user.getUserIdentification(request),
        },
        mailBody,
        mail_from=pg.cfg.mail_from)
コード例 #10
0
def prep_page_changed_mail(request, page, comment, email_lang, revisions,
                           trivial):
    """ Prepare information required for email notification about page change

    @param page: the modified page instance
    @param comment: editor's comment given when saving the page
    @param email_lang: language of email
    @param revisions: revisions of this page (newest first!)
    @param trivial: the change is marked as trivial
    @return: dict with email title and body
    @rtype: dict

    """
    change = notification.page_change_message("page_changed",
                                              request,
                                              page,
                                              email_lang,
                                              comment=comment,
                                              revisions=revisions)
    _ = lambda text: request.getText(text, lang=email_lang)

    if len(revisions) >= 2:
        querystr = {
            'action': 'diff',
            'rev2': str(revisions[0]),
            'rev1': str(revisions[1])
        }
    else:
        querystr = {}

    pagelink = "%(link)s\n\n" % {
        'link': notification.page_link(request, page, querystr)
    }

    subject = _(
        '[%(sitename)s] %(trivial)sUpdate of "%(pagename)s" by %(username)s'
    ) % {
        'trivial': (trivial and _("Trivial ")) or "",
        'sitename': page.cfg.sitename or "Wiki",
        'pagename': page.page_name,
        'username': page.uid_override or user.getUserIdentification(request),
    }

    if change.has_key('comment'):
        comment = _("Comment:") + "\n" + change['comment'] + "\n\n"
    else:
        comment = ''

    return {
        'subject': subject,
        'text': change['text'] + pagelink + comment + change['diff']
    }
コード例 #11
0
def prep_page_changed_mail(request, page, comment, email_lang, revisions,
                           trivial=False, change_type="page_changed",
                           old_page=None):
    """ Prepare information required for email notification about page change

    @param page: the modified page instance
    @param comment: editor's comment given when saving the page
    @param email_lang: language of email
    @param revisions: revisions of this page (newest first!)
    @param trivial: the change is marked as trivial
    @return: dict with email title and body
    @rtype: dict

    """
    old_name = old_page and old_page.page_name or None  # for rename
    change = notification.page_change_message(change_type, request, page, email_lang,
                                              comment=comment, revisions=revisions, trivial=trivial,
                                              old_name=old_name)
    _ = lambda text: request.getText(text, lang=email_lang)
    cfg = request.cfg
    intro = change['text']
    diff = change['diff']
    subject = change['subject']

    if change.has_key('comment'):
        comment = _("Comment:") + "\n" + change['comment'] + "\n\n"
    else:
        comment = ''

    diff_revs = None
    if change_type == "page_changed" and len(revisions) >= 2:
        diff_revs = revisions[1], revisions[0]
    elif change_type == "page_deleted" and len(revisions) >= 1:
        diff_revs = revisions[0], revisions[0] + 1

    if diff_revs:
        querystr = {'action': 'diff', 'rev1': str(diff_revs[0]), 'rev2': str(diff_revs[1])}
    else:
        querystr = {}

    # links to diff or to page (if only 1 rev):
    difflink = request.getQualifiedURL(page.url(request, querystr))
    # always links to page:
    pagelink = request.getQualifiedURL(page.url(request))

    sitename = page.cfg.sitename or "Wiki"
    pagename = page.page_name
    username = page.uid_override or user.getUserIdentification(request)

    text = _(cfg.mail_notify_page_text) % locals()
    return {'subject': subject, 'text': text}
コード例 #12
0
ファイル: test_packages.py プロジェクト: Glottotopia/aagd
 def create_package(self, script, page=None):
     # creates the package example zip file
     userid = user.getUserIdentification(self.request)
     COMPRESSION_LEVEL = zipfile.ZIP_DEFLATED
     zip_file = tempfile.mkstemp(suffix='.zip')[1]
     zf = zipfile.ZipFile(zip_file, "w", COMPRESSION_LEVEL)
     if page:
         timestamp = wikiutil.version2timestamp(page.mtime_usecs())
         zi = zipfile.ZipInfo(filename="1", date_time=datetime.fromtimestamp(timestamp).timetuple()[:6])
         zi.compress_type = COMPRESSION_LEVEL
         zf.writestr(zi, page.get_raw_body().encode("utf-8"))
     zf.writestr("1_attachment", "sample attachment")
     zf.writestr(MOIN_PACKAGE_FILE, script.encode("utf-8"))
     zf.close()
     return zip_file
コード例 #13
0
    def _user_variable(self):
        """
        If user has a profile return the user name from the profile
        else return the remote address or "<unknown>"

        If the user name contains spaces it is wiki quoted to allow
        links to the wiki user homepage (if one exists).
        
        @rtype: string
        @return: wiki freelink to user's homepage or remote address
        """
        username = self.request.user.name
        if username and self.cfg.allow_extended_names and \
                username.count(' ') and Page(self.request, username).exists():
            username = '******' % username
        return user.getUserIdentification(self.request, username)
コード例 #14
0
 def create_package(self, script, page=None):
     # creates the package example zip file
     userid = user.getUserIdentification(self.request)
     COMPRESSION_LEVEL = zipfile.ZIP_DEFLATED
     zip_file = tempfile.mkstemp(suffix='.zip')[1]
     zf = zipfile.ZipFile(zip_file, "w", COMPRESSION_LEVEL)
     if page:
         timestamp = wikiutil.version2timestamp(page.mtime_usecs())
         zi = zipfile.ZipInfo(
             filename="1",
             date_time=datetime.fromtimestamp(timestamp).timetuple()[:6])
         zi.compress_type = COMPRESSION_LEVEL
         zf.writestr(zi, page.get_raw_body().encode("utf-8"))
     zf.writestr("1_attachment", "sample attachment")
     zf.writestr(MOIN_PACKAGE_FILE, script.encode("utf-8"))
     zf.close()
     return zip_file
コード例 #15
0
def _attachment_changed(request, _, page_name, attach_name, attach_size, change):
    """Formats a message used to notify about new / removed attachments

    @param _: a gettext function
    @return: a dict with notification data
    """
    cfg = request.cfg
    pagename = page_name
    sitename = cfg.sitename or request.url_root
    editor = user.getUserIdentification(request)
    data = {}
    data['editor'] = editor
    data['page_name'] = page_name
    data['attach_size'] = attach_size
    data['attach_name'] = attach_name
    if change == "added":
        data['subject'] = _(cfg.mail_notify_att_added_subject) % locals()
        data['text'] = _(cfg.mail_notify_att_added_intro) % locals()
    elif change == "removed":
        data['subject'] = _(cfg.mail_notify_att_removed_subject) % locals()
        data['text'] = _(cfg.mail_notify_att_removed_intro) % locals()
    else:
        raise UnknownChangeType()
    return data
コード例 #16
0
def page_change_message(msgtype, request, page, lang, **kwargs):
    """Prepare a notification text for a page change of given type

    @param msgtype: a type of message to send (page_changed, page_renamed, ...)
    @type msgtype: str or unicode
    @param **kwargs: a dictionary of additional parameters, which depend on msgtype

    @return: dictionary containing data about the changed page
    @rtype: dict

    """
    _ = lambda text: request.getText(text, lang=lang)
    cfg = request.cfg
    data = {}
    data['revision'] = str(page.getRevList()[0])
    data['page_name'] = pagename = page.page_name
    sitename = page.cfg.sitename or request.url_root
    data['editor'] = editor = username = page.uid_override or user.getUserIdentification(request)

    trivial = (kwargs.get('trivial') and _("Trivial ")) or ""

    if msgtype == "page_changed":
        data['subject'] = _(cfg.mail_notify_page_changed_subject) % locals()
        data['text'] = _(cfg.mail_notify_page_changed_intro) % locals()

        revisions = kwargs['revisions']
        # append a diff (or append full page text if there is no diff)
        if len(revisions) < 2:
            data['diff'] = _("New page:\n") + page.get_raw_body()
        else:
            lines = wikiutil.pagediff(request, page.page_name, revisions[1],
                                      page.page_name, revisions[0])
            if lines:
                data['diff'] = '\n'.join(lines)
            else:
                data['diff'] = _("No differences found!\n")

    elif msgtype == "page_deleted":
        data['subject'] = _(cfg.mail_notify_page_deleted_subject) % locals()
        data['text'] = _(cfg.mail_notify_page_deleted_intro) % locals()

        revisions = kwargs['revisions']
        latest_existing = revisions[0]
        lines = wikiutil.pagediff(request, page.page_name, latest_existing,
                                  page.page_name, latest_existing + 1)
        if lines:
            data['diff'] = '\n'.join(lines)
        else:
            data['diff'] = _("No differences found!\n")

    elif msgtype == "page_renamed":
        data['old_name'] = oldname = kwargs['old_name']
        data['subject'] = _(cfg.mail_notify_page_renamed_subject) % locals()
        data['text'] = _(cfg.mail_notify_page_renamed_intro) % locals()
        data['diff'] = ''

    else:
        raise UnknownChangeType()

    if 'comment' in kwargs and kwargs['comment']:
        data['comment'] = kwargs['comment']

    return data
コード例 #17
0
ファイル: notification.py プロジェクト: happytk/moin
def page_change_message(msgtype, request, page, lang, **kwargs):
    """Prepare a notification text for a page change of given type

    @param msgtype: a type of message to send (page_changed, page_renamed, ...)
    @type msgtype: str or unicode
    @param **kwargs: a dictionary of additional parameters, which depend on msgtype

    @return: dictionary containing data about the changed page
    @rtype: dict

    """
    _ = lambda text: request.getText(text, lang=lang)
    changes = {"page_name": page.page_name, "revision": str(page.getRevList()[0])}

    if msgtype == "page_changed":
        revisions = kwargs["revisions"]

    if msgtype == "page_changed":
        changes["text"] = _(
            "Dear Wiki user,\n\n"
            'You have subscribed to a wiki page or wiki category on "%(sitename)s" for change notification.\n\n'
            'The "%(pagename)s" page has been changed by %(editor)s:\n'
        ) % {
            "pagename": page.page_name,
            "editor": page.uid_override or user.getUserIdentification(request),
            "sitename": page.cfg.sitename or request.url_root,
        }

        # append a diff (or append full page text if there is no diff)
        if len(revisions) < 2:
            changes["diff"] = _("New page:\n") + page.get_raw_body()
        else:
            lines = wikiutil.pagediff(request, page.page_name, revisions[1], page.page_name, revisions[0])
            if lines:
                changes["diff"] = "\n".join(lines)
            else:
                changes["diff"] = _("No differences found!\n")

    elif msgtype == "page_deleted":
        changes["text"] = _(
            "Dear wiki user,\n\n"
            'You have subscribed to a wiki page "%(sitename)s" for change notification.\n\n'
            'The page "%(pagename)s" has been deleted by %(editor)s:\n\n'
        ) % {
            "pagename": page.page_name,
            "editor": page.uid_override or user.getUserIdentification(request),
            "sitename": page.cfg.sitename or request.url_root,
        }

    elif msgtype == "page_renamed":
        changes["text"] = _(
            "Dear wiki user,\n\n"
            'You have subscribed to a wiki page "%(sitename)s" for change notification.\n\n'
            'The page "%(pagename)s" has been renamed from "%(oldname)s" by %(editor)s:\n'
        ) % {
            "editor": page.uid_override or user.getUserIdentification(request),
            "pagename": page.page_name,
            "sitename": page.cfg.sitename or request.url_root,
            "oldname": kwargs["old_name"],
        }

        changes["old_name"] = kwargs["old_name"]

    else:
        raise UnknownChangeType()

    changes["editor"] = page.uid_override or user.getUserIdentification(request)
    if "comment" in kwargs and kwargs["comment"]:
        changes["comment"] = kwargs["comment"]

    return changes
コード例 #18
0
ファイル: emailnotify.py プロジェクト: yuanbosdu/baikehow
def prep_page_changed_mail(request,
                           page,
                           comment,
                           email_lang,
                           revisions,
                           trivial=False,
                           change_type="page_changed",
                           old_page=None):
    """ Prepare information required for email notification about page change

    @param page: the modified page instance
    @param comment: editor's comment given when saving the page
    @param email_lang: language of email
    @param revisions: revisions of this page (newest first!)
    @param trivial: the change is marked as trivial
    @return: dict with email title and body
    @rtype: dict

    """
    old_name = old_page and old_page.page_name or None  # for rename
    change = notification.page_change_message(change_type,
                                              request,
                                              page,
                                              email_lang,
                                              comment=comment,
                                              revisions=revisions,
                                              trivial=trivial,
                                              old_name=old_name)
    _ = lambda text: request.getText(text, lang=email_lang)
    cfg = request.cfg
    intro = change['text']
    diff = change['diff']
    subject = change['subject']

    if change.has_key('comment'):
        comment = _("Comment:") + "\n" + change['comment'] + "\n\n"
    else:
        comment = ''

    diff_revs = None
    if change_type == "page_changed" and len(revisions) >= 2:
        diff_revs = revisions[1], revisions[0]
    elif change_type == "page_deleted" and len(revisions) >= 1:
        diff_revs = revisions[0], revisions[0] + 1

    if diff_revs:
        querystr = {
            'action': 'diff',
            'rev1': str(diff_revs[0]),
            'rev2': str(diff_revs[1])
        }
    else:
        querystr = {}

    # links to diff or to page (if only 1 rev):
    difflink = request.getQualifiedURL(page.url(request, querystr))
    # always links to page:
    pagelink = request.getQualifiedURL(page.url(request))

    sitename = page.cfg.sitename or "Wiki"
    pagename = page.page_name
    username = page.uid_override or user.getUserIdentification(request)

    text = _(cfg.mail_notify_page_text) % locals()
    return {'subject': subject, 'text': text}
コード例 #19
0
ファイル: PageComment3.py プロジェクト: 130s/roswiki
def showcomment():
    
    request = Globs.macro.request
    _ = request.getText
    
    from MoinMoin import user

    commentlist = fetchcomments()
    showCommentsFlag = False
    showCommentsFlag = True
    
    for item in commentlist:
      if item['name'] == user.getUserIdentification(request):
        showCommentsFlag = True
    
    if Params.newerfirst:
        commentlist.reverse()
    
    html = []
    cur_index = 0
    
    if Params.articleview:
        cellstyle = u'border-width: 0px; background-color: #eeeeee; vertical-align: top; font-size: 9pt;'
        htmlcomment = [
            u'<tr><td colspan="5" class="commenttext" style="%(cellstyle)s">%(text)s</td></tr>',
            u'<tr><td colspan="5" class="commentauthor" style="text-align: right; border-width: 0px; font-size: 8pt; color: #999999;">Posted by <b>%(author)s</b> %(icon)s at %(date)s %(delform)s</td></tr>',
            u'<tr><td colspan="5" class="commentblankline" style="border-width: 0px; height: 20px;"></td></tr>',
            ]
            
    else:
        cellstyle = u'border-width: 0px; border-top-width: 1px; vertical-align: top; font-size: 9pt;'
        htmlcomment = [
            u'<tr><td class="commenticon" style="%(cellstyle)s">%(icon)s</td>',
            u'<td class="commentauthor" style="%(cellstyle)s">%(author)s</td>',
            u'<td style="%(cellstyle)s width: 10px;">&nbsp;</td>',
            u'<td class="commenttext" style="%(cellstyle)s">%(rating)s</td>',
            u'<td class="commenttext" style="%(cellstyle)s">%(text)s</td>',
            u'<td class="commentdate" style="%(cellstyle)s text-align: right; font-size: 8pt; " nowrap>%(date)s%(delform)s</td></tr>',
            ]
    
    htmlcommentdel_admin = [
        u' <font style="font-size: 8pt;">',
        u'<a style="color: #aa0000;" href="javascript: requesttodeleteadmin%(formid)d(document.delform%(formid)d, \'%(key)s\');" title="%(msg)s">X</a>',
        u'</font>',
        ]
    htmlcommentdel_guest = [
        u' <font style="font-size: 8pt;">',
        u'<a style="color: #aa0000;" href="javascript: requesttodelete%(formid)d(document.delform%(formid)d, \'%(key)s\');" title="%(msg)s">X</a>',
        u'</font>',
        ]

    for item in commentlist:
##        if Globs.admin or (item['loginuser'] and request.user.valid and request.user.name == item['name']):
        if Globs.admin:
            htmlcommentdel = htmlcommentdel_admin
        elif item['loginuser']:
            htmlcommentdel = ''
        else:
            htmlcommentdel = ''
##            htmlcommentdel = htmlcommentdel_guest

        if htmlcommentdel:
          htmlcommentdel = u'\n'.join(htmlcommentdel) % {
              'formid': Globs.formid, 
              'key': item['key'],
              'msg': _('Delete')
              }

        rating = converttext(item['rating'])
        text = converttext(item['text'], item['markup'])
        if not showCommentsFlag:
          text = "<div id=commentp_%(key)s onclick='javascript:document.getElementById(\"comment_%(key)s\").style.display=\"inline\";javascript:document.getElementById(\"commentr_%(key)s\").style.display=\"inline\";document.getElementById(\"commentp_%(key)s\").style.display=\"none\";'><nobr><font color=green>comment suppressed</font> Click here to show</nobr></div><div id=comment_%(key)s style='display:none'>%(text)s</div>" % {'text' : text, 'key' : item['key']}
          rating = "<div id=commentr_%(key)s style='display:none'>%(rating)s</div>" %  {'rating' : rating, 'key' : item['key']}
          

        htmlcommentitem = u'\n'.join(htmlcomment) % {
            'cellstyle': cellstyle,
            'icon': getsmiley(item['icon']),
            'author': converttext(item['name']),
            'rating': rating,
            'text': text,
            'date': item['date'],
            'delform': htmlcommentdel
            }
        
        html.append(htmlcommentitem)
    
    return u'\n'.join(html)
コード例 #20
0
ファイル: notification.py プロジェクト: aahlad/soar
def page_change_message(msgtype, request, page, lang, **kwargs):
    """Prepare a notification text for a page change of given type

    @param msgtype: a type of message to send (page_changed, page_renamed, ...)
    @type msgtype: str or unicode
    @param **kwargs: a dictionary of additional parameters, which depend on msgtype

    @return: dictionary containing data about the changed page
    @rtype: dict

    """
    _ = lambda text: request.getText(text, lang=lang)
    changes = {
        'page_name': page.page_name,
        'revision': str(page.getRevList()[0])
    }

    if msgtype == "page_changed":
        revisions = kwargs['revisions']

    if msgtype == "page_changed":
        changes['text'] = _(
            "Dear Wiki user,\n\n"
            'You have subscribed to a wiki page or wiki category on "%(sitename)s" for change notification.\n\n'
            'The "%(pagename)s" page has been changed by %(editor)s:\n') % {
                'pagename': page.page_name,
                'editor': page.uid_override
                or user.getUserIdentification(request),
                'sitename': page.cfg.sitename or request.url_root,
            }

        # append a diff (or append full page text if there is no diff)
        if len(revisions) < 2:
            changes['diff'] = _("New page:\n") + page.get_raw_body()
        else:
            lines = wikiutil.pagediff(request, page.page_name, revisions[1],
                                      page.page_name, revisions[0])
            if lines:
                changes['diff'] = '\n'.join(lines)
            else:
                changes['diff'] = _("No differences found!\n")

    elif msgtype == "page_deleted":
        changes['text'] = _(
            "Dear wiki user,\n\n"
            'You have subscribed to a wiki page "%(sitename)s" for change notification.\n\n'
            'The page "%(pagename)s" has been deleted by %(editor)s:\n\n') % {
                'pagename': page.page_name,
                'editor': page.uid_override
                or user.getUserIdentification(request),
                'sitename': page.cfg.sitename or request.url_root,
            }

    elif msgtype == "page_renamed":
        changes['text'] = _(
            "Dear wiki user,\n\n"
            'You have subscribed to a wiki page "%(sitename)s" for change notification.\n\n'
            'The page "%(pagename)s" has been renamed from "%(oldname)s" by %(editor)s:\n'
        ) % {
            'editor': page.uid_override or user.getUserIdentification(request),
            'pagename': page.page_name,
            'sitename': page.cfg.sitename or request.url_root,
            'oldname': kwargs['old_name']
        }

        changes['old_name'] = kwargs['old_name']

    else:
        raise UnknownChangeType()

    changes['editor'] = page.uid_override or user.getUserIdentification(
        request)
    if 'comment' in kwargs and kwargs['comment']:
        changes['comment'] = kwargs['comment']

    return changes
コード例 #21
0
def execute(pagename, request):
    pagename_header = "%s-%s.zip" % (pagename, datetime.now().isoformat()[:10])
    pagename_header = pagename_header.encode("ascii", "ignore")

    request.content_type = "application/zip"
    request.headers["Content-Disposition"] = 'attachment; filename="%s"' % pagename_header

    args = values_to_form(request.values)

    try:
        args = args["args"][0]
    except (KeyError, IndexError):
        args = u""

    pagelist, metakeys, _ = metatable_parseargs(request, args, get_all_keys=True)

    renameDict = dict()

    for page in pagelist:
        metas = get_metas(request, page, ["gwikirename"], abs_attach=False, checkAccess=False)
        renameList = metas["gwikirename"]
        if renameList:
            renameDict[page] = renameList

    output = StringIO()
    zip = zipfile.ZipFile(output, "w", zipfile.ZIP_DEFLATED)

    userid = user.getUserIdentification(request)
    script = [packLine(["MoinMoinPackage", "1"])]
    counter = 0

    for pagename in pagelist:
        counter += 1
        page = Page(request, pagename)
        timestamp = wikiutil.version2timestamp(page.mtime_usecs())
        # Underlay pages are in epoch 0, zipfile in python 2.7 does
        # not support this.
        if not timestamp:
            pagefile, rev, exists = page.get_rev()
            if rev == 99999999:
                # We should never get here
                log.error("Page %s neither in pages or underlay, skipping." % (pagename))
                continue
            timestamp = os.path.getctime(pagefile)
        pagetext = page.get_raw_body().encode("utf-8")
        filename = str(counter)
        zinfo = zipfile.ZipInfo(filename=filename, date_time=datetime.fromtimestamp(timestamp).timetuple()[:6])
        zinfo.compress_type = zipfile.ZIP_DEFLATED
        zip.writestr(zinfo, pagetext)

        targetNameList = renameDict.get(pagename, [pagename])
        for targetName in targetNameList:
            script.append(packLine(["AddRevision", filename, targetName, userid, ""]))

        for attachment in _get_files(request, pagename):
            counter += 1
            sourcefile = AttachFile.getFilename(request, pagename, attachment)
            filename = str(counter) + "-attachment"
            zip.write(sourcefile, filename)
            script.append(packLine(["AddAttachment", filename, attachment, pagename, userid, ""]))

    zip.writestr(MOIN_PACKAGE_FILE, u"\n".join(script).encode("utf-8"))
    zip.close()

    request.write(output.getvalue())
コード例 #22
0
def page_change_message(msgtype, request, page, lang, **kwargs):
    """Prepare a notification text for a page change of given type

    @param msgtype: a type of message to send (page_changed, page_renamed, ...)
    @type msgtype: str or unicode
    @param **kwargs: a dictionary of additional parameters, which depend on msgtype

    @return: dictionary containing data about the changed page
    @rtype: dict

    """
    _ = lambda text: request.getText(text, lang=lang)
    cfg = request.cfg
    data = {}
    data['revision'] = str(page.getRevList()[0])
    data['page_name'] = pagename = page.page_name
    sitename = page.cfg.sitename or request.url_root
    data[
        'editor'] = editor = username = page.uid_override or user.getUserIdentification(
            request)

    trivial = (kwargs.get('trivial') and _("Trivial ")) or ""

    if msgtype == "page_changed":
        data['subject'] = _(cfg.mail_notify_page_changed_subject) % locals()
        data['text'] = _(cfg.mail_notify_page_changed_intro) % locals()

        revisions = kwargs['revisions']
        # append a diff (or append full page text if there is no diff)
        if len(revisions) < 2:
            data['diff'] = _("New page:\n") + page.get_raw_body()
        else:
            lines = wikiutil.pagediff(request, page.page_name, revisions[1],
                                      page.page_name, revisions[0])
            if lines:
                data['diff'] = '\n'.join(lines)
            else:
                data['diff'] = _("No differences found!\n")

    elif msgtype == "page_deleted":
        data['subject'] = _(cfg.mail_notify_page_deleted_subject) % locals()
        data['text'] = _(cfg.mail_notify_page_deleted_intro) % locals()

        revisions = kwargs['revisions']
        latest_existing = revisions[0]
        lines = wikiutil.pagediff(request, page.page_name, latest_existing,
                                  page.page_name, latest_existing + 1)
        if lines:
            data['diff'] = '\n'.join(lines)
        else:
            data['diff'] = _("No differences found!\n")

    elif msgtype == "page_renamed":
        data['old_name'] = oldname = kwargs['old_name']
        data['subject'] = _(cfg.mail_notify_page_renamed_subject) % locals()
        data['text'] = _(cfg.mail_notify_page_renamed_intro) % locals()
        data['diff'] = ''

    else:
        raise UnknownChangeType()

    if 'comment' in kwargs and kwargs['comment']:
        data['comment'] = kwargs['comment']

    return data
コード例 #23
0
def execute(pagename, request):
    pagename_header = '%s-%s.zip' % (pagename, datetime.now().isoformat()[:10])
    pagename_header = pagename_header.encode('ascii', 'ignore')

    request.content_type = 'application/zip'
    request.headers['Content-Disposition'] = \
        'attachment; filename="%s"' % pagename_header

    args = values_to_form(request.values)

    try:
        args = args['args'][0]
    except (KeyError, IndexError):
        args = u''

    pagelist, metakeys, _ = metatable_parseargs(request,
                                                args,
                                                get_all_keys=True)

    renameDict = dict()

    for page in pagelist:
        metas = get_metas(request,
                          page, ["gwikirename"],
                          abs_attach=False,
                          checkAccess=False)
        renameList = metas["gwikirename"]
        if renameList:
            renameDict[page] = renameList

    output = StringIO()
    zip = zipfile.ZipFile(output, "w", zipfile.ZIP_DEFLATED)

    userid = user.getUserIdentification(request)
    script = [
        packLine(['MoinMoinPackage', '1']),
    ]
    counter = 0

    for pagename in pagelist:
        counter += 1
        page = Page(request, pagename)
        timestamp = wikiutil.version2timestamp(page.mtime_usecs())
        # Underlay pages are in epoch 0, zipfile in python 2.7 does
        # not support this.
        if not timestamp:
            pagefile, rev, exists = page.get_rev()
            if rev == 99999999:
                # We should never get here
                log.error("Page %s neither in pages or underlay, skipping." %
                          (pagename))
                continue
            timestamp = os.path.getctime(pagefile)
        pagetext = page.get_raw_body().encode("utf-8")
        filename = str(counter)
        zinfo = zipfile.ZipInfo(
            filename=filename,
            date_time=datetime.fromtimestamp(timestamp).timetuple()[:6])
        zinfo.compress_type = zipfile.ZIP_DEFLATED
        zip.writestr(zinfo, pagetext)

        targetNameList = renameDict.get(pagename, [pagename])
        for targetName in targetNameList:
            script.append(
                packLine(["AddRevision", filename, targetName, userid, ""]))

        for attachment in _get_files(request, pagename):
            counter += 1
            sourcefile = AttachFile.getFilename(request, pagename, attachment)
            filename = str(counter) + "-attachment"
            zip.write(sourcefile, filename)
            script.append(
                packLine([
                    "AddAttachment", filename, attachment, pagename, userid, ""
                ]))

    zip.writestr(MOIN_PACKAGE_FILE, u"\n".join(script).encode("utf-8"))
    zip.close()

    request.write(output.getvalue())
コード例 #24
0
def showcomment():

    request = Globs.macro.request
    _ = request.getText

    from MoinMoin import user

    commentlist = fetchcomments()
    showCommentsFlag = False
    showCommentsFlag = True

    for item in commentlist:
        if item['name'] == user.getUserIdentification(request):
            showCommentsFlag = True

    if Params.newerfirst:
        commentlist.reverse()

    html = []
    cur_index = 0

    if Params.articleview:
        cellstyle = u'border-width: 0px; background-color: #eeeeee; vertical-align: top; font-size: 9pt;'
        htmlcomment = [
            u'<tr><td colspan="5" class="commenttext" style="%(cellstyle)s">%(text)s</td></tr>',
            u'<tr><td colspan="5" class="commentauthor" style="text-align: right; border-width: 0px; font-size: 8pt; color: #999999;">Posted by <b>%(author)s</b> %(icon)s at %(date)s %(delform)s</td></tr>',
            u'<tr><td colspan="5" class="commentblankline" style="border-width: 0px; height: 20px;"></td></tr>',
        ]

    else:
        cellstyle = u'border-width: 0px; border-top-width: 1px; vertical-align: top; font-size: 9pt;'
        htmlcomment = [
            u'<tr><td class="commenticon" style="%(cellstyle)s">%(icon)s</td>',
            u'<td class="commentauthor" style="%(cellstyle)s">%(author)s</td>',
            u'<td style="%(cellstyle)s width: 10px;">&nbsp;</td>',
            u'<td class="commenttext" style="%(cellstyle)s">%(rating)s</td>',
            u'<td class="commenttext" style="%(cellstyle)s">%(text)s</td>',
            u'<td class="commentdate" style="%(cellstyle)s text-align: right; font-size: 8pt; " nowrap>%(date)s%(delform)s</td></tr>',
        ]

    htmlcommentdel_admin = [
        u' <font style="font-size: 8pt;">',
        u'<a style="color: #aa0000;" href="javascript: requesttodeleteadmin%(formid)d(document.delform%(formid)d, \'%(key)s\');" title="%(msg)s">X</a>',
        u'</font>',
    ]
    htmlcommentdel_guest = [
        u' <font style="font-size: 8pt;">',
        u'<a style="color: #aa0000;" href="javascript: requesttodelete%(formid)d(document.delform%(formid)d, \'%(key)s\');" title="%(msg)s">X</a>',
        u'</font>',
    ]

    for item in commentlist:
        ##        if Globs.admin or (item['loginuser'] and request.user.valid and request.user.name == item['name']):
        if Globs.admin:
            htmlcommentdel = htmlcommentdel_admin
        elif item['loginuser']:
            htmlcommentdel = ''
        else:
            htmlcommentdel = ''


##            htmlcommentdel = htmlcommentdel_guest

        if htmlcommentdel:
            htmlcommentdel = u'\n'.join(htmlcommentdel) % {
                'formid': Globs.formid,
                'key': item['key'],
                'msg': _('Delete')
            }

        rating = converttext(item['rating'])
        text = converttext(item['text'], item['markup'])
        if not showCommentsFlag:
            text = "<div id=commentp_%(key)s onclick='javascript:document.getElementById(\"comment_%(key)s\").style.display=\"inline\";javascript:document.getElementById(\"commentr_%(key)s\").style.display=\"inline\";document.getElementById(\"commentp_%(key)s\").style.display=\"none\";'><nobr><font color=green>comment suppressed</font> Click here to show</nobr></div><div id=comment_%(key)s style='display:none'>%(text)s</div>" % {
                'text': text,
                'key': item['key']
            }
            rating = "<div id=commentr_%(key)s style='display:none'>%(rating)s</div>" % {
                'rating': rating,
                'key': item['key']
            }

        htmlcommentitem = u'\n'.join(htmlcomment) % {
            'cellstyle': cellstyle,
            'icon': getsmiley(item['icon']),
            'author': converttext(item['name']),
            'rating': rating,
            'text': text,
            'date': item['date'],
            'delform': htmlcommentdel
        }

        html.append(htmlcommentitem)

    return u'\n'.join(html)