function _image_update_7002_populate_dimensions

Populate image dimensions in a specific table.

Parameters

$table: The name of the database table to be updated.

$columns: Keyed array of columns this table is supposed to have.

$last_fid: The fid of the last image to have been processed.

Return value

The number of images that were processed.

Related topics

1 call to _image_update_7002_populate_dimensions()
image_update_7002 in modules/image/image.install
Add width and height columns to image field schema and populate.

File

modules/image/image.install, line 314

Code

function _image_update_7002_populate_dimensions($table, $field_name, &$last_fid) {
    // Define how many images to process per pass.
    $images_per_pass = 100;
    // Query the database for fid / URI pairs.
    $query = db_select($table, NULL, array(
        'fetch' => PDO::FETCH_ASSOC,
    ));
    $query->join('file_managed', NULL, $table . '.' . $field_name . '_fid = file_managed.fid');
    if ($last_fid) {
        $query->condition('file_managed.fid', $last_fid, '>');
    }
    $result = $query->fields('file_managed', array(
        'fid',
        'uri',
    ))
        ->orderBy('file_managed.fid')
        ->range(0, $images_per_pass)
        ->execute();
    $count = 0;
    foreach ($result as $file) {
        $count++;
        $info = image_get_info($file['uri']);
        if (is_array($info)) {
            db_update($table)->fields(array(
                $field_name . '_width' => $info['width'],
                $field_name . '_height' => $info['height'],
            ))
                ->condition($field_name . '_fid', $file['fid'])
                ->execute();
        }
    }
    // If less than the requested number of rows were returned then this table
    // has been fully processed.
    $last_fid = $count < $images_per_pass ? NULL : $file['fid'];
    return $count;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.