PageRenderTime 52ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/w3-total-cache/lib/W3/Config.php

https://github.com/sharpmachine/wakeupmedia.com
PHP | 1387 lines | 1110 code | 105 blank | 172 comment | 73 complexity | 47ef5009692a08d55974cc1019f8eb79 MD5 | raw file
  1. <?php
  2. /**
  3. * W3 Config object
  4. */
  5. /**
  6. * Class W3_Config
  7. */
  8. class W3_Config {
  9. /**
  10. * Tabs count
  11. *
  12. * @var integer
  13. */
  14. var $_tabs = 0;
  15. /**
  16. * Array of config values
  17. *
  18. * @var array
  19. */
  20. var $_config = array();
  21. /**
  22. * Config keys
  23. */
  24. var $_keys = array(
  25. 'dbcache.enabled' => 'boolean',
  26. 'dbcache.debug' => 'boolean',
  27. 'dbcache.engine' => 'string',
  28. 'dbcache.file.gc' => 'integer',
  29. 'dbcache.file.locking' => 'boolean',
  30. 'dbcache.memcached.servers' => 'array',
  31. 'dbcache.memcached.persistant' => 'boolean',
  32. 'dbcache.reject.logged' => 'boolean',
  33. 'dbcache.reject.uri' => 'array',
  34. 'dbcache.reject.cookie' => 'array',
  35. 'dbcache.reject.sql' => 'array',
  36. 'dbcache.lifetime' => 'integer',
  37. 'objectcache.enabled' => 'boolean',
  38. 'objectcache.debug' => 'boolean',
  39. 'objectcache.engine' => 'string',
  40. 'objectcache.file.gc' => 'integer',
  41. 'objectcache.file.locking' => 'boolean',
  42. 'objectcache.memcached.servers' => 'array',
  43. 'objectcache.memcached.persistant' => 'boolean',
  44. 'objectcache.groups.global' => 'array',
  45. 'objectcache.groups.nonpersistent' => 'array',
  46. 'objectcache.lifetime' => 'integer',
  47. 'pgcache.enabled' => 'boolean',
  48. 'pgcache.debug' => 'boolean',
  49. 'pgcache.engine' => 'string',
  50. 'pgcache.file.gc' => 'integer',
  51. 'pgcache.file.nfs' => 'boolean',
  52. 'pgcache.file.locking' => 'boolean',
  53. 'pgcache.memcached.servers' => 'array',
  54. 'pgcache.memcached.persistant' => 'boolean',
  55. 'pgcache.check.domain' => 'boolean',
  56. 'pgcache.cache.query' => 'boolean',
  57. 'pgcache.cache.home' => 'boolean',
  58. 'pgcache.cache.feed' => 'boolean',
  59. 'pgcache.cache.ssl' => 'boolean',
  60. 'pgcache.cache.404' => 'boolean',
  61. 'pgcache.cache.flush' => 'boolean',
  62. 'pgcache.cache.headers' => 'array',
  63. 'pgcache.accept.uri' => 'array',
  64. 'pgcache.accept.files' => 'array',
  65. 'pgcache.reject.logged' => 'boolean',
  66. 'pgcache.reject.uri' => 'array',
  67. 'pgcache.reject.ua' => 'array',
  68. 'pgcache.reject.cookie' => 'array',
  69. 'pgcache.purge.home' => 'boolean',
  70. 'pgcache.purge.post' => 'boolean',
  71. 'pgcache.purge.comments' => 'boolean',
  72. 'pgcache.purge.author' => 'boolean',
  73. 'pgcache.purge.terms' => 'boolean',
  74. 'pgcache.purge.archive.daily' => 'boolean',
  75. 'pgcache.purge.archive.monthly' => 'boolean',
  76. 'pgcache.purge.archive.yearly' => 'boolean',
  77. 'pgcache.purge.feed.blog' => 'boolean',
  78. 'pgcache.purge.feed.comments' => 'boolean',
  79. 'pgcache.purge.feed.author' => 'boolean',
  80. 'pgcache.purge.feed.terms' => 'boolean',
  81. 'pgcache.purge.feed.types' => 'array',
  82. 'pgcache.prime.enabled' => 'boolean',
  83. 'pgcache.prime.interval' => 'integer',
  84. 'pgcache.prime.limit' => 'integer',
  85. 'pgcache.prime.sitemap' => 'string',
  86. 'minify.enabled' => 'boolean',
  87. 'minify.auto' => 'boolean',
  88. 'minify.debug' => 'boolean',
  89. 'minify.engine' => 'string',
  90. 'minify.file.gc' => 'integer',
  91. 'minify.file.nfs' => 'boolean',
  92. 'minify.file.locking' => 'boolean',
  93. 'minify.memcached.servers' => 'array',
  94. 'minify.memcached.persistant' => 'boolean',
  95. 'minify.rewrite' => 'boolean',
  96. 'minify.options' => 'array',
  97. 'minify.symlinks' => 'array',
  98. 'minify.lifetime' => 'integer',
  99. 'minify.upload' => 'boolean',
  100. 'minify.html.enable' => 'boolean',
  101. 'minify.html.engine' => 'string',
  102. 'minify.html.reject.feed' => 'boolean',
  103. 'minify.html.inline.css' => 'boolean',
  104. 'minify.html.inline.js' => 'boolean',
  105. 'minify.html.strip.crlf' => 'boolean',
  106. 'minify.html.comments.ignore' => 'array',
  107. 'minify.css.enable' => 'boolean',
  108. 'minify.css.engine' => 'string',
  109. 'minify.css.combine' => 'boolean',
  110. 'minify.css.strip.comments' => 'boolean',
  111. 'minify.css.strip.crlf' => 'boolean',
  112. 'minify.css.imports' => 'string',
  113. 'minify.css.groups' => 'array',
  114. 'minify.js.enable' => 'boolean',
  115. 'minify.js.engine' => 'string',
  116. 'minify.js.combine.header' => 'boolean',
  117. 'minify.js.combine.body' => 'boolean',
  118. 'minify.js.combine.footer' => 'boolean',
  119. 'minify.js.strip.comments' => 'boolean',
  120. 'minify.js.strip.crlf' => 'boolean',
  121. 'minify.js.groups' => 'array',
  122. 'minify.yuijs.path.java' => 'string',
  123. 'minify.yuijs.path.jar' => 'string',
  124. 'minify.yuijs.options.line-break' => 'integer',
  125. 'minify.yuijs.options.nomunge' => 'boolean',
  126. 'minify.yuijs.options.preserve-semi' => 'boolean',
  127. 'minify.yuijs.options.disable-optimizations' => 'boolean',
  128. 'minify.yuicss.path.java' => 'string',
  129. 'minify.yuicss.path.jar' => 'string',
  130. 'minify.yuicss.options.line-break' => 'integer',
  131. 'minify.ccjs.path.java' => 'string',
  132. 'minify.ccjs.path.jar' => 'string',
  133. 'minify.ccjs.options.compilation_level' => 'string',
  134. 'minify.ccjs.options.formatting' => 'string',
  135. 'minify.csstidy.options.remove_bslash' => 'boolean',
  136. 'minify.csstidy.options.compress_colors' => 'boolean',
  137. 'minify.csstidy.options.compress_font-weight' => 'boolean',
  138. 'minify.csstidy.options.lowercase_s' => 'boolean',
  139. 'minify.csstidy.options.optimise_shorthands' => 'integer',
  140. 'minify.csstidy.options.remove_last_;' => 'boolean',
  141. 'minify.csstidy.options.case_properties' => 'integer',
  142. 'minify.csstidy.options.sort_properties' => 'boolean',
  143. 'minify.csstidy.options.sort_selectors' => 'boolean',
  144. 'minify.csstidy.options.merge_selectors' => 'integer',
  145. 'minify.csstidy.options.discard_invalid_properties' => 'boolean',
  146. 'minify.csstidy.options.css_level' => 'string',
  147. 'minify.csstidy.options.preserve_css' => 'boolean',
  148. 'minify.csstidy.options.timestamp' => 'boolean',
  149. 'minify.csstidy.options.template' => 'string',
  150. 'minify.htmltidy.options.clean' => 'boolean',
  151. 'minify.htmltidy.options.hide-comments' => 'boolean',
  152. 'minify.htmltidy.options.wrap' => 'integer',
  153. 'minify.reject.logged' => 'boolean',
  154. 'minify.reject.ua' => 'array',
  155. 'minify.reject.uri' => 'array',
  156. 'minify.error.last' => 'string',
  157. 'minify.error.notification' => 'string',
  158. 'minify.error.notification.last' => 'integer',
  159. 'cdn.enabled' => 'boolean',
  160. 'cdn.debug' => 'boolean',
  161. 'cdn.engine' => 'string',
  162. 'cdn.uploads.enable' => 'boolean',
  163. 'cdn.includes.enable' => 'boolean',
  164. 'cdn.includes.files' => 'string',
  165. 'cdn.theme.enable' => 'boolean',
  166. 'cdn.theme.files' => 'string',
  167. 'cdn.minify.enable' => 'boolean',
  168. 'cdn.custom.enable' => 'boolean',
  169. 'cdn.custom.files' => 'array',
  170. 'cdn.import.external' => 'boolean',
  171. 'cdn.import.files' => 'string',
  172. 'cdn.queue.interval' => 'integer',
  173. 'cdn.queue.limit' => 'integer',
  174. 'cdn.force.rewrite' => 'boolean',
  175. 'cdn.autoupload.enabled' => 'boolean',
  176. 'cdn.autoupload.interval' => 'integer',
  177. 'cdn.ftp.host' => 'string',
  178. 'cdn.ftp.port' => 'integer',
  179. 'cdn.ftp.user' => 'string',
  180. 'cdn.ftp.pass' => 'string',
  181. 'cdn.ftp.path' => 'string',
  182. 'cdn.ftp.pasv' => 'boolean',
  183. 'cdn.ftp.domain' => 'array',
  184. 'cdn.ftp.ssl' => 'string',
  185. 'cdn.s3.key' => 'string',
  186. 'cdn.s3.secret' => 'string',
  187. 'cdn.s3.bucket' => 'string',
  188. 'cdn.s3.cname' => 'array',
  189. 'cdn.s3.ssl' => 'string',
  190. 'cdn.cf.key' => 'string',
  191. 'cdn.cf.secret' => 'string',
  192. 'cdn.cf.bucket' => 'string',
  193. 'cdn.cf.id' => 'string',
  194. 'cdn.cf.cname' => 'array',
  195. 'cdn.cf.ssl' => 'string',
  196. 'cdn.cf2.key' => 'string',
  197. 'cdn.cf2.secret' => 'string',
  198. 'cdn.cf2.id' => 'string',
  199. 'cdn.cf2.cname' => 'array',
  200. 'cdn.cf2.ssl' => 'string',
  201. 'cdn.rscf.user' => 'string',
  202. 'cdn.rscf.key' => 'string',
  203. 'cdn.rscf.location' => 'string',
  204. 'cdn.rscf.container' => 'string',
  205. 'cdn.rscf.cname' => 'array',
  206. 'cdn.rscf.ssl' => 'string',
  207. 'cdn.azure.user' => 'string',
  208. 'cdn.azure.key' => 'string',
  209. 'cdn.azure.container' => 'string',
  210. 'cdn.azure.cname' => 'array',
  211. 'cdn.azure.ssl' => 'string',
  212. 'cdn.mirror.domain' => 'array',
  213. 'cdn.mirror.ssl' => 'string',
  214. 'cdn.netdna.apiid' => 'string',
  215. 'cdn.netdna.apikey' => 'string',
  216. 'cdn.netdna.domain' => 'array',
  217. 'cdn.netdna.ssl' => 'string',
  218. 'cdn.cotendo.username' => 'string',
  219. 'cdn.cotendo.password' => 'string',
  220. 'cdn.cotendo.zones' => 'array',
  221. 'cdn.cotendo.domain' => 'array',
  222. 'cdn.cotendo.ssl' => 'string',
  223. 'cdn.edgecast.account' => 'string',
  224. 'cdn.edgecast.token' => 'string',
  225. 'cdn.edgecast.domain' => 'array',
  226. 'cdn.edgecast.ssl' => 'string',
  227. 'cdn.reject.admins' => 'boolean',
  228. 'cdn.reject.ua' => 'array',
  229. 'cdn.reject.uri' => 'array',
  230. 'cdn.reject.files' => 'array',
  231. 'cloudflare.enabled' => 'boolean',
  232. 'cloudflare.email' => 'string',
  233. 'cloudflare.key' => 'string',
  234. 'cloudflare.zone' => 'string',
  235. 'varnish.enabled' => 'boolean',
  236. 'varnish.debug' => 'boolean',
  237. 'varnish.servers' => 'array',
  238. 'browsercache.enabled' => 'boolean',
  239. 'browsercache.no404wp' => 'boolean',
  240. 'browsercache.no404wp.exceptions' => 'array',
  241. 'browsercache.cssjs.compression' => 'boolean',
  242. 'browsercache.cssjs.expires' => 'boolean',
  243. 'browsercache.cssjs.lifetime' => 'integer',
  244. 'browsercache.cssjs.cache.control' => 'boolean',
  245. 'browsercache.cssjs.cache.policy' => 'string',
  246. 'browsercache.cssjs.etag' => 'boolean',
  247. 'browsercache.cssjs.w3tc' => 'boolean',
  248. 'browsercache.cssjs.replace' => 'boolean',
  249. 'browsercache.html.compression' => 'boolean',
  250. 'browsercache.html.expires' => 'boolean',
  251. 'browsercache.html.lifetime' => 'integer',
  252. 'browsercache.html.cache.control' => 'boolean',
  253. 'browsercache.html.cache.policy' => 'string',
  254. 'browsercache.html.etag' => 'boolean',
  255. 'browsercache.html.w3tc' => 'boolean',
  256. 'browsercache.html.replace' => 'boolean',
  257. 'browsercache.other.compression' => 'boolean',
  258. 'browsercache.other.expires' => 'boolean',
  259. 'browsercache.other.lifetime' => 'integer',
  260. 'browsercache.other.cache.control' => 'boolean',
  261. 'browsercache.other.cache.policy' => 'string',
  262. 'browsercache.other.etag' => 'boolean',
  263. 'browsercache.other.w3tc' => 'boolean',
  264. 'browsercache.other.replace' => 'boolean',
  265. 'mobile.enabled' => 'boolean',
  266. 'mobile.rgroups' => 'array',
  267. 'referrer.enabled' => 'boolean',
  268. 'referrer.rgroups' => 'array',
  269. 'common.support' => 'string',
  270. 'common.install' => 'integer',
  271. 'common.tweeted' => 'boolean',
  272. 'config.check' => 'boolean',
  273. 'config.path' => 'string',
  274. 'widget.latest.enabled' => 'boolean',
  275. 'widget.latest.items' => 'integer',
  276. 'widget.pagespeed.enabled' => 'boolean',
  277. 'widget.pagespeed.key' => 'string',
  278. 'notes.wp_content_perms' => 'boolean',
  279. 'notes.php_is_old' => 'boolean',
  280. 'notes.theme_changed' => 'boolean',
  281. 'notes.wp_upgraded' => 'boolean',
  282. 'notes.plugins_updated' => 'boolean',
  283. 'notes.cdn_upload' => 'boolean',
  284. 'notes.cdn_reupload' => 'boolean',
  285. 'notes.need_empty_pgcache' => 'boolean',
  286. 'notes.need_empty_minify' => 'boolean',
  287. 'notes.need_empty_objectcache' => 'boolean',
  288. 'notes.pgcache_rules_core' => 'boolean',
  289. 'notes.pgcache_rules_cache' => 'boolean',
  290. 'notes.pgcache_rules_legacy' => 'boolean',
  291. 'notes.pgcache_rules_wpsc' => 'boolean',
  292. 'notes.minify_rules_core' => 'boolean',
  293. 'notes.minify_rules_cache' => 'boolean',
  294. 'notes.minify_rules_legacy' => 'boolean',
  295. 'notes.support_us' => 'boolean',
  296. 'notes.no_curl' => 'boolean',
  297. 'notes.no_zlib' => 'boolean',
  298. 'notes.zlib_output_compression' => 'boolean',
  299. 'notes.no_permalink_rules' => 'boolean',
  300. 'notes.browsercache_rules_cache' => 'boolean',
  301. 'notes.browsercache_rules_no404wp' => 'boolean',
  302. 'notes.minify_error' => 'boolean',
  303. 'timelimit.email_send' => 'integer',
  304. 'timelimit.varnish_purge' => 'integer',
  305. 'timelimit.cache_flush' => 'integer',
  306. 'timelimit.cache_gc' => 'integer',
  307. 'timelimit.cdn_upload' => 'integer',
  308. 'timelimit.cdn_delete' => 'integer',
  309. 'timelimit.cdn_purge' => 'integer',
  310. 'timelimit.cdn_import' => 'integer',
  311. 'timelimit.cdn_test' => 'integer',
  312. 'timelimit.cdn_container_create' => 'integer',
  313. 'timelimit.cloudflare_api_request' => 'integer',
  314. 'timelimit.domain_rename' => 'integer',
  315. 'timelimit.minify_recommendations' => 'integer'
  316. );
  317. var $_defaults = array(
  318. 'dbcache.enabled' => false,
  319. 'dbcache.debug' => false,
  320. 'dbcache.engine' => 'file',
  321. 'dbcache.file.gc' => 3600,
  322. 'dbcache.file.locking' => false,
  323. 'dbcache.memcached.servers' => array(
  324. '127.0.0.1:11211'
  325. ),
  326. 'dbcache.memcached.persistant' => true,
  327. 'dbcache.reject.logged' => true,
  328. 'dbcache.reject.uri' => array(),
  329. 'dbcache.reject.cookie' => array(),
  330. 'dbcache.reject.sql' => array(
  331. 'gdsr_',
  332. 'wp_rg_'
  333. ),
  334. 'dbcache.lifetime' => 180,
  335. 'objectcache.enabled' => false,
  336. 'objectcache.debug' => false,
  337. 'objectcache.engine' => 'file',
  338. 'objectcache.file.gc' => 3600,
  339. 'objectcache.file.locking' => false,
  340. 'objectcache.memcached.servers' => array(
  341. '127.0.0.1:11211'
  342. ),
  343. 'objectcache.memcached.persistant' => true,
  344. 'objectcache.groups.global' => array(
  345. 'users',
  346. 'userlogins',
  347. 'usermeta',
  348. 'user_meta',
  349. 'site-transient',
  350. 'site-options',
  351. 'site-lookup',
  352. 'blog-lookup',
  353. 'blog-details',
  354. 'rss',
  355. 'global-posts'
  356. ),
  357. 'objectcache.groups.nonpersistent' => array(
  358. 'comment',
  359. 'counts',
  360. 'plugins'
  361. ),
  362. 'objectcache.lifetime' => 180,
  363. 'pgcache.enabled' => false,
  364. 'pgcache.debug' => false,
  365. 'pgcache.engine' => 'file_generic',
  366. 'pgcache.file.gc' => 3600,
  367. 'pgcache.file.nfs' => false,
  368. 'pgcache.file.locking' => false,
  369. 'pgcache.memcached.servers' => array(
  370. '127.0.0.1:11211'
  371. ),
  372. 'pgcache.memcached.persistant' => true,
  373. 'pgcache.check.domain' => true,
  374. 'pgcache.cache.query' => true,
  375. 'pgcache.cache.home' => true,
  376. 'pgcache.cache.feed' => false,
  377. 'pgcache.cache.ssl' => true,
  378. 'pgcache.cache.404' => false,
  379. 'pgcache.cache.flush' => false,
  380. 'pgcache.cache.headers' => array(
  381. 'Last-Modified',
  382. 'Content-Type',
  383. 'X-Pingback',
  384. 'P3P'
  385. ),
  386. 'pgcache.accept.uri' => array(
  387. 'sitemap(_index)?\.xml(\.gz)?',
  388. '[a-z0-9_\-]+-sitemap([0-9]+)?\.xml(\.gz)?'
  389. ),
  390. 'pgcache.accept.files' => array(
  391. 'wp-comments-popup.php',
  392. 'wp-links-opml.php',
  393. 'wp-locations.php'
  394. ),
  395. 'pgcache.reject.logged' => true,
  396. 'pgcache.reject.uri' => array(
  397. 'wp-.*\.php',
  398. 'index\.php'
  399. ),
  400. 'pgcache.reject.ua' => array(),
  401. 'pgcache.reject.cookie' => array(),
  402. 'pgcache.purge.home' => true,
  403. 'pgcache.purge.post' => true,
  404. 'pgcache.purge.comments' => false,
  405. 'pgcache.purge.author' => false,
  406. 'pgcache.purge.terms' => false,
  407. 'pgcache.purge.archive.daily' => false,
  408. 'pgcache.purge.archive.monthly' => false,
  409. 'pgcache.purge.archive.yearly' => false,
  410. 'pgcache.purge.feed.blog' => true,
  411. 'pgcache.purge.feed.comments' => false,
  412. 'pgcache.purge.feed.author' => false,
  413. 'pgcache.purge.feed.terms' => false,
  414. 'pgcache.purge.feed.types' => array(
  415. 'rss2'
  416. ),
  417. 'pgcache.prime.enabled' => false,
  418. 'pgcache.prime.interval' => 900,
  419. 'pgcache.prime.limit' => 10,
  420. 'pgcache.prime.sitemap' => '',
  421. 'minify.enabled' => false,
  422. 'minify.auto' => false,
  423. 'minify.debug' => false,
  424. 'minify.engine' => 'file',
  425. 'minify.file.gc' => 86400,
  426. 'minify.file.nfs' => false,
  427. 'minify.file.locking' => false,
  428. 'minify.memcached.servers' => array(
  429. '127.0.0.1:11211'
  430. ),
  431. 'minify.memcached.persistant' => true,
  432. 'minify.rewrite' => true,
  433. 'minify.options' => array(),
  434. 'minify.symlinks' => array(),
  435. 'minify.lifetime' => 86400,
  436. 'minify.upload' => true,
  437. 'minify.html.enable' => false,
  438. 'minify.html.engine' => 'html',
  439. 'minify.html.reject.feed' => false,
  440. 'minify.html.inline.css' => false,
  441. 'minify.html.inline.js' => false,
  442. 'minify.html.strip.crlf' => false,
  443. 'minify.html.comments.ignore' => array(
  444. 'google_ad_',
  445. 'RSPEAK_'
  446. ),
  447. 'minify.css.enable' => true,
  448. 'minify.css.engine' => 'css',
  449. 'minify.css.combine' => false,
  450. 'minify.css.strip.comments' => false,
  451. 'minify.css.strip.crlf' => false,
  452. 'minify.css.imports' => 'process',
  453. 'minify.css.groups' => array(),
  454. 'minify.js.enable' => true,
  455. 'minify.js.engine' => 'js',
  456. 'minify.js.combine.header' => false,
  457. 'minify.js.combine.body' => false,
  458. 'minify.js.combine.footer' => false,
  459. 'minify.js.strip.comments' => false,
  460. 'minify.js.strip.crlf' => false,
  461. 'minify.js.groups' => array(),
  462. 'minify.yuijs.path.java' => 'java',
  463. 'minify.yuijs.path.jar' => 'yuicompressor.jar',
  464. 'minify.yuijs.options.line-break' => 5000,
  465. 'minify.yuijs.options.nomunge' => false,
  466. 'minify.yuijs.options.preserve-semi' => false,
  467. 'minify.yuijs.options.disable-optimizations' => false,
  468. 'minify.yuicss.path.java' => 'java',
  469. 'minify.yuicss.path.jar' => 'yuicompressor.jar',
  470. 'minify.yuicss.options.line-break' => 5000,
  471. 'minify.ccjs.path.java' => 'java',
  472. 'minify.ccjs.path.jar' => 'compiler.jar',
  473. 'minify.ccjs.options.compilation_level' => 'SIMPLE_OPTIMIZATIONS',
  474. 'minify.ccjs.options.formatting' => '',
  475. 'minify.csstidy.options.remove_bslash' => true,
  476. 'minify.csstidy.options.compress_colors' => true,
  477. 'minify.csstidy.options.compress_font-weight' => true,
  478. 'minify.csstidy.options.lowercase_s' => false,
  479. 'minify.csstidy.options.optimise_shorthands' => 1,
  480. 'minify.csstidy.options.remove_last_;' => false,
  481. 'minify.csstidy.options.case_properties' => 1,
  482. 'minify.csstidy.options.sort_properties' => false,
  483. 'minify.csstidy.options.sort_selectors' => false,
  484. 'minify.csstidy.options.merge_selectors' => 2,
  485. 'minify.csstidy.options.discard_invalid_properties' => false,
  486. 'minify.csstidy.options.css_level' => 'CSS2.1',
  487. 'minify.csstidy.options.preserve_css' => false,
  488. 'minify.csstidy.options.timestamp' => false,
  489. 'minify.csstidy.options.template' => 'default',
  490. 'minify.htmltidy.options.clean' => false,
  491. 'minify.htmltidy.options.hide-comments' => true,
  492. 'minify.htmltidy.options.wrap' => 0,
  493. 'minify.reject.logged' => false,
  494. 'minify.reject.ua' => array(),
  495. 'minify.reject.uri' => array(),
  496. 'minify.error.last' => '',
  497. 'minify.error.notification' => '',
  498. 'minify.error.notification.last' => 0,
  499. 'cdn.enabled' => false,
  500. 'cdn.debug' => false,
  501. 'cdn.engine' => 'ftp',
  502. 'cdn.uploads.enable' => true,
  503. 'cdn.includes.enable' => true,
  504. 'cdn.includes.files' => '*.css;*.js;*.gif;*.png;*.jpg',
  505. 'cdn.theme.enable' => true,
  506. 'cdn.theme.files' => '*.css;*.js;*.gif;*.png;*.jpg;*.ico;*.ttf;*.otf,*.woff',
  507. 'cdn.minify.enable' => true,
  508. 'cdn.custom.enable' => true,
  509. 'cdn.custom.files' => array(
  510. 'favicon.ico',
  511. 'wp-content/gallery/*',
  512. 'wp-content/uploads/avatars/*',
  513. 'wp-content/plugins/wordpress-seo/css/xml-sitemap.xsl'
  514. ),
  515. 'cdn.import.external' => false,
  516. 'cdn.import.files' => '*.jpg;*.png;*.gif;*.avi;*.wmv;*.mpg;*.wav;*.mp3;*.txt;*.rtf;*.doc;*.xls;*.rar;*.zip;*.tar;*.gz;*.exe',
  517. 'cdn.queue.interval' => 900,
  518. 'cdn.queue.limit' => 25,
  519. 'cdn.force.rewrite' => false,
  520. 'cdn.autoupload.enabled' => false,
  521. 'cdn.autoupload.interval' => 3600,
  522. 'cdn.ftp.host' => '',
  523. 'cdn.ftp.port' => 21,
  524. 'cdn.ftp.user' => '',
  525. 'cdn.ftp.pass' => '',
  526. 'cdn.ftp.path' => '',
  527. 'cdn.ftp.pasv' => false,
  528. 'cdn.ftp.domain' => array(),
  529. 'cdn.ftp.ssl' => 'auto',
  530. 'cdn.s3.key' => '',
  531. 'cdn.s3.secret' => '',
  532. 'cdn.s3.bucket' => '',
  533. 'cdn.s3.cname' => array(),
  534. 'cdn.s3.ssl' => 'auto',
  535. 'cdn.cf.key' => '',
  536. 'cdn.cf.secret' => '',
  537. 'cdn.cf.bucket' => '',
  538. 'cdn.cf.id' => '',
  539. 'cdn.cf.cname' => array(),
  540. 'cdn.cf.ssl' => 'auto',
  541. 'cdn.cf2.key' => '',
  542. 'cdn.cf2.secret' => '',
  543. 'cdn.cf2.id' => '',
  544. 'cdn.cf2.cname' => array(),
  545. 'cdn.cf2.ssl' => 'auto',
  546. 'cdn.rscf.user' => '',
  547. 'cdn.rscf.key' => '',
  548. 'cdn.rscf.location' => 'us',
  549. 'cdn.rscf.container' => '',
  550. 'cdn.rscf.cname' => array(),
  551. 'cdn.rscf.ssl' => 'auto',
  552. 'cdn.azure.user' => '',
  553. 'cdn.azure.key' => '',
  554. 'cdn.azure.container' => '',
  555. 'cdn.azure.cname' => array(),
  556. 'cdn.azure.ssl' => 'auto',
  557. 'cdn.mirror.domain' => array(),
  558. 'cdn.mirror.ssl' => 'auto',
  559. 'cdn.netdna.apiid' => '',
  560. 'cdn.netdna.apikey' => '',
  561. 'cdn.netdna.domain' => array(),
  562. 'cdn.netdna.ssl' => 'auto',
  563. 'cdn.cotendo.username' => '',
  564. 'cdn.cotendo.password' => '',
  565. 'cdn.cotendo.zones' => array(),
  566. 'cdn.cotendo.domain' => array(),
  567. 'cdn.cotendo.ssl' => 'auto',
  568. 'cdn.edgecast.account' => '',
  569. 'cdn.edgecast.token' => '',
  570. 'cdn.edgecast.domain' => array(),
  571. 'cdn.edgecast.ssl' => 'auto',
  572. 'cdn.reject.admins' => false,
  573. 'cdn.reject.ua' => array(),
  574. 'cdn.reject.uri' => array(),
  575. 'cdn.reject.files' => array(
  576. 'wp-content/uploads/wpcf7_captcha/*',
  577. 'wp-content/uploads/imagerotator.swf'
  578. ),
  579. 'cloudflare.enabled' => false,
  580. 'cloudflare.email' => '',
  581. 'cloudflare.key' => '',
  582. 'cloudflare.zone' => '',
  583. 'varnish.enabled' => false,
  584. 'varnish.debug' => false,
  585. 'varnish.servers' => array(),
  586. 'browsercache.enabled' => true,
  587. 'browsercache.no404wp' => false,
  588. 'browsercache.no404wp.exceptions' => array(
  589. 'robots\.txt',
  590. 'sitemap(_index)?\.xml(\.gz)?',
  591. '[a-z0-9_\-]+-sitemap([0-9]+)?\.xml(\.gz)?'
  592. ),
  593. 'browsercache.cssjs.compression' => true,
  594. 'browsercache.cssjs.expires' => false,
  595. 'browsercache.cssjs.lifetime' => 31536000,
  596. 'browsercache.cssjs.cache.control' => false,
  597. 'browsercache.cssjs.cache.policy' => 'cache_maxage',
  598. 'browsercache.cssjs.etag' => false,
  599. 'browsercache.cssjs.w3tc' => true,
  600. 'browsercache.cssjs.replace' => false,
  601. 'browsercache.html.compression' => true,
  602. 'browsercache.html.expires' => false,
  603. 'browsercache.html.lifetime' => 3600,
  604. 'browsercache.html.cache.control' => false,
  605. 'browsercache.html.cache.policy' => 'cache_maxage',
  606. 'browsercache.html.etag' => false,
  607. 'browsercache.html.w3tc' => true,
  608. 'browsercache.html.replace' => false,
  609. 'browsercache.other.compression' => true,
  610. 'browsercache.other.expires' => false,
  611. 'browsercache.other.lifetime' => 31536000,
  612. 'browsercache.other.cache.control' => false,
  613. 'browsercache.other.cache.policy' => 'cache_maxage',
  614. 'browsercache.other.etag' => false,
  615. 'browsercache.other.w3tc' => true,
  616. 'browsercache.other.replace' => false,
  617. 'mobile.enabled' => true,
  618. 'mobile.rgroups' => array(
  619. 'high' => array(
  620. 'theme' => '',
  621. 'enabled' => false,
  622. 'redirect' => '',
  623. 'agents' => array(
  624. 'acer\ s100',
  625. 'android',
  626. 'archos5',
  627. 'blackberry9500',
  628. 'blackberry9530',
  629. 'blackberry9550',
  630. 'blackberry\ 9800',
  631. 'cupcake',
  632. 'docomo\ ht\-03a',
  633. 'dream',
  634. 'htc\ hero',
  635. 'htc\ magic',
  636. 'htc_dream',
  637. 'htc_magic',
  638. 'incognito',
  639. 'ipad',
  640. 'iphone',
  641. 'ipod',
  642. 'kindle',
  643. 'lg\-gw620',
  644. 'liquid\ build',
  645. 'maemo',
  646. 'mot\-mb200',
  647. 'mot\-mb300',
  648. 'nexus\ one',
  649. 'opera\ mini',
  650. 'samsung\-s8000',
  651. 'series60.*webkit',
  652. 'series60/5\.0',
  653. 'sonyericssone10',
  654. 'sonyericssonu20',
  655. 'sonyericssonx10',
  656. 't\-mobile\ mytouch\ 3g',
  657. 't\-mobile\ opal',
  658. 'tattoo',
  659. 'webmate',
  660. 'webos'
  661. )
  662. ),
  663. 'low' => array(
  664. 'theme' => '',
  665. 'enabled' => false,
  666. 'redirect' => '',
  667. 'agents' => array(
  668. '2\.0\ mmp',
  669. '240x320',
  670. 'alcatel',
  671. 'amoi',
  672. 'asus',
  673. 'au\-mic',
  674. 'audiovox',
  675. 'avantgo',
  676. 'benq',
  677. 'bird',
  678. 'blackberry',
  679. 'blazer',
  680. 'cdm',
  681. 'cellphone',
  682. 'danger',
  683. 'ddipocket',
  684. 'docomo',
  685. 'dopod',
  686. 'elaine/3\.0',
  687. 'ericsson',
  688. 'eudoraweb',
  689. 'fly',
  690. 'haier',
  691. 'hiptop',
  692. 'hp\.ipaq',
  693. 'htc',
  694. 'huawei',
  695. 'i\-mobile',
  696. 'iemobile',
  697. 'j\-phone',
  698. 'kddi',
  699. 'konka',
  700. 'kwc',
  701. 'kyocera/wx310k',
  702. 'lenovo',
  703. 'lg',
  704. 'lg/u990',
  705. 'lge\ vx',
  706. 'midp',
  707. 'midp\-2\.0',
  708. 'mmef20',
  709. 'mmp',
  710. 'mobilephone',
  711. 'mot\-v',
  712. 'motorola',
  713. 'netfront',
  714. 'newgen',
  715. 'newt',
  716. 'nintendo\ ds',
  717. 'nintendo\ wii',
  718. 'nitro',
  719. 'nokia',
  720. 'novarra',
  721. 'o2',
  722. 'openweb',
  723. 'opera\ mobi',
  724. 'opera\.mobi',
  725. 'palm',
  726. 'panasonic',
  727. 'pantech',
  728. 'pdxgw',
  729. 'pg',
  730. 'philips',
  731. 'phone',
  732. 'playstation\ portable',
  733. 'portalmmm',
  734. '\bppc\b',
  735. 'proxinet',
  736. 'psp',
  737. 'qtek',
  738. 'sagem',
  739. 'samsung',
  740. 'sanyo',
  741. 'sch',
  742. 'sec',
  743. 'sendo',
  744. 'sgh',
  745. 'sharp',
  746. 'sharp\-tq\-gx10',
  747. 'small',
  748. 'smartphone',
  749. 'softbank',
  750. 'sonyericsson',
  751. 'sph',
  752. 'symbian',
  753. 'symbian\ os',
  754. 'symbianos',
  755. 'toshiba',
  756. 'treo',
  757. 'ts21i\-10',
  758. 'up\.browser',
  759. 'up\.link',
  760. 'uts',
  761. 'vertu',
  762. 'vodafone',
  763. 'wap',
  764. 'willcome',
  765. 'windows\ ce',
  766. 'windows\.ce',
  767. 'winwap',
  768. 'xda',
  769. 'zte'
  770. )
  771. )
  772. ),
  773. 'referrer.enabled' => true,
  774. 'referrer.rgroups' => array(
  775. 'search_engines' => array(
  776. 'theme' => '',
  777. 'enabled' => false,
  778. 'redirect' => '',
  779. 'referrers' => array(
  780. 'google\.com',
  781. 'yahoo\.com',
  782. 'bing\.com',
  783. 'ask\.com',
  784. 'msn\.com'
  785. )
  786. )
  787. ),
  788. 'common.support' => '',
  789. 'common.install' => 0,
  790. 'common.tweeted' => false,
  791. 'config.check' => true,
  792. 'config.path' => '',
  793. 'widget.latest.enabled' => true,
  794. 'widget.latest.items' => 3,
  795. 'widget.pagespeed.enabled' => true,
  796. 'widget.pagespeed.key' => '',
  797. 'notes.wp_content_perms' => true,
  798. 'notes.php_is_old' => true,
  799. 'notes.theme_changed' => false,
  800. 'notes.wp_upgraded' => false,
  801. 'notes.plugins_updated' => false,
  802. 'notes.cdn_upload' => false,
  803. 'notes.cdn_reupload' => false,
  804. 'notes.need_empty_pgcache' => false,
  805. 'notes.need_empty_minify' => false,
  806. 'notes.need_empty_objectcache' => false,
  807. 'notes.pgcache_rules_core' => true,
  808. 'notes.pgcache_rules_cache' => true,
  809. 'notes.pgcache_rules_legacy' => true,
  810. 'notes.pgcache_rules_wpsc' => true,
  811. 'notes.minify_rules_core' => true,
  812. 'notes.minify_rules_cache' => true,
  813. 'notes.minify_rules_legacy' => true,
  814. 'notes.support_us' => true,
  815. 'notes.no_curl' => true,
  816. 'notes.no_zlib' => true,
  817. 'notes.zlib_output_compression' => true,
  818. 'notes.no_permalink_rules' => true,
  819. 'notes.browsercache_rules_cache' => true,
  820. 'notes.browsercache_rules_no404wp' => true,
  821. 'notes.minify_error' => false,
  822. 'timelimit.email_send' => 180,
  823. 'timelimit.varnish_purge' => 300,
  824. 'timelimit.cache_flush' => 600,
  825. 'timelimit.cache_gc' => 600,
  826. 'timelimit.cdn_upload' => 600,
  827. 'timelimit.cdn_delete' => 300,
  828. 'timelimit.cdn_purge' => 300,
  829. 'timelimit.cdn_import' => 600,
  830. 'timelimit.cdn_test' => 300,
  831. 'timelimit.cdn_container_create' => 300,
  832. 'timelimit.cloudflare_api_request' => 180,
  833. 'timelimit.domain_rename' => 120,
  834. 'timelimit.minify_recommendations' => 600
  835. );
  836. /**
  837. * PHP5 Constructor
  838. * @param boolean $preview
  839. */
  840. function __construct($preview = null) {
  841. $this->load_defaults();
  842. $this->load($preview);
  843. if (!$this->get_integer('common.install')) {
  844. $this->set('common.install', time());
  845. }
  846. }
  847. /**
  848. * PHP4 Constructor
  849. * @param boolean $preview
  850. */
  851. function W3_Config($preview = null) {
  852. $this->__construct($preview);
  853. }
  854. /**
  855. * Returns config value
  856. *
  857. * @param string $key
  858. * @param mixed $default
  859. * @return mixed
  860. */
  861. function get($key, $default = null) {
  862. if (array_key_exists($key, $this->_keys) && array_key_exists($key, $this->_config)) {
  863. $value = $this->_config[$key];
  864. } else {
  865. if ($default === null && array_key_exists($key, $this->_defaults)) {
  866. $value = $this->_defaults[$key];
  867. } else {
  868. $value = $default;
  869. }
  870. }
  871. switch ($key) {
  872. /**
  873. * Check cache engines
  874. */
  875. case 'pgcache.engine':
  876. case 'dbcache.engine':
  877. case 'minify.engine':
  878. case 'objectcache.engine':
  879. /**
  880. * Legacy support
  881. */
  882. if ($value == 'file_pgcache') {
  883. $value = 'file_generic';
  884. }
  885. switch (true) {
  886. case ($value == 'file_generic' && !w3_can_check_rules()):
  887. case ($value == 'apc' && !function_exists('apc_store')):
  888. case ($value == 'eaccelerator' && !function_exists('eaccelerator_put')):
  889. case ($value == 'xcache' && !function_exists('xcache_set')):
  890. case ($value == 'wincache' && !function_exists('wincache_ucache_set')):
  891. case ($value == 'memcached' && !class_exists('Memcache')):
  892. return 'file';
  893. }
  894. break;
  895. /**
  896. * Check HTML minifier
  897. */
  898. case 'minify.html.engine':
  899. if ($value == 'htmltidy' && !class_exists('tidy')) {
  900. return 'html';
  901. }
  902. break;
  903. /**
  904. * Disabled some page cache options when enhanced mode enabled
  905. */
  906. case 'pgcache.cache.query':
  907. if ($this->get_string('pgcache.engine') == 'file_generic') {
  908. return false;
  909. }
  910. break;
  911. /**
  912. * Set default value to sitemap file
  913. */
  914. case 'pgcache.prime.sitemap':
  915. if (!$value) {
  916. $value = w3_get_home_url() . '/sitemap.xml';
  917. }
  918. break;
  919. /**
  920. * Disabled minify when PHP5 is not installed
  921. */
  922. case 'minify.enabled':
  923. if (!W3TC_PHP5) {
  924. return false;
  925. }
  926. break;
  927. /**
  928. * Disable minify rewrite when server rules are not supported
  929. */
  930. case 'minify.rewrite':
  931. if (!w3_can_check_rules()) {
  932. return false;
  933. }
  934. break;
  935. /**
  936. * Disable minify options for auto mode
  937. */
  938. case 'minify.upload':
  939. if ($this->get_boolean('minify.auto')) {
  940. return false;
  941. }
  942. break;
  943. /**
  944. * Minify groups legacy support
  945. */
  946. case 'minify.js.groups':
  947. case 'minify.css.groups':
  948. /**
  949. * Support <= 0.8.5.2 versions
  950. */
  951. if (is_array($value) && count($value)) {
  952. $group = current($value);
  953. if (is_array($group) && count($group)) {
  954. $location = current($group);
  955. if (isset($location['files'])) {
  956. if (function_exists('get_theme')) {
  957. $theme = get_theme(get_current_theme());
  958. $theme_key = w3_get_theme_key($theme['Theme Root'], $theme['Template'], $theme['Stylesheet']);
  959. $value = array(
  960. $theme_key => $value
  961. );
  962. return $value;
  963. }
  964. }
  965. }
  966. }
  967. /**
  968. * Support <= 0.9.1.3 versions
  969. */
  970. $wp_themes = get_themes();
  971. foreach ($value as $theme_key => $templates) {
  972. if (strlen($theme_key) == 5) {
  973. break;
  974. }
  975. foreach ($wp_themes as $wp_theme) {
  976. $wp_theme_key = w3_get_theme_key_legacy($wp_theme['Theme Root'], $wp_theme['Template'], $wp_theme['Stylesheet']);
  977. if ($theme_key == $wp_theme_key) {
  978. $new_theme_key = w3_get_theme_key($wp_theme['Theme Root'], $wp_theme['Template'], $wp_theme['Stylesheet']);
  979. $value[$new_theme_key] = $templates;
  980. unset($theme_key);
  981. break;
  982. }
  983. }
  984. }
  985. break;
  986. /**
  987. * Disable CDN minify when PHP5 is not installed or minify is disabled
  988. */
  989. case 'cdn.minify.enable':
  990. if (!W3TC_PHP5 || !$this->get_boolean('minify.rewrite') || ($this->get_boolean('minify.auto') && !w3_is_cdn_mirror($this->get_string('cdn.engine')))) {
  991. return false;
  992. }
  993. break;
  994. /**
  995. * Check CDN engines
  996. */
  997. case 'cdn.engine':
  998. /**
  999. * Check for PHP5
  1000. */
  1001. if (in_array($value, array('rscf', 'azure')) && !W3TC_PHP5) {
  1002. return 'mirror';
  1003. }
  1004. /**
  1005. * Check for CURL
  1006. */
  1007. if (in_array($value, array('s3', 'cf', 'cf2', 'rscf')) && !function_exists('curl_init')) {
  1008. return 'mirror';
  1009. }
  1010. /**
  1011. * Check for FTP
  1012. */
  1013. if ($value == 'ftp' && !function_exists('ftp_connect')) {
  1014. return 'mirror';
  1015. }
  1016. /**
  1017. * Check for SHA 256 functions
  1018. */
  1019. if ($value == 'netdna' && !function_exists('hash') && !function_exists('mhash')) {
  1020. return 'mirror';
  1021. }
  1022. break;
  1023. /**
  1024. * Disable no 404 wp feature when server rules are not supported
  1025. */
  1026. case 'browsercache.no404wp':
  1027. if (!w3_can_check_rules()) {
  1028. return false;
  1029. }
  1030. break;
  1031. }
  1032. return $value;
  1033. }
  1034. /**
  1035. * Returns string value
  1036. *
  1037. * @param string $key
  1038. * @param string $default
  1039. * @param boolean $trim
  1040. * @return string
  1041. */
  1042. function get_string($key, $default = '', $trim = true) {
  1043. $value = (string) $this->get($key, $default);
  1044. return ($trim ? trim($value) : $value);
  1045. }
  1046. /**
  1047. * Returns integer value
  1048. *
  1049. * @param string $key
  1050. * @param integer $default
  1051. * @return integer
  1052. */
  1053. function get_integer($key, $default = 0) {
  1054. return (integer) $this->get($key, $default);
  1055. }
  1056. /**
  1057. * Returns boolean value
  1058. *
  1059. * @param string $key
  1060. * @param boolean $default
  1061. * @return boolean
  1062. */
  1063. function get_boolean($key, $default = false) {
  1064. return (boolean) $this->get($key, $default);
  1065. }
  1066. /**
  1067. * Returns array value
  1068. *
  1069. * @param string $key
  1070. * @param array $default
  1071. * @return array
  1072. */
  1073. function get_array($key, $default = array()) {
  1074. return (array) $this->get($key, $default);
  1075. }
  1076. /**
  1077. * Sets config value
  1078. *
  1079. * @param string $key
  1080. * @param string $value
  1081. */
  1082. function set($key, $value) {
  1083. /**
  1084. * Legacy support for <= 0.9.1.3
  1085. */
  1086. switch ($key) {
  1087. case 'pgcache.varnish.enabled':
  1088. $key = 'varnish.enabled';
  1089. break;
  1090. case 'pgcache.varnish.servers':
  1091. $key = 'varnish.servers';
  1092. break;
  1093. }
  1094. if (array_key_exists($key, $this->_keys)) {
  1095. $type = $this->_keys[$key];
  1096. settype($value, $type);
  1097. $this->_config[$key] = $value;
  1098. }
  1099. return false;
  1100. }
  1101. /**
  1102. * Flush config
  1103. */
  1104. function flush() {
  1105. $this->_config = array();
  1106. }
  1107. /**
  1108. * Reads config from file
  1109. *
  1110. * @param string $file
  1111. * @return array
  1112. */
  1113. function read($file) {
  1114. if (file_exists($file) && is_readable($file)) {
  1115. $config = @include $file;
  1116. if (!is_array($config)) {
  1117. return false;
  1118. }
  1119. foreach ($config as $key => $value) {
  1120. $this->set($key, $value);
  1121. }
  1122. return true;
  1123. }
  1124. return false;
  1125. }
  1126. /**
  1127. * Reads config from request
  1128. */
  1129. function read_request() {
  1130. require_once W3TC_LIB_W3_DIR . '/Request.php';
  1131. $request = W3_Request::get_request();
  1132. foreach ($this->_keys as $key => $type) {
  1133. $request_key = str_replace('.', '_', $key);
  1134. if (!isset($request[$request_key])) {
  1135. continue;
  1136. }
  1137. switch ($type) {
  1138. case 'string':
  1139. $this->set($key, W3_Request::get_string($request_key));
  1140. break;
  1141. case 'int':
  1142. case 'integer':
  1143. $this->set($key, W3_Request::get_integer($request_key));
  1144. break;
  1145. case 'float':
  1146. case 'double':
  1147. $this->set($key, W3_Request::get_double($request_key));
  1148. break;
  1149. case 'bool':
  1150. case 'boolean':
  1151. $this->set($key, W3_Request::get_boolean($request_key));
  1152. break;
  1153. case 'array':
  1154. $this->set($key, W3_Request::get_array($request_key));
  1155. break;
  1156. }
  1157. }
  1158. }
  1159. /**
  1160. * Writes config
  1161. *
  1162. * @param string $file
  1163. * @return boolean
  1164. */
  1165. function write($file) {
  1166. $fp = @fopen($file, 'w');
  1167. if ($fp) {
  1168. @fputs($fp, "<?php\r\n\r\nreturn array(\r\n");
  1169. $this->_tabs = 1;
  1170. foreach ($this->_config as $key => $value) {
  1171. $this->_write($fp, $key, $value);
  1172. }
  1173. @fputs($fp, ");");
  1174. @fclose($fp);
  1175. return true;
  1176. }
  1177. return false;
  1178. }
  1179. /**
  1180. * Writes config pair
  1181. *
  1182. * @param resource $fp
  1183. * @param string $key
  1184. * @param mixed $value
  1185. */
  1186. function _write($fp, $key, $value) {
  1187. @fputs($fp, str_repeat("\t", $this->_tabs));
  1188. if (is_numeric($key) && (string) (int) $key === (string) $key) {
  1189. @fputs($fp, sprintf("%d => ", $key));
  1190. } else {
  1191. @fputs($fp, sprintf("'%s' => ", addcslashes($key, "'\\")));
  1192. }
  1193. switch (gettype($value)) {
  1194. case 'object':
  1195. case 'array':
  1196. @fputs($fp, "array(\r\n");
  1197. ++$this->_tabs;
  1198. foreach ((array) $value as $k => $v) {
  1199. $this->_write($fp, $k, $v);
  1200. }
  1201. --$this->_tabs;
  1202. @fputs($fp, sprintf("%s),\r\n", str_repeat("\t", $this->_tabs)));
  1203. return;
  1204. case 'integer':
  1205. $data = (string) $value;
  1206. break;
  1207. case 'double':
  1208. $data = (string) $value;
  1209. break;
  1210. case 'boolean':
  1211. $data = ($value ? 'true' : 'false');
  1212. break;
  1213. case 'NULL':
  1214. $data = 'null';
  1215. break;
  1216. default:
  1217. case 'string':
  1218. $data = "'" . addcslashes($value, "'\\") . "'";
  1219. break;
  1220. }
  1221. @fputs($fp, $data . ",\r\n");
  1222. }
  1223. /**
  1224. * Loads config
  1225. *
  1226. * @param boolean $preview
  1227. * @return boolean
  1228. */
  1229. function load($preview = null) {
  1230. if ($preview === null) {
  1231. $preview = w3_is_preview_mode();
  1232. }
  1233. if ($preview) {
  1234. return $this->read(W3TC_CONFIG_PREVIEW_PATH);
  1235. }
  1236. return $this->read(W3TC_CONFIG_PATH);
  1237. }
  1238. /**
  1239. * Loads master config (for WPMU)
  1240. */
  1241. function load_master() {
  1242. return $this->read(W3TC_CONFIG_MASTER_PATH);
  1243. }
  1244. /**
  1245. * Loads config dfefaults
  1246. */
  1247. function load_defaults() {
  1248. foreach ($this->_defaults as $key => $value) {
  1249. $this->set($key, $value);
  1250. }
  1251. }
  1252. /**
  1253. * Set default option on plugin activate
  1254. */
  1255. function set_defaults() {
  1256. $this->set('pgcache.enabled', true);
  1257. $this->set('pgcache.cache.ssl', false);
  1258. $this->set('minify.auto', true);
  1259. $this->set('browsercache.enabled', true);
  1260. }
  1261. /**
  1262. * Saves config
  1263. *
  1264. * @param boolean preview
  1265. * @return boolean
  1266. */
  1267. function save($preview = null) {
  1268. if ($preview === null) {
  1269. $preview = w3_is_preview_mode();
  1270. }
  1271. if ($preview) {
  1272. return $this->write(W3TC_CONFIG_PREVIEW_PATH);
  1273. }
  1274. return $this->write(W3TC_CONFIG_PATH);
  1275. }
  1276. }