color_theme_to_css.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. #!/usr/bin/env php
  2. <?php
  3. /**
  4. * color_theme_to_css.php
  5. *
  6. * This script can be used to convert an old $color theme to a stylesheet for
  7. * use with templates. Output is sent to STDOUT.
  8. *
  9. * HOWTO:
  10. * 1. Create a .php file containing your $color theme.
  11. * 2. Run this script from a command line, giving the name of your theme file
  12. * as an arguement to this script, e.g.:
  13. *
  14. * /path/to/squirrelmail/templates/theme_to_css.php /path/to/mytheme.php
  15. *
  16. * To send the output to a .css file, do the following:
  17. *
  18. * /path/to/squirrelmail/templates/theme_to_css.php /path/to/mytheme.php > my_theme.css
  19. *
  20. * @copyright &copy; 1999-2007 The SquirrelMail Project Team
  21. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  22. * @version $Id$
  23. * @package squirrelmail
  24. * @subpackage templates
  25. * @author Steve Brown
  26. * @since 1.5.2
  27. */
  28. /** make sure that first command line argument is set */
  29. if (empty($argv[1])) {
  30. echo "Please provide the path to the file containing the \$color theme you\n" .
  31. "wish to convert to a stylesheet.\n\n";
  32. exit (1);
  33. }
  34. $theme_file = $argv[1];
  35. if (!is_file($theme_file) || !is_readable($theme_file)) {
  36. echo "The requested theme could not be converted because the file could not\n" .
  37. "be opened. Please specify a theme file that can be read.\n\n";
  38. exit(1);
  39. }
  40. /* set default colors in case color theme is not full */
  41. $def_color = array();
  42. $def_color[0] = '#dcdcdc'; // (light gray) TitleBar
  43. $def_color[1] = '#800000'; // (red)
  44. $def_color[2] = '#cc0000'; // (light red) Warning/Error Messages
  45. $def_color[3] = '#a0b8c8'; // (green-blue) Left Bar Background
  46. $def_color[4] = '#ffffff'; // (white) Normal Background
  47. $def_color[5] = '#ffffcc'; // (light yellow) Table Headers
  48. $def_color[6] = '#000000'; // (black) Text on left bar
  49. $def_color[7] = '#0000cc'; // (blue) Links
  50. $def_color[8] = '#000000'; // (black) Normal text
  51. $def_color[9] = '#ababab'; // (mid-gray) Darker version of #0
  52. $def_color[10] = '#666666'; // (dark gray) Darker version of #9
  53. $def_color[11] = '#770000'; // (dark red) Special Folders color
  54. $def_color[12] = '#ededed'; // (light gray) Alternate color for message list
  55. $def_color[13] = '#800000'; // (dark red) Color for quoted text -- > 1 quote
  56. $def_color[14] = '#ff0000'; // (red) Color for quoted text -- >> 2 or more
  57. $def_color[15] = '#002266'; // (dark blue) Unselectable folders
  58. $def_color[16] = '#ff9933'; // (orange) Highlight color
  59. $color = $def_color;
  60. include($theme_file);
  61. if ($color === $def_color) {
  62. echo "The theme file you specified did not make any alterations to the default\n" .
  63. "color scheme. Please choose a different file.\n\n";
  64. exit(1);
  65. }
  66. $css_source = <<<CSS
  67. /* older css template */
  68. /* page body formatting */
  69. body {
  70. color: __COLOR8__;
  71. background-color: __COLOR4__;
  72. }
  73. body.sqm_leftMain {
  74. color: __COLOR6__;
  75. background-color: __COLOR3__;
  76. }
  77. /* right links */
  78. a:link, a:visited, a:hover, a:active {
  79. color: __COLOR7__;
  80. }
  81. /* left links */
  82. .sqm_leftMain a:link, .sqm_leftMain a:visited, .sqm_leftMain a:hover, .sqm_leftMain a:active {
  83. color: __COLOR6__;
  84. }
  85. .leftunseen, .leftspecial, .leftspecial a:link, .leftspecial a:visited, .leftspecial a:hover, .leftspecial a:active {
  86. color: __COLOR11__;
  87. }
  88. .leftnoselect a:link, .leftnoselect a:visited, .leftnoselect a:hover, .leftnoselect a:active {
  89. color: __COLOR15__;
  90. }
  91. /* highlighted texts */
  92. .highlight {
  93. color: __COLOR15__;
  94. }
  95. .error_table {
  96. color: __COLOR14__;
  97. border: 2px solid __COLOR0__;
  98. background-color: __COLOR3__;
  99. }
  100. .error_thead {
  101. background-color: __COLOR10__;
  102. }
  103. .error_thead_caption {
  104. background-color: __COLOR10__;
  105. }
  106. .error_row {
  107. color: __COLOR14__;
  108. }
  109. .error_val {
  110. color: __COLOR8__;
  111. border: 2px solid __COLOR0__;
  112. }
  113. .error_key {
  114. border: 2px solid __COLOR0__;
  115. color: __COLOR14__;
  116. background-color: __COLOR0__;
  117. }
  118. /* Standard defs */
  119. table.table1 {
  120. border: 1px solid __COLOR0__;
  121. }
  122. table.table2 {
  123. border: 1px solid __COLOR9__;
  124. }
  125. td.header1 {
  126. background: __COLOR0__;
  127. }
  128. td.header2 {
  129. background: __COLOR9__;
  130. }
  131. td.header4 {
  132. background: __COLOR5__;
  133. }
  134. tr.even {
  135. background: __COLOR12__;
  136. }
  137. tr.odd {
  138. background: __COLOR4__;
  139. }
  140. .table_standard {
  141. border:1px solid __COLOR0__;
  142. }
  143. .sqm_loginOrgName, .sqm_signoutBar {
  144. background: __COLOR0__;
  145. }
  146. .sqm_motd {
  147. background: __COLOR9__;
  148. }
  149. .sqm_motd td {
  150. background: __COLOR4__;
  151. }
  152. /* empty_folder.tpl defs */
  153. .sqm_emptyFolder {
  154. background: __COLOR9__;
  155. }
  156. .sqm_emptyFolder td {
  157. background: __COLOR4__;
  158. }
  159. /* error_box.tpl definitions */
  160. .table_errorBoxWrapper {
  161. background: __COLOR9__;
  162. }
  163. .table_errorBox {
  164. background: __COLOR0__;
  165. }
  166. .error_message {
  167. background: __COLOR4__;
  168. }
  169. /* page_header.tpl definitions */
  170. .sqm_currentFolder {
  171. background: __COLOR9__;
  172. }
  173. .sqm_headerSignout {
  174. background: __COLOR9__;
  175. }
  176. /* message_list.tpl definitions */
  177. .table_messageListWrapper {
  178. background: __COLOR9__;
  179. }
  180. .table_messageList {
  181. background: __COLOR5__;
  182. }
  183. .table_messageList td.spacer {
  184. background: __COLOR0__;
  185. }
  186. .table_messageList tr.mouse_over {
  187. background: __COLOR5__;
  188. }
  189. .table_messageList tr.clicked {
  190. background: __COLOR16__;
  191. }
  192. .deleted {
  193. color: __COLOR9__;
  194. }
  195. .flagged {
  196. color: __COLOR2__;
  197. }
  198. .high_priority {
  199. color: __COLOR1__;
  200. }
  201. .low_priority {
  202. color: __COLOR8__;
  203. }
  204. .message_list_controls {
  205. background: __COLOR0__;
  206. }
  207. .spacer {
  208. background: __COLOR4__;
  209. }
  210. /* folder_manip.tpl defs */
  211. #folderManip table.wrapper {
  212. border: 1px solid __COLOR0__;
  213. }
  214. #folderManip td.folderAction {
  215. background: __COLOR0__;
  216. }
  217. /* addressbook_list.tpl defs */
  218. #addressList table {
  219. border: 1px solid __COLOR9__;
  220. }
  221. #addressList td.header1 {
  222. background: __COLOR9__;
  223. }
  224. #addressList td.abookSwitch {
  225. background: __COLOR0__;
  226. }
  227. #addressList td.abookButtons {
  228. background: __COLOR0__;
  229. }
  230. #addressList td.abookField {
  231. border-left: 1px solid __COLOR9__;
  232. border-right: 1px solid __COLOR9__;
  233. }
  234. #addressList td.colHeader {
  235. background: __COLOR9__;
  236. }
  237. #addrBookSearch table.wrapper {
  238. border: 1px solid __COLOR9__;
  239. }
  240. #addrAddEdit table {
  241. border: 1px solid __COLOR9__;
  242. }
  243. #addrAddEdit td.header {
  244. background: __COLOR9__;
  245. }
  246. /* options defs */
  247. #optionGroups table {
  248. border: 1px solid __COLOR0__;
  249. }
  250. #optionGroups td.title {
  251. background: __COLOR0__;
  252. }
  253. #optionGroups td.optionElement table {
  254. border:1px solid __COLOR9__;
  255. }
  256. #optionGroups td.optionName {
  257. background: __COLOR9__;
  258. }
  259. #optionGroups td.optionDesc {
  260. background: __COLOR0__;
  261. }
  262. #optionDisplay table {
  263. border: 1px solid __COLOR0__
  264. }
  265. #optionOrder table {
  266. border: 1px solid __COLOR0__
  267. }
  268. #optionOrder table.moveFields td {
  269. border-left: 1px solid __COLOR0__;
  270. border-right: 1px solid __COLOR0__;
  271. }
  272. #optionsIdentity table.table2 tr {
  273. background: __COLOR0__;
  274. }
  275. #optionsIdentity hr {
  276. width: 95%;
  277. border: 1px solid __COLOR9__;
  278. }
  279. /* help defs */
  280. #help td.nav {
  281. color: __COLOR0__;
  282. }
  283. /* search defs */
  284. div.search td.header4 {
  285. border-bottom: 1px solid __COLOR9__;
  286. }
  287. div.search td.queryAction {
  288. border-left: 1px solid __COLOR9__;
  289. border-top: 1px solid __COLOR9__;
  290. border-bottom: 1px solid __COLOR9__;
  291. }
  292. div.search td.queryDesc {
  293. border-top: 1px solid __COLOR9__;
  294. border-bottom: 1px solid __COLOR9__;
  295. }
  296. div.search span.error {
  297. color: __COLOR2__;
  298. }
  299. div.search td.searchForm {
  300. border-right: 1px solid __COLOR0__;
  301. border-left: 1px solid __COLOR0__;
  302. }
  303. div.search td.queryError {
  304. color: __COLOR2__;
  305. }
  306. div.search h2 {
  307. color: __COLOR2__;
  308. }
  309. /* compse defs */
  310. div.compose tr.header {
  311. background: __COLOR9__;
  312. }
  313. div.compose tr.attachment td {
  314. background: __COLOR0__;
  315. border-top: 1px solid __COLOR9__;
  316. border-bottom: 1px solid __COLOR9__;
  317. }
  318. div.compose table.close {
  319. background: __COLOR0__;
  320. border:1px solid __COLOR9__;
  321. }
  322. CSS;
  323. $p = array();
  324. for ($k = 0; $k<=16; $k++) {
  325. $p[$k] = '__COLOR'.$k.'__';
  326. if (!isset($color[$k])) {
  327. $color[$k] = $def_color[$k];
  328. }
  329. }
  330. // Just to make sure...
  331. ksort($p);
  332. ksort($color);
  333. $css_source = str_replace($p, $color, $css_source);
  334. echo $css_source;
  335. exit(0);
  336. ?>