def edit(game_id:int): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) if len(game) == 0: raise bottle.HTTPError(404) if pages.auth.current().user_id() != game.created_by() and \ pages.auth.current().user_id() != game.responsible_user_id() and \ not pages.auth.current().userlevel.admin(): return pages.templates.permission_denied() _sport_types = sport_types.get(0, dbconnection=db) _game_types = game_types.get(0, dbconnection=db) _cities = cities.get(0, dbconnection=db) _courts = courts.get(0, dbconnection=db) responsibles = users.get(0, 2, dbconnection=db) unsubscribed = games.get_unsubscribed_users(game_id, dbconnection=db) unsubscribed_list = list() db.execute("SELECT * FROM users WHERE user_id IN (SELECT DISTINCT user_id FROM reports WHERE user_id!=0 AND status=2 AND game_id IN (SELECT game_id FROM games WHERE deleted=0 AND datetime+INTERVAL duration MINUTE < NOW() AND court_id='{}' AND sport_type='{}' AND game_type='{}'))".format( # as long as my dick game.court_id(), game.sport_type(), game.game_type()), dbutils.dbfields['users']) last_users = list(map(lambda x: User(x, db), db.last())) for i in unsubscribed: user = users.get(i[0], dbconnection=db) dt = i[1] unsubscribed_list.append((user, dt)) return pages.PageBuilder('editgame', game=game, sports=_sport_types, game_types=_game_types, cities=_cities, courts=_courts, responsibles=responsibles, unsubscribed=unsubscribed_list, last_users=last_users)
def post(): if bottle.request.is_ajax: section = bottle.request.forms.get("section") startfrom = int(bottle.request.forms.get("startfrom")) data = list() if section == 'all': with dbutils.dbopen() as db: allusers = users.get(0, count=slice(startfrom, USERS_PER_PAGE), dbconnection=db) page = pages.PageBuilder('user_row') if pages.auth.loggedin(): if len(pages.auth.current().friends()) > 0: friends = pages.auth.current().friends(True) page.add_param('myfriends', friends) for user in allusers: page.add_param('user', user) user_tpl = page.template() data.append(user_tpl) return bottle.json_dumps(data) return '' else: if 'search' in bottle.request.forms: query = bottle.request.forms.get('q') with dbutils.dbopen() as db: allusers = users.search(query, dbconnection=db) page = pages.PageBuilder('users', allusers=users.get(allusers, dbconnection=db), count=len(allusers), search=True, search_q=bottle.request.forms.get('q')) if pages.auth.loggedin() and len(pages.auth.current().friends()) > 0: friends = pages.auth.current().friends(True) page.add_param('myfriends', friends) return page
def subscribe(game_id: int): with dbutils.dbopen() as db: user = current_user(db, detalized=True) game = games.get_by_id(game_id, dbconnection=db) if user.banned(): raise Error.game_conflict(2) if 0 < game.capacity() == len(game.subscribed()): raise Error.game_conflict(4) if user.user_id() in set(game.subscribed()): raise Error.game_conflict(5) another_game = games.user_game_intersection(user.user_id(), game, dbconnection=db) if another_game: raise Error.game_conflict(1, another_game.game_id()) games.subscribe(user.user_id(), game_id, dbconnection=db) if game.datetime.tommorow or game.datetime.today: user = users.get(user.user_id(), dbconnection=db) if user.user_id( ) != pages.auth.current().user_id() else pages.auth.current() message = 'На игру "{}" записался {}'.format( create_link.game(game), create_link.user(user)) utils.spool_func( notificating.site.responsible, game.responsible_user_id(), message, 1, game_id, ) return {'status': 'ok'}
def current_user(db: dbutils.DBConnection, detalized: bool = False): token = bottle.request.query.get('token') user_id = db.execute( "SELECT user_id FROM api_auth WHERE token='{}'".format(token))[0][0] if detalized: return users.get(user_id, dbconnection=db) return user_id
def get(): with dbutils.dbopen() as db: user_id = pages.auth.current().user_id() user = users.get(user_id, dbconnection=db) page = pages.PageBuilder('profile', user=user) page.add_param( 'user_games', games.get_by_id(games.get_user_played_games(user_id, dbconnection=db), dbconnection=db)) page.add_param( 'responsible_games', games.get_by_id(games.get_responsible_games(user_id, dbconnection=db), dbconnection=db)) page.add_param( 'organizer_games', games.get_by_id(games.get_organizer_games(user_id, dbconnection=db), dbconnection=db)) with dbutils.dbopen(**dbutils.logsdb_connection) as logsdb: logsdb.execute( "SELECT COUNT(DISTINCT(ip)), COUNT(ip) FROM access WHERE path='/profile?user_id={}' and user_id!=0" .format(user_id)) page.add_param('views', logsdb.last()[0][1]) page.add_param('uviews', logsdb.last()[0][0]) return page
def get_by_id(user_id: int): with dbutils.dbopen() as db: if user_id == pages.auth.current().user_id(): raise bottle.redirect('/profile') user = users.get(user_id, dbconnection=db) if len(user) == 0: raise bottle.HTTPError(404) page = pages.PageBuilder('profile', user=user, myfriend=users.are_friends( pages.auth.current().user_id(), user_id, dbconnection=db)) page.add_param( 'user_games', games.get_by_id(games.get_user_played_games(user_id, dbconnection=db), dbconnection=db)) page.add_param( 'responsible_games', games.get_by_id(games.get_responsible_games(user_id, dbconnection=db), dbconnection=db)) page.add_param('organizer_games', games.get_all(dbconnection=db)) with dbutils.dbopen(**dbutils.logsdb_connection) as logsdb: logsdb.execute( "SELECT COUNT(DISTINCT(ip)), COUNT(ip) FROM access WHERE (path='/profile?user_id={}' or path='/profile/{}') and user_id!=0" .format(user_id, user_id)) page.add_param('views', logsdb.last()[0][1]) page.add_param('uviews', logsdb.last()[0][0]) return page
def add(): with dbutils.dbopen() as db: _sports = sport_types.get(0, dbconnection=db) _game_types = game_types.get(0, dbconnection=db) _cities = cities.get(0, dbconnection=db) _courts = courts.get(0, dbconnection=db) responsibles = users.get(0, 2, dbconnection=db) return pages.PageBuilder("addgame", sports=_sports, game_types=_game_types, cities=_cities, courts=_courts, responsibles=responsibles)
def notify_array(game_id:int): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) db.execute("SELECT DISTINCT user_id FROM reports WHERE user_id!=0 AND status=2 AND game_id IN (SELECT game_id FROM games WHERE deleted=0 AND datetime+INTERVAL duration MINUTE < NOW() AND court_id='{}' AND sport_type='{}' AND game_type='{}')".format( # as long as my dick game.court_id(), game.sport_type(), game.game_type())) if len(db.last())==0: return json.dumps({'users':list(), 'count':0}) users_ = users.get(list(map(lambda x: x[0], db.last())), dbconnection=db) users_ = list(map(lambda x: {'user_id':x.user_id(), 'name':str(x.name), 'visits':user_visits(x, db)}, users_)) return json.dumps({'count':len(users_), 'users':users_})
def get(): with dbutils.dbopen() as db: count = db.execute("SELECT COUNT(user_id) FROM users")[0][0] allusers = users.get(0, count=slice(*modules.pager(1, count=USERS_PER_PAGE))) page = pages.PageBuilder('users', allusers=allusers, count=count) if pages.auth.loggedin(): if len(pages.auth.current().friends()) > 0: friends = pages.auth.current().friends(True) page.add_param('myfriends', friends) return page
def edit(): with dbutils.dbopen() as db: _cities = cities.get(0, dbconnection=db) user = users.get(pages.auth.current().user_id(), dbconnection=db) _ampluas = ampluas.get(0, dbconnection=db) _ampluas = { sport_type_title: list(filter(lambda x: x.sport_type(True).title() == sport_type_title, _ampluas)) for sport_type_title in {i.sport_type(True).title() for i in _ampluas}} return pages.PageBuilder('editprofile', user=user, cities=_cities, ampluas=_ampluas, haveavatar=images.have_avatar(pages.auth.current().user_id()))
def check_responsible(user_id:int, datetime:str, duration:int, db): query = """\ SELECT game_id FROM games WHERE responsible_user_id={user_id} AND (\ (DATETIME BETWEEN '{datetime}' AND '{datetime}' + INTERVAL {duration} MINUTE) OR \ (DATETIME + INTERVAL {duration} MINUTE BETWEEN '{datetime}' AND '{datetime}' + INTERVAL {duration} MINUTE));\ """.format(user_id=user_id, datetime=datetime, duration=duration) db.execute(query) if len(db.last()) != 0: return pages.templates.message("{} уже занят на это время".format( modules.create_link.user(users.get(user_id, dbconnection=db))), '')
def settings_post(): with dbutils.dbopen() as db: send_email = 'email_notify' in bottle.request.forms show_phone = bottle.request.forms['phone'] db.execute("UPDATE users SET settings='{}' WHERE user_id={}".format( json.dumps({'send_mail': send_email, 'show_phone': show_phone}), pages.auth.current().user_id())) user = users.get(pages.auth.current().user_id(), dbconnection=db) pages.auth.reloaduser(user._pure) #cacher.drop_by_table_name('users', 'user_id', pages.auth.current().user_id()) raise bottle.redirect("/profile/settings")
def notify_reserved(game, user_id:int): user = users.get(user_id) html_email = pages.PageBuilder('mail_notify_reserved', game=game, user=user).template() email = user.email() plain = 'На игре освободилось место http://{}/games/{}'.format(config.server.str, game.game_id()) subject = 'В игре освободилось место!' if user.settings.send_mail(): try: mail.html(subject, html_email, email, plain) except Exception as e: logging.message("Error sending email to <{}>".format(email), e)
def exposed_get_user(self, session_id, token, user_id): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户权限 operator_info = users.get(self.host, self.user, self.passwd, operator) if (operator_info and int.from_bytes(operator_info[0]['dominated'], 'big')): result = users.get(self.host, self.user, self.passwd, user_id) else: result = 2 # 用户权限不足 mnemosyne.create(self.host, self.user, self.passwd, 'user', operator, 3, 1 if result else 0) else: # token失效 result = -1 return result
def get(): with dbutils.dbopen() as db: count = db.execute("SELECT COUNT(user_id) FROM users")[0][0] allusers = users.get( 0, count=slice(*modules.pager(1, count=USERS_PER_PAGE))) page = pages.PageBuilder('users', allusers=allusers, count=count) if pages.auth.loggedin(): if len(pages.auth.current().friends()) > 0: friends = pages.auth.current().friends(True) page.add_param('myfriends', friends) return page
def notify(game_id:int): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) db.execute("SELECT DISTINCT user_id FROM reports WHERE user_id!=0 AND status=2 AND game_id IN (SELECT game_id FROM games WHERE deleted=0 AND datetime+INTERVAL duration MINUTE < NOW() AND court_id='{}' AND sport_type='{}' AND game_type='{}')".format( # as long as my dick game.court_id(), game.sport_type(), game.game_type())) if len(db.last())==0: return json.dumps({'users':list(), 'count':0}) users_ = users.get(list(map(lambda x: x[0], db.last())), dbconnection=db) users_ = list(filter(lambda x: user_visits(x, db)<3 and x.user_id() not in set(game.subscribed()), users_)) for user in users_: send_notify_email(user.user_id(), game.game_id()) ids = list(map(lambda x: x.user_id(), users_)) return json.dumps({'count':len(ids), 'users':[[user.user_id(), str(user.name)] for user in users_]})
def check_responsible(user_id: int, datetime: str, duration: int, db): query = """\ SELECT game_id FROM games WHERE responsible_user_id={user_id} AND (\ (DATETIME BETWEEN '{datetime}' AND '{datetime}' + INTERVAL {duration} MINUTE) OR \ (DATETIME + INTERVAL {duration} MINUTE BETWEEN '{datetime}' AND '{datetime}' + INTERVAL {duration} MINUTE));\ """.format(user_id=user_id, datetime=datetime, duration=duration) db.execute(query) if len(db.last()) != 0: return pages.templates.message( "{} уже занят на это время".format( modules.create_link.user(users.get(user_id, dbconnection=db))), '')
def settings_post(): with dbutils.dbopen() as db: send_email = 'email_notify' in bottle.request.forms show_phone = bottle.request.forms['phone'] db.execute("UPDATE users SET settings='{}' WHERE user_id={}".format( json.dumps({ 'send_mail': send_email, 'show_phone': show_phone }), pages.auth.current().user_id())) user = users.get(pages.auth.current().user_id(), dbconnection=db) pages.auth.reloaduser(user._pure) #cacher.drop_by_table_name('users', 'user_id', pages.auth.current().user_id()) raise bottle.redirect("/profile/settings")
def post(): if bottle.request.is_ajax: section = bottle.request.forms.get("section") startfrom = int(bottle.request.forms.get("startfrom")) data = list() if section == 'all': with dbutils.dbopen() as db: allusers = users.get(0, count=slice(startfrom, USERS_PER_PAGE), dbconnection=db) page = pages.PageBuilder('user_row') if pages.auth.loggedin(): if len(pages.auth.current().friends()) > 0: friends = pages.auth.current().friends(True) page.add_param('myfriends', friends) for user in allusers: page.add_param('user', user) user_tpl = page.template() data.append(user_tpl) return bottle.json_dumps(data) return '' else: if 'search' in bottle.request.forms: query = bottle.request.forms.get('q') with dbutils.dbopen() as db: allusers = users.search(query, dbconnection=db) page = pages.PageBuilder( 'users', allusers=users.get(allusers, dbconnection=db), count=len(allusers), search=True, search_q=bottle.request.forms.get('q')) if pages.auth.loggedin() and len( pages.auth.current().friends()) > 0: friends = pages.auth.current().friends(True) page.add_param('myfriends', friends) return page
def unsubscribe(user_id:int, game_id:int, suspress:bool=False): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) if game.datetime.passed: raise bottle.HTTPError(404) if user_id not in set(game.subscribed()): return pages.PageBuilder("game", game=game, conflict=6) if not suspress and game.datetime.tommorow and game.datetime.time().hour<=12 and datetime.datetime.now().hour>=20: return pages.PageBuilder("game", game=game, conflict=11) games.unsubscribe(user_id, game_id, dbconnection=db) if datetime.datetime.now()-game.datetime()<datetime.timedelta(days=3): user = users.get(user_id, dbconnection=db) if user_id!=pages.auth.current().user_id() else pages.auth.current() message = '{} отписался от игры "{}"'.format(create_link.user(user), create_link.game(game)) utils.spool_func(notificating.site.responsible, game.responsible_user_id(), message, 1, game_id) game = games.get_by_id(game_id, dbconnection=db) return pages.PageBuilder("game", game=game)
def get(): with dbutils.dbopen() as db: user_id = pages.auth.current().user_id() user = users.get(user_id, dbconnection=db) page = pages.PageBuilder('profile', user=user) page.add_param('user_games', games.get_by_id(games.get_user_played_games(user_id, dbconnection=db), dbconnection=db)) page.add_param('responsible_games', games.get_by_id(games.get_responsible_games(user_id, dbconnection=db), dbconnection=db)) page.add_param('organizer_games', games.get_by_id(games.get_organizer_games(user_id, dbconnection=db), dbconnection=db)) with dbutils.dbopen(**dbutils.logsdb_connection) as logsdb: logsdb.execute("SELECT COUNT(DISTINCT(ip)), COUNT(ip) FROM access WHERE path='/profile?user_id={}' and user_id!=0".format(user_id)) page.add_param('views', logsdb.last()[0][1]) page.add_param('uviews', logsdb.last()[0][0]) return page
def exposed_update_env(self, session_id, token, env, read_host, write_host, user, passwd): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户权限 operator_info = users.get(self.host, self.user, self.passwd, operator) if (operator_info and int.from_bytes(operator_info[0]['dominated'], 'big')): result = 999 if write_host and user and passwd: result1 = 0 result2 = 0 if read_host: result1 = mysql.test(read_host, user, passwd) result2 = mysql.test(write_host, user, passwd) result = result1 + result2 if not result: # 是否存在重复的环境 dup_env = environments.find_duplicate( self.host, self.user, self.passwd, env, read_host, write_host) if dup_env is None: result = 3 # 数据库错误 else: if dup_env: dup_envname = dup_env[0]['name'] if dup_envname != env: return dup_envname # 更新数据库 if environments.update(self.host, self.user, self.passwd, env, read_host, write_host, user, passwd): result = 3 # 数据库错误 else: result = 2 # 写库连接失败 else: result = 4 # 用户权限不足 mnemosyne.create(self.host, self.user, self.passwd, 'environment', operator, 2, 1 if result else 0) else: # token失效 result = -1 return result
def exposed_get_environments(self, session_id, token): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户是否为管理员 operator_info = users.get(self.host, self.user, self.passwd, operator) if (operator_info and int.from_bytes(operator_info[0]['dominated'], 'big')): return environments.list(self.host, self.user, self.passwd) else: return environments.list(self.host, self.user, self.passwd, operator) else: # token失效 return -1
def unsubscribe(game_id: int): with dbutils.dbopen() as db: user = current_user(db, detalized=True) game = games.get_by_id(game_id, dbconnection=db) if user.user_id() not in set(game.subscribed()): return pages.PageBuilder("game", game=game, conflict=6) if game.datetime.tommorow and game.datetime.time( ).hour <= 12 and datetime.datetime.now().hour >= 20: return pages.PageBuilder("game", game=game, conflict=11) games.unsubscribe(user.user_id(), game_id, dbconnection=db) if datetime.datetime.now() - game.datetime() < datetime.timedelta( days=3): user = users.get(user.user_id(), dbconnection=db) if user.user_id( ) != pages.auth.current().user_id() else pages.auth.current() message = '{} отписался от игры "{}"'.format( create_link.user(user), create_link.game(game)) utils.spool_func(notificating.site.responsible, game.responsible_user_id(), message, 1, game_id) return {'status': 'ok'}
def exposed_get_current_user(self, session_id, token): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户权限 operator_info = users.get(self.host, self.user, self.passwd, operator) if operator_info: result = operator_info[0] else: result = 2 # 出错 mnemosyne.create(self.host, self.user, self.passwd, 'user', operator, 3, 1 if result else 0) else: # token失效 result = -1 return result
def notify_array(game_id: int): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) db.execute( "SELECT DISTINCT user_id FROM reports WHERE user_id!=0 AND status=2 AND game_id IN (SELECT game_id FROM games WHERE deleted=0 AND datetime+INTERVAL duration MINUTE < NOW() AND court_id='{}' AND sport_type='{}' AND game_type='{}')" .format( # as long as my dick game.court_id(), game.sport_type(), game.game_type())) if len(db.last()) == 0: return json.dumps({'users': list(), 'count': 0}) users_ = users.get(list(map(lambda x: x[0], db.last())), dbconnection=db) users_ = list( map( lambda x: { 'user_id': x.user_id(), 'name': str(x.name), 'visits': user_visits(x, db) }, users_)) return json.dumps({'count': len(users_), 'users': users_})
def edit(): with dbutils.dbopen() as db: _cities = cities.get(0, dbconnection=db) user = users.get(pages.auth.current().user_id(), dbconnection=db) _ampluas = ampluas.get(0, dbconnection=db) _ampluas = { sport_type_title: list( filter( lambda x: x.sport_type(True).title() == sport_type_title, _ampluas)) for sport_type_title in {i.sport_type(True).title() for i in _ampluas} } return pages.PageBuilder('editprofile', user=user, cities=_cities, ampluas=_ampluas, haveavatar=images.have_avatar( pages.auth.current().user_id()))
def get_by_id(user_id:int): with dbutils.dbopen() as db: if user_id == pages.auth.current().user_id(): raise bottle.redirect('/profile') user = users.get(user_id, dbconnection=db) if len(user) == 0: raise bottle.HTTPError(404) page = pages.PageBuilder('profile', user=user, myfriend=users.are_friends( pages.auth.current().user_id(), user_id, dbconnection=db)) page.add_param('user_games', games.get_by_id(games.get_user_played_games(user_id, dbconnection=db), dbconnection=db)) page.add_param('responsible_games', games.get_by_id(games.get_responsible_games(user_id, dbconnection=db), dbconnection=db)) page.add_param('organizer_games', games.get_all(dbconnection=db)) with dbutils.dbopen(**dbutils.logsdb_connection) as logsdb: logsdb.execute("SELECT COUNT(DISTINCT(ip)), COUNT(ip) FROM access WHERE (path='/profile?user_id={}' or path='/profile/{}') and user_id!=0".format(user_id, user_id)) page.add_param('views', logsdb.last()[0][1]) page.add_param('uviews', logsdb.last()[0][0]) return page
def unsubscribe(user_id: int, game_id: int, suspress: bool = False): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) if game.datetime.passed: raise bottle.HTTPError(404) if user_id not in set(game.subscribed()): return pages.PageBuilder("game", game=game, conflict=6) if not suspress and game.datetime.tommorow and game.datetime.time( ).hour <= 12 and datetime.datetime.now().hour >= 20: return pages.PageBuilder("game", game=game, conflict=11) games.unsubscribe(user_id, game_id, dbconnection=db) if datetime.datetime.now() - game.datetime() < datetime.timedelta( days=3): user = users.get(user_id, dbconnection=db) if user_id != pages.auth.current( ).user_id() else pages.auth.current() message = '{} отписался от игры "{}"'.format( create_link.user(user), create_link.game(game)) utils.spool_func(notificating.site.responsible, game.responsible_user_id(), message, 1, game_id) game = games.get_by_id(game_id, dbconnection=db) return pages.PageBuilder("game", game=game)
def exposed_update_env_name(self, session_id, token, env, new_env): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户权限 operator_info = users.get(self.host, self.user, self.passwd, operator) if (operator_info and int.from_bytes(operator_info[0]['dominated'], 'big')): result = environments.update_name(self.host, self.user, self.passwd, env, new_env) else: result = 2 # 用户权限不足 mnemosyne.create(self.host, self.user, self.passwd, 'environment', operator, 2, 1 if result else 0) else: # token失效 result = -1 return result
def exposed_validate_application(self, env, session_id, token, params, param_type, tenant_id): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户权限 operator_info = users.get(self.host, self.user, self.passwd, operator) if (operator_info and int.from_bytes(operator_info[0]['dominated'], 'big')): env_info = environments.get(self.host, self.user, self.passwd, env) else: env_info = environments.get(self.host, self.user, self.passwd, env, operator) if env_info: read_host = env_info[0]['read_host'] db_user = env_info[0]['user'] db_passwd = env_info[0]['passwd'] tenant_db = tenants.get_tenant_db(read_host, db_user, db_passwd, tenant_id) if tenant_db: tenant_db_name = tenant_db[0]['tenant_db'] if param_type == 'KEY': result = applications.list_by_keys( read_host, db_user, db_passwd, tenant_db_name, tenant_id, params) elif param_type == 'FLOWNO': result = applications.list_by_flownos( read_host, db_user, db_passwd, tenant_db_name, tenant_id, params) else: result = 2 # 找不到商户数据库 else: result = 1 # 环境无效 mnemosyne.create(self.host, self.user, self.passwd, 'application', operator, 3, 1 if isinstance(result, int) else 0) else: # token失效 return -1 return result
def subscribe(user_id:int, game_id:int): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) if game.datetime.passed: raise bottle.HTTPError(404) if pages.auth.current().banned(): return pages.PageBuilder("game", game=game, conflict=2) #if not pages.auth.current().activated(): # return pages.PageBuilder("game", game=game, conflict=3) if game.capacity() > 0 and len(game.subscribed()) == game.capacity(): return pages.PageBuilder("game", game=game, conflict=4) if user_id in set(game.subscribed()): return pages.PageBuilder("game", game=game, conflict=5) another_game = games.user_game_intersection(user_id, game, dbconnection=db) if another_game: return pages.PageBuilder("game", game=game, conflict=1, conflict_data=another_game) games.subscribe(user_id, game_id, dbconnection=db) if game.datetime.tommorow or game.datetime.today: user = users.get(user_id, dbconnection=db) if user_id!=pages.auth.current().user_id() else pages.auth.current() message = 'На игру "{}" записался {}'.format(create_link.game(game), create_link.user(user)) utils.spool_func(notificating.site.responsible, game.responsible_user_id(), message, 1, game_id,) game = games.get_by_id(game_id, dbconnection=db) return pages.PageBuilder("game", game=game)
def exposed_get_tenants(self, env, session_id, token): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户权限 operator_info = users.get(self.host, self.user, self.passwd, operator) if (operator_info and int.from_bytes(operator_info[0]['dominated'], 'big')): env_info = environments.get(self.host, self.user, self.passwd, env) else: env_info = environments.get(self.host, self.user, self.passwd, env, operator) if env_info: list_tenants = tenants.list(env_info[0]['read_host'], env_info[0]['user'], env_info[0]['passwd']) return list_tenants if list_tenants else list() else: return 1 # 环境无效 else: # token失效 return -1
def notify(game_id: int): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) db.execute( "SELECT DISTINCT user_id FROM reports WHERE user_id!=0 AND status=2 AND game_id IN (SELECT game_id FROM games WHERE deleted=0 AND datetime+INTERVAL duration MINUTE < NOW() AND court_id='{}' AND sport_type='{}' AND game_type='{}')" .format( # as long as my dick game.court_id(), game.sport_type(), game.game_type())) if len(db.last()) == 0: return json.dumps({'users': list(), 'count': 0}) users_ = users.get(list(map(lambda x: x[0], db.last())), dbconnection=db) users_ = list( filter( lambda x: user_visits(x, db) < 3 and x.user_id() not in set( game.subscribed()), users_)) for user in users_: send_notify_email(user.user_id(), game.game_id()) ids = list(map(lambda x: x.user_id(), users_)) return json.dumps({ 'count': len(ids), 'users': [[user.user_id(), str(user.name)] for user in users_] })
def exposed_update_own_passwd(self, session_id, token, passwd): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户权限 operator_info = users.get(self.host, self.user, self.passwd, operator) if operator_info: result = users.update_passwd(self.host, self.user, self.passwd, operator_info[0]['id'], passwd) for k, v in list(self.login_users.items()): if v['id'] == operator_info[0]['id']: del self.login_users[k] else: result = 2 # 出错 mnemosyne.create(self.host, self.user, self.passwd, 'user', operator, 2, 1 if result else 0) else: # token失效 result = -1 return result
def post(game_id:int): game = games.get_by_id(game_id) if game.created_by() != pages.auth.current().user_id() and game.responsible_user_id() != pages.auth.current().user_id() and not pages.auth.current().userlevel.admin(): return pages.templates.permission_denied() if game.reported() or game.deleted(): return pages.templates.message('Чё', 'Эээ') users_ = {int(user_id.split('=')[-1]): {"status": bottle.request.forms.get(user_id)} for user_id in filter(lambda x: x.startswith("status"), bottle.request.forms)} registered = {user_id: users_[user_id] for user_id in filter(lambda x: x > 0, users_)} unregistered = {user_id: users_[user_id] for user_id in filter(lambda x: x < 0, users_)} for user_id in unregistered: info = {key.split('=')[0]: bottle.request.forms.get(key) for key in filter(lambda x: x.endswith(str(user_id)), bottle.request.forms)} unregistered[user_id] = info report = dict() report['registered'] = {'count': len(registered), 'users': registered} report['unregistered'] = {'count': len(unregistered), 'users': unregistered} report['additional_charges'] = {int(i.split('=')[1]):(bottle.request.forms.get(i), bottle.request.forms.get('amount'+i.split('=')[1])) for i in filter(lambda x: x.startswith('description'), bottle.request.forms)} with dbutils.dbopen() as db: for user_id in report['unregistered']['users']: user = report['unregistered']['users'][user_id] name = user['first_name'].strip()+' '+user['last_name'].strip() reports.report_unregistered(game_id, user['status'], name, user['phone'], dbconnection=db) for user_id in report['registered']['users']: user = report['registered']['users'][user_id] status = user['status'] reports.report(game_id, user_id, status, dbconnection=db) for n in report['additional_charges']: reports.report_additional_charges(game_id, *report['additional_charges'][n], dbconnection=db) if "photo" in bottle.request.files: images.save_report(game_id, bottle.request.files.get("photo")) if pages.auth.current().user_id() != game.created_by(): notificating.site.responsible(game.created_by(), 'Ответственный "{}" отправил отчет по игре "{}"'.format( modules.create_link.user(users.get(pages.auth.current().user_id())), modules.create_link.game(game)), game_id) finances.add_game_finances(game_id, dbconnection=db) cacher.drop_by_table_name('games', 'game_id', game_id) raise bottle.redirect('/games/report/{}?ask_autocreate'.format(game_id))
def exposed_update_user_passwd(self, session_id, token, user_id, passwd): if (session_id in self.login_users and token == self.login_users[session_id]['token']): # token有效 operator = self.login_users[session_id]['id'] # 检查用户权限 operator_info = users.get(self.host, self.user, self.passwd, operator) if (operator_info and int.from_bytes(operator_info[0]['dominated'], 'big')): result = users.update_passwd(self.host, self.user, self.passwd, user_id, passwd) for k, v in list(self.login_users.items()): if v['id'] == user_id: del self.login_users[k] else: result = 2 # 用户权限不足 mnemosyne.create(self.host, self.user, self.passwd, 'user', operator, 2, 1 if result else 0) else: # token失效 result = -1 return result
def subscribe(user_id: int, game_id: int): with dbutils.dbopen() as db: game = games.get_by_id(game_id, dbconnection=db) if game.datetime.passed: raise bottle.HTTPError(404) if pages.auth.current().banned(): return pages.PageBuilder("game", game=game, conflict=2) #if not pages.auth.current().activated(): # return pages.PageBuilder("game", game=game, conflict=3) if game.capacity() > 0 and len(game.subscribed()) == game.capacity(): return pages.PageBuilder("game", game=game, conflict=4) if user_id in set(game.subscribed()): return pages.PageBuilder("game", game=game, conflict=5) another_game = games.user_game_intersection(user_id, game, dbconnection=db) if another_game: return pages.PageBuilder("game", game=game, conflict=1, conflict_data=another_game) games.subscribe(user_id, game_id, dbconnection=db) if game.datetime.tommorow or game.datetime.today: user = users.get(user_id, dbconnection=db) if user_id != pages.auth.current( ).user_id() else pages.auth.current() message = 'На игру "{}" записался {}'.format( create_link.game(game), create_link.user(user)) utils.spool_func( notificating.site.responsible, game.responsible_user_id(), message, 1, game_id, ) game = games.get_by_id(game_id, dbconnection=db) return pages.PageBuilder("game", game=game)
def send_notify_email(user_id, game_id): user = users.get(user_id) game = games.get_by_id(game_id) notificating.mail.tpl.game_invite(game, user)
def html_to_id(subject:str, body:str, user_id:int, plain:str=None, dbconnection:dbutils.DBConnection=None): user = users.get(user_id, dbconnection=dbconnection) email = user.email() if user.settings.send_mail(): return mail.html(subject, body, email, plain)
def raw_to_id(subject:str, body:str, user_id:int, dbconnection:dbutils.DBConnection=None): user = users.get(user_id, dbconnection=dbconnection) email = user.email() return mail.raw(subject, body, email)
def sms_to_id(user_id:int, text:str, source:str=None, dbconnection:dbutils.DBConnection=None): user = users.get(user_id, dbconnection=dbconnection) phone = user.phone() if not phone: raise ValueError('Invalid number <{}> - <{}>'.format(user_id, phone)) return sms.raw(phone, text, source)
def get_ban(): if 'user_id' not in bottle.request.query: raise bottle.HTTPError(404) user = users.get(int(bottle.request.query.get('user_id'))) return pages.PageBuilder('ban', user=user)
def post(game_id: int): game = games.get_by_id(game_id) if game.created_by() != pages.auth.current( ).user_id() and game.responsible_user_id() != pages.auth.current().user_id( ) and not pages.auth.current().userlevel.admin(): return pages.templates.permission_denied() if game.reported() or game.deleted(): return pages.templates.message('Чё', 'Эээ') users_ = { int(user_id.split('=')[-1]): { "status": bottle.request.forms.get(user_id) } for user_id in filter(lambda x: x.startswith("status"), bottle.request.forms) } registered = { user_id: users_[user_id] for user_id in filter(lambda x: x > 0, users_) } unregistered = { user_id: users_[user_id] for user_id in filter(lambda x: x < 0, users_) } for user_id in unregistered: info = { key.split('=')[0]: bottle.request.forms.get(key) for key in filter(lambda x: x.endswith(str(user_id)), bottle.request.forms) } unregistered[user_id] = info report = dict() report['registered'] = {'count': len(registered), 'users': registered} report['unregistered'] = { 'count': len(unregistered), 'users': unregistered } report['additional_charges'] = { int(i.split('=')[1]): (bottle.request.forms.get(i), bottle.request.forms.get('amount' + i.split('=')[1])) for i in filter(lambda x: x.startswith('description'), bottle.request.forms) } with dbutils.dbopen() as db: for user_id in report['unregistered']['users']: user = report['unregistered']['users'][user_id] name = user['first_name'].strip() + ' ' + user['last_name'].strip() reports.report_unregistered(game_id, user['status'], name, user['phone'], dbconnection=db) for user_id in report['registered']['users']: user = report['registered']['users'][user_id] status = user['status'] reports.report(game_id, user_id, status, dbconnection=db) for n in report['additional_charges']: reports.report_additional_charges(game_id, *report['additional_charges'][n], dbconnection=db) if "photo" in bottle.request.files: images.save_report(game_id, bottle.request.files.get("photo")) if pages.auth.current().user_id() != game.created_by(): notificating.site.responsible( game.created_by(), 'Ответственный "{}" отправил отчет по игре "{}"'.format( modules.create_link.user( users.get(pages.auth.current().user_id())), modules.create_link.game(game)), game_id) finances.add_game_finances(game_id, dbconnection=db) cacher.drop_by_table_name('games', 'game_id', game_id) raise bottle.redirect('/games/report/{}?ask_autocreate'.format(game_id))
def referal(user_id: int): with dbutils.dbopen() as db: user = users.get(user_id, dbconnection=db) if len(user) == 0: raise bottle.HTTPError(404) return pages.PageBuilder('referal', user=user)