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)
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
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
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
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)
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']}
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
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()
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)
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'] }
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}
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
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)
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
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
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
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}
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;"> </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)
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
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())
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
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())
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;"> </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)