31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/* Forward references to static routines */
static void report_format_hints(void);
/*
** WEBPAGE: /reportlist
*/
void view_list(void){
Stmt q;
int rn = 0;
int cnt = 0;
login_check_credentials();
if( !g.okRdTkt && !g.okNewTkt ){ login_needed(); return; }
style_header("Ticket Main Menu");
if( g.okNewTkt ){
@ <p>Enter a new ticket:</p>
@ <ol><li value="1"><a href="tktnew">New ticket</a></li></ol>
@
cnt++;
}else if( db_exists(
"SELECT 1 FROM user"
" WHERE login='anonymous' AND cap GLOB '*n*'")
){
@ <p><a href="login?anon=1&g=tktnew">Login as "anonymous"</a>
@ to enter a new ticket.</p>
}
if( !g.okRdTkt ){
@ <p>You are not authorized to view existing tickets.</p>
}else{
db_prepare(&q, "SELECT rn, title, owner FROM reportfmt ORDER BY title");
@ <p>Choose a report format from the following list:</p>
@ <ol>
while( db_step(&q)==SQLITE_ROW ){
const char *zTitle = db_column_text(&q, 1);
const char *zOwner = db_column_text(&q, 2);
if( zTitle[0] =='_' && !g.okTktFmt ){
continue;
}
rn = db_column_int(&q, 0);
cnt++;
@ <li value="%d(cnt)">
if( zTitle[0] == '_' ){
@%h(zTitle)
} else {
@<a href="rptview?rn=%d(rn)"
@ rel="nofollow">%h(zTitle)</a>
}
@
if( g.okWrite && zOwner && zOwner[0] ){
@ (by <i>%h(zOwner)</i>)
}
if( g.okTktFmt ){
@ [<a href="rptedit?rn=%d(rn)&copy=1" rel="nofollow">copy</a>]
}
if( g.okAdmin || (g.okWrTkt && zOwner && strcmp(g.zLogin,zOwner)==0) ){
@ [<a href="rptedit?rn=%d(rn)" rel="nofollow">edit</a>]
}
if( g.okTktFmt ){
@ [<a href="rptsql?rn=%d(rn)" rel="nofollow">sql</a>]
}
@ </li>
}
}
@ </ol>
if( g.okTktFmt ){
@ <p>Create a new ticket display format:</p>
@ <ol>
@ <li value="%d(cnt+1)"><a href="rptnew">New report format</a></li>
@ </ol>
}
style_footer();
}
/*
** Remove whitespace from both ends of a string.
*/
char *trim_string(const char *zOrig){
|
>
>
|
|
|
|
<
|
<
<
<
<
<
|
<
<
<
|
<
<
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
|
|
|
|
|
<
|
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
/* Forward references to static routines */
static void report_format_hints(void);
/*
** WEBPAGE: /reportlist
*/
void view_list(void){
const char *zScript;
Blob ril; /* Report Item List */
Stmt q;
int rn = 0;
int cnt = 0;
login_check_credentials();
if( !g.okRdTkt && !g.okNewTkt ){ login_needed(); return; }
style_header("Ticket Main Menu");
if( g.thTrace ) Th_Trace("BEGIN_REPORTLIST<br />\n", -1);
zScript = ticket_reportlist_code();
if( g.thTrace ) Th_Trace("BEGIN_REPORTLIST_SCRIPT<br />\n", -1);
blob_zero(&ril);
db_prepare(&q, "SELECT rn, title, owner FROM reportfmt ORDER BY title");
while( db_step(&q)==SQLITE_ROW ){
const char *zTitle = db_column_text(&q, 1);
const char *zOwner = db_column_text(&q, 2);
if( zTitle[0] =='_' && !g.okTktFmt ){
continue;
}
rn = db_column_int(&q, 0);
cnt++;
blob_appendf(&ril, "<li>");
if( zTitle[0] == '_' ){
blob_appendf(&ril, "%s", zTitle);
} else {
blob_appendf(&ril, "<a href=\"rptview?rn=%d\" rel=\"nofollow\">%h</a>", rn, zTitle);
}
blob_appendf(&ril, " ");
if( g.okWrite && zOwner && zOwner[0] ){
blob_appendf(&ril, "(by <i>%h</i></i>) ", zOwner);
}
if( g.okTktFmt ){
blob_appendf(&ril, "[<a href=\"rptedit?rn=%d&copy=1\" rel=\"nofollow\">copy</a>] ", rn);
}
if( g.okAdmin || (g.okWrTkt && zOwner && strcmp(g.zLogin,zOwner)==0) ){
blob_appendf(&ril, "[<a href=\"rptedit?rn=%d\" rel=\"nofollow\">edit</a>] ", rn);
}
if( g.okTktFmt ){
blob_appendf(&ril, "[<a href=\"rptsql?rn=%d\" rel=\"nofollow\">sql</a>] ", rn);
}
blob_appendf(&ril, "</li>\n");
}
Th_Store("report_items", blob_str(&ril));
Th_Render(zScript);
blob_reset(&ril);
if( g.thTrace ) Th_Trace("END_REPORTLIST<br />\n", -1);
style_footer();
}
/*
** Remove whitespace from both ends of a string.
*/
char *trim_string(const char *zOrig){
|