Exemplo n.º 1
0
def message():
    userid = authed()
    message = getclient().getmessage()
    db = getconn()
    touch = db.get(
        u"SELECT touch_notification,touch_starpost"
        " FROM herzog_userdata"
        " WHERE userid=%s", userid)
    if touch:
        touch_notification = touch.touch_notification
        touch_starpost = touch.touch_starpost
    else:
        touch_notification = touch_starpost = 0
    notification_num = getconn().get(
        u"SELECT count(nid) as t FROM herzog_notification"
        " WHERE userid=%s AND (lastupdate > %s)"
        " ORDER BY lastupdate DESC"
        " LIMIT 6", userid, touch_notification)
    print notification_num, touch_notification
    star_num = getconn().get(
        u"SELECT count(herzog_topic.tid) as t FROM herzog_topic"
        "  INNER JOIN herzog_topicship"
        " ON herzog_topic.tid = herzog_topicship.tid"
        " WHERE herzog_topicship.userid=%s AND"
        "   herzog_topicship.flag & 8"
        "   AND herzog_topic.lastreply > %s"
        " LIMIT 15", userid, touch_starpost)
    return '%s,%s,%s,%s' % (message['newfavs'], message['mails'],
                            notification_num['t'], star_num['t'])
Exemplo n.º 2
0
def norepeatvote(userid, tid=None, rid=None, **ps):
    if tid :
        if getconn().get(
                u"SELECT tid FROM herzog_topicship"
                " WHERE userid=%s AND tid=%s AND (flag & %s >0)",
                userid, tid, flag.UPVOTE) :
            raise HZActionError("No vote again")
    else :
        if getconn().get(
                u"SELECT rid FROM herzog_replyship"
                " WHERE userid=%s AND rid=%s AND (flag & %s >0)",
                userid, rid, flag.UPVOTE) :
            raise HZActionError('No vote again')
    return True
Exemplo n.º 3
0
def starpost():
    try:
        offset = int(request.args.get('offset', 0))
    except:
        offset = 0
    userid = authed()
    db = getconn()
    starpost = db.query(
        u"SELECT herzog_topic.tid,title"
        " FROM herzog_topic INNER JOIN herzog_topicship"
        " ON herzog_topic.tid = herzog_topicship.tid"
        " WHERE herzog_topicship.userid=%%s AND"
        "   herzog_topicship.flag & 8"
        " ORDER BY herzog_topic.lastreply DESC"
        " LIMIT %s, 15" % offset, userid)

    # update touch time
    touch = db.get(
        u"SELECT touch_starpost FROM herzog_userdata"
        " WHERE userid=%s", userid)
    now = getnow()
    if touch:
        touch = touch.touch_starpost
        db.execute(
            u"UPDATE herzog_userdata SET touch_starpost=%s"
            "  WHERE userid=%s", now, userid)
    else:
        db.execute(
            u"INSERT INTO herzog_userdata "
            "  (userid, touch_notification, touch_starpost)"
            " VALUES (%s, %s, %s)", userid, now, now)

    return render_template('starpost.html', starpost=starpost, touch=touch)
Exemplo n.º 4
0
def index():
    db = getconn()
    topics = db.query(u"SELECT tid, owner, title, score, v, lastupdate,"
                      "   lastreply, replynum, partnum, upvote, fromapp,"
                      "   flag, content, boardname FROM herzog_topic"
                      "  ORDER BY score DESC LIMIT 21")
    if len(topics) == 21 :
        score = topics[-1].score
        del topics[20]
    else :
        score = -1
    boards = getclient().allboards()
    # Filter the topics use a whitelist
    fresh = groupup(topics)
    # TODO : topics may be NONE
    # TODO : perm filter
    # TODO : fresh and topten
    topten = [ dict(title=t.title, tid=t.tid, owner=t.owner)
               for t in topics[:10] ]
    img = hzd.get('page:fresh:image')
    goods = hzd.geta('page:fresh:goods')
    ad = hzd.geto('pgae:fresh:ad')
    return render_template('fresh.html', fresh=fresh, img=img,
                           boards=boards, score=score,
                           topten=topten, goods=goods, ad=ad)
Exemplo n.º 5
0
def cms_manage():
    db = getconn()
    pages = db.query(u"SELECT pid, pagepath, pagename, lastupdate, lastuserid"
                     "  FROM herzog_cms_page")
    res = db.query(u"SELECT rid, resname, lastupdate, lastuserid"
                   "  FROM herzog_cms_resource")
    return render_template("cms_manage.html", pages=pages, res=res)
Exemplo n.º 6
0
def flagup(userid, flag, tid=None, rid=None) :
    db = getconn()
    if tid :
        dt = db.get(u"SELECT utid FROM herzog_topicship"
                    "  WHERE userid=%s AND tid=%s", userid, tid)
        if dt :
            dt = dt.utid
            db.execute(u"UPDATE herzog_topicship SET flag=flag|%s"
                       "  WHERE utid=%s", flag, dt)
        else :
            dt = db.insert(u"INSERT INTO herzog_topicship"
                           "  (userid, tid, flag) VALUES"
                           " (%s, %s, %s)", userid, tid, flag)
    else :
        dt = db.get(u"SELECT utid FROM herzog_replyship"
                    "  WHERE userid=%s AND rid=%s", userid, rid)
        if dt :
            dt = dt.utid
            db.execute(u"UPDATE herzog_replyship SET flag=flag|%s"
                       "  WHERE utid=%s", flag, dt)
        else :
            dt = db.insert(u"INSERT INTO herzog_replyship"
                           "  (userid, rid, flag) VALUES"
                           " (%s, %s, %s)", userid, rid, flag)
    return dt
Exemplo n.º 7
0
def send_at_notification(ret, *args, **kwargs):
    db = getconn()
    print ret, kwargs
    if not 'rid' in ret:
        tid = ret['tid']
        title = kwargs['title']
        rid = 0
    else:
        tid = ret.get('tid') or kwargs['tid']
        rid = ret['rid']
        title = db.get(u"SELECT title FROM herzog_topic" "  WHERE tid=%s", tid)
        title = title['title']
    params = '%s\n%s\n%s\n%s' % (title.replace(
        '\n', ' '), kwargs['userid'], tid, rid)
    touserids = RE_AT.findall(kwargs['content'])[:5]
    cli = getclient()
    now = getnow()
    for touserid in touserids:
        userid = cli.userexists(userid=touserid)
        if 'userid' in userid:
            userid = userid['userid']
        else:
            continue
        db.execute(
            u"INSERT INTO herzog_notification"
            "  (userid, t, params, s, lastupdate)"
            " VALUES (%s, %s, %s, %s, %s)", touserid, TYPE_AT, params, tid,
            now)
Exemplo n.º 8
0
def edit_resource(resname):
    userid = authed()
    res = getconn().get(
        u"SELECT * FROM herzog_cms_resource"
        "  WHERE resname=%s", resname)
    res['ds'] = res['ds']
    return render_template('edit_resource.html', res=res)
Exemplo n.º 9
0
def notification():
    try:
        offset = int(request.args.get('offset', 0))
    except:
        offset = 0
    userid = authed()
    db = getconn()
    notification = db.query(
        u"SELECT nid,t,params,lastupdate"
        " FROM herzog_notification"
        " WHERE userid=%%s"
        " ORDER BY lastupdate DESC"
        " LIMIT %d, 15" % offset, userid)

    # update touch
    touch = db.get(
        u"SELECT touch_notification"
        " FROM herzog_userdata"
        " WHERE userid=%s", userid)
    now = getnow()
    if touch:
        touch = touch.touch_notification
        db.execute(
            u"UPDATE herzog_userdata SET "
            "  touch_notification=%s"
            "  WHERE userid=%s", now, userid)
    else:
        db.execute(
            u"INSERT INTO herzog_userdata "
            "  (userid, touch_notification, touch_starpost)"
            " VALUES (%s, %s, %s)", userid, now, now)

    return render_template('notification.html',
                           notification=notification,
                           touch=touch)
Exemplo n.º 10
0
def send_upvote_notification(ret, userid, tid=None, rid=None, *args, **kwargs):
    db = getconn()
    if 'tid' is not None:
        rid = 0
        title = db.get(
            u"SELECT title, owner FROM herzog_topic"
            "  WHERE tid=%s", tid)
        touserid = title['owner']
        title = title['title']
    else:
        tid = db.get(u"SELECT tid FROM herzog_reply" "  WHERE rid=%s", rid)
        tid = tid['tid']
        title = db.get(
            u"SELECT title, owner FROM herzog_topic"
            "  WHERE tid=%s", tid)
        touserid = title['owner']
        title = title['title']
    params = '%s\n%s\n%s\n%s' % (title.replace(
        '\n', ' '), kwargs['userid'], tid, rid)
    cli = getclient()
    touserid = cli.userexists(userid=touserid)
    now = getnow()
    if 'userid' in touserid:
        touserid = touserid['userid']
        db.execute(
            u"INSERT INTO herzog_notification"
            "  (userid, t, params, s, lastupdate)"
            " VALUES (%s, %s, %s, %s, %s)", touserid, TYPE_UPVOTE, params, tid,
            now)
Exemplo n.º 11
0
def del_fs_reply(userid, rid, **ps):
    db = getconn()
    reply = db.get(
        u"SELECT tid, oldfilename FROM herzog_reply"
        "  WHERE rid=%s", rid)
    if not reply:
        raise HZActionError('No such reply')
    if not reply.oldfilename:
        logger.warning(
            "Try delete a no oldfilename file, userid=%s, fromhost=%s, reply=%s",
            userid, request.remote_addr, reply)
        return True
    topic = db.get(u"SELECT boardname FROM herzog_topic"
                   "  WHERE tid=%s", reply.tid)
    if not topic:
        raise HZActionError('No such topic')
    r = getclient().do_del(board=topic.boardname, file=reply.oldfilename)
    if 'error' in r:
        if r['emsg'] == u"文件不存在, 删除失败":
            if (isowner_topic(userid, tid)):
                warning(
                    "Delete a no exists file, filename=%s, userid=% [%s], fromhost=%s",
                    topic.oldfilename, authed, request.remote_addr, topic)
                return True
        raise HZActionError(r['emsg'])
    return True
Exemplo n.º 12
0
def update_topic(userid, tid, title, content, **ps):
    db = getconn()
    now = getnow()
    summary = gen_summary(content)
    db.execute(u"UPDATE herzog_topic SET title=%s, content=%s, lastupdate=%s,"
               "  summary=%s WHERE tid=%s", title, content, now, summary, tid)
    return dict()
Exemplo n.º 13
0
def board(boardname):
    db = getconn()
    board = getclient().showboard(board=boardname)
    if 'error' in board:
        abort(404)
    userid = getuserid()
    if userid:
        topics = db.query(
            u"SELECT herzog_topic.tid, owner, title, score, v, lastupdate,"
            "   lastreply, replynum, partnum, upvote, fromapp, readtime,"
            "   herzog_topicship.flag, content, upvote, boardname, herzog_topicship.flag as tsflag, readtime FROM herzog_topic"
            "  LEFT JOIN herzog_topicship"
            "    ON herzog_topicship.tid=herzog_topic.tid AND userid=%s"
            "  WHERE boardname=%s"
            "  ORDER BY score DESC LIMIT 16", userid, boardname)
    else:
        topics = db.query(
            u"SELECT tid, owner, title, score, v, lastupdate,"
            "   lastreply, replynum, partnum, upvote, fromapp,"
            "   flag, content, upvote, boardname FROM herzog_topic"
            " WHERE boardname=%s ORDER BY score DESC LIMIT 16", boardname)
    if len(topics) == 16:
        score = topics[-1].score
        del topics[15]
    else:
        score = -1
    bsetting = getbsetting(boardname) or dict()
    print bsetting
    return render_template('board.html',
                           board=board,
                           bsetting=bsetting,
                           topics=topics)
Exemplo n.º 14
0
def cms_manage():
    db = getconn()
    pages = db.query(u"SELECT pid, pagepath, pagename, lastupdate, lastuserid"
                     "  FROM herzog_cms_page")
    res = db.query(u"SELECT rid, resname, lastupdate, lastuserid"
                   "  FROM herzog_cms_resource")
    return render_template("cms_manage.html", pages=pages, res=res)
Exemplo n.º 15
0
def index():
    db = getconn()
    topics = db.query(u"SELECT tid, owner, title, score, v, lastupdate,"
                      "   lastreply, replynum, partnum, upvote, fromapp,"
                      "   flag, content, boardname FROM herzog_topic"
                      "  ORDER BY score DESC LIMIT 21")
    if len(topics) == 21:
        score = topics[-1].score
        del topics[20]
    else:
        score = -1
    boards = getclient().allboards()
    # Filter the topics use a whitelist
    fresh = groupup(topics)
    # TODO : topics may be NONE
    # TODO : perm filter
    # TODO : fresh and topten
    topten = [
        dict(title=t.title, tid=t.tid, owner=t.owner) for t in topics[:10]
    ]
    img = hzd.get('page:fresh:image')
    goods = hzd.geta('page:fresh:goods')
    ad = hzd.geto('pgae:fresh:ad')
    return render_template('fresh.html',
                           fresh=fresh,
                           img=img,
                           boards=boards,
                           score=score,
                           topten=topten,
                           goods=goods,
                           ad=ad)
Exemplo n.º 16
0
def board(boardname):
    db = getconn()
    board = getclient().showboard(board=boardname)
    if 'error' in board :
        abort(404)
    userid = getuserid()
    if userid :
        topics = db.query(u"SELECT herzog_topic.tid, owner, title, score, v, lastupdate,"
                          "   lastreply, replynum, partnum, upvote, fromapp, readtime,"
                          "   herzog_topicship.flag, content, upvote, boardname, herzog_topicship.flag as tsflag, readtime FROM herzog_topic"
                          "  LEFT JOIN herzog_topicship"
                          "    ON herzog_topicship.tid=herzog_topic.tid AND userid=%s"
                          "  WHERE boardname=%s"
                          "  ORDER BY score DESC LIMIT 16", userid, boardname)
    else :
        topics = db.query(u"SELECT tid, owner, title, score, v, lastupdate,"
                          "   lastreply, replynum, partnum, upvote, fromapp,"
                          "   flag, content, upvote, boardname FROM herzog_topic"
                          " WHERE boardname=%s ORDER BY score DESC LIMIT 16", boardname)
    if len(topics) == 16 :
        score = topics[-1].score
        del topics[15]
    else :
        score = -1
    bsetting = getbsetting(boardname) or dict()
    print bsetting
    return render_template('board.html', board=board, bsetting=bsetting,
                           topics=topics)
Exemplo n.º 17
0
def update_reply(userid, rid, content, **ps):
    db = getconn()
    now = getnow()
    db.execute(
        u"UPDATE herzog_reply SET content=%s, lastupdate=%s"
        "  WHERE rid=%s", content, now, rid)
    return dict()
Exemplo n.º 18
0
def update_topic(userid, tid, title, content, **ps):
    db = getconn()
    now = getnow()
    summary = gen_summary(content)
    db.execute(
        u"UPDATE herzog_topic SET title=%s, content=%s, lastupdate=%s,"
        "  summary=%s WHERE tid=%s", title, content, now, summary, tid)
    return dict()
Exemplo n.º 19
0
def ajax_get_reply():
    form = getfields(_require=('rid',), _form=request.args)
    db = getconn()
    reply = db.get(u"SELECT rid, brid, replyid, owner, lastupdate,"
                   "  fromapp, flag, content FROM herzog_reply"
                   "  WHERE rid=%s", form['rid'])
    reply['html_content'] = postHtml(reply['content'])
    reply['owner_avatar'] = url_for_avatar(reply['owner'])
    return json_success(reply=reply)
Exemplo n.º 20
0
def ajax_get_reply():
    form = getfields(_require=('rid',), _form=request.args)
    db = getconn()
    reply = db.get(u"SELECT rid, brid, replyid, owner, lastupdate,"
                   "  fromapp, flag, content FROM herzog_reply"
                   "  WHERE rid=%s", form['rid'])
    reply['html_content'] = postHtml(reply['content'])
    reply['owner_avatar'] = url_for_avatar(reply['owner'])
    return json_success(reply=reply)
Exemplo n.º 21
0
def get_all_bsetting():
    bsetting = getconn().get(u"SELECT ds FROM herzog_cms_resource"
                             "  WHERE resname='site::bsetting'")
    if not bsetting:
        return None
    bsetting = json.loads(bsetting['ds'])
    bs = {}
    for it in bsetting['boards']['list']:
        bs[it['info']['title']] = it
    return bs
Exemplo n.º 22
0
def page_preview():
    form = getfields(_require=('pagepath', 'pagename', 'ds'))
    db = getconn()
    pagedata = db.get(u"SELECT tpl FROM herzog_cms_page"
                      " WHERE pagepath=%s", form['pagepath'])
    if not pagedata:
        abort(404)
    return render_template('cms/%s.html' % pagedata.tpl,
                           pagename=form['pagename'],
                           **ds)
Exemplo n.º 23
0
def page_preview() :
    form = getfields(_require=('pagepath', 'pagename', 'ds'))
    db = getconn()
    pagedata = db.get(u"SELECT tpl FROM herzog_cms_page"
                      " WHERE pagepath=%s", form['pagepath'])
    if not pagedata :
        abort(404)
    return render_template('cms/%s.html' % pagedata.tpl,
                           pagename=form['pagename'],
                           **ds)
Exemplo n.º 24
0
def getbsetting(boardname):
    bsetting = getconn().get(u"SELECT ds FROM herzog_cms_resource"
                             "  WHERE resname='site::bsetting'")
    if not bsetting:
        return None
    bsetting = json.loads(bsetting['ds'])
    for it in bsetting['boards']['list']:
        if it['info']['title'] == boardname:
            return it
    return None
Exemplo n.º 25
0
def get_all_bsetting() :
    bsetting = getconn().get(u"SELECT ds FROM herzog_cms_resource"
                             "  WHERE resname='site::bsetting'")
    if not bsetting :
        return None
    bsetting = json.loads(bsetting['ds'])
    bs = {}
    for it in bsetting['boards']['list'] :
        bs[it['info']['title']] = it
    return bs
Exemplo n.º 26
0
def getbsetting(boardname) :
    bsetting = getconn().get(u"SELECT ds FROM herzog_cms_resource"
                             "  WHERE resname='site::bsetting'")
    if not bsetting :
        return None
    bsetting = json.loads(bsetting['ds'])
    for it in bsetting['boards']['list'] :
        if it['info']['title'] == boardname :
            return it
    return None
Exemplo n.º 27
0
def unvote(userid, tid=None, rid=None, **ps):
    if flagdown(userid, flag.UPVOTE, tid=tid, rid=rid) is False :
        raise HZActionError("Have not vote it")
    db = getconn()
    if tid :
        db.execute(u"UPDATE herzog_topic SET upvote=upvote-1"
                   " WHERE tid=%s", tid)
    else :
        db.execute(u"UPDATE herzog_reply SET upvote=upvote-1"
                   " WHERE rid=%s", rid)
    return dict()        
Exemplo n.º 28
0
def upvote(userid, tid=None, rid=None, **ps):
    db = getconn()
    if tid :
        db.execute(u"UPDATE herzog_topic SET upvote=upvote+1"
                   " WHERE tid=%s", tid)
        dt = flagup(userid, flag.UPVOTE, tid=tid)
    else :
        db.execute(u"UPDATE herzog_reply SET upvote=upvote+1"
                   " WHERE rid=%s", rid)
        dt = flagup(userid, flag.UPVOTE, rid=rid)
    return dict(dt=dt)
Exemplo n.º 29
0
def flag_reply(ret, userid, tid, *s, **ps):
    db = getconn()
    now = getnow()
    if db.get(u"SELECT utid FROM herzog_topicship"
              "   WHERE userid=%s AND tid=%s AND (flag & %s >0)",
              userid, tid, flag.SPEAK) :
        db.execute(u"UPDATE herzog_topic SET replynum=replynum+1"
                   "  , lastreply=%s WHERE tid=%s", tid, now)
    else :
        db.execute(u"UPDATE herzog_topic SET replynum=replynum+1"
                   "  , partnum=partnum+1, lastreply=%s WHERE tid=%s",
                   tid, now)
    flagup(userid, flag.REPLY, tid=tid)
Exemplo n.º 30
0
def update2fs(userid, tid, title, content, **ps):
    db = getconn()
    topic = db.get(u"SELECT boardname, oldfilename FROM herzog_topic"
                   "  WHERE tid=%s", tid)
    if not topic :
        raise HZActionError('No such topic')
    r = getclient().do_edit(board=topic.boardname,
                            title=title.encode('utf8'),
                            text=content.encode('utf8'),
                            file=topic.oldfilename)
    if r.has_key('error') :
        raise HZActionError(r['emsg'])
    return True
Exemplo n.º 31
0
def flag_comment(ret, userid, replyid, *s, **ps):
    db = getconn()
    now = getnow()
    if db.get(u"SELECT utid FROM herzog_topicship"
              "  WHERE userid=%s AND tid=%s AND (flag & %s >0)",
              userid, ret['tid'], flag.SPEAK) :
        db.execute(u"UPDATE herzog_topic SET lastcomment=%s"
                   "  WHERE tid=%s", now, ret['tid'])
    else :
        db.execute(u"UPDATE herzog_topic SET partnum=partnum+1"
                   " , lastreply=%s WHERE tid=%s", now, ret['tid'])
    flagup(userid, flag.COMMENT, tid=ret['tid'])
    flagup(userid, flag.COMMENT, rid=replyid)
Exemplo n.º 32
0
def query_postid(b, f) :
    db = getconn()
    topic = db.get(u"SELECT tid FROM herzog_topic"
                   "  WHERE boardname=%s AND oldfilename=%s LIMIT 1",
                   b, f)
    if topic :
        return topic
    reply = db.get(u"SELECT rid FROM herzog_reply LEFT JOIN herzog_topic"
                   "  ON herzog_reply.tid = herzog_topic.tid"
                   "  WHERE herzog_reply.oldfilename=%s AND boardname=%s LIMIT 1",
                   f, b)
    if reply :
        return reply
    return None
Exemplo n.º 33
0
def page(pagepath):
    db = getconn()
    pagedata = db.get(u'SELECT pagename, tpl, ds FROM herzog_cms_page'
                      '  INNER JOIN herzog_cms_resource'
                      '  ON herzog_cms_page.resname = '
                      '       herzog_cms_resource.rescname'
                      '  WHERE pagepath=%s', pagepath)
    if not pagedata :
        abort(404)
    if '.' in pagedata.tpl :
        abort(404)
    return render_template('cms/%s.html' % pagedata.tpl,
                           pagename=pagedata.pagename,
                           **json.loads(pagedata.ds))
Exemplo n.º 34
0
def send_reply_notification(ret, userid, tid, *args, **kwargs):
    print 1
    db = getconn()
    touserid = db.get(
        u"SELECT owner, title FROM herzog_topic"
        "  WHERE tid=%s", tid)
    params = '%s\n%s\n%s\n%s' % (touserid.title.replace(
        '\n', ' '), userid, tid, ret['rid'])
    now = getnow()
    db.execute(
        u"INSERT INTO herzog_notification"
        "  (userid, t, params, s, lastupdate)"
        " VALUES (%s, %s, %s, %s, %s)", touserid.owner, TYPE_REPLY, params,
        tid, now)
Exemplo n.º 35
0
def page(pagepath):
    db = getconn()
    pagedata = db.get(
        u'SELECT pagename, tpl, ds FROM herzog_cms_page'
        '  INNER JOIN herzog_cms_resource'
        '  ON herzog_cms_page.resname = '
        '       herzog_cms_resource.rescname'
        '  WHERE pagepath=%s', pagepath)
    if not pagedata:
        abort(404)
    if '.' in pagedata.tpl:
        abort(404)
    return render_template('cms/%s.html' % pagedata.tpl,
                           pagename=pagedata.pagename,
                           **json.loads(pagedata.ds))
Exemplo n.º 36
0
def topic(userid, boardname, title, content, fromaddr, time=None,
          summary=None, fromapp='', **ps) :
    if time is None :
        time = dt.now()
    if summary is None :
        summary = gen_summary(content)
    if title > 36 :
        title = title[:36]
    tid = getconn().execute(
        u" INSERT INTO herzog_topic"
        "   (boardname, owner, title, lastupdate, lastreply,"
        "    lastcomment, fromaddr, summary, content)"
        "  VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
        boardname, userid, title, time, time, time, fromaddr,
        summary, content)
    return dict(tid=tid)
Exemplo n.º 37
0
def topic(tid):
    db = getconn()
    userid = authed()
    if userid :
        topic = db.get(u"SELECT herzog_topic.tid as tid, owner, title, score, v,"
                       "  lastupdate, lastreply, replynum, partnum, upvote,"
                       "  fromapp, herzog_topic.flag, content, upvote, boardname,"
                       "  herzog_topicship.flag as tsflag, readtime FROM herzog_topic"
                       " LEFT JOIN herzog_topicship"
                       " ON herzog_topicship.tid=herzog_topic.tid"
                       "     AND herzog_topicship.userid=%s"
                       " WHERE herzog_topicship.tid=%s", userid, tid)
    else :
        topic = db.get(u"SELECT tid, owner, title, score, v, lastupdate,"
                       "   lastreply, replynum, partnum, upvote, fromapp,"
                       "   flag, content, upvote, boardname FROM herzog_topic"
                       " WHERE tid=%s", tid)        
    if not topic :
        abort(404)
    if userid :
        replys0 = db.query(u"SELECT herzog_reply.rid, brid, replyid, owner,"
                           "  lastupdate, fromapp, herzog_reply.flag, content,"
                           "  upvote, herzog_replyship.flag as rsflag"
                           "  FROM herzog_reply LEFT JOIN herzog_replyship"
                           "  ON herzog_replyship.rid=herzog_reply.rid"
                           "     AND herzog_replyship.userid=%s"
                           "  WHERE tid=%s ORDER BY brid LIMIT 100",
                           userid, tid)
    else :
        replys0 = db.query(u"SELECT herzog_reply.rid, brid, replyid, owner,"
                           "  lastupdate, fromapp, flag, content, upvote"
                           "  herzog_replyship.flag as rsflag"
                           "  FROM herzog_reply"
                           "  WHERE tid=%s ORDER BY brid LIMIT 100",
                           userid, tid)
    lastbranch = None
    lastcomments = None
    replys = []
    for r in replys0 :
        if lastbranch is None or r.brid != lastbranch.brid :
            lastcomments = r['comments'] = []
            lastbranch = r
            replys.append(r)
        else :
            lastcomments.append(r)
    topic['boarddesc'] = getboards()[topic['boardname']]['boarddesc']
    return render_template('topic.html', topic=topic, replys=replys)
Exemplo n.º 38
0
def reply(userid, tid, content, fromaddr, time=None, fromapp='', *ps) :
    replyid = brid = 0
    if time is None :
        time = dt.now()

    db = getconn()
    rid = db.execute(u"INSERT INTO herzog_reply"
                     "  (tid, brid, replyid, owner, lastupdate,"
                     "   fromaddr, fromapp, content) VALUES"
                     " (%s, %s, %s, %s, %s, %s, %s, %s)",
                     tid, brid, replyid, userid, time, fromaddr,
                     fromapp, content)
    db.execute(u"UPDATE herzog_reply SET brid=%s WHERE rid=%s",
               rid, rid)
    db.execute(u"UPDATE herzog_topic SET lastreply=%s WHERE tid=%s",
               time, tid)

    return dict(rid=rid, tid=tid)
Exemplo n.º 39
0
def update2fs_reply(userid, rid, content, **ps) :
    db = getconn()
    reply = db.get(u"SELECT tid, oldfilename FROM herzog_reply"
                   "  WHERE rid=%s", rid)
    if not reply :
        raise HZActionError('No such reply')
    topic = db.get(u"SELECT boardname FROM herzog_topic"
                   "  WHERE tid=%s", reply.tid)
    if not topic :
        raise HZActionError("No such topic")
    header, _, quote, tail = getfspost(topic.boardname,
                                       reply.oldfilename)
    r = getclient().do_edit(board=topic.boardname,
                            title=header['title'].decode('gbk').encode('utf8'),
                            text=content.encode('utf8'),
                            file=reply.oldfilename)
    if r.has_key('error') :
        raise HZActionError(r['emsg'])
    return True
Exemplo n.º 40
0
def comment(userid, replyid, content, fromaddr, time=None, fromapp='', *ps) :
    if time is None :
        time = dt.now()

    db = getconn()

    reply = db.get("SELECT tid, brid FROM herzog_reply WHERE rid=%s", replyid)
    if not reply :
        raise HZActionError("No such topic")

    rid = db.execute(u"INSERT INTO herzog_reply"
                     "  (tid, brid, replyid, owner, lastupdate,"
                     "   fromaddr, content) VALUES"
                     " (%s, %s, %s, %s, %s, %s, %s)",
                     reply.tid, reply.brid, replyid, userid, time,
                     fromaddr, content)
    db.execute(u"UPDATE herzog_topic SET lastcomment=%s WHERE tid=%s",
               time, reply.tid)

    return dict(rid=rid, tid=reply.tid)
Exemplo n.º 41
0
def update_resource():
    userid = authed()
    form = getfields(_require=('resname', 'ds'))
    try:
        json.loads(form['ds'])
    except ValueError :
        return json_error(3, "Wrong json value")
    db = getconn()
    rid = db.get(u"SELECT rid FROM herzog_cms_resource"
                   "  WHERE resname=%s", form['resname'])
    if rid :
        db.execute(u"UPDATE herzog_cms_resource SET"
                   "  resname=%s, ds=%s, lastuserid=%s"
                   " WHERE rid=%s",
                   form['resname'], form['ds'], userid, rid.rid)
    else :
        db.execute(u"INSERT INTO herzog_cms_resource"
                   "  (resname, ds, lastuserid) VALUES"
                   "  (%s, %s, %s)", form['resname'], form['ds'],
                   userid)
    return json_success()
Exemplo n.º 42
0
def flagdown(userid, flag, tid=None, rid=None) :
    db = getconn()
    if tid :
        dt = db.get(u"SELECT utid FROM herzog_topicship"
                    "  WHERE userid=%s AND tid=%s AND (flag & %s >0)",
                    userid, tid, flag)
        if dt is None :
            return False
        dt = dt.utid
        db.execute(u"UPDATE herzog_topicship SET flag=flag^%s"
                   " WHERE utid=%s", flag, dt)
    else :
        dt = db.get(u"SELECT utid FROM herzog_replyship"
                    "  WHERE userid=%s AND rid=%s AND (flag & %s >0)",
                    userid, rid, flag)
        if not dt :
            return False
        dt = dt.utid
        db.execute(u"UPDATE herzog_replyship SET flag=flag^%s"
                   " WHERE utid=%s", flag, dt)
    return dt
Exemplo n.º 43
0
def update_page():
    userid = authed()
    form = getfields(_require=('pagepath', 'pagename', 'tpl', 'rid'))
    db = getconn()
    pid = db.query(u"SELECT pid FROM herzog_cms_page"
                   "  WHERE pagepath=%s", form['pagepath'])
    if pid :
        if form['pagename'].strip() :
            db.execute(u"UPDATE herzog_cms_page SET"
                       "  pagename=%s, pagepath=%s, tpl=%s, rid=%s, lastuserid=%s",
                       "  WHERE pid=%s",
                       form['pagename'], form['pagepath'], form['tpl'],
                       form['rid'], userid, pid.pid)
        else :
            db.execute(u"DELETE FROM herzog_cms_page"
                       "  WHERE pid=%s", pid.pid)
    else :
        rid = db.execute(u"INSERT INTO herzog_cms_page"
                         "  pagename, pagepath, tpl, rid, lastuserid VALUES"
                         "  (%s, %s, %s, %s, %s)",
                         form['pagename'], form['pagepath'], form['tpl'],
                         form['rid'], userid)
    return json_success()
Exemplo n.º 44
0
def topic(tid):
    db = getconn()
    topic = db.get(u"SELECT tid, owner, title, score, v, lastupdate,"
                   "   lastreply, replynum, partnum, upvote, fromapp,"
                   "   flag, content FROM herzog_topic WHERE tid=%s", tid)
    if not topic :
        abort(404)
    replys0 = db.query(u"SELECT rid, brid, replyid, owner, lastupdate,"
                       "  fromapp, flag, content FROM herzog_reply"
                       "  WHERE tid=%s ORDER BY brid LIMIT 100", tid)
    lastbranch = None
    lastcomments = None
    replys = []
    for r in replys0 :
        if lastbranch is None or r.brid != lastbranch.brid :
            lastcomments = r['comments'] = []
            lastbranch = r
            replys.append(r)
        else :
            lastcomments.append(r)

        
    return render_template('topic.html', topic=topic, replys=replys)
Exemplo n.º 45
0
def edit_resource(resname):
    userid = authed()
    res = getconn().get(u"SELECT * FROM herzog_cms_resource"
                        "  WHERE resname=%s", resname)
    res['ds'] = res['ds']
    return render_template('edit_resource.html', res=res)
Exemplo n.º 46
0
def comment_reply_exists(replyid, **ps) :
    reply = getconn().get(u"SELECT rid FROM herzog_reply WHERE rid=%s",
                          replyid)
    if not reply :
        raise HZActionError("No such reply")
    return True
Exemplo n.º 47
0
def setv(userid, tid, v, **ps):
    db = getconn()
    db.execute(u"UPDATE herzog_topic SET v=%s WHERE tid=%s", v, tid)
    return dict()
Exemplo n.º 48
0
def update_reply(userid, rid, content, **ps):
    db = getconn()
    now = getnow()
    db.execute(u"UPDATE herzog_reply SET content=%s, lastupdate=%s"
               "  WHERE rid=%s", content, now, rid)
    return dict()