Mercurial > hg > rc1
comparison bin/updatecss.sh @ 0:1e000243b222
vanilla 1.3.3 distro, I hope
author | Charlie Root |
---|---|
date | Thu, 04 Jan 2018 15:50:29 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1e000243b222 |
---|---|
1 #!/usr/bin/env php | |
2 <?php | |
3 /* | |
4 +-----------------------------------------------------------------------+ | |
5 | bin/updatecss.sh | | |
6 | | | |
7 | This file is part of the Roundcube Webmail client | | |
8 | Copyright (C) 2010-2013, The Roundcube Dev Team | | |
9 | | | |
10 | Licensed under the GNU General Public License version 3 or | | |
11 | any later version with exceptions for skins & plugins. | | |
12 | See the README file for a full license statement. | | |
13 | | | |
14 | PURPOSE: | | |
15 | Update cache-baster marks for css background images | | |
16 +-----------------------------------------------------------------------+ | |
17 | Author: Aleksander Machniak <alec@alec.pl> | | |
18 +-----------------------------------------------------------------------+ | |
19 */ | |
20 | |
21 define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); | |
22 | |
23 require_once INSTALL_PATH . 'program/include/clisetup.php'; | |
24 | |
25 // get arguments | |
26 $opts = rcube_utils::get_opt(array( | |
27 'd' => 'dir', | |
28 )); | |
29 | |
30 if (empty($opts['dir'])) { | |
31 print "Skin directory not specified (--dir). Using skins/ and plugins/*/skins/.\n"; | |
32 | |
33 $dir = INSTALL_PATH . 'skins'; | |
34 $dir_p = INSTALL_PATH . 'plugins'; | |
35 $skins = glob("$dir/*", GLOB_ONLYDIR); | |
36 $skins_p = glob("$dir_p/*/skins/*", GLOB_ONLYDIR); | |
37 | |
38 $dirs = array_merge($skins, $skins_p); | |
39 } | |
40 // Check if directory exists | |
41 else if (!file_exists($opts['dir'])) { | |
42 rcube::raise_error("Specified directory doesn't exist.", false, true); | |
43 } | |
44 else { | |
45 $dirs = array($opts['dir']); | |
46 } | |
47 | |
48 foreach ($dirs as $dir) { | |
49 $img_dir = $dir . '/images'; | |
50 if (!file_exists($img_dir)) { | |
51 continue; | |
52 } | |
53 | |
54 $files = get_files($dir); | |
55 $images = get_images($img_dir); | |
56 $find = array(); | |
57 $replace = array(); | |
58 | |
59 // build regexps array | |
60 foreach ($images as $path => $sum) { | |
61 $path_ex = str_replace('.', '\\.', $path); | |
62 $find[] = "#url\(['\"]?images/$path_ex(\?v=[a-f0-9-\.]+)?['\"]?\)#"; | |
63 $replace[] = "url(images/$path?v=$sum)"; | |
64 } | |
65 | |
66 foreach ($files as $file) { | |
67 $file = $dir . '/' . $file; | |
68 print "File: $file\n"; | |
69 $content = file_get_contents($file); | |
70 $content = preg_replace($find, $replace, $content, -1, $count); | |
71 if ($count) { | |
72 file_put_contents($file, $content); | |
73 } | |
74 } | |
75 } | |
76 | |
77 | |
78 function get_images($dir) | |
79 { | |
80 $images = array(); | |
81 $dh = opendir($dir); | |
82 | |
83 while ($file = readdir($dh)) { | |
84 if (preg_match('/^(.+)\.(gif|ico|png|jpg|jpeg)$/', $file, $m)) { | |
85 $filepath = "$dir/$file"; | |
86 $images[$file] = substr(md5_file($filepath), 0, 4) . '.' . filesize($filepath); | |
87 print "Image: $filepath ({$images[$file]})\n"; | |
88 } | |
89 else if ($file != '.' && $file != '..' && is_dir($dir . '/' . $file)) { | |
90 foreach (get_images($dir . '/' . $file) as $img => $sum) { | |
91 $images[$file . '/' . $img] = $sum; | |
92 } | |
93 } | |
94 } | |
95 | |
96 closedir($dh); | |
97 | |
98 return $images; | |
99 } | |
100 | |
101 function get_files($dir) | |
102 { | |
103 $files = array(); | |
104 $dh = opendir($dir); | |
105 | |
106 while ($file = readdir($dh)) { | |
107 if (preg_match('/^(.+)\.(css|html)$/', $file, $m)) { | |
108 $files[] = $file; | |
109 } | |
110 else if ($file != '.' && $file != '..' && is_dir($dir . '/' . $file)) { | |
111 foreach (get_files($dir . '/' . $file) as $f) { | |
112 $files[] = $file . '/' . $f; | |
113 } | |
114 } | |
115 } | |
116 | |
117 closedir($dh); | |
118 | |
119 return $files; | |
120 } | |
121 | |
122 ?> |