You are here

function rec_transfer_output_preference in Recommender API 6.3

Same name and namespace in other branches
  1. 7.4 rec_transfer/rec_transfer.module \rec_transfer_output_preference()
  2. 7.5 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 193
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', NULL);

  // 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 = unserialize(db_result(db_query('SELECT params FROM {recommender_app} WHERE id=%d', $recommender_id)));

  // FIXME: what if $rec_params['table'] == <FILE>?
  if ($rec_params['table'] == '<BUILTIN>') {
    $sql = 'SELECT source_eid, target_eid, score, updated FROM {recommender_preference} WHERE app_id=' . $recommender_id;
    $rec_params['fields'] = array(
      'source_eid',
      'target_eid',
      'score',
      'updated',
    );
  }
  else {
    if (isset($rec_params['sql']) && strtoupper(substr($rec_params['sql'], 0, strlen('SELECT '))) === 'SELECT ') {
      $sql = $rec_params['sql'];
    }
    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);
  while ($row = db_fetch_array($rows)) {
    $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;
  return $filename;
}