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)
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
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)
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)
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)
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")
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
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)
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
def test_state(req, new): new.set_state(req, 1) second = New(new.id) second.get(req) assert second.state == 1
def test_mod(req, new): new.title = 'Super title' new.mod(req) second = New(new.id) second.get(req) assert new.title == second.title
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)
def test_db(req): New.test(req)