Insert/Update data in the advagg_files table.

Paramètres

array $files: List of files in the aggregate including files meta data.

string $type: String; css or js.

Return value

bool Return TRUE if anything was written to the database.

3 calls to advagg_insert_update_files()
advagg_insert_update_db dans ./advagg.inc
Insert/Update data in advagg tables.
advagg_push_new_changes dans ./advagg.cache.inc
Flush the correct caches so CSS/JS changes go live.
advagg_update_7220 dans ./advagg.install
Update the advagg_files table; use_strict column might have been incorrect.

Fichier

./advagg.inc, line 157

Code

function advagg_insert_update_files(array $files, $type) {
    // Record if a database write was done.
    $write_done = FALSE;
    $filename_hashes = array();
    foreach ($files as $file_meta_data) {
        $filename_hashes[] = $file_meta_data['filename_hash'];
    }
    $files_in_db = array();
    if (!empty($filename_hashes)) {
        $query = db_select('advagg_files', 'af')->fields('af')
            ->condition('filename_hash', $filename_hashes)
            ->execute();
        foreach ($query as $row) {
            $files_in_db[$row->filename] = (array) $row;
        }
    }
    // Make drupal_get_installed_schema_version() available.
    include_once DRUPAL_ROOT . '/includes/install.inc';
    foreach ($files as $filename => $file_meta_data) {
        // Create record.
        $record = array(
            'filename' => $filename,
            'filename_hash' => $file_meta_data['filename_hash'],
            'content_hash' => $file_meta_data['content_hash'],
            'filetype' => $type,
            'filesize' => $file_meta_data['filesize'],
            'mtime' => $file_meta_data['mtime'],
            'linecount' => $file_meta_data['linecount'],
        );
        try {
            // Check the file in the database.
            if (empty($files_in_db[$filename])) {
                // Add in filesize_processed if the schema is 7210 or higher.
                if (drupal_get_installed_schema_version('advagg') >= 7210) {
                    $record['filesize_processed'] = (int) advagg_generate_filesize_processed($filename, $type);
                }
                // Add in use_strict if the schema is 7212 or higher.
                if (drupal_get_installed_schema_version('advagg') >= 7212) {
                    $record['use_strict'] = 0;
                    if ($type === 'js') {
                        $record['use_strict'] = (int) advagg_does_js_start_with_use_strict($filename);
                    }
                }
                // Insert into database.
                $record['changes'] = 1;
                $return = db_merge('advagg_files')->key(array(
                    'filename_hash' => $record['filename_hash'],
                ))
                    ->insertFields($record)
                    ->execute();
                if ($return) {
                    if (variable_get('advagg_debug', ADVAGG_DEBUG) >= 2) {
                        $variables = array(
                            '@record' => print_r($record, TRUE),
                        );
                        watchdog('advagg-debug', 'Inserting into db <pre>@record</pre>.', $variables, WATCHDOG_DEBUG);
                    }
                    $write_done = TRUE;
                }
            }
            else {
                // Take changes counter out of the diff equation.
                $changes = $files_in_db[$filename]['changes'];
                unset($files_in_db[$filename]['changes']);
                // If not in strict mode, only use mtime if newer than the existing one.
                if (!variable_get('advagg_strict_mtime_check', ADVAGG_STRICT_MTIME_CHECK)) {
                    // Make sure mtime only moves forward.
                    if ($record['mtime'] <= $files_in_db[$filename]['mtime']) {
                        $record['mtime'] = $files_in_db[$filename]['mtime'];
                    }
                }
                // If something is different, update.
                $diff = array_diff_assoc($record, $files_in_db[$filename]);
                if (!empty($diff)) {
                    $diff['changes'] = $changes + 1;
                    $diff['filename_hash'] = $record['filename_hash'];
                    // Add in filesize_processed if the schema is 7210 or higher.
                    if (drupal_get_installed_schema_version('advagg') >= 7210) {
                        $diff['filesize_processed'] = (int) advagg_generate_filesize_processed($filename, $type);
                    }
                    if (drupal_get_installed_schema_version('advagg') >= 7212) {
                        $diff['use_strict'] = 0;
                        if ($type === 'js') {
                            $diff['use_strict'] = (int) advagg_does_js_start_with_use_strict($filename);
                            if (empty($diff['use_strict'])) {
                                $diff['use_strict'] = 0;
                            }
                        }
                    }
                    $return = db_merge('advagg_files')->key(array(
                        'filename_hash' => $diff['filename_hash'],
                    ))
                        ->fields($diff)
                        ->execute();
                    if ($return) {
                        if (variable_get('advagg_debug', ADVAGG_DEBUG) >= 2) {
                            $variables = array(
                                '@diff' => print_r($diff, TRUE),
                            );
                            watchdog('advagg-debug', 'Updating db <pre>@diff</pre>.', $variables, WATCHDOG_DEBUG);
                        }
                        $write_done = TRUE;
                    }
                }
            }
        } catch (PDOException $e) {
            // If it fails we don't care, the file was added to the table by another
            // process then.
            // Still log it if in development mode.
            if (variable_get('advagg_cache_level', ADVAGG_CACHE_LEVEL) < 0) {
                watchdog('advagg', 'Development Mode - Caught PDO Exception: <code>@info</code>', array(
                    '@info' => $e,
                ));
            }
        }
    }
    return $write_done;
}