示例#1
0
文件: utils.py 项目: ra2003/mercury
def create_basename(input_string, blog):
    '''
    Generate a basename from a given input string.

    Checks across the entire blog in question for a basename collision.

    Basenames need to be unique to the filesystem for where the target files
    are to be written. By default this is enforced in the database by way of a
    unique column constraint.
    '''

    if not input_string:
        input_string = "page"

    basename = input_string
    basename_test = create_basename_core(basename)

    from core.models import Page

    n = 0

    while True:

        try:
            Page.get(Page.basename == basename_test, Page.blog == blog)
        except Page.DoesNotExist:
            return (basename_test[:MAX_BASENAME_LENGTH])

        n += 1
        basename_test = basename + "-" + str(n)
示例#2
0
文件: routes.py 项目: ra2003/mercury
def api_hi():
    from core.models import PageRevision, Page
    pages = []
    for n in PageRevision.select():
        try:
            Page.get(Page.id == n.page)
        except:
            pages.append(n.page)
            n.delete()
    return "Deleted: {}".format(pages)
示例#3
0
def api_hi():
    from core.models import PageRevision, Page
    pages = []
    for n in PageRevision.select():
        try:
            Page.get(Page.id == n.page)
        except:
            pages.append(n.page)
            n.delete()
    return "Deleted: {}".format(pages)
示例#4
0
    def _load_page(self, doc, div, issue):
        dmdid = div.attrib['DMDID']
        mods = dmd_mods(doc, dmdid)
        page = Page()

        seq_string = mods.xpath(
            'string(.//mods:extent/mods:start)', namespaces=ns)
        try:
            page.sequence = int(seq_string)
        except ValueError, e:
            raise BatchLoaderException("could not determine sequence number for page from '%s'" % seq_string)
示例#5
0
    def _load_page(self, doc, div, issue):
        dmdid = div.attrib['DMDID']
        mods = dmd_mods(doc, dmdid)
        page = Page()

        seq_string = mods.xpath(
            'string(.//mods:extent/mods:start)', namespaces=ns)
        try:
            page.sequence = int(seq_string)
        except ValueError, e:
            raise BatchLoaderException("could not determine sequence number for page from '%s'" % seq_string)
示例#6
0
def create_pages(page_ids=None, count=0):
    if not page_ids:
        page_ids = []

    count += 1
    new_page_ids = []

    if count >= 4:
        return False

    if not page_ids:
        for i in range(randint(1, 2)):
            page = Page(name='Page %s' % i, content='Page content %s' % i)
            page.save()
            new_page_ids.append(page.id)

    for page_id in page_ids:
        for i in range(randint(1, 3)):
            page = Page(name='Page %s %s' % (page_id, i),
                        content='Page content %s %s' % (page_id, i),
                        parent_id=page_id)
            page.save()
            new_page_ids.append(page.id)

    for i in range(3):
        create_pages(page_ids=new_page_ids, count=count)

    return True
示例#7
0
 def make_page(self):
     root = User.objects.filter(username="******").first()
     if not self.page:
         club_root = Page.objects.filter(
             name=settings.SITH_CLUB_ROOT_PAGE).first()
         if root and club_root:
             public = Group.objects.filter(
                 id=settings.SITH_GROUP_PUBLIC_ID).first()
             p = Page(name=self.unix_name)
             p.parent = club_root
             p.save(force_lock=True)
             if public:
                 p.view_groups.add(public)
             p.save(force_lock=True)
             if self.parent and self.parent.page:
                 p.parent = self.parent.page
             self.page = p
             self.save()
     elif self.page and self.page.name != self.unix_name:
         self.page.unset_lock()
         self.page.name = self.unix_name
         self.page.save(force_lock=True)
     elif (self.page and self.parent and self.parent.page
           and self.page.parent != self.parent.page):
         self.page.unset_lock()
         self.page.parent = self.parent.page
         self.page.save(force_lock=True)
示例#8
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
示例#9
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()
示例#10
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()
示例#11
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
示例#12
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__)
示例#13
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
示例#14
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__)
示例#15
0
def main_ui():
    '''
    Top level UI
    This will eventually become a full-blown user dashboard.
    Right now it just returns a list of sites in the system.
    All users for the system can see this dashboard.
    '''
    user = auth.is_logged_in(request)

    # TODO: replace with actual user-centric setting
    try:
        from settings import MAX_RECENT_PAGES
    except ImportError:
        MAX_RECENT_PAGES = 10

    recent_pages = Page.select().where(Page.user == user).order_by(
        Page.modified_date.desc()).limit(MAX_RECENT_PAGES)

    your_blogs = user.blogs()

    tpl = template('ui/ui_dashboard',
                   search_context=(search_contexts['sites'], None),
                   menu=generate_menu('system_menu', None),
                   recent_pages=recent_pages,
                   your_blogs=your_blogs,
                   **template_tags(user=user).__dict__)

    return tpl
示例#16
0
    def blog_search(self, search_terms_enc, blog):
        from core.models import Page

        # ct = 0

        if blog is not None:
            blog_to_search = blog.pages.select(Page.id)

        try:
            search_results = (Page_Search.select(Page_Search.id).where(
                Page_Search.id << blog_to_search,
                Page_Search.title.contains(search_terms_enc)
                | Page_Search.text.contains(search_terms_enc)).order_by(
                    Page_Search.id.desc()))
            # .tuples())
            search_results.count(
            )  # This statement is used to trap FTS4 errors
        except Exception:
            # pass
            # except OperationalError as e:
            # raise e
            # if ct == 0:
            search_results = (Page.select(Page.id).where(
                Page.blog == blog,
                Page.title.contains(search_terms_enc)
                | Page.text.contains(search_terms_enc)).order_by(
                    Page.id.desc()))
            # .tuples())

        return search_results
示例#17
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
示例#18
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
示例#19
0
    def site_search(self, search_terms_enc, site):
        from core.models import Page, Site

        # ct = 0

        if site is not None:
            site_to_search = Site.load(site).pages.select(Page.id).tuples()

        try:
            search_results = (Page_Search.select(Page_Search.id).where(
                Page_Search.id << site_to_search,
                Page_Search.title.contains(search_terms_enc)
                | Page_Search.text.contains(search_terms_enc)).order_by(
                    Page_Search.id.desc()).tuples())
            search_results.count(
            )  # This statement is used to trap FTS4 errors
        except Exception:
            # pass
            # if ct == 0:
            search_results = (Page.select(Page.id).where(
                Page.blog.site == site,
                Page.title.contains(search_terms_enc)
                | Page.text.contains(search_terms_enc)).order_by(
                    Page.id.desc()).tuples())

        return search_results
示例#20
0
    def blog_search(self, search_terms_enc, blog):
        from core.models import Page

        # ct = 0

        if blog is not None:
            blog_to_search = blog.pages.select(Page.id)

        try:
            search_results = (Page_Search.select(Page_Search.id)
                .where(Page_Search.id << blog_to_search,
                    Page_Search.title.contains(search_terms_enc) | Page_Search.text.contains(search_terms_enc))
                .order_by(Page_Search.id.desc()))
                # .tuples())
            search_results.count()  # This statement is used to trap FTS4 errors
        except Exception:
            # pass
        # except OperationalError as e:
            # raise e
            # if ct == 0:
            search_results = (Page.select(Page.id)
                .where(Page.blog == blog,
                    Page.title.contains(search_terms_enc) | Page.text.contains(search_terms_enc))
                .order_by(Page.id.desc()))
                # .tuples())

        return search_results
示例#21
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
示例#22
0
def main_ui():
    '''
    Top level UI
    This will eventually become a full-blown user dashboard.
    Right now it just returns a list of sites in the system.
    All users for the system can see this dashboard.
    '''
    user = auth.is_logged_in(request)

    # TODO: replace with actual user-centric setting
    try:
        from settings import MAX_RECENT_PAGES
    except ImportError:
        MAX_RECENT_PAGES = 10

    recent_pages = Page.select().where(
        Page.user == user).order_by(
        Page.modified_date.desc()).limit(MAX_RECENT_PAGES)

    your_blogs = user.blogs()

    tpl = template('ui/ui_dashboard',
        search_context=(search_contexts['sites'], None),
        menu=generate_menu('system_menu', None),
        recent_pages=recent_pages,
        your_blogs=your_blogs,
        **template_tags(user=user).__dict__
        )

    return tpl
示例#23
0
文件: sqlite.py 项目: janusnic/MeTal
def blog_search(search_terms_enc, blog):

    ct = 0

    if blog is not None:
        blog_to_search = blog.pages().select(Page.id).tuples()

    try:
        search_results = (Page_Search.select(Page_Search.id).where(
            Page_Search.id << blog_to_search,
            Page_Search.title.contains(search_terms_enc)
            | Page_Search.text.contains(search_terms_enc)).order_by(
                Page_Search.id.desc()).tuples())
        ct = search_results.count(
        )  # This statement is used to trap FTS4 errors
    except OperationalError:
        pass
    if ct == 0:
        search_results = (Page.select(Page.id).where(
            Page.blog == blog,
            Page.title.contains(search_terms_enc)
            | Page.text.contains(search_terms_enc)).order_by(
                Page.id.desc()).tuples())

    return search_results
示例#24
0
def blog_new_page(blog_id):
    '''
    Displays UI for newly created (unsaved) page
    '''
    user = auth.is_logged_in(request)
    blog = Blog.load(blog_id)
    permission = auth.is_blog_member(user, blog)

    tags = template_tags(blog=blog, user=user)

    tags.page = Page()

    referer = request.headers.get('Referer')
    if referer is None:
        referer = BASE_URL + "/blog/" + str(blog.id)

    blog_new_page = tags.page

    for n in new_page_submission_fields:
        blog_new_page.__setattr__(n, "")
        if n in request.query:
            blog_new_page.__setattr__(n, request.query.getunicode(n))

    import datetime

    blog_new_page.blog = blog
    blog_new_page.user = user
    blog_new_page.publication_date = datetime.datetime.utcnow()
    blog_new_page.basename = ''

    from core.cms import save_action_list

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

    try:
        html_editor_settings = Template.get(
            Template.blog == blog, Template.title == 'HTML Editor Init',
            Template.template_type == template_type.system).body
    except Template.DoesNotExist:
        from core.static import html_editor_settings

    return template(
        'edit/page',
        menu=generate_menu('create_page', blog),
        parent_path=referer,
        # search_context=(search_context['blog'], blog),
        html_editor_settings=html_editor_settings,
        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=None,
                                       **tags.__dict__),
        **tags.__dict__)
示例#25
0
 def get_initial(self):
     init = {}
     if "page" in self.request.GET.keys():
         page_name = self.request.GET["page"]
         parent_name = "/".join(page_name.split("/")[:-1])
         parent = Page.get_page_by_full_name(parent_name)
         if parent is not None:
             init["parent"] = parent.id
         init["name"] = page_name.split("/")[-1]
     return init
示例#26
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
示例#27
0
文件: utils.py 项目: janusnic/MeTal
def create_basename(input_string, blog):
    '''
    Generate a basename from a given input string.

    Checks across the entire blog in question for a basename collision.

    Basenames need to be unique to the filesystem for where the target files
    are to be written. By default this is enforced in the database by way of a
    unique column constraint.
    '''
    from core.models import Page

    if not input_string:
        input_string = "page"

    basename = input_string.replace(' ', '-')

    try:
        basename = basename.casefold()
    except BaseException:
        basename = basename.lower()

    basename = re.sub(r'[^a-z0-9\-]', r'', basename)
    basename = re.sub(r'\-\-', r'-', basename)
    basename = urllib.parse.quote_plus(basename)

    basename_test = basename

    n = 0

    while True:

        try:
            Page.get(Page.basename == basename_test, Page.blog == blog)
        except Page.DoesNotExist:
            return (basename_test[:MAX_BASENAME_LENGTH])

        n += 1
        basename_test = basename + "-" + str(n)
示例#28
0
def month_context(fileinfo, original_page, tag_context, date_counter):

    if date_counter["year"] is False:
        raise ArchiveMappingFormatException("An archive mapping was encountered that had a month value before a year value.", Exception)

    if fileinfo is None:
        month_context = original_page.publication_date_tz.month
        blog = original_page.blog
    else:
        month_context = fileinfo.month
        blog = fileinfo.template_mapping.template.blog

    month_start = datetime.datetime(
        year=date_counter["year"],
        month=month_context,
        day=1)

    month_start_tz = Page._date_to_utc(None, blog.timezone,
        month_start)

    month_end = datetime.datetime(
        year=date_counter["year"],
        month=month_context,
        day=last_day_of_month(month_start).day,
        hour=23,
        minute=59,
        second=59)

    month_end_tz = Page._date_to_utc(None, blog.timezone,
        month_end)

    tag_context_next = tag_context.select().where(
        Page.publication_date >= month_start_tz,
        Page.publication_date <= month_end_tz
        )

    date_counter["month"] = month_context

    return tag_context_next, date_counter
示例#29
0
def year_context(fileinfo, original_page, tag_context, date_counter):

    if fileinfo is None:
        year_context = original_page.publication_date_tz.year
        blog = original_page.blog
    else:
        year_context = fileinfo.year
        blog = fileinfo.template_mapping.template.blog

    year_start = datetime.datetime(
        year=year_context,
        month=1,
        day=1,
        )

    year_start_tz = Page._date_to_utc(None, blog.timezone,
        year_start)

    year_end = datetime.datetime(
        year=year_context,
        month=12,
        day=31,
        hour=23,
        minute=59,
        second=59,
        )

    year_end_tz = Page._date_to_utc(None, blog.timezone,
        year_end)

    tag_context_next = tag_context.select().where(
        Page.publication_date >= year_start_tz,
        Page.publication_date <= year_end_tz
        )

    date_counter["year"] = year_context

    return tag_context_next, date_counter
示例#30
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
示例#31
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
示例#32
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__)
示例#33
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
示例#34
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__)
示例#35
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
示例#36
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
示例#37
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
示例#38
0
 def test_access_child_page_ok(self):
     """
     Should display a page correctly
     """
     parent = Page(name="guy", owner_group=Group.objects.filter(id=1).first())
     parent.save(force_lock=True)
     page = Page(
         name="bibou", owner_group=Group.objects.filter(id=1).first(), parent=parent
     )
     page.save(force_lock=True)
     response = self.client.get(
         reverse("core:page", kwargs={"page_name": "guy/bibou"})
     )
     self.assertTrue(response.status_code == 200)
     self.assertTrue(
         '<a href="/page/guy/bibou/edit">\\xc3\\x89diter</a>'
         in str(response.content)
     )
示例#39
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__)
示例#40
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__)
示例#41
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
示例#42
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
示例#43
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
示例#44
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
示例#45
0
文件: routes.py 项目: ra2003/mercury
def reparent_page(page_id, blog_id):
    with db.atomic():
        page = Page.load(page_id)
        blog = Blog.load(blog_id)
        page.blog = blog.id
        page.text += "\n"  # stupid hack, we should have a force-save option
        # also, have .save options kw, not args

        # Reparent any existing media
        # Delete any existing categories
        # Migrate/re-add any existing tags
        # Remove and regenerate basename, permalink, etc.
        # Create new fileinfo

        from core.error import PageNotChanged
        try:
            page.save(page.user)
        except PageNotChanged:
            pass
    return "OK"
示例#46
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
示例#47
0
def reparent_page(page_id, blog_id):
    with db.atomic():
        page = Page.load(page_id)
        blog = Blog.load(blog_id)
        page.blog = blog.id
        page.text += "\n"  # stupid hack, we should have a force-save option
        # also, have .save options kw, not args

        # Reparent any existing media
        # Delete any existing categories
        # Migrate/re-add any existing tags
        # Remove and regenerate basename, permalink, etc.
        # Create new fileinfo

        from core.error import PageNotChanged
        try:
            page.save(page.user)
        except PageNotChanged:
            pass
    return "OK"
示例#48
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
示例#49
0
    def site_search(self, search_terms_enc, site):
        from core.models import Page, Site

        # ct = 0

        if site is not None:
            site_to_search = Site.load(site).pages.select(Page.id).tuples()

        try:
            search_results = (Page_Search.select(Page_Search.id)
                .where(Page_Search.id << site_to_search,
                    Page_Search.title.contains(search_terms_enc) | Page_Search.text.contains(search_terms_enc))
                .order_by(Page_Search.id.desc()).tuples())
            search_results.count()  # This statement is used to trap FTS4 errors
        except Exception:
            # pass
            # if ct == 0:
            search_results = (Page.select(Page.id)
                .where(Page.blog.site == site,
                    Page.title.contains(search_terms_enc) | Page.text.contains(search_terms_enc))
                .order_by(Page.id.desc()).tuples())

        return search_results
示例#50
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
示例#51
0
文件: blog.py 项目: syegulalp/mercury
def blog_import (blog_id):
    user = auth.is_logged_in(request)
    blog = Blog.load(blog_id)
    permission = auth.is_blog_publisher(user, blog)
    reason = auth.check_template_lock(blog, True)

    tags = template_tags(blog=blog,
        user=user)

    import os, settings
    import_path = os.path.join(
        settings.APPLICATION_PATH,
        "data",
        "import.json")

    tags.status = reason

    if request.method == "POST":
        from core.models import db
        tpl = ''
        with db.atomic() as txn:
            import json
            from core.utils import string_to_date

            import_path = request.forms.getunicode('import_path')
            with open(import_path, 'r', encoding='utf8') as f:
                json_data = json.load(f)

            from core.models import page_status, MediaAssociation, Category
            from core.error import PageNotChanged
            from core.libs.peewee import InterfaceError
            from core.cms import media_filetypes
            format_str = "<b>{}</b> / (<i>{}</i>)"

            # TODO: go in chunks of 50 or something?
            # allow graceful disconnection?
            for n in json_data:
                q = []
                n_id = n['id']
                q.append("Checking {}".format(n_id))
                changed = False
                found = False
                match = Page.kv_get('legacy_id', n_id)
                if match.count() > 0:
                    if match[0].object_ref.blog == blog:
                        found = True
                        q.append(match[0].key + "/" + match[0].value + " / Exists: " + format_str.format(n['title'], n_id))
                        existing_entry = Page.load(match[0].objectid)
                        update = existing_entry.kv_get('update').count()
                        # raise Exception(update)
                        q.append('{} / {}'.format(string_to_date(n['modified_date']).replace(tzinfo=None), existing_entry.modified_date
                            ))
                        if string_to_date(n['modified_date']).replace(tzinfo=None) <= existing_entry.modified_date and update == 0:
                            q.append('Existing page {} not changed.'.format(existing_entry.id))
                        else:
                            changed = True
                            q.append('Updating data for existing page {}.'.format(existing_entry.id))
                            existing_entry.title = n['title']
                            existing_entry.text = n['text']
                            existing_entry.basename = n['basename']
                            existing_entry.excerpt = n['excerpt']

                            existing_entry.created_date = string_to_date(n['created_date']).replace(tzinfo=None)
                            existing_entry.modified_date = string_to_date(n['modified_date']).replace(tzinfo=None)
                            existing_entry.publication_date = string_to_date(n['publication_date']).replace(tzinfo=None)

                            try:
                                existing_entry.save(user, False, False, 'New revision from import')
                            except PageNotChanged:
                                pass
                            except InterfaceError:
                                raise Exception("Error saving {}. Check the JSON to make sure it's valid.".format(n_id))

                            for media in existing_entry.media:
                                media.kv_del()

                            existing_entry.clear_categories()
                            existing_entry.clear_kvs()
                            existing_entry.clear_tags()
                            existing_entry.clear_media()

                            entry = existing_entry

                if found is False:
                    q.append("Creating: " + format_str.format(n['title'], n_id))
                    changed = True
                    new_entry = Page(
                        title=n['title'],
                        text=n['text'],
                        basename=n['basename'],
                        excerpt=n['excerpt'],
                        user=user,
                        blog=blog,
                        created_date=string_to_date(n['created_date']),
                        publication_date=string_to_date(n['publication_date']),
                        modified_date=string_to_date(n['modified_date']),
                    )

                    new_entry.modified_date = new_entry.publication_date

                    if n['status'] in ('Publish', 'Published', 'Live'):
                        new_entry.status = page_status.published

                    new_entry.save(user)

                    entry = new_entry

                    q.append("New ID: {}".format(entry.id))

                    # Everything from here on out is

                if changed:

                    # Register a legacy ID for the page

                    entry.kv_set("legacy_id", n["id"])
                    entry.kv_set("legacy_user", n["user_id"])

                    # Category assignments

                    categories = n['categories']
                    if categories == []:
                        saved_page_category = PageCategory.create(
                            page=entry,
                            category=blog.default_category,
                            primary=True).save()
                    else:
                        primary = True
                        for category in categories:
                            cat_exists = False

                            category_id = category['id']
                            existing_category = Category.kv_get('legacy_id', category_id)
                            if existing_category.count() > 0:
                                if existing_category[0].object_ref.blog == blog:
                                    cat_exists = True

                            if cat_exists is False:

                                q.append('Created new category {}/{}'.format(
                                    category_id, category['name']
                                    ))
                                new_category = Category.create(
                                    blog=blog,
                                    title=category['name'],
                                    parent_category=getattr(category, 'parent', None)
                                    )
                                new_category.save()

                                new_category.kv_set('legacy_id',
                                    category_id
                                    )
                            else:
                                new_category = Category.load(existing_category[0].objectid)
                                q.append('Added to existing category {}/{}'.format(
                                    new_category.id, category['name']
                                    ))

                            saved_page_category = PageCategory.create(
                                page=entry,
                                category=new_category,
                                primary=primary
                                ).save()
                            primary = False

                    # Check to make sure a default category exists for the whole blog.
                    # If not, assign one based on the lowest ID.
                    # This can always be reassigned later.

                    # Register tags

                    tags_added, tags_existing, _ = Tag.add_or_create(
                        n['tags'], page=entry)

                    q.append('Tags added: {}'.format(','.join(n.tag for n in tags_added)))
                    q.append('Tags existing: {}'.format(','.join(n.tag for n in tags_existing)))

                    # Register KVs

                    kvs = n['kvs']
                    for key in kvs:
                        if key != "":
                            value = kvs[key]
                            entry.kv_set(key, value)
                            q.append('KV: {}:{}'.format(key, value))

                    # Register media

                    media = n['media']

                    for m in media:

                        if 'path' not in m:
                            continue

                        path = os.path.split(m['path'])

                        try:
                            new_media = Media.get(Media.url == m['url'])
                        except:
                            new_media = Media(
                                filename=path[1],
                                path=m['path'],
                                url=m['url'],
                                type=media_filetypes.image,
                                created_date=string_to_date(m['created_date']),
                                modified_date=string_to_date(m['modified_date']),
                                friendly_name=m['friendly_name'],
                                user=user,
                                blog=blog,
                                site=blog.site
                                )

                        # TODO: RBF
                        try:
                            new_media.save()
                        except Exception:
                            continue

                        media_association = MediaAssociation(
                            media=new_media,
                            page=entry)

                        media_association.save()

                        # Save legacy ID to KV on media

                        if 'id' in m:
                            new_media.kv_set('legacy_id', m['id'])

                        q.append('IMG: {}'.format(new_media.url))

                        # add tags for media

                        q.append('Tags: {}'.format(m['tags']))
                        new_tags = Tag.add_or_create(m['tags'], media=new_media)

                        kvs = m['kvs']
                        for key in kvs:
                            value = kvs[key]
                            new_media.kv_set(key, value)
                            q.append('KV: {}:{}'.format(key, value))

                    fileinfo.build_pages_fileinfos((entry,))
                    fileinfo.build_archives_fileinfos((entry,))

                tpl += ('<p>'.join(q)) + '<hr/>'
        return tpl

        # TODO:

        # Import or create categories as needed
        # Categories in export will need to have parent-child data
        # categories should have legacy identifiers where possible too

        # Import image files, assign those legacy KV identifiers
        # Modify URLs for imported images in posts
        # Make importing of image assets optional

    else:
        tpl = template('ui/ui_blog_import',
            menu=generate_menu('blog_import', blog),
            # search_context=(search_context['blog'], blog),
            import_path=import_path,
            **tags.__dict__)

        return tpl
示例#52
0
    product_id = '{}, running in {}'.format(settings.PRODUCT_NAME, settings.APPLICATION_PATH)

    print ('{}\nScheduled tasks script.'.format(product_id))

    if nowait:
        print('Ignoring insert wait.')

    print ('Looking for scheduled tasks...')

    from core.models import Page, page_status, Queue

    blogs_to_check = {}
    scheduled_page_report = []

    scheduled_pages = Page.select().where(
        Page.status == page_status.scheduled,
        Page.publication_date <= datetime.datetime.utcnow()).order_by(
            Page.publication_date.desc())

    total_pages = scheduled_pages.count()

    print ('{} pages scheduled'.format(total_pages))

    if total_pages > 0:
        for p in scheduled_pages.select(Page.blog).distinct():
            b = p.blog
            blogs_to_check[b.id] = b

    queue_count = Queue.select(Queue.blog).distinct()

    if queue_count.count() > 0:
        for n in queue_count:
示例#53
0
文件: cms.py 项目: syegulalp/mercury
def save_page(page, user, blog=None):
    '''
    Saves edits to a page in the CMS.
    Note that this function does _not_ perform permission checking. In other words, it doesn't
    verify if the user described in the `user` parameter does in fact have permissions to
    edit the page in question.

    :param page:
        Page object whose data is to be saved. If this is None, then it is assumed that we are
        creating a new page.
    :param user:
        The user object associated with the save action for this page. If this is a newly-created page,
        the page's user will be set to this.
    :param blog:
        The blog object under which the page will be created, if this is a newly-created page.

    '''

    getunicode = request.forms.getunicode

    # invalidate_cache()

    save_action = int(request.forms.get('save'))

    original_page_status = page_status.unpublished
    new_basename = getunicode('basename')

    if page is None:

        # CREATE NEW PAGE ENTRY

        page = Page()
        page.user = user.id
        page.blog = blog.id

        page.basename = create_basename(getunicode('page_title'),
            page.blog)
        original_page_basename = page.basename

        time_now = datetime.datetime.utcnow()

        page.publication_date = time_now
        page.created_date = time_now

    else:

        # UPDATE EXISTING ENTRY

        # Queue neighbor actions for page BEFORE modification

        if page.status == page_status.published:
            if not (save_action & save_action_list.UNPUBLISH_PAGE):
                queue_page_actions((page.next_page, page.previous_page),no_neighbors=True, no_archive=True)
                queue_page_archive_actions(page)

        original_page_status = page.status
        original_page_basename = page.basename

        page.modified_date = datetime.datetime.utcnow()

        change_basename = False

        if new_basename is not None:
            if new_basename == "":
                change_basename = True
                new_basename = create_basename(getunicode('page_title'),
                    page.blog)
            if new_basename != original_page_basename:
                change_basename = True

        new_publication_date = datetime.datetime.strptime(
            request.forms.get('publication_date'), DATE_FORMAT)

        if change_basename:
            page.basename = create_basename(new_basename, page.blog)

        page.publication_date = page._date_to_utc(page.blog.timezone, new_publication_date).replace(tzinfo=None)

    page.title = getunicode('page_title')
    page.text = getunicode('page_text')
    page.status = page_status.modes[int(request.forms.get('publication_status'))]
    page.tag_text = getunicode('page_tag_text')
    page.excerpt = getunicode('page_excerpt')

    change_note = getunicode('change_note')

    msg = []

    # UNPUBLISH

    if (
        (save_action & save_action_list.UNPUBLISH_PAGE and page.status == page_status.published) or  # unpublished a published page
        (original_page_status == page_status.published and page.status == page_status.unpublished)  # set a published page to draft
        ):

        unpublish_page(page)
        msg.append("Page <b>{}</b> unpublished successfully.")

    # SET UNPUBLISHED TO PUBLISHED

    elif original_page_status == page_status.unpublished and (save_action & save_action_list.UPDATE_LIVE_PAGE):
        page.status = page_status.published
        msg.append("Set to publish.")

    # SAVE DRAFT

    if (save_action & save_action_list.SAVE_TO_DRAFT):

        try:
            save_result = page.save(user, False, False, change_note)
        except PageNotChanged:
            save_result = (None, None)

        msg.append("Page <b>{}</b> saved successfully.")

        # Assign categories for page

        categories = []

        for n in request.forms.allitems():
            if n[0][:8] == 'cat-sel-':
                try:
                    category_id = int(n[0][8:])
                except ValueError:
                    category_id = None
                else:
                    categories.append(category_id)

        if not categories:
            categories.append(blog.default_category.id)
            msg.append(" Default category auto-assigned for page.")

        page_categories = []

        primary = None

        for n in page.categories:
            if n.category.id not in categories:
                delete_category = PageCategory.delete().where(
                    PageCategory.id == n.id)
                delete_category.execute()
            else:
                page_categories.append(n.category.id)
                if n.primary is True:
                    primary = n

        for n in categories:
            if n not in page_categories:
                new_page_category = PageCategory.create(
                    page=page,
                    category=Category.load(n, blog_id=page.blog.id),
                    primary=False)

        if primary is None:
            n = page.categories[0]
            n.primary = True
            n.save()

        delete_page_fileinfo(page)
        build_archives_fileinfos((page,))
        build_pages_fileinfos((page,))

    # UPDATE TAGS

    if getunicode('tag_text') is not None:
        import json
        tag_text = json.loads(getunicode('tag_text'))
        add_tags_to_page(tag_text, page)
        delete_orphaned_tags(page.blog)

    # QUEUE CHANGES FOR PUBLICATION (if any)

    if ((save_action & save_action_list.UPDATE_LIVE_PAGE)
        and (page.status == page_status.published)):

        queue_ssi_actions(page.blog)
        queue_page_actions((page,))
        queue_index_actions(page.blog)

        msg.append(" Live page updated.")

    # DETECT ANY PAGE CHANGES

    if (
        (save_action & (save_action_list.SAVE_TO_DRAFT + save_action_list.UPDATE_LIVE_PAGE))
        and (save_result[1]) is None):

        msg.append(" (Page unchanged.)")

    # RETURN REPORT

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

    status = Status(
        type='success',
        message=' / '.join(msg),
        vals=(page.for_log,)
        )

    tags.status = status
    tags._save_action = save_action
    tags._save_action_list = save_action_list

    return tags
示例#54
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)