questtype ?Submit?: use database transaction for adding terms
This commit is contained in:
parent
f4980652c2
commit
794462e3e9
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue