Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
bwinf
medal
Commits
74721993
Commit
74721993
authored
Apr 17, 2020
by
Robert Czechowski
Browse files
Admin pages add search by group code
parent
86b69d04
Pipeline
#617
passed with stage
in 15 minutes and 49 seconds
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/core.rs
View file @
74721993
...
...
@@ -1030,8 +1030,7 @@ pub fn edit_profile<T: MedalConnection>(conn: &T, session_token: &str, user_id:
Ok
(
result
)
}
pub
fn
admin_index
<
T
:
MedalConnection
>
(
conn
:
&
T
,
session_token
:
&
str
)
->
MedalValueResult
{
pub
fn
admin_index
<
T
:
MedalConnection
>
(
conn
:
&
T
,
session_token
:
&
str
)
->
MedalValueResult
{
let
session
=
conn
.get_session
(
&
session_token
)
.ensure_logged_in
()
.ok_or
(
MedalError
::
NotLoggedIn
)
?
;
if
session
.id
!=
1
{
return
Err
(
MedalError
::
AccessDenied
);
...
...
@@ -1041,14 +1040,12 @@ pub fn admin_index<T: MedalConnection>(conn: &T, session_token: &str)
Ok
((
"admin"
.to_string
(),
data
))
}
pub
fn
admin_search_users
<
T
:
MedalConnection
>
(
conn
:
&
T
,
session_token
:
&
str
,
s_data
:
(
Option
<
i32
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
))
->
MedalValueResult
{
...
...
@@ -1059,7 +1056,10 @@ pub fn admin_search_users<T: MedalConnection>(conn: &T, session_token: &str,
let
mut
data
=
json_val
::
Map
::
new
();
data
.insert
(
"result"
.to_string
(),
to_json
(
&
conn
.get_search_users
(
s_data
)));
match
conn
.get_search_users
(
s_data
)
{
Ok
(
users
)
=>
data
.insert
(
"users"
.to_string
(),
to_json
(
&
users
)),
Err
(
groups
)
=>
data
.insert
(
"groups"
.to_string
(),
to_json
(
&
groups
)),
};
Ok
((
"admin_search_results"
.to_string
(),
data
))
}
...
...
@@ -1112,7 +1112,7 @@ pub fn admin_show_group<T: MedalConnection>(conn: &T, group_id: i32, session_tok
}
let
group
=
conn
.get_group_complete
(
group_id
)
.unwrap
();
// TODO handle error
let
mut
data
=
json_val
::
Map
::
new
();
let
gi
=
GroupInfo
{
id
:
group
.id
.unwrap
(),
...
...
src/db_conn.base.rs
View file @
74721993
...
...
@@ -1081,42 +1081,54 @@ impl MedalConnection for Connection {
.unwrap
();
Some
(
group
)
}
fn
get_search_users
(
&
self
,
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_pms_id
):
(
Option
<
i32
>
,
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_groupcode
,
s_pms_id
):
(
Option
<
i32
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
))
->
Vec
<
(
i32
,
String
,
String
)
>
->
Result
<
Vec
<
(
i32
,
String
,
String
)
>
,
Vec
<
(
i32
,
String
,
String
)
>>
{
if
let
Some
(
id
)
=
s_id
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE id = $1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
)
}
else
if
let
Some
(
logincode
)
=
s_logincode
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE logincode = $1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
logincode
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
logincode
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
())
}
else
if
let
Some
(
groupcode
)
=
s_groupcode
{
let
query
=
"SELECT id, name, tag
FROM usergroup
WHERE groupcode = $1
LIMIT 30"
;
Err
(
self
.query_map_many
(
query
,
&
[
&
groupcode
],
|
row
|
{
(
row
.get
(
0
),
format!
(
"Gruppe: {}"
,
row
.get
::
<
_
,
String
>
(
1
)),
format!
(
"(Marker: {})"
,
row
.get
::
<
_
,
String
>
(
2
)))
})
.unwrap
())
}
else
if
let
Some
(
pms_id
)
=
s_pms_id
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE oauth_foreign_id = $1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
pms_id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
pms_id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
)
}
else
if
let
(
Some
(
firstname
),
Some
(
lastname
))
=
(
s_firstname
,
s_lastname
)
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE firstname LIKE $1
AND lastname LIKE $2
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
firstname
,
&
lastname
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
firstname
,
&
lastname
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
())
}
else
{
Vec
::
new
()
Ok
(
Vec
::
new
()
)
}
}
...
...
src/db_conn.rs
View file @
74721993
...
...
@@ -50,8 +50,14 @@ pub trait MedalConnection {
fn
get_groups_complete
(
&
self
,
session_id
:
i32
)
->
Vec
<
Group
>
;
fn
get_group_complete
(
&
self
,
group_id
:
i32
)
->
Option
<
Group
>
;
fn
get_search_users
(
&
self
,
_
:
(
Option
<
i32
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
))
->
Vec
<
(
i32
,
String
,
String
)
>
;
fn
get_search_users
(
&
self
,
_
:
(
Option
<
i32
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
))
->
Result
<
Vec
<
(
i32
,
String
,
String
)
>
,
Vec
<
(
i32
,
String
,
String
)
>>
;
fn
get_debug_information
(
&
self
)
->
String
;
...
...
src/db_conn_postgres.rs
View file @
74721993
...
...
@@ -1177,42 +1177,54 @@ impl MedalConnection for Connection {
.unwrap
();
Some
(
group
)
}
fn
get_search_users
(
&
self
,
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_pms_id
):
(
Option
<
i32
>
,
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_groupcode
,
s_pms_id
):
(
Option
<
i32
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
))
->
Vec
<
(
i32
,
String
,
String
)
>
->
Result
<
Vec
<
(
i32
,
String
,
String
)
>
,
Vec
<
(
i32
,
String
,
String
)
>>
{
if
let
Some
(
id
)
=
s_id
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE id = $1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
)
}
else
if
let
Some
(
logincode
)
=
s_logincode
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE logincode = $1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
logincode
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
logincode
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
())
}
else
if
let
Some
(
groupcode
)
=
s_groupcode
{
let
query
=
"SELECT id, name, tag
FROM usergroup
WHERE groupcode = $1
LIMIT 30"
;
Err
(
self
.query_map_many
(
query
,
&
[
&
groupcode
],
|
row
|
{
(
row
.get
(
0
),
format!
(
"Gruppe: {}"
,
row
.get
::
<
_
,
String
>
(
1
)),
format!
(
"(Marker: {})"
,
row
.get
::
<
_
,
String
>
(
2
)))
})
.unwrap
())
}
else
if
let
Some
(
pms_id
)
=
s_pms_id
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE oauth_foreign_id = $1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
pms_id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
pms_id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
)
}
else
if
let
(
Some
(
firstname
),
Some
(
lastname
))
=
(
s_firstname
,
s_lastname
)
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE firstname LIKE $1
AND lastname LIKE $2
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
firstname
,
&
lastname
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
firstname
,
&
lastname
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
())
}
else
{
Vec
::
new
()
Ok
(
Vec
::
new
()
)
}
}
...
...
src/db_conn_sqlite_new.rs
View file @
74721993
...
...
@@ -1177,42 +1177,54 @@ impl MedalConnection for Connection {
.unwrap
();
Some
(
group
)
}
fn
get_search_users
(
&
self
,
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_pms_id
):
(
Option
<
i32
>
,
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_groupcode
,
s_pms_id
):
(
Option
<
i32
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
,
Option
<
String
>
))
->
Vec
<
(
i32
,
String
,
String
)
>
->
Result
<
Vec
<
(
i32
,
String
,
String
)
>
,
Vec
<
(
i32
,
String
,
String
)
>>
{
if
let
Some
(
id
)
=
s_id
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE id = ?1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
)
}
else
if
let
Some
(
logincode
)
=
s_logincode
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE logincode = ?1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
logincode
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
logincode
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
())
}
else
if
let
Some
(
groupcode
)
=
s_groupcode
{
let
query
=
"SELECT id, name, tag
FROM usergroup
WHERE groupcode = ?1
LIMIT 30"
;
Err
(
self
.query_map_many
(
query
,
&
[
&
groupcode
],
|
row
|
{
(
row
.get
(
0
),
format!
(
"Gruppe: {}"
,
row
.get
::
<
_
,
String
>
(
1
)),
format!
(
"(Marker: {})"
,
row
.get
::
<
_
,
String
>
(
2
)))
})
.unwrap
())
}
else
if
let
Some
(
pms_id
)
=
s_pms_id
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE oauth_foreign_id = ?1
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
pms_id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
pms_id
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
)
}
else
if
let
(
Some
(
firstname
),
Some
(
lastname
))
=
(
s_firstname
,
s_lastname
)
{
let
query
=
"SELECT id, firstname, lastname
FROM session
WHERE firstname LIKE ?1
AND lastname LIKE ?2
LIMIT 30"
;
self
.query_map_many
(
query
,
&
[
&
firstname
,
&
lastname
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
()
Ok
(
self
.query_map_many
(
query
,
&
[
&
firstname
,
&
lastname
],
|
row
|
(
row
.get
(
0
),
row
.get
(
1
),
row
.get
(
2
)))
.unwrap
())
}
else
{
Vec
::
new
()
Ok
(
Vec
::
new
()
)
}
}
...
...
src/webfw_iron.rs
View file @
74721993
...
...
@@ -875,10 +875,7 @@ fn admin<C>(req: &mut Request) -> IronResult<Response>
where
C
:
MedalConnection
+
std
::
marker
::
Send
+
'static
{
let
session_token
=
req
.expect_session_token
()
?
;
let
(
template
,
data
)
=
with_conn!
[
core
::
admin_index
,
C
,
req
,
&
session_token
]
.aug
(
req
)
?
;
let
(
template
,
data
)
=
with_conn!
[
core
::
admin_index
,
C
,
req
,
&
session_token
]
.aug
(
req
)
?
;
let
mut
resp
=
Response
::
new
();
resp
.set_mut
(
Template
::
new
(
&
template
,
data
))
.set_mut
(
status
::
Ok
);
...
...
@@ -889,12 +886,13 @@ fn admin_users<C>(req: &mut Request) -> IronResult<Response>
where
C
:
MedalConnection
+
std
::
marker
::
Send
+
'static
{
let
session_token
=
req
.expect_session_token
()
?
;
let
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_pms_id
)
=
{
let
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_groupcode
,
s_pms_id
)
=
{
let
formdata
=
itry!
(
req
.get_ref
::
<
UrlEncodedBody
>
());
(
formdata
.get
(
"id"
)
.map
(|
x
|
x
[
0
]
.parse
::
<
i32
>
()
.unwrap_or
(
0
)),
formdata
.get
(
"firstname"
)
.map
(|
x
|
x
[
0
]
.to_owned
()),
formdata
.get
(
"lastname"
)
.map
(|
x
|
x
[
0
]
.to_owned
()),
formdata
.get
(
"logincode"
)
.map
(|
x
|
x
[
0
]
.to_owned
()),
formdata
.get
(
"groupcode"
)
.map
(|
x
|
x
[
0
]
.to_owned
()),
formdata
.get
(
"pmsid"
)
.map
(|
x
|
x
[
0
]
.to_owned
()))
};
...
...
@@ -902,7 +900,7 @@ fn admin_users<C>(req: &mut Request) -> IronResult<Response>
C
,
req
,
&
session_token
,
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_pms_id
)]
.aug
(
req
)
?
;
(
s_id
,
s_firstname
,
s_lastname
,
s_logincode
,
s_groupcode
,
s_pms_id
)]
.aug
(
req
)
?
;
let
mut
resp
=
Response
::
new
();
resp
.set_mut
(
Template
::
new
(
&
template
,
data
))
.set_mut
(
status
::
Ok
);
...
...
templates/default/admin.hbs
View file @
74721993
<h1>
Admin-Suche
</h1>
<p>
Suche beachtet Groß-/Kleinschreibung. Das Prozentzeichen % ist ein Wildcart in der Namenssuche. Die Suche gibt nur bis zu 30 Ergebnisse aus, auch wenn es mehr gibt!
</p>
<p>
<form
action=
"/admin/user/"
method=
"post"
>
ID:
<br>
<input
type=
"text"
name=
"id"
>
<br><br>
<input
type=
"submit"
value=
"search"
>
</form>
</p>
<p>
<form
action=
"/admin/user/"
method=
"post"
>
Vorname:
<br>
...
...
@@ -31,6 +22,24 @@
</form>
</p>
<p>
<form
action=
"/admin/user/"
method=
"post"
>
Gruppencode:
<br>
<input
type=
"text"
name=
"groupcode"
>
<br><br>
<input
type=
"submit"
value=
"search"
>
</form>
</p>
<p>
<form
action=
"/admin/user/"
method=
"post"
>
ID:
<br>
<input
type=
"text"
name=
"id"
>
<br><br>
<input
type=
"submit"
value=
"search"
>
</form>
</p>
<p>
<form
action=
"/admin/user/"
method=
"post"
>
PMS-ID:
<br>
...
...
templates/default/admin_search_results.hbs
View file @
74721993
<h1>
Ergebnisse
</h1>
<ul>
{{#
each
result
}}
<li><a
href=
"
{{
this
.
0
}}
"
>
{{
this
.
0
}}
:
{{
this
.
1
}}
{{
this
.
2
}}
</li>
{{/
each
}}
</ul>
{{#if
users
}}
<h2>
Benutzer
</h2>
<ul>
{{#
each
users
}}
<li><a
href=
"
{{
this
.
0
}}
"
>
{{
this
.
0
}}
:
{{
this
.
1
}}
{{
this
.
2
}}
</li>
{{/
each
}}
</ul>
{{/if}}
{{#if
groups
}}
<h2>
Gruppen
</h2>
<ul>
{{#
each
groups
}}
<li><a
href=
"/admin/group/
{{
this
.
0
}}
"
>
{{
this
.
0
}}
:
{{
this
.
1
}}
{{
this
.
2
}}
</li>
{{/
each
}}
</ul>
{{/if}}
Robert Czechowski
@zgtm
mentioned in issue
#78 (closed)
·
Jun 22, 2020
mentioned in issue
#78 (closed)
mentioned in issue #78
Toggle commit list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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