function rec_transfer_output_preference in Recommender API 7.5
Same name and namespace in other branches
- 6.3 rec_transfer/rec_transfer.module \rec_transfer_output_preference()
- 7.4 rec_transfer/rec_transfer.module \rec_transfer_output_preference()
1 call to rec_transfer_output_preference()
- rec_transfer_upload in rec_transfer/
rec_transfer.module
File
- rec_transfer/
rec_transfer.module, line 268 - This is the module file for Recommender Data Transfer
Code
function rec_transfer_output_preference($command_id, $recommender_id) {
$apikey = variable_get('rec_transfer_apikey');
// drupal_create_filename() is not necessary because we want to overwrite the file if exists.
$filename = variable_get('file_temporary_path', file_directory_temp()) . "/{$apikey}-{$command_id}";
$fp = gzopen($filename, 'wb9');
$rec_params = json_decode(db_query('SELECT params FROM {recommender_app} WHERE id=:id', array(
':id' => $recommender_id,
))
->fetchField(), TRUE);
// FIXME: what if $rec_params['table'] == <FILE>?
if ($rec_params['table'] == '<BUILTIN>') {
$sql = 'SELECT source_id, target_id, score, updated FROM {recommender_preference} WHERE app_id=' . $recommender_id;
$rec_params['fields'] = array(
'source_id',
'target_id',
'score',
'updated',
);
}
else {
if (strtoupper(substr($rec_params['table'], 0, strlen('SELECT '))) === 'SELECT ') {
$sql = $rec_params['table'];
}
else {
$fields = $rec_params['fields'];
foreach ($fields as $pos => $field) {
$fields[$pos] = is_null($field) ? 'NULL' : $field;
}
$sql = 'SELECT ' . implode(',', $fields) . ' FROM ' . $rec_params['table'];
}
}
$users_dict = array();
$items_dict = array();
$rows = db_query($sql, array(), array(
'fetch' => PDO::FETCH_ASSOC,
));
foreach ($rows as $row) {
$line = array(
$row[$rec_params['fields'][0]],
$row[$rec_params['fields'][1]],
is_null($rec_params['fields'][2]) ? NULL : $row[$rec_params['fields'][2]],
is_null($rec_params['fields'][3]) ? NULL : $row[$rec_params['fields'][3]],
);
$users_dict[$line[0]] = 1;
$items_dict[$line[1]] = 1;
// TODO: test failuire; also make sure CSV is well formed (eg. double quotes, etc)
gzwrite($fp, implode(',', $line) . "\n");
}
gzclose($fp);
//print $filename;
async_command_update_command($command_id, array(
'number1' => count($users_dict),
'number2' => count($items_dict),
));
return $filename;
}