예제 #1
0
 def post(self):
     uid = self.SESSION['uid']
     perm = self.SESSION['perm']
     pid = self.get_argument('pid', None)
     if pid:
         r = self._edit(pid)
     else:
         r = self._save()
     if uid == pid:
         s = Staff()
         s.whois('_id', uid)
         self.SESSION['nick']=s.nick if s.nick and '@' not in s.nick else s.email
         self.SESSION['ulogo']=s.avatar
     if r[0]:
         self._set_perm(r[1])
         if (perm[0][0] in [0x01, 0x02]) and (uid != pid):
             self.redirect('/space/perm/')
         else:
             self.redirect('/space/')
     else:
         l = self.PARAMS.keys() + self.ARGS
         d = {'pid':None, 'pm':PERM_CLASS['NORMAL'], 'warning': r[1]}
         for n in l:d[n] = None
         s = Staff()
         rp = s._api.get(pid)
         if (not rp[0]) or (not rp[1]):
             rp = (True, d)
         rp[1]['isself'] = uid == pid
         rp[1]['warning'] = r[1]
         return self.render('perm/new.html', **rp[1])
예제 #2
0
 def post(self):
     m = self.get_argument('email', None)
     if m is None:return self.write(json.dumps({'error':'请输入邮箱'}))
     p = self.get_argument('password', None)
     if p is None:return self.write(json.dumps({'error':'请输入密码'}))
     c = self.get_argument('cache', None)
     s = Staff()
     r = s.login(m, p)
     if r[0]:
         uid = r[1]['_id']
         self.SESSION['uid']=uid
         self.SESSION['nick']=r[1]['nick'] if r[1]['nick'] and '@' not in r[1]['nick'] else r[1].get('email', None)
         self.SESSION['ulogo']=r[1].get('avatar', None)
         self.SESSION['perm']=r[1]['pm']
         self.redirect('/')
     else:
         self.write(json.dumps({'error':r[1]}))
예제 #3
0
 def post(self):
     m = self.get_argument('email', None)
     if m is None:return self.render('login.html', **{'warning': '请输入邮箱', 'm':m})
     p = self.get_argument('password', None)
     if p is None:return self.render('login.html', **{'warning': '请输入密码', 'm':m})
     c = self.get_argument('cache', None)
     s = Staff()
     r = s.login(m, p)
     if r[0]:
         uid = r[1]['_id']
         self.SESSION['uid']=uid
         self.SESSION['nick']=r[1]['nick'] if r[1]['nick'] and '@' not in r[1]['nick'] else r[1].get('email', None)
         self.SESSION['ulogo']=r[1].get('avatar', None)
         self.SESSION['perm']=r[1]['pm']
         self.redirect('/')
     else:
         self.render_alert(r[1])
예제 #4
0
파일: project.py 프로젝트: yimiqisan/vision
 def __init__(self):
     DB_CON.register([ProjectDoc])
     datastore = DB_CON[DB_NAME]
     col_name = ProjectDoc.__collection__
     collection = datastore[col_name]
     doc = collection.ProjectDoc()
     self.p = Permission()
     self.stf = Staff()
     API.__init__(self, col_name=col_name, collection=collection, doc=doc)
예제 #5
0
파일: item.py 프로젝트: yimiqisan/vision
 def __init__(self):
     DB_CON.register([ItemDoc])
     datastore = DB_CON[DB_NAME]
     col_name = ItemDoc.__collection__
     collection = datastore[col_name]
     doc = collection.ItemDoc()
     self.rpl = Reply()
     self.stf = Staff()
     self.alt = Alert()
     API.__init__(self, col_name=col_name, collection=collection, doc=doc)
예제 #6
0
 def _save(self):
     uid = self.SESSION['uid']
     kwargs = {'belong':uid}
     params = self.PARAMS.copy()
     pm = self.get_argument('pm', None)
     if pm == u'MANAGER':
         kwargs['level'] = u'manager'
         params.pop('profession')
     elif pm == u'EDITOR':
         kwargs['level'] = u'editor'
     else:
         return (False, '请选择权限')
     for k, v in params.items():
         o = self.get_argument(k, None)
         if o:
             kwargs[k]=o
         else:
             return (False, v)
     for k in self.ARGS:
         o = self.get_argument(k, None)
         if o:kwargs[k]=o
     s = Staff()
     return s.register(**kwargs)
예제 #7
0
 def post(self, she):
     uid = self.SESSION['uid']
     perm = self.SESSION['perm']
     vpwd = self.get_argument('verifypwd', None)
     opwd = self.get_argument('oldpwd', None)
     newpwd = self.get_argument('newpwd', None)
     repwd = self.get_argument('repwd', None)
     if newpwd != repwd:return self.render("perm/cpwd.html", pid=she, warning='重复密码不匹配')
     s = Staff()
     newpwd = unicode(md5(newpwd).hexdigest())
     if vpwd:
         s.whois("_id", uid)
         vpwd = unicode(md5(vpwd).hexdigest())
         if (s.password != vpwd):return self.render('perm/cpwd.html', pid=she, **{'warning': '密码不正确'})
         s._api.change_pwd(she, vpwd, newpwd, repwd)
     if opwd:
         s.whois("_id", she)
         opwd = unicode(md5(opwd).hexdigest())
         if (s.password != opwd):return self.render('perm/cpwd.html', pid=she, **{'warning': '密码不正确'})
         s._api.change_pwd(she, opwd, newpwd, repwd)
     if (perm[0][0] in [0x01, 0x02]) and (uid != she):
         self.redirect('/space/perm/')
     else:
         self.redirect('/space/')
예제 #8
0
파일: item.py 프로젝트: yimiqisan/vision
class ItemAPI(API):
    def __init__(self):
        DB_CON.register([ItemDoc])
        datastore = DB_CON[DB_NAME]
        col_name = ItemDoc.__collection__
        collection = datastore[col_name]
        doc = collection.ItemDoc()
        self.rpl = Reply()
        self.stf = Staff()
        self.alt = Alert()
        API.__init__(self, col_name=col_name, collection=collection, doc=doc)
    
    def save(self, owner, vid, vtype, logo, *works, **kwargs):
        ''' 保存作品 '''
        return super(ItemAPI, self).create(owner=owner, vid=vid, vtype=vtype, logo=logo, works=list(works), **kwargs)

    def remove(self, id):
        ''' 删除单个作品 '''
        r = self.one(_id=id)
        if (r[0] and r[1]):
            vtype, vid = r[1].get('vtype', None), r[1].get('vid', None)
            super(ItemAPI, self).remove(id)
            return (True, vtype, vid)
        return (False, 'item not exist')
    
    def edit(self, id, **kwargs):
        ''' 编辑作品 '''
        kwargs['isOverWrite']=True
        return super(ItemAPI, self).edit(id, **kwargs)
    
    def _gnick(self, owner):
        self.stf.whois('_id', owner)
        return self.stf.nick
    
    def _gename(self, owner):
        self.stf.whois('_id', owner)
        return self.stf.engname
    
    def _alt_count(self, owner, project):
        return self.alt._api.list(owner, project)[1]
    
    def _output(self, result=[], cuid=DEFAULT_CUR_UID):
        ''' 作品格式化输出 '''
        now = datetime.now()
        output_map = lambda i: {'eid':i['_id'], 'refer_id':i['added'].get('refer_id', None), 'logo':i.get('logo', None), 'vid':i.get('vid', None), 'vtype':i.get('vtype', None), 'added_id':i['added_id'], 'owner':i['owner'], 'nick':self._gnick(i['owner']), 'is_own':(cuid==i['owner'] if i['owner'] else True), 'works':i['works'], 'cnt':self.rpl._api._count(i['_id']), 'created':self._escape_created(now, i['created']), 'name':i['added'].get('name', None), 'client':i['added'].get('client', None), 'title':i['added'].get('title', None), 'content':i['added'].get('content', None), 'year':i['added'].get('year', None), 'acnt':self._alt_count(cuid, i['_id'])}
        if isinstance(result, dict):
            return output_map(result)
        return map(output_map, result)
    
    def get(self, id, cuid=DEFAULT_CUR_UID):
        ''' 获取单个作品 '''
        r = self.one(_id=id)
        if (r[0] and r[1]):return (True, self._output(result=r[1], cuid=cuid))
        return r
    
    def copy(self, id, **kwargs):
        ''' 考呗一个作品 '''
        r = self.get(id)
        if r[0] and r[1]:
            if r[1].has_key('title') and r[1]['title']:
                title = r[1]['title']
            elif r[1].has_key('name') and r[1]['name']:
                title = r[1]['name']
            return self.save(kwargs['owner'], kwargs['vid'], kwargs['vtype'], r[1]['logo'], *r[1]['works'], refer_id=r[1]['eid'], nick=kwargs['nick'], title=title)
        return r
    
    def page(self, cuid=DEFAULT_CUR_UID, owner=None, vid=None, vtype=None, page=1, pglen=5, cursor=None, limit=20, order_by='added_id', order=-1):
        ''' 分页显示作品 '''
        kwargs = {}
        if owner:kwargs['owner']=owner
        if vid:kwargs['vid']=vid
        if vtype:kwargs['vtype']=vtype
        kwargs['page']=page
        kwargs['pglen']=pglen
        if cursor:kwargs['cursor']=cursor
        kwargs['limit']=limit
        kwargs['order_by']=order_by
        kwargs['order']=order
        r = super(ItemAPI, self).page(**kwargs)
        if r[0]:
            kw = {'result':r[1]}
            if cuid:kw['cuid']=cuid
            l = self._output(**kw)
            return (True, l, r[2])
        else:
            return (False, r[1])
예제 #9
0
파일: project.py 프로젝트: yimiqisan/vision
class ProjectAPI(API):
    def __init__(self):
        DB_CON.register([ProjectDoc])
        datastore = DB_CON[DB_NAME]
        col_name = ProjectDoc.__collection__
        collection = datastore[col_name]
        doc = collection.ProjectDoc()
        self.p = Permission()
        self.stf = Staff()
        API.__init__(self, col_name=col_name, collection=collection, doc=doc)
    
    def save(self, owner, title, description, members, **kwargs):
        ''' 新建项目 '''
        return super(ProjectAPI, self).create(owner=owner, title=title, description=description, members=list(members), **kwargs)
    
    def remove(self, id):
        ''' 删除项目 '''
        return super(ProjectAPI, self).remove(id)
    
    def edit(self, id, **kwargs):
        ''' 编辑项目 '''
        return super(ProjectAPI, self).edit(id, **kwargs)
    
    def _perm(self, uid, pid):
        return self.p._api.get_owner_value(uid, u'project', cid=pid)
        
    def _gnick(self, owner):
        self.stf.whois('_id', owner)
        return self.stf.nick
    
    def _output(self, result=[], cuid=DEFAULT_CUR_UID):
        ''' 项目格式化输出 '''
        now = datetime.now()
        output_map = lambda i: {'pid':i['_id'], 'added_id':i['added_id'], 'pm':self._perm(cuid, i['_id']), 'owner':i['owner'], 'nick':self._gnick(i['owner']), 'is_own':(cuid==i['owner'] if i['owner'] else True), 'title':i['title'], 'works':i.get('works', []), 'description':i.get('description', None), 'members':i['members'], 'created':self._escape_created(now, i['created']), 'time_meta':i['created']}
        if isinstance(result, dict):
            return output_map(result)
        return map(output_map, result)
    
    def get(self, id, cuid=DEFAULT_CUR_UID):
        ''' 获取单个项目 '''
        r = self.one(_id=id)
        if (r[0] and r[1]):return (True, self._output(result=r[1], cuid=cuid))
        return r
    
    def page(self, cuid=DEFAULT_CUR_UID, owner=None, page=1, pglen=5, cursor=None, limit=20, order_by='added_id', order=-1):
        ''' 分页显示项目 '''
        kwargs = {}
        if owner:kwargs['owner']=owner
        kwargs['page']=page
        kwargs['pglen']=pglen
        if cursor:kwargs['cursor']=cursor
        kwargs['limit']=limit
        kwargs['order_by']=order_by
        kwargs['order']=order
        r = super(ProjectAPI, self).page(**kwargs)
        if r[0]:
            kw = {'result':r[1]}
            if cuid:kw['cuid']=cuid
            l = self._output(**kw)
            return (True, l, r[2])
        else:
            return (False, r[1])

    def query(self, cuid=DEFAULT_CUR_UID, owner=None, limit=None, order_by='added_id', order=-1):
        ''' 显示项目列表 '''
        kwargs = {}
        if owner:kwargs['owner']=owner
        kwargs['limit']=limit
        kwargs['order_by']=order_by
        kwargs['order']=order
        r = super(ProjectAPI, self).find(**kwargs)
        if r[0]:
            kw = {'result':r[1]}
            if cuid:kw['cuid']=cuid
            l = self._output(**kw)
            return (True, l)
        else:
            return (False, r[1])