questtype ?Submit?: use database transaction for adding terms

This commit is contained in:
oliver 2016-04-17 14:35:45 +02:00
parent f4980652c2
commit 794462e3e9

View file

@ -281,38 +281,48 @@
*/ */
private function addTerms($submissionId, $terms) private function addTerms($submissionId, $terms)
{ {
// Calculate IDF: n (n_term) $this->db->setAutocommit(false);
$uniqueTerms = array(); try {
foreach($terms as &$term) // Calculate IDF: n (n_term)
{ $uniqueTerms = array();
if(!in_array($term, $uniqueTerms)) foreach($terms as &$term)
{ {
// Add term to database if(!in_array($term, $uniqueTerms))
{
// Add term to database
$this->db->query(
'INSERT IGNORE INTO questtypes_submit_terms '.
'(term) '.
'VALUES '.
'(?)',
's',
$term
);
$uniqueTerms[] = $term;
}
// Link term to submission
$this->db->query( $this->db->query(
'INSERT IGNORE INTO questtypes_submit_terms '. 'INSERT INTO questtypes_submit_submissions_terms '.
'(term) '. '(submission_id, term_id, tf) '.
'VALUES '. 'SELECT ?, questtypes_submit_terms.id, 1 '.
'(?)', 'FROM questtypes_submit_terms '.
's', 'WHERE term = ? '.
'ON DUPLICATE KEY UPDATE '.
'tf = tf + 1',
'is',
$submissionId,
$term $term
); );
$uniqueTerms[] = $term;
} }
// Link term to submission
$this->db->query(
'INSERT INTO questtypes_submit_submissions_terms '.
'(submission_id, term_id, tf) '.
'SELECT ?, questtypes_submit_terms.id, 1 '.
'FROM questtypes_submit_terms '.
'WHERE term = ? '.
'ON DUPLICATE KEY UPDATE '.
'tf = tf + 1',
'is',
$submissionId,
$term
);
} }
catch(\Exception $e) {
$this->db->rollback();
$this->db->setAutocommit(true);
throw $e;
}
$this->db->setAutocommit(true);
} }