Пример #1
0
    def save_comment(self):
        _ = self.macro.request.getText

        if get_input(self.macro, "do") != u"comment_add":
            # This is not a comment post do nothing
            return

        if get_cfg(self.macro, "comment_recaptcha", False):
            import captcha

            self.captcha = captcha.submit(
                get_input(self.macro, "recaptcha_challenge_field"),
                get_input(self.macro, "recaptcha_response_field"),
                get_cfg(self.macro, "comment_recaptcha_private_key"),
                self.macro.request.remote_addr,
            )

        self.get_comment()
        self.errors = self.errors_check()

        if not self.errors:  # Save the comment
            # Find out where to save the comment:
            if get_cfg(self.macro, "comment_moderate", True):
                page = Page(self.macro.request, get_cfg(self.macro, "comment_approval_page", "CommentsApproval"))
                comment_dir = page.getPagePath("", check_create=0)
            else:
                page = Page(self.macro.request, self.page_name)
                comment_dir = page.getPagePath("comments", check_create=1)

            now = datetime.now()
            random_str = "".join([choice(letters + digits) for i in range(20)])
            comment_file = "%s-%s.txt" % (now.strftime("%s"), random_str)
            file_name = os.path.join(comment_dir, comment_file)

            comment = self.comment
            comment["page"] = self.page_name
            comment["time"] = now
            if get_cfg(self.macro, "comment_store_addr", False):
                comment["remote_addr"] = self.macro.request.remote_addr

            write_comment(file_name, comment)

            if get_cfg(self.macro, "comment_moderate", True):
                self.msg = _("Your comment awaits moderation. Thank you.")
            else:
                self.msg = _("Your comment has been posted. Thank you.")

            # clean up the fields to display
            self.comment = {"user_name": "", "comment": "", "email": ""}
Пример #2
0
    def do_replaceunderlay(self, filename, pagename):
        """
        Overwrites underlay pages. Implementational detail: This needs to be
        kept in sync with the page class.

        @param filename: name of the file in the package
        @param pagename: page to be overwritten
        """
        page = Page(self.request, pagename)

        pagedir = page.getPagePath(use_underlay=1, check_create=1)

        revdir = os.path.join(pagedir, 'revisions')
        cfn = os.path.join(pagedir, 'current')

        revstr = '%08d' % 1
        if not os.path.exists(revdir):
            os.mkdir(revdir)

        currentf = open(cfn, 'w')
        currentf.write(revstr + "\n")
        currentf.close()

        pagefile = os.path.join(revdir, revstr)
        self._extractToFile(filename, pagefile)

        # Clear caches
        try:
            del self.request.cfg.DICTS_DATA
        except AttributeError:
            pass
        self.request.pages = {}
        caching.CacheEntry(self.request, 'wikidicts', 'dicts_groups', scope='wiki').remove()
        page.clean_acl_cache()
Пример #3
0
    def do_replaceunderlay(self, filename, pagename):
        """
        Overwrites underlay pages. Implementational detail: This needs to be
        kept in sync with the page class.

        @param filename: name of the file in the package
        @param pagename: page to be overwritten
        """
        page = Page(self.request, pagename)

        pagedir = page.getPagePath(use_underlay=1, check_create=1)

        revdir = os.path.join(pagedir, 'revisions')
        cfn = os.path.join(pagedir, 'current')

        revstr = '%08d' % 1
        if not os.path.exists(revdir):
            os.mkdir(revdir)

        currentf = open(cfn, 'w')
        currentf.write(revstr + "\n")
        currentf.close()

        pagefile = os.path.join(revdir, revstr)
        self._extractToFile(filename, pagefile)
Пример #4
0
def getAttachDir(request, pagename, create=0):
    """ Get directory where attachments for page `pagename` are stored. """
    if request.page and pagename == request.page.page_name:
        page = request.page # reusing existing page obj is faster
    else:
        page = Page(request, pagename)
    return page.getPagePath("attachments", check_create=create)
Пример #5
0
def getAttachDir(request, pagename, create=0):
    """ Get directory where attachments for page `pagename` are stored. """
    if request.page and pagename == request.page.page_name:
        page = request.page  # reusing existing page obj is faster
    else:
        page = Page(request, pagename)
    return page.getPagePath("attachments", check_create=create)
Пример #6
0
    def do_replaceunderlay(self, filename, pagename):
        """
        Overwrites underlay pages. Implementational detail: This needs to be
        kept in sync with the page class.

        @param filename: name of the file in the package
        @param pagename: page to be overwritten
        """
        page = Page(self.request, pagename)

        pagedir = page.getPagePath(use_underlay=1, check_create=1)

        revdir = os.path.join(pagedir, 'revisions')
        cfn = os.path.join(pagedir, 'current')

        revstr = '%08d' % 1
        if not os.path.exists(revdir):
            os.mkdir(revdir)

        currentf = open(cfn, 'w')
        currentf.write(revstr + "\n")
        currentf.close()

        pagefile = os.path.join(revdir, revstr)
        self._extractToFile(filename, pagefile)
Пример #7
0
    def approve_comment(self):
        _ = self.macro.request.getText

        # Source
        origin = os.path.join(self.approval_dir, self.get_input('file'))
        comment = read_comment( origin )

        # Destination
        page = Page(self.macro.request, comment['page'] )
        if not page.exists():
            self.msg.append(_('The page this comment was written for don\'t exist any more'))
            return

        dest_dir = page.getPagePath("comments", check_create=1)
        destination = os.path.join(dest_dir,self.get_input('file'))

        # Rename the file:
        os.rename(origin, destination)
        self.msg.append(_('Comment approved'))
Пример #8
0
    def __init__(self, macro):
        self.macro = macro
        self.page_name = get_cfg(macro, "comment_approval_page", "CommentsApproval")
        self.msg = []

        if self.page_name != macro.formatter.page.page_name:
            # It's mandatory to run the ApproveComments macro from the
            # comment_approval_page defined in the configuration
            return

        page = Page(macro.request, self.page_name)
        if not page.exists():
            raise ApproveError("You have to create the approval page!")
        self.approval_dir = page.getPagePath("", check_create=0)

        if macro.request.method == "POST":
            if get_input(macro, "do") == u"comment_delete":
                self.delete_comment()
            if get_input(macro, "do") == u"comment_approve":
                self.approve_comment()
Пример #9
0
    def __init__(self, macro ):
        self.macro = macro
        self.page_name = unicode(self.get_cfg('comment_approval_page',
                        'CommentsApproval'))
        self.msg = []

        if self.page_name != macro.formatter.page.page_name:
            # It's mandatory to run the ApproveComments macro from the
            # comment_approval_page defined in the configuration
            return

        page = Page(macro.request,self.page_name)
        if not page.exists():
            raise ApproveError('You have to create the approval page!')
        self.approval_dir = page.getPagePath('', check_create=0)

        if macro.request.request_method == 'POST':
            if self.get_input( 'do' ) == u'comment_delete':
                self.delete_comment()
            if self.get_input( 'do' ) == u'comment_approve':
                self.approve_comment()
Пример #10
0
def macro_CommentsAdmin(macro):
    '''
    This macro adds an administration functionality to the comments feature.
    It can be place anywhere, like for instance the wiki menu, and if the
    user is a SuperUser he will see the link to the comments approval page,
    with the total of comments waiting for approval.

    Usage:
        <<CommentsAdmin>>
    '''
    request = macro.request
    formatter = macro.formatter
    _ = macro.request.getText

    # Configuration:
    page_name = unicode(get_cfg(macro, 'comment_approval_page',
        'CommentsApproval'))
    page = Page(request,page_name)

    if not page.exists():
        raise ApproveError('You have to create the approval page! (%s)' % (
                page_name))
    approval_dir = page.getPagePath('', check_create=0)
    approval_url = wikiutil.quoteWikinameURL(page_name)

    if request.user.isSuperUser():
        # Get the number of comments waiting for approval
        files = glob.glob('%s/*.txt' % approval_dir)
        total_waiting = len(files)

        html = u'<a href="%s">%s (%s)</a>' % (
            approval_url, _('Pending Comments'), total_waiting)
    else:
        html = u''

    try:
        return formatter.rawHTML(html)
    except:
        return formatter.escapedText('')
Пример #11
0
    def approve_comment(self):
        _ = self.macro.request.getText

        # Source
        origin = os.path.join(self.approval_dir, get_input(self.macro, "file"))
        comment = read_comment(origin)

        # Destination
        page = Page(self.macro.request, comment["page"])
        if not page.exists():
            self.msg.append(_("The page this comment was written for don't exist any more"))
            return

        dest_dir = page.getPagePath("comments", check_create=1)
        destination = os.path.join(dest_dir, get_input(self.macro, "file"))

        # Rename the file:
        os.rename(origin, destination)
        self.msg.append(_("Comment approved"))

        # Notify page subscribers:
        notify_subscribers(self.macro, comment)
Пример #12
0
 def dictPagePath(self):
     page = Page(self.request, self.dictPage)
     return page.getPagePath(use_underlay=0, check_create=0)
Пример #13
0
 def dictPagePath(self):
     page = Page(self.request, self.dictPage)
     return page.getPagePath(use_underlay=0, check_create=0)
Пример #14
0
def macro_Comments(macro, page_name=u''):
    '''
    Usage:

        <<Comments(page_name)>>
        Shows the comments of page 'page_name'
    or
        <<Comments()>>
        Shows the page of the current page.
    '''
    _ = macro.request.getText
    request = macro.request
    formatter = macro.formatter


    # By default show the comments for the current page
    if page_name == u'':
        page_name = macro.formatter.page.page_name

    # Get the configuration:
    page = Page(request, page_name )
    comments_dir = page.getPagePath("comments", check_create=1)

    # Get the page_name comment list
    files = glob.glob(os.path.join(comments_dir,'*.txt'))
    files.sort()

    # Compose the comments markup
    html = [u'<a name="comment_section"></a>']
    if not files:
        html.append(u'<p>%s</p>' % u'コメントはありません')
    else:
        # Pagination
        cmt_per_page = get_cfg_int(macro, 'comment_cmt_per_page',50)

        if cmt_per_page:
            page_uri = request.url.split('?')[0]

            number_messages = len(files)
            if number_messages % cmt_per_page:
                offset = 1
            else:
                offset = 0
            max_pages = number_messages / cmt_per_page + offset
            try:
                page_number = get_input_int(macro, 'page_number', 1000 )
            except ValueError:
                page_number = 1
            if page_number > max_pages:
                page_number = max_pages
            elif page_number < 1:
                page_number = 1

            first = (page_number - 1) * cmt_per_page
            last  = first + cmt_per_page

            files = files[first:last]

        # Get the comments contents
        comments = [ read_comment(Xi) for Xi in files]

        html.append(u'<ul>')
        for comment in comments:
            html.append( u"%s" % comment_html(request, comment ) )

        if cmt_per_page:
            html.append(navbar(request, page_number, max_pages, page_uri))

    try:
        return formatter.rawHTML('\n'.join(html))
    except:
        return formatter.escapedText('')
Пример #15
0
    def save_comment( self ):
        _ = self.macro.request.getText

        if get_input(self.macro, 'do' ) != u'comment_add':
            # This is not a comment post do nothing
            return

        if get_cfg(self.macro, 'comment_recaptcha', False ) and not self.passpartout:
            import captcha
            self.captcha = captcha.submit (
                get_input(self.macro, 'recaptcha_challenge_field'),
                get_input(self.macro, 'recaptcha_response_field'),
                get_cfg(self.macro, 'comment_recaptcha_private_key'),
                self.macro.request.remote_addr )

        self.get_comment()
        self.errors = self.errors_check()

        if not self.errors: # Save the comment
            # Find out where to save the comment:
            if self.moderate:
                # This commet will be added to the moderation queue
                page = Page(self.macro.request,
                    get_cfg(self.macro, 'comment_approval_page', 'CommentsApproval'))
                comment_dir = page.getPagePath('', check_create=0)
            else:
                # The comment will be immediately posted
                page = Page(self.macro.request,self.page_name)
                comment_dir = page.getPagePath('comments', check_create=1)

            # Compose the comment structure and write it
            now = datetime.now()
            random_str =  ''.join([choice(letters + digits) for i in range(20)])
            comment_file = '%s-%s.txt' % (now.strftime("%s"), random_str)
            file_name = os.path.join(comment_dir, comment_file)

            comment = self.comment
            comment['page'] = self.page_name
            comment['time'] = now
            if get_cfg(self.macro, 'comment_store_addr', False):
                comment['remote_addr'] = self.macro.request.remote_addr

            if self.moderate:
                self.msg = _('Your comment awaits moderation. Thank you.')
            else:
                self.msg = _('Your comment has been posted. Thank you.')

            write_comment( file_name, comment )

            if self.moderate:
                # If we have defined a list of moderators to notify and this user is
                # moderated then a message is sent to the moderator list
                moderators = get_cfg(self.macro, 'comment_moderators', None)
                if moderators:
                    sendmail.sendmail( self.macro.request, moderators.split(','),
                    _('New comment awaits moderation for page %(page)s' % self.comment ),
                    _('New comment awaits moderation:\n\nPage: %(page)s\nFrom: %(user_name)s\nMessage:\n\n%(comment)s\n\n--' %
                        self.comment ))
            else:
                # Send notification to page subscribers if the page
                notify_subscribers(self.macro, self.comment)

            # clean up the fields to display
            self.reset_comment()
Пример #16
0
def photoupload(pagename, request):
    _ = request.getText

    # if not wikiutil.checkTicket(request, request.form.get('ticket', '')):
    #     return _('Please use the interactive user interface to use action %(actionname)s!') % {'actionname': 'AttachFile.upload' }

    # Currently we only check TextCha for upload (this is what spammers ususally do),
    # but it could be extended to more/all attachment write access
    # if not TextCha(request).check_answer_from_form():
    #     return _('TextCha: Wrong answer! Go back and try again...')

    form = request.form

    file_upload = request.files.get('file')
    if not file_upload:
        # This might happen when trying to upload file names
        # with non-ascii characters on Safari.
        return _("No file content. Delete non ASCII characters from the file name and try again.")

    try:
        overwrite = int(form.get('overwrite', '0'))
    except:
        overwrite = 0

    if not request.user.may.write(pagename):
        return _('You are not allowed to attach a file to this page.')

    if overwrite and not request.user.may.delete(pagename):
        return _('You are not allowed to overwrite a file attachment of this page.')

    # target = form.get('target', u'').strip()
    # if not target:
    #     target = file_upload.filename or u''

    # target = wikiutil.clean_input(target)
    file_upload_ext = os.path.splitext(file_upload.filename)[-1].lower()
    if file_upload_ext not in ('.jpg'):
        return _('You can upload only following extentions. -- .jpg, but ' + file_upload_ext)

    # if not target:
    #     return _("Filename of attachment not specified!")
    if pagename.encode('utf8') == '아메바사진':
        path = '/volume1/photo/webpub_amb'#/@eaDir'
    elif pagename.encode('utf8') == '사과나무사진관':
        path = '/volume1/photo/webpub_apt'#/@eaDir'
    else:
        path = '/volume1/photo/webpub_tst'

    try:
        lst = glob.glob(path + '/*.jpg')
        lastnumfilepath = sorted(lst)[-1]
        lastnumfile = os.path.split(lastnumfilepath)[1]
        filenm = os.path.splitext(lastnumfile)[0]
        filenum = int(filenm)
        filenum += 1
        target = "%05d%s" % (filenum, file_upload_ext)
    except:
        target = "00001" + file_upload_ext

    print '-'*100
    print path, target
    # add the attachment
    try:
        target, bytes = add_attachment(request, pagename, target, file_upload.stream, overwrite=overwrite)
        msg = "Picture '%(target)s' ('%(filename)s',%(bytes)d bytes) have been uploaded." % {
                'target': target, 'filename': file_upload.filename, 'bytes': bytes}
    except AttachmentAlreadyExists:
        msg = _("Attachment '%(target)s' (remote name '%(filename)s') already exists.") % {
            'target': target, 'filename': file_upload.filename}
    # return attachment list
    #upload_form(pagename, request, msg)

    # move
    # replace illegal chars
    target = wikiutil.taintfilename(target)

    # get directory, and possibly create it
    # attach_dir = getAttachDir(request, pagename, create=1)
    if request.page and pagename == request.page.page_name:
        page = request.page # reusing existing page obj is faster
    else:
        page = Page(request, pagename)
    attach_dir = page.getPagePath("attachments", check_create=1)
    fpath = os.path.join(attach_dir, target).encode(request.cfg.attachment_charset)

    os.rename(fpath, path + os.sep + target)
    # msg += ' mv %s %s/%s' % (fpath, path, target)

    # os.system('synoindex -a ' + path + '/' + target)
    # os.system('synoindxe -U photo')
    from subprocess import Popen
    pid = Popen(["/volume1/photo/create_tn.sh", path, target]).pid

    #request.page.send_page()
    return msg