function parse_array_to_css($css_rules_array, $indent = 0) { $css_file_contents = ''; foreach ($css_rules_array as $selector => $rules_set) { $selector = implode(",\n", array_map('trim', explode(',', $selector))); $rules = ''; foreach ($rules_set as $property => $value) { if (is_array($value)) { $rules = parse_array_to_css($rules_set, $indent + 4); } else { $rules .= sprintf("%1\$s%2\$s: %3\$s;\n", str_repeat(' ', $indent + 4), $property, $value); } } $css_file_contents .= sprintf("\n%1\$s%3\$s {\n%2\$s%4\$s\n%1\$s}\n", str_repeat(' ', $indent), str_repeat(' ', $indent + 4), $selector, trim($rules)); } return $css_file_contents; }
foreach ($file_list as $css_filepath) { $css_rules_array[$css_filepath] = parse_css_to_array(file_get_contents($css_filepath)); } foreach ($css_rules_array as $css_filepath => $css_rules_set) { $default_css_filepath = sprintf('forum/styles/default/%s', basename($css_filepath)); $default_css_rules = parse_css_to_array(file_get_contents($default_css_filepath)); file_put_contents($default_css_filepath, parse_array_to_css($default_css_rules)); $default_css_rules = parse_css_to_array(file_get_contents($default_css_filepath)); foreach ($default_css_rules as $selector => $default_rules_set) { if (!isset($css_rules_set[$selector])) { $css_rules_set[$selector] = $default_rules_set; } else { foreach ($default_rules_set as $rule_name => $value) { if (preg_match('/(#[0-9A-F]{3,6}|rgba?)/i', $value) > 0) { continue; } if (preg_match('/color/i', $rule_name) > 0) { continue; } $css_rules_set[$selector][$rule_name] = $value; } } } foreach ($css_rules_set as $selector => $css_rules) { if (!isset($default_css_rules[$selector])) { unset($css_rules_set[$selector]); } } $css_rules_set = sort_array_by_array($css_rules_set, array_keys($default_css_rules)); file_put_contents($css_filepath, parse_array_to_css($css_rules_set)); }