$file) { $files[$name]->info = _provision_drupal_parse_info_file($file->filename); if (!empty($files[$name]->info['name'])) { $files[$name]->name = $files[$name]->info['name']; } if (empty($files[$name]->info['engine'])) { $filename = dirname($files[$name]->filename) .'/'. $files[$name]->name .'.theme'; if (file_exists($filename)) { $files[$name]->owner = $filename; $files[$name]->prefix = $name; } } else { $engine = $files[$name]->info['engine']; if (isset($engines[$engine])) { $files[$name]->owner = $engines[$engine]->filename; $files[$name]->prefix = $engines[$engine]->name; $files[$name]->template = TRUE; } } _provision_cvs_deploy($files[$name]); } return $files; } /** * This code is based on the Drupal 6 and Drupal 7 drupal_parse_info_file */ function _provision_drupal_parse_info_file($filename) { $info = array(); if (!file_exists($filename)) { return $info; } $data = file_get_contents($filename); if (preg_match_all(' @^\s* # Start at the beginning of a line, ignoring leading whitespace ((?: [^=;\[\]]| # Key names cannot contain equal signs, semi-colons or square brackets, \[[^\[\]]*\] # unless they are balanced and not nested )+?) \s*=\s* # Key/value pairs are separated by equal signs (ignoring white-space) (?: ("(?:[^"]|(?<=\\\\)")*")| # Double-quoted string, which may contain slash-escaped quotes/slashes (\'(?:[^\']|(?<=\\\\)\')*\')| # Single-quoted string, which may contain slash-escaped quotes/slashes ([^\r\n]*?) # Non-quoted string )\s*$ # Stop at the next end of a line, ignoring trailing whitespace @msx', $data, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { // Fetch the key and value string $i = 0; foreach (array('key', 'value1', 'value2', 'value3') as $var) { $$var = isset($match[++$i]) ? $match[$i] : ''; } $value = stripslashes(substr($value1, 1, -1)) . stripslashes(substr($value2, 1, -1)) . $value3; // Parse array syntax $keys = preg_split('/\]?\[/', rtrim($key, ']')); $last = array_pop($keys); $parent = &$info; // Create nested arrays foreach ($keys as $key) { if ($key == '') { $key = count($parent); } if (!isset($parent[$key]) || !is_array($parent[$key])) { $parent[$key] = array(); } $parent = &$parent[$key]; } // Handle PHP constants if (defined($value)) { $value = constant($value); } // Insert actual value if ($last == '') { $last = count($parent); } $parent[$last] = $value; } } return $info; } function _provision_system_query($type) { $entries = array(); $result = db_query("SELECT * FROM {system} WHERE type=:type", array(':type' => $type)); foreach ($result as $entry) { $entries[] = $entry; } return $entries; }