?? bugdb.cpp
字號(hào):
con << TAG << "<A HREF=\"mailto:"
<< persons->sEmailAddress << "\">"
<< persons->sName << "</A>";
} else {
con << TAG <<
"<A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress()
<< "&page=userForm&myself=" << URL << myself
<< "&name=" << URL << persons->sName << "\">"
<< persons->sName << "</A>";
}
con << TAG << "<P>Status: </B><SELECT SIZE=1 NAME=\"status\">"
"<OPTION SELECTED VALUE=" << reports->status << ">"
<< eSTATUS_STRING[reports->status] << "</OPTION>";
for (int i = 1; eSTATUS_STRING[i] != NULL; i++) {
con << TAG << "<OPTION VALUE=" << i << ">" << eSTATUS_STRING[i]
<< "</OPTION>";
}
con << TAG <<
"</SELECT><P>"
"<B>Bug description:</B><BR>"
"<TEXTAREA COLS=40 ROWS=5 NAME=\"description\">"
<< reports->sDescription << "</TEXTAREA><P>";
if (personStatus != Person::isUser) {
con << TAG <<
"<INPUT TYPE=submit VALUE=\"Update\"> "
"<INPUT TYPE=reset VALUE=\"Reset\">";
}
con << TAG << "</FORM>";
mainMenuReference(con);
return true;
}
bool updateWorkAroundForm(WWWconnection& con)
{
if (strcmp(con.get("action"), "Add") == 0) {
return addWorkAroundForm(con);
}
char* bugStr = con.get("bug");
bugId = atoi(bugStr);
if (bugs.select(qBug) == 0) {
error(con, "No such bug");
return true;
}
char* workaround = con.get("workaround");
int index = atoi(workaround);
dbReference<Report> prev, curr = null, next = bugs->pWorkArounds;
do {
prev = curr;
if (next == null) {
error(con, "No such report");
return true;
}
reports.at(next);
curr = next;
next = reports->pNext;
} while (reports->index != index);
if (strcmp(con.get("action"), "Remove") == 0) {
reports.remove();
bugs->nReports -= 1;
if (prev == null) {
bugs->pWorkArounds = next;
} else {
reports.at(prev);
reports->pNext = next;
reports.update();
}
bugs.update();
con.addPair("action", "Select");
return bugForm(con);
}
char date[64];
reports->creationDate.asString(date, sizeof date);
char* myself = con.get("myself");
key = myself;
if (persons.select(qPerson) == 0) {
error(con, "No such person");
return true;
}
int personStatus = persons->status;
persons.at(reports->pAuthor);
con << TAG <<
HTML_HEAD "<TITLE>Work around " << date << "</TITLE></HEAD>"
BODY
"<H2>Work around " << date << "</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden "
"NAME=\"page\" VALUE=\"updateWorkAround\">"
"<INPUT TYPE=hidden NAME=\"bug\" VALUE=" << bugStr << ">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself <<
"\"><INPUT TYPE=hidden NAME=\"workaround\" VALUE=" << index <<
"><B>Created by ";
if (personStatus == Person::isUser) {
con << TAG << "<A HREF=\"mailto:"
<< persons->sEmailAddress << "\">"
<< persons->sName << "</A>";
} else {
con << TAG <<
"<A HREF=\"" << con.getStub() << "?socket="
<< con.getAddress()
<< "&page=userForm&myself=" << URL << myself
<< "&name=" << URL << persons->sName << "\">"
<< persons->sName << "</A>";
}
con << TAG << "<P>Status: </B><SELECT SIZE=1 NAME=\"status\">"
"<OPTION SELECTED VALUE=" << reports->status << ">"
<< eSTATUS_STRING[reports->status] << "</OPTION>";
for (int i = 1; eSTATUS_STRING[i] != NULL; i++) {
con << TAG << "<OPTION VALUE=" << i << ">" << eSTATUS_STRING[i]
<< "</OPTION>";
}
con << TAG <<
"</SELECT><P>"
"<B>Bug description:</B><BR>"
"<TEXTAREA COLS=40 ROWS=5 NAME=\"description\">"
<< reports->sDescription << "</TEXTAREA><P>";
if (personStatus != Person::isUser) {
con << TAG <<
"<INPUT TYPE=submit VALUE=\"Update\"> "
"<INPUT TYPE=reset VALUE=\"Reset\">";
}
con << TAG << "</FORM>";
mainMenuReference(con);
return true;
}
bool updateReport(WWWconnection& con)
{
bugId = atoi(con.get("bug"));
if (bugs.select(qBug) == 0) {
error(con, "No such bug");
return true;
}
reportId = atoi(con.get("report"));
firstReport = bugs->pReportHistory;
if (reports.select(qReport) == 0) {
error(con, "No report was selected");
return true;
}
reports->sDescription = con.get("description");
reports->status = atoi(con.get("status"));
reports.update();
con.addPair("action", "Select");
return bugForm(con);
}
bool updateWorkAround(WWWconnection& con)
{
bugId = atoi(con.get("bug"));
if (bugs.select(qBug) == 0) {
error(con, "No such bug");
return true;
}
reportId = atoi(con.get("workaround"));
firstReport = bugs->pWorkArounds;
if (reports.select(qReport) == 0) {
error(con, "No report was selected");
return true;
}
reports->sDescription = con.get("description");
reports->status = atoi(con.get("status"));
reports.update();
con.addPair("action", "Select");
return bugForm(con);
}
bool attachToProject(WWWconnection& con)
{
key = con.get("name");
if (persons.select(qPerson) == 0 || persons->status == Person::isUser) {
error(con, "No such engineer");
} else {
key = con.get("software");
if (products.select(qSoftware) == 0) {
error(con, "No such software product");
} else {
if (rindex(products->setEngineers, persons.currentId()) >= 0) {
error(con, "Engineer already attached to the project");
} else {
products->setEngineers.append(persons.currentId());
products.update();
return userForm(con);
}
}
}
return true;
}
bool registerSoftware(WWWconnection& con)
{
key = con.get("name");
if (persons.select(qPerson) == 0) {
error(con, "No such person");
} else {
key = con.get("software");
if (products.select(qSoftware) == 0) {
error(con, "No such software product");
} else {
if (rindex(products->setUsers, persons.currentId()) >= 0) {
error(con, "User already registered this software");
} else {
products->setUsers.append(persons.currentId());
products.update();
return userForm(con);
}
}
}
return true;
}
bool softwareForm(WWWconnection& con)
{
char* software = con.get("software");
if (software == NULL) {
error(con, "No software product was selected");
return true;
}
key = software;
if (products.select(qSoftware) == 0) {
error(con, "No such software product");
return true;
}
if (strcmp(con.get("action"), "Detach") == 0) {
key = con.get("name");
if (persons.select(qPerson) == 0) {
error(con, "No such person");
return true;
}
int i = rindex(persons->setProjects, products.currentId());
if (i < 0) {
error(con, "Person was not attached to the project");
return true;
}
persons->setProjects.remove(i);
persons.update();
return userForm(con);
}
if (strcmp(con.get("action"), "Unregister") == 0) {
key = con.get("name");
if (persons.select(qPerson) == 0) {
error(con, "No such person");
return true;
}
int i = rindex(persons->setUsedSoftware, products.currentId());
if (i < 0) {
error(con, "Person was not registered");
return true;
}
persons->setProjects.remove(i);
persons.update();
return userForm(con);
}
char* myself = con.get("myself");
key = myself;
if (persons.select(qPerson) == 0) {
error(con, "No such person");
return true;
}
int personStatus = persons->status;
con << TAG <<
HTML_HEAD "<TITLE>" << software << "</TITLE></HEAD>"
BODY
"<H2>" << software << "</H2>"
"<FORM METHOD=POST ACTION=\"" << con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\""
<< con.getAddress() << "\"><INPUT TYPE=hidden "
"NAME=\"page\" VALUE=\"updateSoftware\">"
"<INPUT TYPE=hidden NAME=\"software\" VALUE=\"" << software << "\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself << "\">"
"<TABLE><TR><TH ALIGN=LEFT>Product name:</TH>"
"<TD><INPUT TYPE=text NAME=\"newname\" VALUE=\"" << software << "\">"
"</TD></TR>";
if (products->pVersions != null) {
versions.at(products->pVersions);
con << TAG <<
"<TR><TH ALIGN=LEFT>Current version:</TH>"
"<TD><INPUT TYPE=text NAME=\"version\" SIZE=8 VALUE=\""
<< versions->getVersionString() << "\"></TD></TR>"
"<TR><TH ALIGN=LEFT>Current version label:</TH>"
"<TD><INPUT TYPE=text NAME=\"label\" SIZE=20 VALUE=\""
<< versions->sLabel << "\"></TD></TR>"
"<TR><TH ALIGN=LEFT>Current version comment:</TH>"
"<TD><INPUT TYPE=text NAME=\"comment\" SIZE=40 VALUE=\""
<< versions->sComment << "\"></TD></TR>";
} else {
con << TAG <<
"<TR><TH ALIGN=LEFT>Current version:</TH>"
"<TD><INPUT TYPE=text NAME=\"version\" SIZE=8></TD></TR>"
"<TR><TH ALIGN=LEFT>Current version label:</TH>"
"<TD><INPUT TYPE=text NAME=\"label\" SIZE=20></TD></TR>"
"<TR><TH ALIGN=LEFT>Current version comment:</TH>"
"<TD><INPUT TYPE=text NAME=\"comment\" SIZE=40></TD></TR>";
}
con << TAG << "</TABLE><BR>";
if (personStatus != Person::isUser) {
con << TAG <<
"<INPUT TYPE=submit VALUE=\"Update\"> <INPUT TYPE=reset>";
}
con << TAG << "</FORM><P>"
"<TABLE><TR><TH ALIGN=LEFT>Engineers:</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 <<
"\"><SELECT NAME=\"name\" SIZE=1>";
if (products->setEngineers.length() != 0) {
print(con, products->setEngineers);
con << TAG << "</SELECT>";
if (personStatus != Person::isUser) {
con << TAG << "<INPUT TYPE=submit VALUE=\"Select\">";
}
} else {
con << TAG << EMPTY_LIST;
}
con << TAG <<
"</FORM></TD></TR>"
"<TR><TH ALIGN=LEFT>Users:</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 <<
"\"><SELECT NAME=\"name\" SIZE=1>";
if (products->setUsers.length() != 0) {
print(con, products->setUsers);
con << TAG << "</SELECT>";
if (personStatus != Person::isUser) {
con << TAG << "<INPUT TYPE=submit VALUE=\"Select\">";
}
} else {
con << TAG << EMPTY_LIST;
}
con << TAG <<
"</FORM></TD></TR>"
"<TR><TH ALIGN=LEFT>Bugs:</TH>"
"<TD><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 <<
"\"><SELECT NAME=\"bug\" SIZE=1>";
if (products->setBugs.length() != 0) {
print(con, products->setBugs);
con << TAG <<
"</SELECT><INPUT TYPE=submit NAME=\"action\" VALUE=\"Select\">";
} else {
con << TAG << EMPTY_LIST;
}
con << TAG <<
"</FORM></TD></TR>"
"<TR><TH ALIGN=LEFT>Versions:</TH><TD>"
"<FORM METHOD=POST ACTION=\""<<con.getStub() << "\">"
"<INPUT TYPE=HIDDEN NAME=\"socket\" VALUE=\"" << con.getAddress()
<< "\"><INPUT TYPE=hidden NAME=\"page\" VALUE=\"versionForm\">"
"<INPUT TYPE=hidden NAME=\"myself\" VALUE=\"" << myself <<
"\"><INPUT TYPE=HIDDEN NAME=\"software\" VALUE=\"" << software <<
"\"><SELECT NAME=\"version\" SIZE=1>";
initialVersion = products->pVersions;
if (versions.select(qAllVersions) != 0) {
print(con, versions);
con << TAG << "</SELECT><INPUT TYPE=submit VALUE=\"Select\">";
} else {
con << TAG << EMPTY_LIST;
}
con << TAG << "</FORM></TD></TR></TABLE>";
mainMenuReference(con);
return true;
}
bool updateSoftware(WWWconnection& con)
{
char* software = con.get("software");
key = software;
if (products.select(qSoftware) == 0) {
error(con, "No such software product");
return true;
}
Version version;
char* currentVersion = con.get("version");
version.sLabel = con.get("label");
version.sComment = con.get("comment");
if (sscanf(currentVersion, "%d.%d", &majorVersion, &minorVersion) != 2)
{
error(con, "Bad version number (MAJOR.MINOR expected)");
return true;
}
products->sName = con.get("newname");
version.majorVersionNumber = majorVersion;
version.minorVersionNumber = minorVersion;
version.released = dbDateTime::current();
if (products->pVersions != null) {
initialVersion = products->pVersions;
if (versions.select(qVersion) != 0) {
versions->sComment = version.sComment;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -