示例#1
0
def delete_page_preview(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    page.delete_preview()
示例#2
0
def tag_make_for_page(blog_id=None, page_id=None):

    user = auth.is_logged_in(request)

    if page_id is None:
        # page = Page()
        blog = Blog.load(blog_id)
        page = None
        permission = auth.is_blog_editor(user, blog)
        assoc = {'blog': blog}
    else:
        page = Page.load(page_id)
        blog = None
        permission = auth.is_page_editor(user, page)
        assoc = {'page': page}

    tag_name = request.forms.getunicode('tag')

    if len(tag_name) < 1:
        return None

    # Note that this is a single tag only!

    tag = Tag.add_or_create([
        tag_name,
    ], **assoc)

    if len(tag[0]) > 0:
        tpl = template(tag[0][0].new_tag_for_display)
    else:
        tpl = template(tag[1][0].for_display)

    return tpl
示例#3
0
文件: tags.py 项目: syegulalp/mercury
def tag_make_for_page(blog_id=None, page_id=None):

    user = auth.is_logged_in(request)

    if page_id is None:
        # page = Page()
        blog = Blog.load(blog_id)
        page = None
        permission = auth.is_blog_editor(user, blog)
        assoc = {'blog':blog}
    else:
        page = Page.load(page_id)
        blog = None
        permission = auth.is_page_editor(user, page)
        assoc = {'page':page}

    tag_name = request.forms.getunicode('tag')

    if len(tag_name) < 1:
        return None

    # Note that this is a single tag only!

    tag = Tag.add_or_create(
        [tag_name, ],
        **assoc
        )

    if len(tag[0]) > 0:
        tpl = template(tag[0][0].new_tag_for_display)
    else:
        tpl = template(tag[1][0].for_display)

    return tpl
示例#4
0
文件: page.py 项目: syegulalp/mercury
def page_edit_save(page_id):
    '''
    UI for saving changes to an edited blog page
    '''
    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    page.delete_preview()

    # from core.cms import save_action_list

    tags = save_page(page, user, page.blog)

    from core.ui import kv
    kv_ui_data = kv.ui(page.kv_list())

    tpl = template('edit/page_ajax',
        sidebar=sidebar.render_sidebar(
            panel_set='edit_page',
            status_badge=status_badge,
            save_action=save_action,
            save_action_list=save_action_list,
            kv_ui=kv_ui_data,
            kv_object='Page',
            kv_objectid=page.id,
            **tags.__dict__
            ),
        msg_float=False,
        **tags.__dict__)

    return tpl
示例#5
0
def page_media_upload_confirm(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    # get file NAMES, attributes, size, etc. first
    # request.form.getunicode('filename')
    # check each one on the SERVER side, not the client
    # if each file is OK, then respond appropriately and have the client send the whole file
    # if not, respond with a warning to be added to the notification area

    _g = request.forms.getunicode

    file_name = _g('filename')
    file_size = _g('filesize')

    # check for file types against master list
    # check for file length
    # check for name collision

    for n in request.files:
        x = request.files.get(n)
        file_path = _join(page.blog.path, page.blog.media_path_generated,
                          x.filename)
        if _exists(file_path):
            pass
        else:
            pass
示例#6
0
文件: page.py 项目: syegulalp/mercury
def delete_page_preview(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    page.delete_preview()
示例#7
0
def page_edit_save(page_id):
    '''
    UI for saving changes to an edited blog page
    '''
    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    page.delete_preview()

    # from core.cms import save_action_list

    tags = save_page(page, user, page.blog)

    from core.ui import kv
    kv_ui_data = kv.ui(page.kv_list())

    tpl = template('edit/page_ajax',
                   sidebar=sidebar.render_sidebar(
                       panel_set='edit_page',
                       status_badge=status_badge,
                       save_action=save_action,
                       save_action_list=save_action_list,
                       kv_ui=kv_ui_data,
                       kv_object='Page',
                       kv_objectid=page.id,
                       **tags.__dict__),
                   msg_float=False,
                   **tags.__dict__)

    return tpl
示例#8
0
def page_media_upload(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    overwrite = []

    for n in request.files:
        x = request.files.get(n)
        media_path = _join(page.blog.path, page.blog.media_path_generated)
        file_path = _join(media_path, x.filename)
        if _exists(file_path):
            from core.error import FileExistsError
            raise FileExistsError(
                "File '{}' already exists on the server.".format(
                    utils.html_escape(x.filename)))
        else:
            Media.register_media(x.filename, file_path, user, page=page)
            if not _exists(media_path):
                makedirs(media_path)
            x.save(file_path)

    tags = template_tags(page=page)

    return template('edit/page_media_list.tpl', **tags.__dict__)
示例#9
0
文件: page.py 项目: syegulalp/mercury
def page_media_upload_confirm(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    # get file NAMES, attributes, size, etc. first
    # request.form.getunicode('filename')
    # check each one on the SERVER side, not the client
    # if each file is OK, then respond appropriately and have the client send the whole file
    # if not, respond with a warning to be added to the notification area

    _g = request.forms.getunicode

    file_name = _g('filename')
    file_size = _g('filesize')

    # check for file types against master list
    # check for file length
    # check for name collision

    for n in request.files:
        x = request.files.get(n)
        file_path = _join(page.blog.path, page.blog.media_path_generated, x.filename)
        if _exists(file_path):
            pass
        else:
            pass
示例#10
0
文件: page.py 项目: syegulalp/mercury
def page_media_upload(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    overwrite = []

    for n in request.files:
        x = request.files.get(n)
        media_path = _join(page.blog.path, page.blog.media_path_generated)
        file_path = _join(media_path, x.filename)
        if _exists(file_path):
            from core.error import FileExistsError
            raise FileExistsError("File '{}' already exists on the server.".format(
                utils.html_escape(x.filename)))
        else:
            Media.register_media(x.filename, file_path, user, page=page)
            if not _exists(media_path):
                makedirs(media_path)
            x.save(file_path)

    tags = template_tags(page=page)

    return template('edit/page_media_list.tpl',
        **tags.__dict__)
示例#11
0
文件: page.py 项目: syegulalp/mercury
def page_edit(page_id):
    '''
    UI for editing a page in a blog
    '''
    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    status = None
    referer = request.headers.get('Referer')

    if (referer is None
        or page.modified_date is None
        or re.match(re.escape(BASE_URL + "/blog/" + str(page.blog.id)), referer) is None):

        referer = BASE_URL + "/blog/" + str(page.blog.id)

    if page.modified_date is None:
        status = utils.Status(
            type='info',
            message="Page <b>{}</b> created.".format(page.for_log))
        page.modified_date = datetime.datetime.utcnow()
        page.save(user)

    tags = template_tags(page=page,
        user=user,
        status=status)

    from core.ui import kv
    kv_ui_data = kv.ui(page.kv_list())

    tpl = template('edit/page',
        menu=generate_menu('edit_page', page),
        parent_path=referer,
        # search_context=(search_context['blog'], page.blog),
        html_editor_settings=html_editor_settings(page.blog),
        sidebar=sidebar.render_sidebar(
            panel_set='edit_page',
            status_badge=status_badge,
            save_action_list=save_action_list,
            save_action=save_action,
            kv_ui=kv_ui_data,
            kv_object='Page',
            kv_objectid=page.id,
            **tags.__dict__),
        msg_float=False,
        **tags.__dict__)

    logger.info("Page {} opened for editing by {}.".format(
        page.for_log,
        user.for_log))

    return tpl
示例#12
0
def page_edit(page_id):
    '''
    UI for editing a page in a blog
    '''
    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    status = None
    referer = request.headers.get('Referer')

    if (referer is None or page.modified_date is None
            or re.match(re.escape(BASE_URL + "/blog/" + str(page.blog.id)),
                        referer) is None):

        referer = BASE_URL + "/blog/" + str(page.blog.id)

    if page.modified_date is None:
        status = utils.Status(type='info',
                              message="Page <b>{}</b> created.".format(
                                  page.for_log))
        page.modified_date = datetime.datetime.utcnow()
        page.save(user)

    tags = template_tags(page=page, user=user, status=status)

    from core.ui import kv
    kv_ui_data = kv.ui(page.kv_list())

    tpl = template(
        'edit/page',
        menu=generate_menu('edit_page', page),
        parent_path=referer,
        # search_context=(search_context['blog'], page.blog),
        html_editor_settings=html_editor_settings(page.blog),
        sidebar=sidebar.render_sidebar(panel_set='edit_page',
                                       status_badge=status_badge,
                                       save_action_list=save_action_list,
                                       save_action=save_action,
                                       kv_ui=kv_ui_data,
                                       kv_object='Page',
                                       kv_objectid=page.id,
                                       **tags.__dict__),
        msg_float=False,
        **tags.__dict__)

    logger.info("Page {} opened for editing by {}.".format(
        page.for_log, user.for_log))

    return tpl
示例#13
0
def page_media_delete(page_id, media_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    media = Media.load(media_id)
    media_reference = MediaAssociation.get(MediaAssociation.page == page,
                                           MediaAssociation.media == media)
    media_reference.delete_instance(recursive=True, delete_nullable=True)

    tags = template_tags(page=page)

    return template('edit/page_media_list.tpl', **tags.__dict__)
示例#14
0
文件: page.py 项目: syegulalp/mercury
def page_preview_core(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    preview_fileinfo = page.default_fileinfo
    preview_file_path, preview_url = preview_fileinfo.make_preview()

    page_tags = fileinfo.generate_page_tags(preview_fileinfo, page.blog)
    file_page_text = generate_page_text(preview_fileinfo, page_tags)
    queue.write_file(file_page_text, page.blog.path, preview_file_path)

    return preview_url, page
示例#15
0
def page_preview_core(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    preview_fileinfo = page.default_fileinfo
    preview_file_path, preview_url = preview_fileinfo.make_preview()

    page_tags = fileinfo.generate_page_tags(preview_fileinfo, page.blog)
    file_page_text = generate_page_text(preview_fileinfo, page_tags)
    queue.write_file(file_page_text, page.blog.path, preview_file_path)

    return preview_url, page
示例#16
0
def page_media_add(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    media_list = Media.select().where(Media.blog == page.blog)

    tags = template_tags(page=page, user=user)

    return template('modal/modal_images.tpl',
                    media_list=media_list,
                    title="Select media",
                    buttons='',
                    **tags.__dict__)
示例#17
0
def page_revisions(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)
    tags = template_tags(page=page)

    try:
        tpl = template('modal/modal_revisions',
                       title='Revisions for page #{}'.format(page.id),
                       buttons='',
                       **tags.__dict__)
    except:
        raise

    return tpl
示例#18
0
文件: page.py 项目: syegulalp/mercury
def page_revisions(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)
    tags = template_tags(page=page)

    try:
        tpl = template('modal/modal_revisions',
        title='Revisions for page #{}'.format(page.id),
        buttons='',
        **tags.__dict__)
    except:
        raise

    return tpl
示例#19
0
文件: page.py 项目: syegulalp/mercury
def page_revision_restore(page_id, revision_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)
    page_revision = PageRevision.select().where(PageRevision.id == revision_id).get()

    status = utils.Status(
        type='success',
        message='Page <b>{}</b> has been restored from backup dated {}.'.format(page.for_log,
            page_revision.modified_date)
        )

    tags = template_tags(page=page,
        user=user,
        status=status)

    page_revision.id = page.id
    tags.page = page_revision

    referer = BASE_URL + "/blog/" + str(page.blog.id)

    # from core.cms import save_action_list
    # from core.ui_kv import kv_ui
    from core.ui import kv
    kv_ui_data = kv.ui(page.kv_list())
    # TODO: save action from this doesn't trigger queue run

    tpl = template('edit/page',
        status_badge=status_badge,
        save_action=save_action,
        menu=generate_menu('edit_page', page),
        search_context=(search_contexts['blog'], page.blog),
        html_editor_settings=html_editor_settings(page.blog),
        sidebar=sidebar.render_sidebar(
            panel_set='edit_page',
            status_badge=status_badge,
            save_action=save_action,
            save_action_list=save_action_list,
            kv_ui=kv_ui_data,
            kv_object='Page',
            kv_objectid=page.id,
            **tags.__dict__
            ),
        **tags.__dict__)

    return tpl
示例#20
0
文件: page.py 项目: syegulalp/mercury
def page_media_add(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    media_list = Media.select().where(
        Media.blog == page.blog)

    tags = template_tags(page=page,
        user=user)

    return template('modal/modal_images.tpl',
        media_list=media_list,
        title="Select media",
        buttons='',
        **tags.__dict__)
示例#21
0
文件: page.py 项目: syegulalp/mercury
def page_media_delete(page_id, media_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    media = Media.load(media_id)
    media_reference = MediaAssociation.get(
        MediaAssociation.page == page,
        MediaAssociation.media == media)
    media_reference.delete_instance(recursive=True,
        delete_nullable=True)

    tags = template_tags(page=page)

    return template('edit/page_media_list.tpl',
        **tags.__dict__)
示例#22
0
def page_add_media_with_template(page_id, media_id, template_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    media = Media.load(media_id, page.blog)

    media_template = Template.get(Template.id == template_id)

    from core.template import tpl
    generated_template = tpl(media_template.body, blog=page.blog, media=media)

    if media not in page.media:
        media.associate(page)

    return generated_template
示例#23
0
def page_revision_restore(page_id, revision_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)
    page_revision = PageRevision.select().where(
        PageRevision.id == revision_id).get()

    status = utils.Status(
        type='success',
        message='Page <b>{}</b> has been restored from backup dated {}.'.
        format(page.for_log, page_revision.modified_date))

    tags = template_tags(page=page, user=user, status=status)

    page_revision.id = page.id
    tags.page = page_revision

    referer = BASE_URL + "/blog/" + str(page.blog.id)

    # from core.cms import save_action_list
    # from core.ui_kv import kv_ui
    from core.ui import kv
    kv_ui_data = kv.ui(page.kv_list())
    # TODO: save action from this doesn't trigger queue run

    tpl = template('edit/page',
                   status_badge=status_badge,
                   save_action=save_action,
                   menu=generate_menu('edit_page', page),
                   search_context=(search_contexts['blog'], page.blog),
                   html_editor_settings=html_editor_settings(page.blog),
                   sidebar=sidebar.render_sidebar(
                       panel_set='edit_page',
                       status_badge=status_badge,
                       save_action=save_action,
                       save_action_list=save_action_list,
                       kv_ui=kv_ui_data,
                       kv_object='Page',
                       kv_objectid=page.id,
                       **tags.__dict__),
                   **tags.__dict__)

    return tpl
示例#24
0
文件: page.py 项目: syegulalp/mercury
def page_revision_restore_save(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)
    tags = save_page(page, user, page.blog)

    from core.cms import save_action_list

    tpl = template('edit/page_ajax',
        status_badge=status_badge,
        save_action=save_action,
        save_action_list=save_action_list,
        sidebar='',
        **tags.__dict__)

    response.add_header('X-Redirect', BASE_URL + '/page/{}/edit'.format(str(tags.page.id)))

    return tpl
示例#25
0
文件: page.py 项目: syegulalp/mercury
def page_add_media_with_template(page_id, media_id, template_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    media = Media.load(media_id, page.blog)

    media_template = Template.get(
        Template.id == template_id)

    from core.template import tpl
    generated_template = tpl(media_template.body,
        blog=page.blog,
        media=media)

    if media not in page.media:
        media.associate(page)

    return generated_template
示例#26
0
def page_revision_restore_save(page_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)
    tags = save_page(page, user, page.blog)

    from core.cms import save_action_list

    tpl = template('edit/page_ajax',
                   status_badge=status_badge,
                   save_action=save_action,
                   save_action_list=save_action_list,
                   sidebar='',
                   **tags.__dict__)

    response.add_header('X-Redirect',
                        BASE_URL + '/page/{}/edit'.format(str(tags.page.id)))

    return tpl
示例#27
0
def page_get_media_templates(page_id, media_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    media = Media.load(media_id, page.blog)

    media_templates = Template.select().where(
        Template.blog == page.blog,
        Template.template_type == template_type.media).order_by(Template.title)

    buttons = media_buttons.format('onclick="add_template();"', 'Apply')

    tpl = template('modal/modal_image_templates',
                   media=media,
                   templates=media_templates,
                   buttons=buttons,
                   title='Choose a template for {}'.format(media.for_log))

    return tpl
示例#28
0
文件: page.py 项目: syegulalp/mercury
def page_get_media_templates(page_id, media_id):

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)

    media = Media.load(media_id, page.blog)

    media_templates = Template.select().where(
        Template.blog == page.blog,
        Template.template_type == template_type.media).order_by(Template.title)

    buttons = media_buttons.format(
        'onclick="add_template();"',
        'Apply')

    tpl = template('modal/modal_image_templates',
        media=media,
        templates=media_templates,
        buttons=buttons,
        title='Choose a template for {}'.format(
            media.for_log))

    return tpl
示例#29
0
文件: page.py 项目: syegulalp/mercury
def page_delete(page_id, confirm):
    '''
    Deletes a selected page -- no confirmation yet
    Returns user to list of pages in blog with a notice about the deleted file
    '''

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)
    blog = page.blog

    from core.utils import Status

    tags = template_tags(
        page=page,
        user=user)

    from core.models import page_status

    if page.status != page_status.unpublished:
        message = 'Page <b>{}</b> is not set to unpublished and cannot be deleted. Unpublish this page before deleting it.'.format(
            page.for_display)
        url = '{}/blog/{}'.format(BASE_URL, blog.id)
        action = 'Return to the page listing'

        tags.status = Status(
            type='danger',
            no_sure=True,
            message=message,
            action=action,
            url=url,
            close=False)

    else:
        if request.forms.getunicode('confirm') == user.logout_nonce:

            p = page.for_log
            from core.cms.cms import delete_page
            delete_page(page)

            message = 'Page {} successfully deleted'.format(
                p)
            url = '{}/blog/{}'.format(BASE_URL, blog.id)
            action = 'Return to the page listing'

            tags.status = Status(
                type='success',
                message=message,
                action=action,
                url=url,
                close=False)

            logger.info("Page {} deleted by user {}.".format(
                p,
                user.for_log))


        else:
            message = ('You are about to delete page <b>{}</b> from blog <b>{}</b>.'.format(
                page.for_display,
                blog.for_display))

            yes = {
                    'label':'Yes, delete this page',
                    'id':'delete',
                    'name':'confirm',
                    'value':user.logout_nonce}
            no = {
                'label':'No, return to blog page listing',
                'url':'{}/blog/{}'.format(
                    BASE_URL, blog.id)
                }

            tags.status = Status(
                message=message,
                type='warning',
                close=False,
                yes=yes,
                no=no
            )

    return report(tags, 'blog_delete_page', page)
示例#30
0
def page_delete(page_id, confirm):
    '''
    Deletes a selected page -- no confirmation yet
    Returns user to list of pages in blog with a notice about the deleted file
    '''

    user = auth.is_logged_in(request)
    page = Page.load(page_id)
    permission = auth.is_page_editor(user, page)
    blog = page.blog

    from core.utils import Status

    tags = template_tags(page=page, user=user)

    from core.models import page_status

    if page.status != page_status.unpublished:
        message = 'Page <b>{}</b> is not set to unpublished and cannot be deleted. Unpublish this page before deleting it.'.format(
            page.for_display)
        url = '{}/blog/{}'.format(BASE_URL, blog.id)
        action = 'Return to the page listing'

        tags.status = Status(type='danger',
                             no_sure=True,
                             message=message,
                             action=action,
                             url=url,
                             close=False)

    else:
        if request.forms.getunicode('confirm') == user.logout_nonce:

            p = page.for_log
            from core.cms.cms import delete_page
            delete_page(page)

            message = 'Page {} successfully deleted'.format(p)
            url = '{}/blog/{}'.format(BASE_URL, blog.id)
            action = 'Return to the page listing'

            tags.status = Status(type='success',
                                 message=message,
                                 action=action,
                                 url=url,
                                 close=False)

            logger.info("Page {} deleted by user {}.".format(p, user.for_log))

        else:
            message = (
                'You are about to delete page <b>{}</b> from blog <b>{}</b>.'.
                format(page.for_display, blog.for_display))

            yes = {
                'label': 'Yes, delete this page',
                'id': 'delete',
                'name': 'confirm',
                'value': user.logout_nonce
            }
            no = {
                'label': 'No, return to blog page listing',
                'url': '{}/blog/{}'.format(BASE_URL, blog.id)
            }

            tags.status = Status(message=message,
                                 type='warning',
                                 close=False,
                                 yes=yes,
                                 no=no)

    return report(tags, 'blog_delete_page', page)