Example #1
0
def news_locale_detail(req, locale, id):
    new = New(id)

    if not new.get(req):
        raise SERVER_RETURN(state.HTTP_NOT_FOUND)

    return generate_page(req, "news_detail.html", new=new, locale=locale)
Example #2
0
def new(req, request):
    new = New()
    new.title = u'Title'
    new.body = u'perex'
    new.public = True
    new.author_id = 1
    new.locale = ''
    new.state = 0
    new.data = {}
    new.add(req)
    return new
Example #3
0
def admin_news(req):
    check_login(req)
    match_right(req, module_rights)

    show = req.args.getfirst("show", "", uni)

    pager = Pager(sort="desc")
    pager.bind(req.args)

    kwargs = {}

    if show == "ready":
        pager.set_params(show=show)
        kwargs["state"] = 2
        kwargs["public_date"] = 0
    elif show == "drafts":
        pager.set_params(show=show)
        kwargs["state"] = 1
    else:
        show = None

    if not do_check_right(req, "news_editor"):
        kwargs["author_id"] = req.login.id

    rows = New.list(req, pager, **kwargs)
    return generate_page(req, "admin/news.html", pager=pager, rows=rows, show=show)
Example #4
0
def admin_news_add(req):
    check_login(req)
    match_right(req, module_rights)

    new = New()
    if req.method == "POST":
        new.bind(req.form, req.login.id)
        error = new.add(req)

        if error:
            return generate_page(req, "admin/news_mod.html", new=new, error=error)

        redirect(req, "/admin/news/%d" % new.id)
    # end

    new.state = 2 if do_check_right(req, "news_editor") else 1
    return generate_page(req, "admin/news_mod.html", new=new)
Example #5
0
def news_list(req, locale=None):
    locale = locale if locale else get_lang(req)

    pager = Pager(limit=5, sort="desc", order="create_date")
    pager.bind(req.args)

    rows = New.list(req, pager, body=True, public=1, locale=(locale, ""))
    return generate_page(req, "news_list.html", pager=pager, rows=rows, lang=locale)
Example #6
0
def admin_news_enable(req, id):
    check_login(req, "/log_in?referer=/admin/news")
    match_right(req, module_rights)
    check_referer(req, "/admin/news")

    new = New(id)
    if not new.get(req):
        raise SERVER_RETURN(state.HTTP_NOT_FOUND)

    if (not do_check_right(req, "news_editor")) and (
        not (new.author_id == req.login.id and new.public_date.year == 1970)
    ):
        raise SERVER_RETURN(state.HTTP_FORBIDDEN)

    n_state = int(req.uri.endswith("/enable"))
    n_state = (n_state * 2) if new.public_date.year > 1970 else n_state
    new.set_state(req, n_state)

    redirect(req, "/admin/news")
Example #7
0
def item_list(req, pager, body, **kwargs):
    body = ', body ' if body else ''

    public = kwargs.pop('public', False)
    keys = list("%s %s %%s" % (k, 'in' if islistable(v) else '=')
                for k, v in kwargs.items())
    if public:       # public is alias key
        keys.append("public_date > 0")
        keys.append("state != 0")

    cond = "WHERE " + ' AND '.join(keys) if keys else ''

    tran = req.db.transaction(req.log_info)
    c = tran.cursor(DictCursor)
    c.execute("""
        SELECT new_id, author_id, email, create_date, public_date,
            title, locale, state %s
        FROM news n LEFT JOIN logins l ON (n.author_id = l.login_id) %s
            ORDER BY %s %s LIMIT %%s, %%s
        """ % (body, cond, pager.order, pager.sort),
              tuple(kwargs.values()) + (pager.offset, pager.limit))
    items = []
    for row in iter(c.fetchone, None):
        item = New(row['new_id'])
        item.author_id = row['author_id']
        item.author = row['email']
        item.state = row['state']
        item.create_date = datetime.fromtimestamp(row['create_date'])
        item.public_date = datetime.fromtimestamp(row['public_date'])
        item.title = row['title']
        item.locale = row['locale']
        if body:
            item.body = row['body']
        items.append(item)
    # endfor

    c.execute("SELECT count(*) FROM news %s" % cond, kwargs.values())
    pager.total = c.fetchone()['count(*)']
    tran.commit()

    return items
Example #8
0
def admin_news_mod(req, id):
    check_login(req)
    match_right(req, module_rights)

    new = New(id)
    if not new.get(req):
        raise SERVER_RETURN(state.HTTP_NOT_FOUND)
    if not do_check_right(req, "news_editor") and new.author_id != req.login.id:
        raise SERVER_RETURN(state.HTTP_FORBIDDEN)

    if req.method == "POST":
        new.bind(req.form)
        error = new.mod(req)
        if error != new:
            return generate_page(req, "admin/news_mod.html", new=new, error=error)

        if not new.get(req):
            raise SERVER_RETURN(state.HTTP_NOT_FOUND)

    return generate_page(req, "admin/news_mod.html", new=new)
Example #9
0
def test_list(req, new):
    items = New.list(req, Pager(), body=True, state=0)
    assert len(items) == 1
    items = New.list(req, Pager(), body=True, state=1)
    assert len(items) == 0
Example #10
0
def test_state(req, new):
    new.set_state(req, 1)
    second = New(new.id)
    second.get(req)
    assert second.state == 1
Example #11
0
def test_mod(req, new):
    new.title = 'Super title'
    new.mod(req)
    second = New(new.id)
    second.get(req)
    assert new.title == second.title
Example #12
0
def test_get(req, new):
    second = New(new.id)
    second.get(req)
    for attr in ('id', 'title', 'body', 'author_id', 'locale', 'state',
                 'data'):
        assert getattr(new, attr) == getattr(second, attr)
Example #13
0
def test_db(req):
    New.test(req)