Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
zbgl
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
马超
zbgl
Commits
da4a529e
Commit
da4a529e
authored
Sep 09, 2022
by
马超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
值班管理
parent
cf3d69c2
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
448 additions
and
0 deletions
+448
-0
web/jsp/zbgl/pbmx/action_bak.jsp
web/jsp/zbgl/pbmx/action_bak.jsp
+293
-0
web/jsp/zbgl/pbmx/right_list_bak.jsp
web/jsp/zbgl/pbmx/right_list_bak.jsp
+155
-0
No files found.
web/jsp/zbgl/pbmx/action_bak.jsp
0 → 100644
View file @
da4a529e
<%@ page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%>
<%@ page
import=
"java.sql.Connection"
%>
<%@ page
import=
"java.util.*"
%>
<%@ page
import=
"com.censoft.common.db.ConnectionFactory"
%>
<%@ page
import=
"com.censoft.common.base.Pub"
%>
<%@ page
import=
"com.censoft.db.Logger"
%>
<%!
public
static
String
getUserNames
(
ConnectionFactory
cf
,
Connection
conn
,
int
startIndex
,
int
n
){
Vector
userListSize
=
cf
.
doQuery
(
conn
,
"select id from zb_user"
,
null
,
new
Object
[]{});
StringBuffer
sql
=
new
StringBuffer
(
"select user_name from zb_user where 1=1 and order_num in("
);
List
list
=
new
ArrayList
();
String
user_names
=
""
;
int
startIndex_2
=
startIndex
;
for
(
int
i
=
0
;
i
<
n
;
i
++){
startIndex
=
startIndex
+
1
;
if
(
startIndex
==
userListSize
.
size
()+
1
){
startIndex
=
1
;
}
if
(
i
==
n
-
1
){
sql
.
append
(
startIndex
);
}
else
{
sql
.
append
(
startIndex
+
","
);
}
}
sql
.
append
(
") order by field (order_num,"
);
for
(
int
i
=
0
;
i
<
n
;
i
++){
startIndex_2
=
startIndex_2
+
1
;
if
(
startIndex_2
==
userListSize
.
size
()+
1
){
startIndex_2
=
1
;
}
if
(
i
==
n
-
1
){
sql
.
append
(
startIndex_2
);
}
else
{
sql
.
append
(
startIndex_2
+
","
);
}
}
sql
.
append
(
") "
);
Vector
userList
=
cf
.
doQuery
(
conn
,
sql
.
toString
(),
null
,
list
.
toArray
());
if
(
userList
!=
null
&&
userList
.
size
()
>
0
){
for
(
int
i
=
0
;
i
<
userList
.
size
();
i
++)
{
Hashtable
ht1
=
(
Hashtable
)
userList
.
get
(
i
);
String
user_name
=
(
String
)
ht1
.
get
(
"user_name"
);
user_names
=
user_names
+
user_name
+
","
;
}
}
else
{
System
.
out
.
println
(
"方法查询出错"
+
cf
.
getMsg
());
}
return
startIndex
+
"_"
+
user_names
;
}
%>
<%
ConnectionFactory
cf
=
new
ConnectionFactory
();
Pub
pub
=
new
Pub
();
Connection
conn
=
null
;
Enumeration
enu
=
request
.
getParameterNames
();
String
action
=
pub
.
trimNull
(
request
.
getParameter
(
"action"
));
String
action_msg
=
""
;
String
mx_id
=
pub
.
trimNull
(
request
.
getParameter
(
"mx_id"
));
if
(
""
.
equals
(
mx_id
)){
mx_id
=
UUID
.
randomUUID
().
toString
().
trim
().
replaceAll
(
"-"
,
""
);
}
String
day_id
=
pub
.
trimNull
(
request
.
getParameter
(
"day_id"
));
String
[]
userids
=
request
.
getParameterValues
(
"userids"
);
String
user_names
=
""
;
if
(
userids
!=
null
&&
userids
.
length
>
0
)
{
for
(
int
i
=
0
;
i
<
userids
.
length
;
i
++)
{
user_names
+=
userids
[
i
]+
","
;
}
}
if
(!
""
.
equals
(
user_names
)){
user_names
=
user_names
.
substring
(
0
,
user_names
.
length
()-
1
);
}
String
input_count
=
pub
.
trimNull
(
request
.
getParameter
(
"input_count"
));
if
(
""
.
equals
(
input_count
)){
input_count
=
"1"
;
}
int
inputSize
=
Integer
.
parseInt
(
input_count
);
String
mx_name
=
pub
.
trimNull
(
request
.
getParameter
(
"mx_name"
));
String
mx_day
=
pub
.
trimNull
(
request
.
getParameter
(
"mx_day"
));
int
mxDay
=
1
;
if
(!
""
.
equals
(
mx_day
)){
mxDay
=
Integer
.
parseInt
(
mx_day
);
}
String
add_user
=
pub
.
trimNull
((
String
)
session
.
getAttribute
(
"session_login_id"
));
if
(
""
.
equals
(
add_user
))
{
System
.
out
.
println
(
"当前没有用户信息"
);
}
String
userNames
=
""
;
String
add_time
=
pub
.
getCurrentServerTime
();
StringBuffer
sql_add
=
new
StringBuffer
(
"insert into zb_mx (id,name,day,add_time,add_user) values (?,?,?,?,?)"
);
StringBuffer
sql_update
=
new
StringBuffer
(
"update t_user_phone set update_user=?,update_time=?,"
);
try
{
conn
=
com
.
censoft
.
db
.
DBUtil
.
getConnection
();
List
list_add
=
new
ArrayList
();
list_add
.
add
(
mx_id
);
list_add
.
add
(
mx_name
);
list_add
.
add
(
mx_day
);
list_add
.
add
(
add_time
);
list_add
.
add
(
add_user
);
List
list_update
=
new
ArrayList
();
conn
.
setAutoCommit
(
false
);
boolean
is_oper
=
false
;
if
(
"add"
.
equals
(
action
)){
action_msg
=
"新增"
;
is_oper
=
cf
.
executeUpdate
(
conn
,
sql_add
.
toString
(),
list_add
.
toArray
());
if
(!
is_oper
)
{
conn
.
rollback
();
System
.
out
.
println
(
"新增zb_mx表出错了"
+
cf
.
getMsg
());
return
;
}
int
startIndex
=
0
;
for
(
int
i
=
0
;
i
<
inputSize
;
i
++)
{
String
b_time
=
pub
.
trimNull
(
request
.
getParameter
(
"b_time_"
+(
i
+
1
)));
String
e_time
=
pub
.
trimNull
(
request
.
getParameter
(
"e_time_"
+(
i
+
1
)));
String
zb_type
=
pub
.
trimNull
(
request
.
getParameter
(
"zb_type_"
+(
i
+
1
)));
String
ren_num
=
pub
.
trimNull
(
request
.
getParameter
(
"ren_num_"
+(
i
+
1
)));
String
zb_type_id
=
UUID
.
randomUUID
().
toString
().
trim
().
replaceAll
(
"-"
,
""
);
is_oper
=
cf
.
executeUpdate
(
conn
,
"insert into zb_type(id,mx_id,zb_type,b_time,e_time,ren_num,add_user,add_time) values (?,?,?,?,?,?,?,?)"
,
new
Object
[]{
zb_type_id
,
mx_id
,
zb_type
,
b_time
,
e_time
,
ren_num
,
add_user
,
add_time
});
if
(!
is_oper
)
{
System
.
out
.
println
(
"新增zb_type表出错了"
+
cf
.
getMsg
());
conn
.
rollback
();
return
;
}
for
(
int
n
=
0
;
n
<
mxDay
;
n
++){
userNames
=
getUserNames
(
cf
,
conn
,
startIndex
,
Integer
.
parseInt
(
ren_num
));
if
(!
""
.
equals
(
userNames
)){
startIndex
=
Integer
.
parseInt
(
userNames
.
substring
(
0
,
userNames
.
indexOf
(
"_"
)));
userNames
=
userNames
.
substring
(
userNames
.
indexOf
(
"_"
)+
1
,
userNames
.
length
()-
1
);
}
is_oper
=
cf
.
executeUpdate
(
conn
,
"insert into zb_mx_day(mx_id,zb_type,user_name,day,add_user,add_time) values (?,?,?,?,?,?)"
,
new
Object
[]{
mx_id
,
zb_type_id
,
userNames
,
n
+
1
,
add_user
,
add_time
});
if
(!
is_oper
)
{
System
.
out
.
println
(
"新增zb_mx_day表出错了"
+
cf
.
getMsg
());
conn
.
rollback
();
return
;
}
}
}
}
else
if
(
"delete"
.
equals
(
action
)){
action_msg
=
"删除"
;
is_oper
=
cf
.
executeUpdate
(
conn
,
"delete from zb_mx_day where mx_id=?"
,
new
Object
[]{
mx_id
});
if
(!
is_oper
)
{
conn
.
rollback
();
System
.
out
.
println
(
"删除zb_mx_day表出错了"
+
cf
.
getMsg
());
return
;
}
is_oper
=
cf
.
executeUpdate
(
conn
,
"delete from zb_type where mx_id=?"
,
new
Object
[]{
mx_id
});
if
(!
is_oper
)
{
conn
.
rollback
();
System
.
out
.
println
(
"删除zb_type表出错了"
+
cf
.
getMsg
());
return
;
}
is_oper
=
cf
.
executeUpdate
(
conn
,
"delete from zb_mx where id=?"
,
new
Object
[]{
mx_id
});
if
(!
is_oper
)
{
conn
.
rollback
();
System
.
out
.
println
(
"删除zb_mx表出错了"
+
cf
.
getMsg
());
return
;
}
}
else
if
(
"addUser"
.
equals
(
action
)){
action_msg
=
"选择人员"
;
is_oper
=
cf
.
executeUpdate
(
conn
,
"update zb_mx_day set user_name=? where id=?"
,
new
Object
[]{
user_names
,
day_id
});
if
(!
is_oper
)
{
conn
.
rollback
();
System
.
out
.
println
(
"插入人员zb_mx_day表出错了"
+
cf
.
getMsg
());
return
;
}
}
else
{
action_msg
=
"修改"
;
String
zb_type_ids
=
""
;
int
startIndex
=
0
;
for
(
int
i
=
0
;
i
<
inputSize
;
i
++)
{
String
b_time
=
pub
.
trimNull
(
request
.
getParameter
(
"b_time_"
+(
i
+
1
)));
String
e_time
=
pub
.
trimNull
(
request
.
getParameter
(
"e_time_"
+(
i
+
1
)));
String
zb_type
=
pub
.
trimNull
(
request
.
getParameter
(
"zb_type_"
+(
i
+
1
)));
String
zb_type_id
=
pub
.
trimNull
(
request
.
getParameter
(
"zb_type_id_"
+(
i
+
1
)));
String
ren_num
=
pub
.
trimNull
(
request
.
getParameter
(
"ren_num_"
+(
i
+
1
)));
if
(!
""
.
equals
(
zb_type_id
)){
zb_type_ids
=
zb_type_id
+
","
+
zb_type_ids
;
is_oper
=
cf
.
executeUpdate
(
conn
,
"update zb_type set zb_type=?,b_time=?,e_time=?,ren_num=?,update_time=?,update_user=? where id=?"
,
new
Object
[]{
zb_type
,
b_time
,
e_time
,
ren_num
,
add_time
,
add_user
,
zb_type_id
});
if
(!
is_oper
)
{
System
.
out
.
println
(
"修改zb_type表出错了"
+
cf
.
getMsg
());
conn
.
rollback
();
return
;
}
for
(
int
n
=
0
;
n
<
mxDay
;
n
++){
userNames
=
getUserNames
(
cf
,
conn
,
startIndex
,
Integer
.
parseInt
(
ren_num
));
if
(!
""
.
equals
(
userNames
)){
startIndex
=
Integer
.
parseInt
(
userNames
.
substring
(
0
,
userNames
.
indexOf
(
"_"
)));
userNames
=
userNames
.
substring
(
userNames
.
indexOf
(
"_"
)+
1
,
userNames
.
length
()-
1
);
}
is_oper
=
cf
.
executeUpdate
(
conn
,
"update zb_mx_day set user_name=?,update_user=?,update_time=? where mx_id=? and zb_type=? and day=?"
,
new
Object
[]{
userNames
,
add_user
,
add_time
,
mx_id
,
zb_type_id
,
n
+
1
});
if
(!
is_oper
)
{
System
.
out
.
println
(
"修改b_mx_day表出错了"
+
cf
.
getMsg
());
conn
.
rollback
();
return
;
}
}
}
else
{
String
new_id
=
UUID
.
randomUUID
().
toString
().
trim
().
replaceAll
(
"-"
,
""
);
is_oper
=
cf
.
executeUpdate
(
conn
,
"insert into zb_type(id,mx_id,zb_type,b_time,e_time,ren_num,add_user,add_time) values (?,?,?,?,?,?,?,?)"
,
new
Object
[]{
new_id
,
mx_id
,
zb_type
,
b_time
,
e_time
,
ren_num
,
add_user
,
add_time
});
if
(!
is_oper
)
{
System
.
out
.
println
(
"修改zb_type表出错了"
+
cf
.
getMsg
());
conn
.
rollback
();
return
;
}
for
(
int
n
=
0
;
n
<
mxDay
;
n
++){
userNames
=
getUserNames
(
cf
,
conn
,
startIndex
,
Integer
.
parseInt
(
ren_num
));
if
(!
""
.
equals
(
userNames
)){
startIndex
=
Integer
.
parseInt
(
userNames
.
substring
(
0
,
userNames
.
indexOf
(
"_"
)));
userNames
=
userNames
.
substring
(
userNames
.
indexOf
(
"_"
)+
1
,
userNames
.
length
()-
1
);
}
is_oper
=
cf
.
executeUpdate
(
conn
,
"insert into zb_mx_day(mx_id,zb_type,user_name,day,add_user,add_time) values (?,?,?,?,?,?)"
,
new
Object
[]{
mx_id
,
new_id
,
userNames
,
n
+
1
,
add_user
,
add_time
});
if
(!
is_oper
)
{
System
.
out
.
println
(
"新增zb_mx_day表出错了"
+
cf
.
getMsg
());
conn
.
rollback
();
return
;
}
}
}
if
(!
is_oper
)
{
System
.
out
.
println
(
"修改zb_type表出错了"
+
cf
.
getMsg
());
conn
.
rollback
();
return
;
}
}
//修改页面,删除已有行
/*
if
(!
""
.
equals
(
zb_type_ids
)){
zb_type_ids
=
zb_type_ids
.
substring
(
0
,
zb_type_ids
.
length
()-
1
);
String
[]
field
=
zb_type_ids
.
split
(
","
);
StringBuffer
sb
=
new
StringBuffer
();
sb
.
append
(
"delete from zb_type where 1=1 "
);
sb
.
append
(
" and id not in ("
);
if
(
field
!=
null
&&
field
.
length
>
0
){
for
(
int
i
=
0
;
i
<
field
.
length
;
i
++){
if
(
i
==
field
.
length
-
1
){
sb
.
append
(
"'"
+
field
[
i
]
+
"'"
);
}
else
{
sb
.
append
(
"'"
+
field
[
i
]
+
"',"
);
}
}
}
sb
.
append
(
" )"
);
//System.out.println(sb.toString());
is_oper
=
cf
.
executeUpdate
(
conn
,
sb
.
toString
(),
new
Object
[]{});
if
(!
is_oper
)
{
conn
.
rollback
();
System
.
out
.
println
(
"删除多余的时间段出错了"
+
cf
.
getMsg
());
return
;
}
}*/
is_oper
=
cf
.
executeUpdate
(
conn
,
"update zb_mx set name=? where id=?"
,
new
Object
[]{
mx_name
,
mx_id
});
if
(!
is_oper
)
{
conn
.
rollback
();
System
.
out
.
println
(
"修改zb_mx表出错了"
+
cf
.
getMsg
());
return
;
}
}
if
(!
is_oper
)
{
conn
.
rollback
();
System
.
out
.
println
(
"操作出错了"
+
cf
.
getMsg
());
return
;
}
Logger
.
log
(
conn
,
"值班模型"
,
action_msg
,
add_user
,
""
,
request
);
conn
.
commit
();
if
(!
is_oper
)
{
conn
.
rollback
();
out
.
println
(
cf
.
getMsg
());
}
else
{
out
.
println
(
"success,"
+
mx_id
);
}
}
catch
(
Exception
e
)
{
conn
.
rollback
();
System
.
out
.
println
(
"有异常"
+
e
);
return
;
}
finally
{
if
(
conn
!=
null
)
{
conn
.
setAutoCommit
(
true
);
try
{
conn
.
close
();
}
catch
(
Exception
e
)
{
}
}
}
%>
web/jsp/zbgl/pbmx/right_list_bak.jsp
0 → 100644
View file @
da4a529e
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2020/9/11
Time: 12:54
To change this template use File | Settings | File Templates.
--%>
<%@ page
contentType=
"text/html;charset=UTF-8"
language=
"java"
%>
<%@ page
import=
"java.sql.Connection"
%>
<%@ page
import=
"java.util.*"
%>
<%@ page
import=
"com.censoft.common.db.ConnectionFactory"
%>
<%@ page
import=
"com.censoft.common.base.Pub"
%>
<%
ConnectionFactory
cf
=
new
ConnectionFactory
();
Pub
pub
=
new
Pub
();
Connection
conn
=
null
;
Vector
v_list
=
null
;
Vector
v_list_day
=
null
;
String
login_id
=
(
String
)
session
.
getAttribute
(
"session_login_id"
);
if
(
""
.
equals
(
login_id
))
{
System
.
out
.
println
(
"当前没有用户信息"
);
}
String
mx_id
=
pub
.
trimNull
(
request
.
getParameter
(
"mx_id"
));
String
Mxday
=
pub
.
trimNull
(
request
.
getParameter
(
"day"
));
int
divCount
=
8
;
if
(!
""
.
equals
(
Mxday
)){
divCount
=
Integer
.
parseInt
(
Mxday
);
}
String
divWidth
=(
divCount
+
2
)*
140
-
80
+
"px"
;
StringBuffer
sql
=
new
StringBuffer
();
StringBuffer
sql_day
=
new
StringBuffer
();
sql
.
append
(
"select * from zb_type where mx_id=? order by order_num asc "
);
sql_day
.
append
(
"select * from zb_mx_day where mx_id=? and zb_type=? order by day asc "
);
try
{
conn
=
com
.
censoft
.
db
.
DBUtil
.
getConnection
();
v_list
=
cf
.
doQuery
(
conn
,
sql
.
toString
(),
null
,
new
Object
[]{
mx_id
});
if
(
v_list
!=
null
&&
v_list
.
size
()
>
0
)
{
}
%>
<div
style=
"border: solid 1px #eee;margin-top: 20px;height:550px;width:1100px;overflow: auto;"
>
<%
for
(
int
i
=
0
;
i
<
v_list
.
size
();
i
++){
Hashtable
ht
=
(
Hashtable
)
v_list
.
get
(
i
);
String
id
=
pub
.
trimNull
((
String
)
ht
.
get
(
"id"
));
String
zb_type
=
pub
.
trimNull
((
String
)
ht
.
get
(
"zb_type"
));
String
b_time
=
pub
.
trimNull
((
String
)
ht
.
get
(
"b_time"
));
String
e_time
=
pub
.
trimNull
((
String
)
ht
.
get
(
"e_time"
));
v_list_day
=
cf
.
doQuery
(
conn
,
sql_day
.
toString
(),
null
,
new
Object
[]{
mx_id
,
id
});
%>
<%
if
(
i
==
0
){
%>
<div
style=
"width:
<%=
divWidth
%>
;height:40px;float:left;white-space: nowrap;"
>
<div
style=
"width:140px;height:40px;float:left;border:0.5px solid #000;"
>
</div>
<%
if
(
v_list_day
!=
null
&&
v_list_day
.
size
()
>
0
){
for
(
int
n
=
0
;
n
<
v_list_day
.
size
();
n
++){
Hashtable
ht1
=
(
Hashtable
)
v_list_day
.
get
(
n
);
String
day
=
pub
.
trimNull
((
String
)
ht1
.
get
(
"day"
));
%>
<div
style=
"width:140px;height:40px;line-height:40px;text-align:center;color:#fff;float:left;border:0.5px solid #000;background-color: #00b7ee"
>
<%=
day
%>
</div>
<%
}}
%>
</div>
<%
}
%>
<div
style=
"width:
<%=
divWidth
%>
;height:160px;float:left;"
>
<div
style=
"width:140px;height:160px;float:left;border:0.5px solid #000;text-align: center;line-height: 120px;"
>
<p
style=
"height:30px;"
>
<%=
zb_type
%></p>
<p
style=
"height:30px;"
>
(
<%=
b_time
%>
-
<%=
e_time
%>
)
</p>
</div>
<%
if
(
v_list_day
!=
null
&&
v_list_day
.
size
()
>
0
){
for
(
int
n
=
0
;
n
<
v_list_day
.
size
();
n
++){
Hashtable
ht1
=
(
Hashtable
)
v_list_day
.
get
(
n
);
String
day_id
=
pub
.
trimNull
((
String
)
ht1
.
get
(
"id"
));
String
user_name
=
pub
.
trimNull
((
String
)
ht1
.
get
(
"user_name"
));
user_name
=
user_name
.
replace
(
","
,
"
</
br
>"
);
%>
<div
style=
"text-align:center;width:140px;height:160px;float:left;border:0.5px solid #000;position: relative"
>
<p
style=
"height:10px;display:none;"
>
<%=
user_name
%>
</p>
<button
class=
"btn btn-success"
onclick=
"editUser('
<%=
day_id
%>
','
<%=
mx_id
%>
');"
style=
"display:none;text-align:center;position:absolute; right:0; bottom:0;"
>
修改
</button>
</div>
<%
}}
%>
</div>
<%
}
%>
</div>
<script
type=
"text/javascript"
>
function
deleteUser
(
user_id
){
layer
.
confirm
(
'
确认要删除吗?
'
,
function
(
index
)
{
$
.
ajax
({
type
:
"
POST
"
,
url
:
"
./action.jsp?user_id=
"
+
user_id
+
"
&action=delete
"
,
success
:
function
(
msg
)
{
if
(
msg
.
indexOf
(
"
success
"
)
>=
0
)
{
layer
.
msg
(
'
操作成功!
'
,
{
icon
:
1
,
time
:
1000
},
function
()
{
searchModel
();
});
}
else
{
layer
.
msg
(
'
操作失败
'
,
{
icon
:
5
,
time
:
2000
//2秒关闭(如果不配置,默认是3秒)
},
function
()
{
// console.log("********************8")
});
}
}
});
})
}
function
optOrder
(
opt
,
user_id
){
$
.
ajax
({
type
:
"
post
"
,
url
:
"
opt_order.jsp
"
,
data
:{
"
user_id
"
:
user_id
,
"
opt
"
:
opt
},
success
:
function
(
data
)
{
if
(
data
.
indexOf
(
"
success
"
)
>=
0
)
{
layer
.
msg
(
'
操作成功!
'
,
{
icon
:
1
,
time
:
1000
},
function
()
{
searchModel
();
});
}
else
{
layer
.
msg
(
'
操作失败,
'
+
data
,
{
icon
:
5
,
time
:
2000
//2秒关闭(如果不配置,默认是3秒)
},
function
()
{
// console.log("********************8")
});
}
}
});
}
</script>
<%
}
catch
(
Exception
e
)
{
out
.
println
(
"查询用户信息异常"
+
e
);
return
;
}
finally
{
if
(
conn
!=
null
)
{
try
{
conn
.
close
();
}
catch
(
Exception
e
)
{
}
}
}
%>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment