⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bugdb.cpp

📁 FastDb是高效的内存数据库系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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\">&nbsp;"
	    "<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\">&nbsp;"
	    "<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\">&nbsp;<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;
	    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -