?? bugdb.cpp
字號(hào):
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << con.get("myself") <<
"\"><SELECT NAME=\"bug\" SIZE=20>";
if (bugs.select(query) != 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 userForm(WWWconnection& con)
{
char* name = con.get("name");
if (name == NULL) {
error(con, "No person was selected");
return true;
}
char* myself = con.get("myself");
key = myself;
if (persons.select(qPerson) == 0) {
error(con, "Person authorization failed");
return true;
}
int selfStatus = persons->status;
key = name;
if (persons.select(qPerson) == 0) {
error(con, "Person not found");
return true;
}
if (persons->status == Person::isAdministrator) {
con << TAG <<
HTML_HEAD "<TITLE>BUGDB Administrator</TITLE></HEAD>"
BODY
"<H2>Administrator menu</H2><FONT SIZE=\"+1\">"
"<UL><LI><A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress()
<< "&page=addUserForm&myself=" << URL << myself
<< "\">Add user</A>"
"<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress()
<< "&page=addEngineerForm&myself=" << URL << myself
<< "\">Add engineer</A>"
"<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress()
<< "&page=selectPersonForm&myself=" << URL << myself
<< "\">Select person"
"</A>"
"<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress()
<< "&page=removePersonForm&myself=" << URL << myself
<< "\">Remove person</A></UL>"
"<UL><LI><A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress()
<< "&page=addSoftwareForm&myself=" << URL << myself
<< "\">Add software product</A>"
"<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress()
<< "&page=selectSoftwareForm&myself=" << URL << myself
<< "\">Select software product</A>"
"<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress()
<< "&page=removeSoftwareForm&myself=" << URL << myself
<< "\">Remove software product</A></UL>"
"<UL><LI><A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress()
<< "&page=selectBugForm&myself=" << URL << myself
<< "\">Select bug</A>"
"<LI><A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress()
<< "&page=removeBugForm&myself=" << URL << myself
<< "\">Remove bug</A></UL>";
if (selfStatus == Person::isAdministrator) {
con << TAG <<
"<UL><LI><A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress() << "&page=changePasswordForm"
"&myself=administrator&name=" << URL << myself
<< "\">Change password</A>"
"<LI><A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress()
<< "&page=shutdown\">Shutdown server</A></UL>";
}
con << TAG << "</FONT></BODY></HTML>";
return true;
}
con <<
HTML_HEAD "<TITLE>" << name << "</TITLE></HEAD>"
BODY
"<H2>" << name << "</H2><FONT SIZE=\"+1\">"
"<UL><LI><A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress() << "&page=createBugReportForm&myself="
<< URL << myself << "\">Create bug report</A>";
if (persons->sEmailAddress[0] != '\0') {
con << TAG <<
"<LI><A HREF=\"mailto:" << persons->sEmailAddress
<< "\">Send e-mail</A>"
"<LI><A HREF=\"" << con.getStub() << "?socket=" << con.getAddress()
<< "&page=bugQueryForm&myself=" << URL << myself
<< "\">Find a bug</A>";
}
if (strcmp(myself, name) == 0 || selfStatus == Person::isAdministrator) {
con << TAG << "<LI><A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress() << "&page=changePasswordForm&myself="
<< URL << myself << "&name=" << URL << name <<
"\">Change password</A>";
}
con << TAG <<
"</UL></FONT><P><TABLE><TR><TH ALIGN=LEFT>Person name:</TH>"
"<TD><FORM METHOD=POST ACTION=\""
<< con.getStub() << "\"><INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\""
"updatePerson\"><INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself
<< "\"><INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">"
"<INPUT TYPE=text NAME=\"newname\" SIZE=30 VALUE=\""
<< name << "\"><INPUT TYPE=submit VALUE=\"Change\"></FORM></TD></TR>"
"<TR><TH ALIGN=LEFT>E-Mail:</TH>"
"<TD><FORM METHOD=POST ACTION=\""
<< con.getStub() << "\"><INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\""
"updatePerson\"><INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself
<< "\"><INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">"
"<INPUT TYPE=text NAME=\"email\" SIZE=30 VALUE=\""
<< persons->sEmailAddress << "\">"
"<INPUT TYPE=submit VALUE=\"Change\"></FORM></TD></TR>";
if (persons->status != Person::isUser) {
con << TAG << "<TR><TH ALIGN=LEFT>Projects:</TH>"
"<TD><FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" "
"VALUE=\"softwareForm\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">"
"<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">"
"<SELECT NAME=\"software\" SIZE=1>";
if (persons->setProjects.length() != 0) {
print(con, persons->setProjects);
con << TAG <<
"</SELECT><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">"
" <INPUT TYPE=submit NAME=\"action\" VALUE=\"Detach\">";
} else {
con << TAG << EMPTY_LIST;
}
if (products.select() != 0) {
con << TAG <<
"</FORM></TD></TR>"
"<TR><TH ALIGN=LEFT>Attach to project:</TH>"
"<TD><FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" "
"VALUE=\"attachToProject\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself <<"\">"
"<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">"
"<SELECT NAME=\"software\" SIZE=1>";
print(con, products);
con << TAG << "</SELECT><INPUT TYPE=submit VALUE=\"Attach\">";
}
con << TAG <<
"</FORM></TD></TR>"
"<TR><TH ALIGN=LEFT>Find a person:</TH>"
"<TD><FORM METHOD=POST ACTION=\""
<< con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" "
"VALUE=\"userForm\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">"
"<INPUT TYPE=text NAME=\"name\" SIZE=30>"
"<INPUT TYPE=submit VALUE=\"Find\"></FORM></TD></TR>";
}
con << TAG << "<TR><TH ALIGN=LEFT>Used software:</TH>"
"<TD><FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" "
"VALUE=\"softwareForm\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">"
"<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">"
"<SELECT NAME=\"software\" SIZE=1>";
if (persons->setUsedSoftware.length() != 0) {
print(con, persons->setUsedSoftware);
con << TAG <<
"</SELECT><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">"
" <INPUT TYPE=submit NAME=\"action\" VALUE=\"Unregister\">";
} else {
con << TAG << EMPTY_LIST;
}
if (products.select() != 0) {
con << TAG <<
"</FORM></TD></TR>"
"<TR><TH ALIGN=LEFT>Register as software user:</TH>"
"<TD><FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden NAME=\"page\" "
"VALUE=\"registerSoftware\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">"
"<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">"
"<SELECT NAME=\"software\" SIZE=1>";
print(con, products);
con << TAG << "</SELECT><INPUT TYPE=submit VALUE=\"Register\">";
}
con << TAG << "</FORM></TD></TR></TABLE><P>"
"<B>Reported bugs:</B><BR>"
"<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=\"" << myself << "\">"
"<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">"
"<SELECT NAME=\"bug\" SIZE=5>";
if (persons->setReportedBugs.length() != 0) {
print(con, persons->setReportedBugs);
con << TAG <<
"</SELECT><BR><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">";
} else {
con << TAG << EMPTY_LIST;
}
con << TAG << "</FORM><P>";
if (persons->status != Person::isUser) {
con << TAG <<
"<P><B>Assigned bugs:</B><BR>"
"<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=\"" << myself << "\">"
"<INPUT TYPE=hidden NAME=\"name\" VALUE=\"" << name << "\">"
"<SELECT NAME=\"bug\" SIZE=5>";
if (persons->setAssignedBugs.length() != 0) {
print(con, persons->setAssignedBugs);
con << TAG <<
"</SELECT><BR>"
"<INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\"> "
"<INPUT TYPE=submit NAME=\"action\" VALUE=\"Deassign\">";
} else {
con << TAG << EMPTY_LIST;
}
con << TAG << "</FORM>";
}
if (strcmp(name, myself) == 0) {
con << TAG << "</BODY></HTML>";
} else {
mainMenuReference(con);
}
return true;
}
bool createBugReportForm(WWWconnection& con)
{
int i;
sequencer.select();
con << TAG <<
HTML_HEAD "<TITLE>Bug</TITLE></HEAD>"
BODY
"<H2>Bug</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden "
"NAME=\"page\" VALUE=\"createBugReport\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\""<<con.get("myself")<<"\">"
"<INPUT TYPE=hidden NAME=\"bug\" VALUE=" << ++sequencer->nBugs << ">"
"<TABLE><TH ALIGN=LEFT>Summary:</TH>"
"<TD><INPUT TYPE=text NAME=\"summary\" SIZE=40></TD></TR>"
"<TR><TH ALIGN=LEFT>Category:</TH>"
"<TD><SELECT NAME=\"category\" SIZE=1>";
for (i = 1; eCATEGORY_STRING[i] != NULL; i++) {
con << TAG << "<OPTION SELECTED VALUE=" << i << ">"
<< eCATEGORY_STRING[i] << "</OPTION>";
}
con << TAG << "</SELECT></TD></TR>"
"<TR><TH ALIGN=LEFT>Severity:</TH>"
"<TD><SELECT NAME=\"severity\" SIZE=1>";
for (i = 1; eSEVERITY_STRING[i] != NULL; i++) {
con << TAG << "<OPTION SELECTED VALUE=" << i << ">"
<< eSEVERITY_STRING[i] << "</OPTION>";
}
con << TAG <<
"</SELECT></TD></TR>"
"<TR><TH ALIGN=LEFT>Priority:</TH>"
"<TD><SELECT NAME=\"priority\" SIZE=1>";
for (i = 1; eFIXING_PRIORITY_STRING[i] != NULL; i++) {
con << TAG << "<OPTION SELECTED VALUE=" << i << ">"
<< eFIXING_PRIORITY_STRING[i] << "</OPTION>";
}
con << TAG <<
"</SELECT></TD></TR>"
"<TR><TH ALIGN=LEFT>Software:</TH>"
"<TD><SELECT NAME=\"software\" SIZE=1>";
if (products.select() != 0) {
print(con, products);
}
con << TAG <<
"</SELECT></TD></TR>"
"<TR><TH ALIGN=LEFT>Version:</TH>"
"<TD><INPUT TYPE=text NAME=\"version\"></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></TABLE><P>"
"<INPUT TYPE=submit VALUE=\"Submit\"> "
"<INPUT TYPE=reset></FORM>";
mainMenuReference(con);
sequencer.update();
return true;
}
bool bugForm(WWWconnection& con);
bool createBugReport(WWWconnection& con)
{
key = con.get("myself");
if (persons.select(qPerson) == 0) {
error(con, "Author unknown");
return true;
}
key = con.get("software");
if (products.select(qSoftware) == 0) {
error(con, "No such software product");
return true;
}
if (sscanf(con.get("version"), "%d.%d", &majorVersion, &minorVersion) != 2)
{
error(con, "Bad version format");
return true;
}
initialVersion = products->pVersions;
if (versions.select(qVersion) == 0) {
error(con, "No such software product version");
return true;
}
Bug bug;
bug.bugId = atoi(con.get("bug"));
bug.sOneLineSummary = con.get("summary");
bug.eCategory = atoi(con.get("category"));
bug.eFixingPriority = atoi(con.get("priority"));
bug.eSeverity = atoi(con.get("severity"));
bug.sOperatingSystem = con.get("os");
bug.sHardwarePlatform = con.get("platform");
bug.pReportedBy = persons.currentId();
bug.pAssignedTo = null;
bug.pSoftware = products.currentId();
bug.pVersion = versions.currentId();
bug.nReports = 0;
insert(bug);
con.addPair("action", "Select");
return bugForm(con);
}
bool bugForm(WWWconnection& con)
{
int i;
char* bugStr = con.get("bug");
bugId = atoi(bugStr);
if (bugs.select(qBug) == 0) {
error(con, "No bug was selected");
return true;
}
char* myself = con.get("myself");
if (strcmp(con.get("action"), "Remove") == 0) {
dbReference<Bug> pBug = bugs.currentId();
bugId = atoi(con.get("relatedbug"));
if (bugs.select(qBug) == 0) {
error(con, "No such bug");
return true;
}
int i = rindex(bugs->setSimilarBugs, pBug);
if (i < 0) {
error(con, "No such related bug");
return true;
}
bugs->setSimilarBugs.remove(i);
bugs.update();
return bugForm(con);
}
key = myself;
if (persons.select(qPerson) == 0) {
error(con, "No such user");
return true;
}
if (strcmp(con.get("action"), "Deassign") == 0) {
int i = rindex(persons->setAssignedBugs, bugs.currentId());
if (i < 0) {
error(con, "Bug was not assigned");
return true;
}
persons->setAssignedBugs.remove(i);
persons.update();
con.addPair("name", myself);
return userForm(con);
}
int personStatus = persons->status;
products.at(bugs->pSoftware);
versions.at(bugs->pVersion);
con << TAG <<
HTML_HEAD "<TITLE>Bug in " << products->sName << " v. " <<
versions->getVersionString() << "</TITLE></HEAD>"
BODY
"<H2>Bug in " << products->sName << " v. "
<< versions->getVersionString() << "</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -