/** * Remove the mapping between AuthNTokens and an Agent * * @param object AgentTokenMapping $mapping * @return void * @access public * @since 3/9/05 */ function deleteMapping(AgentTokenMapping $mapping) { $this->_checkConfig(); $dbc = Services::getService("DatabaseManager"); $dbc->beginTransaction($this->_dbId); $agentId = $mapping->getAgentId(); $authNTokens = $mapping->getTokens(); $typeKey = $this->_getTypeKey($mapping->getAuthenticationType()); // Delete the mapping. $query = new DeleteQuery(); $query->setTable($this->_mappingTable); $query->addWhere("agent_id='" . addslashes($agentId->getIdString()) . "'"); $query->addWhere("token_identifier='" . addslashes($authNTokens->getIdentifier()) . "'", _AND); $query->addWhere("fk_type='" . addslashes($typeKey) . "'", _AND); $result = $dbc->query($query, $this->_dbId); // Delete the type if nothing is referencing it. $query = new SelectQuery(); $query->addTable($this->_mappingTable); $query->addColumn("COUNT(*)", "count"); $query->addWhere("fk_type='" . addslashes($typeKey) . "'"); $result = $dbc->query($query, $this->_dbId); if ($result->getNumberOfRows() == 0) { $query = new DeleteQuery(); $query->addTable($this->_typeTable); $query->addWhere("id='" . addslashes($typeKey) . "'"); $result = $dbc->query($query, $this->_dbId); } $result->free(); $dbc->commitTransaction($this->_dbId); }