bool IOMapSerialize::saveHouseInfo(Map* map)
{
Database* db = Database::getInstance();
DBQuery query;
DBTransaction transaction(db);
if(!transaction.begin())
return false;
if(!db->executeQuery("DELETE FROM `houses`")){
return false;
}
DBInsert stmt(db);
stmt.setQuery("INSERT INTO `houses` (`id`, `owner`, `paid`, `warnings`, `lastwarning`, `name`, `town`, `size`, `rent`) VALUES ");
for(HouseMap::iterator it = Houses::getInstance().getHouseBegin(); it != Houses::getInstance().getHouseEnd(); ++it){
House* house = it->second;
query << house->getHouseId() << ", " << house->getHouseOwner() << ", "
<< house->getPaidUntil() << ", " << house->getPayRentWarnings() << ", " << house->getLastWarning() << ", " << db->escapeString(house->getName()) << ", " << house->getTownId() << ", " << house->getHouseTileSize() << ", " << house->getRent();
if(!stmt.addRow(query)){
return false;
}
}
if(!stmt.execute()){
return false;
}
stmt.setQuery("INSERT INTO `house_lists` (`house_id`, `listid`, `list`) VALUES ");
for(HouseMap::iterator it = Houses::getInstance().getHouseBegin(); it != Houses::getInstance().getHouseEnd(); ++it){
House* house = it->second;
std::string listText;
if(house->getAccessList(GUEST_LIST, listText) && listText != ""){
query << house->getHouseId() << ", " << GUEST_LIST << ", " << db->escapeString(listText);
if(!stmt.addRow(query)){
return false;
}
}
if(house->getAccessList(SUBOWNER_LIST, listText) && listText != ""){
query << house->getHouseId() << ", " << SUBOWNER_LIST << ", " << db->escapeString(listText);
if(!stmt.addRow(query)){
return false;
}
}
for(HouseDoorList::iterator it = house->getHouseDoorBegin(); it != house->getHouseDoorEnd(); ++it){
const Door* door = *it;
if(door->getAccessList(listText) && listText != ""){
query << house->getHouseId() << ", " << door->getDoorId() << ", " << db->escapeString(listText);
if(!stmt.addRow(query)){
return false;
}
}
}
}
if(!stmt.execute()){
return false;
}
return transaction.commit();
}