You are here

function _easychart_update_csv_from_url in Easychart 7.3

Update the csv data from the url stored in the database.

1 call to _easychart_update_csv_from_url()
easychart_cron in ./easychart.module
Implements hook_cron().

File

./easychart.helpers.inc, line 11
Easychart helpers.

Code

function _easychart_update_csv_from_url() {
  $fields = field_read_fields(array(
    'type' => 'easychart',
  ));
  $clear_caches = FALSE;
  foreach ($fields as $field) {

    // Get all Easycharts with a csv url.
    $table_name = _field_sql_storage_tablename($field);
    $prefix = str_replace('field_data_', '', $table_name);
    $query = db_select($table_name, 'ec');
    $query
      ->fields('ec', array(
      $prefix . '_csv_url',
      $prefix . '_csv',
      'delta',
      'entity_id',
      'revision_id',
    ));
    $query
      ->condition('ec.' . $prefix . '_csv_url', '', '!=');
    $results = $query
      ->execute();
    foreach ($results as $result) {
      $url = $result->easychart_csv_url;

      // Parse the csv to an array.
      $csv_data = file_get_contents($url);
      if (!empty($csv_data)) {
        $delimiter = _find_csv_delimiter($csv_data);
        $csv = json_encode(_parse_csv($csv_data, $delimiter));

        // Save the new data if it has changed.
        if ($csv != $result->easychart_csv) {
          $update = db_update($table_name);
          $update
            ->fields(array(
            $prefix . '_csv' => $csv,
          ));
          $update
            ->condition('entity_id', $result->entity_id, '=');
          $update
            ->condition('delta', $result->delta, '=');
          $update
            ->execute();

          // Also overwrite the revision.
          $revision_table_name = str_replace('_data_', '_revision_', $table_name);
          $update = db_update($revision_table_name);
          $update
            ->fields(array(
            $prefix . '_csv' => $csv,
          ));
          $update
            ->condition('entity_id', $result->entity_id, '=');
          $update
            ->condition('revision_id', $result->revision_id, '=');
          $update
            ->condition('delta', $result->delta, '=');
          $update
            ->execute();
          $clear_caches = TRUE;
        }
      }
    }
  }

  // Clear the caches if anything has changed.
  if ($clear_caches) {
    drupal_flush_all_caches();
  }
}