?? bugdb.cpp
字號:
{
con << TAG <<
HTML_HEAD "<TITLE>Select a bug</TITLE></HEAD>"
BODY
"<H2>Select a bug</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<
"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"bugForm\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<
"\"><SELECT SIZE=15 NAME=\"bug\">";
if (bugs.select() != 0) {
print(con, bugs);
con << TAG <<
"</SELECT><BR><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">";
} else {
con << TAG << EMPTY_LIST;
}
con << TAG << "</FORM>";
mainMenuReference(con);
return true;
}
bool removeBugForm(WWWconnection& con)
{
con << TAG <<
HTML_HEAD "<TITLE>Remove a bug</TITLE></HEAD>"
BODY
"<H2>Remove a bug</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<
"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"removeBug\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<
"\"><SELECT SIZE=15 NAME=\"bug\">";
if (bugs.select() != 0) {
print(con, bugs);
con << TAG << "</SELECT><BR><INPUT TYPE=submit VALUE=\"Remove\">";
} else {
con << TAG << EMPTY_LIST;
}
con << TAG << "</FORM>";
mainMenuReference(con);
return true;
}
bool changePasswordForm(WWWconnection& con)
{
con << TAG <<
HTML_HEAD "<TITLE>Change password</TITLE></HEAD>"
BODY
"<H2>Change password</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<
"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"changePassword\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<
"\"><INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << con.get("name") <<
"\"><TABLE>"
"<TR><TH ALIGN=LEFT>New password:</TH>"
"<TD><INPUT TYPE=password NAME=\"password\" SIZE=20</TD></TR>"
"<TR><TH ALIGN=LEFT>Re-type password:</TH>"
"<TD><INPUT TYPE=password NAME=\"password2\" SIZE=20</TD></TR>"
"</TABLE><P>"
"<INPUT TYPE=submit VALUE=\"Change\"> "
"<INPUT TYPE=reset VALUE=\"Reset\">"
"</FORM>";
con << TAG << "</FORM>";
mainMenuReference(con);
return true;
}
bool shutdown(WWWconnection& con)
{
con << TAG <<
HTML_HEAD "<TITLE>BUGDB message</TITLE></HEAD><BODY>"
"<H1>BUGDB server is terminated</H1></BODY></HTML>";
return false;
}
bool userForm(WWWconnection& con);
bool userGroupForm(WWWconnection& con);
bool softwareForm(WWWconnection& con);
bool addUser(WWWconnection& con)
{
Person person;
person.sName = key = con.get("name");
person.sEmailAddress = con.get("email");
person.sPassword = "";
person.status = Person::isUser;
person.nReports = 0;
if (persons.select(qPerson) != 0) {
error(con, "Person already exists");
return true;
}
insert(person);
return userForm(con);
}
bool addEngineer(WWWconnection& con)
{
Person person;
person.sName = key = con.get("name");
person.sEmailAddress = con.get("email");
person.sPassword = "";
person.status = Person::isEngineer;
person.nReports = 0;
if (persons.select(qPerson) != 0) {
error(con, "Person already exists");
return true;
}
insert(person);
return userForm(con);
}
bool removePerson(WWWconnection& con)
{
key = con.get("name");
if (key == NULL) {
error(con, "No person was selected");
return true;
}
if (persons.select(qPerson) == 0) {
error(con, "No such person");
} else if (persons->nReports > 0
|| persons->setReportedBugs.length() > 0)
{
error(con, "It is not possible to delete person who is author "
"of existed bug reports");
} else {
persons.remove();
message(con, "Person is removed");
}
return true;
}
bool addSoftware(WWWconnection& con)
{
Software software;
Version version;
software.sName = key = con.get("software");
if (products.select(qSoftware) != 0) {
error(con, "Software product already exists");
return true;
}
char* versionStr = con.get("version");
if (sscanf(versionStr, "%d.%d", &version.majorVersionNumber,
&version.minorVersionNumber) != 2)
{
error(con, "Bad version number (MAJOR.MINOR expected)");
return true;
}
version.sComment = con.get("comment");
version.sLabel = con.get("label");
version.released = dbDateTime::current();
software.pVersions = insert(version);
insert(software);
con.addPair("action", "Select");
return softwareForm(con);
}
bool removeSoftware(WWWconnection& con)
{
key = con.get("software");
if (products.select(qSoftware) == 0) {
error(con, "No such software product");
return true;
}
if (products->setBugs.length() != 0) {
error(con, "Can not remove software with non-empty reported bug list");
return true;
}
products.remove();
message(con, "Software product is removed");
return true;
}
bool removeBug(WWWconnection& con)
{
char* bug = con.get("bug");
if (bug == NULL) {
error(con, "No bug was selected");
} else {
bugId = atoi(bug);
if (bugs.select(qBug) == 0) {
error(con, "No such bug");
} else {
if (bugs->pReportHistory != null ||
bugs->pWorkArounds != null)
{
error(con, "Can not remove bug with existed reports");
return true;
}
bugs.remove();
message(con, "Bug is removed");
}
}
return true;
}
bool changePassword(WWWconnection& con)
{
char* password = con.get("password");
char* password2 = con.get("password2");
if (strcmp(password, password2) != 0) {
error(con, "Passwords are not equal");
} else {
key = con.get("name");
if (persons.select(qPerson) == 0) {
error(con, "No such person");
} else {
persons->sPassword = password;
persons.update();
message(con, "Password changed");
}
}
return true;
}
bool updatePerson(WWWconnection& con)
{
char* name = con.get("name");
key = name;
if (persons.select(qPerson) == 0) {
error(con, "No such person");
return true;
} else {
char* newName = con.get("newname");
char* eMail = con.get("email");
if (eMail != NULL) {
persons->sEmailAddress = eMail;
}
if (newName != NULL) {
persons->sName = newName;
con.addPair("name", newName);
if (strcmp(name, con.get("myself")) == 0) {
con.addPair("myself", newName);
}
}
persons.update();
}
return userForm(con);
}
bool login(WWWconnection& con)
{
char* name = con.get("name");
key = con.get("name");
if (persons.select(qPerson) == 0) {
error(con, "No such person");
return true;
}
if (!persons->checkPassword(con.get("password"))) {
error(con, "Incorrect password");
return true;
}
con.addPair("myself", name);
return userForm(con);
}
bool bugQueryForm(WWWconnection& con)
{
int i;
con << TAG <<
HTML_HEAD "<TITLE>Query to locate bug</TITLE></HEAD>"
BODY
"<H2>Bug query</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<
"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"bugQuery\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<
"\"><TABLE>"
"<TR><TH ALIGN=LEFT>Description substring:</TH>"
"<TD><INPUT TYPE=text NAME=\"summary\" SIZE=30</TD></TR>"
"<TR><TH ALIGN=LEFT>Category:</TH>"
"<TD><SELECT NAME=\"category\" SIZE=1>"
"<OPTION VALUE=0 SELECTED></OPTION>";
for (i = 1; eCATEGORY_STRING[i] != NULL; i++) {
con << TAG << "<OPTION VALUE=" << i << ">"
<< eCATEGORY_STRING[i] << "</OPTION>";
}
con << TAG << "</SELECT></TD></TR>"
"<TR><TH ALIGN=LEFT>Severity:</TH>"
"<TD><SELECT NAME=\"severity\" SIZE=1>"
"<OPTION VALUE=0 SELECTED></OPTION>";
for (i = 1; eSEVERITY_STRING[i] != NULL; i++) {
con << TAG << "<OPTION VALUE=" << i << ">"
<< eSEVERITY_STRING[i] << "</OPTION>";
}
con << TAG << "</SELECT></TD></TR>"
"<TR><TH ALIGN=LEFT>Fixing priority:</TH>"
"<TD><SELECT NAME=\"priority\" SIZE=1>"
"<OPTION VALUE=0 SELECTED></OPTION>";
for (i = 1; eFIXING_PRIORITY_STRING[i] != NULL; i++) {
con << TAG << "<OPTION VALUE=" << i << ">"
<< eFIXING_PRIORITY_STRING[i] << "</OPTION>";
}
con << TAG <<
"</SELECT></TD></TR>"
"<TR><TH ALIGN=LEFT>Platform:</TH>"
"<TD><INPUT TYPE=text NAME=\"platform\"</TD></TR>"
"<TR><TH ALIGN=LEFT>OS</TH>"
"<TD><INPUT TYPE=text NAME=\"os\"</TD></TR>"
"<TR><TH ALIGN=LEFT>Software:</TH>"
"<TD><INPUT TYPE=text NAME=\"software\"</TD></TR>"
"<TR><TH ALIGN=LEFT>Assigned to:</TH>"
"<TR><TH ALIGN=LEFT>Reported by:</TH>"
"<TD><INPUT TYPE=text NAME=\"user\"</TD></TR>"
"<TR><TH ALIGN=LEFT>Major version number:</TH>"
"<TD>from <INPUT TYPE=text NAME=\"minmajor\" SIZE=4>"
" to <INPUT TYPE=text NAME=\"maxmajor\" SIZE=4</TD></TR>"
"<TR><TH ALIGN=LEFT>Minor version number:</TH>"
"<TD>from <INPUT TYPE=text NAME=\"minminor\" SIZE=4</TD>"
" to <INPUT TYPE=text NAME=\"maxminor\" SIZE=4</TD></TR></TABLE><P>"
"<INPUT TYPE=submit VALUE=\"Search\"> "
"<INPUT TYPE=reset VALUE=\"Reset\">"
"</FORM></BODY></HTML>";
return true;
}
bool bugQuery(WWWconnection& con)
{
char* p;
dbQuery query;
query.reset();
p = con.get("software");
if (*p != '\0') {
query.add("pSoftware.sName like").add(p);
}
int4 category = atoi(con.get("category"));
if (category != 0) {
query.And("eCategory=").add(category);
}
int4 severity = atoi(con.get("severity"));
if (severity != 0) {
query.And("eSeverity=").add(severity);
}
int4 priority = atoi(con.get("priority"));
if (priority != 0) {
query.And("eFixingPriority=").add(priority);
}
p = con.get("os");
if (*p != '\0') {
query.And("sOperatingSystem like").add(p);
}
p = con.get("platform");
if (*p != '\0') {
query.And("sHardwarePlatform like").add(p);
}
p = con.get("engineer");
if (*p != '\0') {
query.And("pAssignedTo is not null and pAssignedTo.sName like").add(p);
}
p = con.get("user");
if (*p != '\0') {
query.And("pReportedBy.sName like").add(p);
}
p = con.get("summary");
if (*p != '\0') {
query.And("sOneLineSummary like").add(p);
}
p = con.get("minmajor");
int minMajorVersionNumber = (*p == '\0') ? 0 : atoi(p);
p = con.get("maxmajor");
int maxMajorVersionNumber = (*p == '\0') ? INT_MAX : atoi(p);
p = con.get("minminor");
int minMinorVersionNumber = (*p == '\0') ? 0 : atoi(p);
p = con.get("maxminor");
int maxMinorVersionNumber = (*p == '\0') ? INT_MAX : atoi(p);
if (minMajorVersionNumber != 0) {
if (maxMajorVersionNumber != INT_MAX) {
query.And("pVersion.majorVersionNumber between")
.add(minMajorVersionNumber)
.add("and").add(maxMajorVersionNumber);
} else {
query.And("pVersion.majorVersionNumber>=")
.add(minMajorVersionNumber);
}
} else if (maxMajorVersionNumber != INT_MAX) {
query.And("pVersion.majorVersionNumber<=").add(maxMajorVersionNumber);
}
if (minMinorVersionNumber != 0) {
if (maxMinorVersionNumber != INT_MAX) {
query.And("pVersion.minorVersionNumber between")
.add(minMinorVersionNumber)
.add("and").add(maxMinorVersionNumber);
} else {
query.And("pVersion.minorVersionNumber>=")
.add(minMinorVersionNumber);
}
} else if (maxMinorVersionNumber != INT_MAX) {
query.And("pVersion.minorVersionNumber<=").add(maxMinorVersionNumber);
}
con << TAG <<
HTML_HEAD "<TITLE>List of selected bugs</TITLE></HEAD>"
BODY
"<H2>Selected bugs</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress() <<
"\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"bugForm\">"
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -