Config.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607
  1. <?php
  2. /**
  3. * require define(APP_PATH_CONFIG)
  4. *
  5. * Config file name format:
  6. ** po "-" zawsze $host ($_SERVER['SERVER_NAME']), inne "--"
  7. ** main config file
  8. * .cnf.ini.php
  9. * .cnf-{$host}.ini.php
  10. ** special $config_file
  11. * .cnf--{$config_file}.ini.php
  12. * .cnf--{$config_file}-{$host}.ini.php
  13. **** eg. "external_ids":
  14. * .cnf--external_ids.ini.php
  15. * .cnf--external_ids-{$host}.ini.php
  16. **** eg. $config_file = zasob_{$ID}
  17. * .cnf--zasob_{$ID}.ini.php - config file for zasob $ZASOB_ID
  18. * .cnf--zasob_{$ID}-{$host}.ini.php - config file for zasob $ZASOB_ID on host
  19. **** eg. $config_file = column_init_{$ID}
  20. * .cnf--column_init_{$table}.ini.php - config file for column
  21. * .cnf--column_init_{$table}-{$host}.ini.php - config file for column on host
  22. *
  23. * TODO: dziedziczenie plikow na podstawie hosta - kropki? dla hosta www2.biall.com.pl i www.biall.com.pl dziedziczy po: biall.com.pl
  24. *
  25. * If conf file not found '.cnf*.ini.php' then try to find file '.cnf*.inc.php'
  26. *
  27. * Struktura pliku .cnf*.ini.php
  28. ;<?php
  29. ;die(); // For further security
  30. ;// @COMMENT
  31. foo="bar"
  32. [section1]
  33. foo1="bar1"
  34. * parse_ini_file( file, true ) # true - process_sections
  35. Array
  36. (
  37. [foo] => bar
  38. [section1] => Array
  39. (
  40. [foo1] => bar1
  41. )
  42. )
  43. *
  44. * Struktura pliku .cnf*.inc.php
  45. <?php
  46. return function ($secret = '') {
  47. if ('secret-p5-password' !== $secret) return null;
  48. $conf = [
  49. 'host' => "",
  50. // ...
  51. ];
  52. return $conf;
  53. };
  54. */
  55. class Config {
  56. public static function get($key, $section = null) {
  57. static $_main_config;
  58. if ($_main_config === null) {
  59. $_main_config = self::getConfFile();
  60. }
  61. if ($key == 'get-all-data') {
  62. return $_main_config;
  63. }
  64. $cur_conf = $_main_config;
  65. if ($section !== null) {
  66. $cur_conf = V::get($section, null, $_main_config);
  67. }
  68. return V::get($key, null, $cur_conf);
  69. }
  70. public static function getData() {
  71. return self::get('get-all-data');
  72. }
  73. /**
  74. * Search for zasob config ini file.
  75. * Config file name must contain zasob_{$ID} for example:
  76. * .cnf--zasob_{$ID}.ini.php - config file for zasob $ZASOB_ID
  77. * .cnf--zasob_{$ID}-{$host}.ini.php - config file for zasob $ZASOB_ID on host
  78. */
  79. public static function getZasobConf($zasob_id) {
  80. return self::getConfFile("zasob_{$zasob_id}");
  81. }
  82. /**
  83. * Search for zasob config ini file.
  84. */
  85. public static function getColumnConf($col) {
  86. return self::getConfFile("column_init_{$col}");
  87. }
  88. public static function generateDefaultDbConfigFile($params = [], $outputFormat = 'ini') {
  89. if (empty($params['database'])) throw new Exception("Missing database name");
  90. if (empty($params['password'])) throw new Exception("Missing password");
  91. if (!in_array($outputFormat, ['ini', 'inc'])) throw new Exception("Not implemented outputFormat = '{$outputFormat}'");
  92. $conf = [
  93. 'type' => "mysql",
  94. 'host' => "127.0.0.1",
  95. 'port' => "3306",
  96. 'user' => "root",
  97. 'pass' => $params['password'],
  98. 'database' => $params['database'],
  99. 'zasob_id' => "2",
  100. ];
  101. return ('inc' == $outputFormat)
  102. ? implode("\n", array_merge(
  103. [
  104. '<?php',
  105. 'return function ($secret = "") {',
  106. "\t" . 'if ("secret-p5-password" !== $secret) return null;',
  107. "\t" . '$conf = [];',
  108. ],
  109. self::convertVariableToConfigIncContent($conf, $varName = '$conf'),
  110. [
  111. "\t" . 'return $conf;',
  112. '};',
  113. ]
  114. ))
  115. : implode("\n", array_merge(
  116. [
  117. ';<?php',
  118. ';die(); // For further security',
  119. ';// default DB',
  120. '',
  121. ],
  122. self::convertVariableToConfigIniContent($conf, $varName = '$conf'),
  123. [ '' ]
  124. ))
  125. ;
  126. }
  127. public static function generateDefaultLdapConfigFile($params = [], $outputFormat = 'ini') {
  128. if (empty($params['user'])) throw new Exception("Missing user");
  129. if (empty($params['pass'])) throw new Exception("Missing pass");
  130. if (empty($params['base_dn'])) throw new Exception("Missing base_dn");
  131. if (!in_array($outputFormat, ['ini', 'inc'])) throw new Exception("Not implemented outputFormat = '{$outputFormat}'");
  132. $conf = [
  133. 'version' => "3",
  134. 'host' => "127.0.0.1",
  135. // 'port' => "3306",
  136. 'user' => $params['user'],
  137. 'pass' => $params['pass'],
  138. 'base_dn' => $params['base_dn'],
  139. ];
  140. return ('inc' == $outputFormat)
  141. ? implode("\n", array_merge(
  142. [
  143. '<?php',
  144. 'return function ($secret = "") {',
  145. "\t" . 'if ("secret-p5-password" !== $secret) return null;',
  146. "\t" . '$conf = [];',
  147. ],
  148. self::convertVariableToConfigIncContent($conf, $varName = '$conf'),
  149. [
  150. "\t" . 'return $conf;',
  151. '};',
  152. ]
  153. ))
  154. : implode("\n", array_merge(
  155. [
  156. ';<?php',
  157. ';die(); // For further security',
  158. ';// default LDAP',
  159. '',
  160. ],
  161. self::convertVariableToConfigIniContent($conf, $varName = '$conf'),
  162. [ '' ]
  163. ))
  164. ;
  165. }
  166. public static function generateDefaultFoldersConfigFile($params = [], $outputFormat = 'ini') {
  167. if (empty($params['remote_folder_root'])) throw new Exception("Missing remote_folder_root");
  168. if (empty($params['server_address'])) throw new Exception("Missing server_address");
  169. if (!in_array($outputFormat, ['ini', 'inc'])) throw new Exception("Not implemented outputFormat = '{$outputFormat}'");
  170. $conf = [
  171. 'root_points' => [
  172. 'mount_point' => "/Library/Server/Web/Data/Sites/Default/PLIKI/{$params['remote_folder_root']}",
  173. 'share_point' => "//{$params['server_address']}/{$params['remote_folder_root']}",
  174. 'www_share_point' => "https://{$params['server_address']}/PLIKI/{$params['remote_folder_root']}",
  175. ],
  176. 'm_dist_files_types' => [
  177. 'ARTYKUL' => "ARTYKUL",
  178. 'CERT_CE' => "CERT_CE",
  179. 'CERTYFIKAT' => "CERTYFIKAT",
  180. 'DEKLARACJA' => "DEKLARACJA",
  181. 'DOKUMENTACJA' => "DOKUMENTACJA",
  182. 'DOK_POWYK' => "DOK_POWYK",
  183. 'DRUK' => "DRUK",
  184. // 'ETYKIETA' => "ETYKIETA",
  185. 'FAKTURA' => "FAKTURA",
  186. 'FIRMWARE' => "FIRMWARE",
  187. // 'INSTRUKCJA' => "INSTRUKCJA",
  188. // 'INSTRUKCJA_PL' => "INSTRUKCJA_PL",
  189. // 'INSTRUKCJA_PL_DRUK' => "INSTRUKCJA_PL_DRUK",
  190. // 'KARTA' => "KARTA",
  191. 'INNE' => "INNE",
  192. 'INSTRUKCJA' => "INSTRUKCJA",
  193. 'KARTA_GWARANCYJNA' => "KARTA_GWARANCYJNA",
  194. // 'KOMPLETACJA' => "KOMPLETACJA",
  195. 'LIST_PRZEWOZ' => "LIST_PRZEWOZ",
  196. 'NOTATKA' => "NOTATKA",
  197. 'OFERTA' => "OFERTA",
  198. // 'OVERLAY' => "OVERLAY",
  199. 'PISMO' => "PISMO",
  200. 'POLISA' => "POLISA",
  201. 'PREZENTACJA' => "PREZENTACJA",
  202. 'PROJEKT' => "PROJEKT",
  203. 'PROJEKT_BUD' => "PROJEKT_BUD",
  204. 'PROJEKT_GRAF' => "PROJEKT_GRAF",
  205. 'PROTOKOL' => "PROTOKOL",
  206. 'PROTOK_ODB_TOWAR' => "PROTOK_ODB_TOWAR",
  207. 'REKLAMACJA' => "REKLAMACJA",
  208. 'RYS_TECHNICZNY' => "RYS_TECHNICZNY",
  209. 'SPEC_WYROBU' => "SPEC_WYROBU",
  210. 'SOFT_CD' => "SOFT_CD",
  211. 'SWIAD_JAKOSCI' => "SWIAD_JAKOSCI",
  212. 'TODO' => "TODO",
  213. 'UMOWA' => "UMOWA",
  214. 'UCHWALA' => "UCHWALA",
  215. 'UCHWALA_WWW' => "UCHWALA_WWW",
  216. 'UZGODNIENIE' => "UZGODNIENIE",
  217. 'WEZW_DO_ZAPL' => "WEZW_DO_ZAPL",
  218. 'WWW_DOKUMENTY' => "WWW_DOKUMENTY",
  219. 'WWW_PRACA' => "WWW_PRACA",
  220. 'WZORZEC' => "WZORZEC",
  221. 'WNIOSEK' => "WNIOSEK",
  222. 'WNIOSEK_URLOP' => "WNIOSEK_URLOP",
  223. 'WYD_MAGAZYN' => "WYD_MAGAZYN",
  224. 'WYCENA' => "WYCENA",
  225. 'ZDJECIE' => "ZDJECIE",
  226. 'ZDJECIE_HI' => "ZDJECIE_HI",
  227. 'ZWOLNIENIE_LEK' => "ZWOLNIENIE_LEK",
  228. 'ZAMOWIENIE' => "ZAMOWIENIE",
  229. ],
  230. 'default_COLUMN' => [
  231. 'mount_point' => "default",
  232. 'share_point' => "default",
  233. 'www_share_point' => "default",
  234. 'LOOKAT_NEGFILE_LOOK_REGEX' => "/<VARNAME>./",
  235. 'LOOKAT_NEGFILE_VARNAME' => "ID",
  236. 'LOOKAT_FOLDER_LOOK_REGEX' => "/../",
  237. 'LOOKAT_FOLDER_VARNAME' => "ID",
  238. 'DEST_FOLDER_M_DIST_FILES_INDEXNAME' => "ID",
  239. ],
  240. 'ADMIN_USERS_COLUMN' => [
  241. 'mount_point' => "ADMIN_USERS",
  242. 'share_point' => "ADMIN_USERS",
  243. 'www_share_point' => "ADMIN_USERS",
  244. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  245. 'LOOKAT_FOLDER_VARNAME' => "ID",
  246. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  247. 'DEST_FOLDER_VARNAME1' => "ID",
  248. 'DEST_FOLDER_VARNAME2' => "ADM_NAME",
  249. ],
  250. 'CRM_LISTA_ZASOBOW_COLUMN' => [
  251. 'mount_point' => "DRUKI",
  252. 'share_point' => "DRUKI",
  253. 'www_share_point' => "DRUKI",
  254. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  255. 'LOOKAT_FOLDER_VARNAME' => "ID",
  256. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  257. 'DEST_FOLDER_VARNAME1' => "ID",
  258. 'DEST_FOLDER_VARNAME2' => "DESC",
  259. ],
  260. 'CRM_LISTA_ZASOBOW_COLUMN' => [
  261. 'mount_point' => "DRUKI",
  262. 'share_point' => "DRUKI",
  263. 'www_share_point' => "DRUKI",
  264. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  265. 'LOOKAT_FOLDER_VARNAME' => "ID",
  266. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  267. 'DEST_FOLDER_VARNAME1' => "ID",
  268. 'DEST_FOLDER_VARNAME2' => "DESC",
  269. ],
  270. 'CRM_PROCES_COLUMN' => [
  271. 'mount_point' => "CRM_PROCES",
  272. 'share_point' => "CRM_PROCES",
  273. 'www_share_point' => "CRM_PROCES",
  274. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  275. 'LOOKAT_FOLDER_VARNAME' => "ID",
  276. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  277. 'DEST_FOLDER_VARNAME1' => "ID",
  278. 'DEST_FOLDER_VARNAME2' => "DESC",
  279. ],
  280. 'QUALITY_NOTICES_COLUMN' => [
  281. 'mount_point' => "QUALITY_NOTICES",
  282. 'share_point' => "QUALITY_NOTICES",
  283. 'www_share_point' => "QUALITY_NOTICES",
  284. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  285. 'LOOKAT_FOLDER_VARNAME' => "ID",
  286. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  287. 'DEST_FOLDER_VARNAME1' => "ID",
  288. 'DEST_FOLDER_VARNAME2' => "ID_PROCES",
  289. ],
  290. 'GRAFIK_PRACY_COLUMN' => [
  291. 'mount_point' => "GRAFIK_PRACY",
  292. 'share_point' => "GRAFIK_PRACY",
  293. 'www_share_point' => "GRAFIK_PRACY",
  294. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  295. 'LOOKAT_FOLDER_VARNAME' => "ID",
  296. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  297. 'DEST_FOLDER_VARNAME1' => "ID",
  298. 'DEST_FOLDER_VARNAME2' => "DATE",
  299. 'DEST_FOLDER_VARNAME3' => "L_APPOITMENT_USER",
  300. ],
  301. 'PROBLEMS_COLUMN' => [
  302. 'mount_point' => "PROBLEMS",
  303. 'share_point' => "PROBLEMS",
  304. 'www_share_point' => "PROBLEMS",
  305. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  306. 'LOOKAT_FOLDER_VARNAME' => "ID",
  307. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  308. 'DEST_FOLDER_VARNAME1' => "ID",
  309. 'DEST_FOLDER_VARNAME2' => "A_PROBLEM_DESC",
  310. ],
  311. 'BUILDINGS_COLUMN' => [
  312. 'mount_point' => "BUILDINGS",
  313. 'share_point' => "BUILDINGS",
  314. 'www_share_point' => "BUILDINGS",
  315. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  316. 'LOOKAT_FOLDER_VARNAME' => "ID",
  317. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  318. 'DEST_FOLDER_VARNAME1' => "ID",
  319. 'DEST_FOLDER_VARNAME2' => "S_ADDRESS_STREET",
  320. ],
  321. 'IN7_MK_BAZA_DYSTRYBUCJI_COLUMN' => [
  322. 'mount_point' => "PROJEKTY",
  323. 'share_point' => "PROJEKTY",
  324. 'www_share_point' => "PROJEKTY",
  325. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  326. 'LOOKAT_FOLDER_VARNAME' => "ID",
  327. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>",
  328. 'DEST_FOLDER_VARNAME1' => "ID",
  329. 'DEST_FOLDER_VARNAME2' => "M_DIST_DESC",
  330. ],
  331. 'IN7_DZIENNIK_KORESP_COLUMN' => [
  332. 'mount_point' => "PISMA",
  333. 'share_point' => "PISMA",
  334. 'www_share_point' => "PISMA",
  335. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  336. 'LOOKAT_FOLDER_VARNAME' => "ID",
  337. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>-<VARNAME3>",
  338. 'DEST_FOLDER_VARNAME1' => "ID",
  339. 'DEST_FOLDER_VARNAME2' => "K_OD_KOGO",
  340. 'DEST_FOLDER_VARNAME3' => "K_ZAWARTOS",
  341. ],
  342. 'DEVICES_COLUMN' => [
  343. 'mount_point' => "DEVICES",
  344. 'share_point' => "DEVICES",
  345. 'www_share_point' => "DEVICES",
  346. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  347. 'LOOKAT_FOLDER_VARNAME' => "ID",
  348. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.<VARNAME2>_<VARNAME3>",
  349. 'DEST_FOLDER_VARNAME1' => "ID",
  350. 'DEST_FOLDER_VARNAME2' => "T_PRODUCER",
  351. 'DEST_FOLDER_VARNAME3' => "S_HW",
  352. ],
  353. 'WIZJE_LOKALNE_COLUMN' => [
  354. 'mount_point' => "WIZJE_LOKALNE",
  355. 'share_point' => "WIZJE_LOKALNE",
  356. 'www_share_point' => "WIZJE_LOKALNE",
  357. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  358. 'LOOKAT_FOLDER_VARNAME' => "ID",
  359. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.WIZJE_LOKALNE<VARNAME2>",
  360. 'DEST_FOLDER_VARNAME1' => "ID",
  361. 'DEST_FOLDER_VARNAME2' => "A_RECORD_CREATE_DATE",
  362. ],
  363. 'SCANS_COLUMN' => [
  364. 'mount_point' => "SKANY",
  365. 'share_point' => "SKANY",
  366. 'www_share_point' => "SKANY",
  367. ],
  368. 'WMS_LAYERS_COLUMN' => [
  369. 'mount_point' => "WMS_LAYERS",
  370. 'share_point' => "WMS_LAYERS",
  371. 'www_share_point' => "WMS_LAYERS",
  372. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>",
  373. 'LOOKAT_FOLDER_VARNAME' => "ID",
  374. 'DEST_FOLDER_FORMAT' => "<VARNAME1>",
  375. 'DEST_FOLDER_VARNAME1' => "ID",
  376. ],
  377. 'MK_Rewiry_COLUMN' => [
  378. 'mount_point' => "MK_Rewiry",
  379. 'share_point' => "MK_Rewiry",
  380. 'www_share_point' => "MK_Rewiry",
  381. 'LOOKAT_FOLDER_LOOK_GLOB' => "<VARNAME>.*",
  382. 'LOOKAT_FOLDER_VARNAME' => "ID",
  383. 'DEST_FOLDER_FORMAT' => "<VARNAME1>.MK_Rewiry_<VARNAME2>",
  384. 'DEST_FOLDER_VARNAME1' => "ID",
  385. 'DEST_FOLDER_VARNAME2' => "NAZWA_REWI",
  386. ],
  387. 'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_COLUMN' => [
  388. 'mount_point' => "BI_audit_POWIAZANIA",
  389. 'share_point' => "BI_audit_POWIAZANIA",
  390. 'www_share_point' => "BI_audit_POWIAZANIA",
  391. 'LOOKAT_FOLDER_LOOK_GLOB' => "BI_audit_POWIAZANIA.<VARNAME>",
  392. 'LOOKAT_FOLDER_VARNAME' => "ID",
  393. 'DEST_FOLDER_FORMAT' => "BI_audit_POWIAZANIA.<VARNAME1>",
  394. 'DEST_FOLDER_VARNAME1' => "ID",
  395. ],
  396. 'BI_audit_KW_requested_COLUMN' => [
  397. 'mount_point' => "BI_audit_KW_requested",
  398. 'share_point' => "BI_audit_KW_requested",
  399. 'www_share_point' => "BI_audit_KW_requested",
  400. 'LOOKAT_FOLDER_LOOK_GLOB' => "BI_audit_KW_requested.<VARNAME>",
  401. 'LOOKAT_FOLDER_VARNAME' => "ID",
  402. 'DEST_FOLDER_FORMAT' => "BI_audit_KW_requested.<VARNAME1>",
  403. 'DEST_FOLDER_VARNAME1' => "ID",
  404. ],
  405. 'BI_audit_BENFORD_COLUMN' => [
  406. 'mount_point' => "BI_audit_BENFORD",
  407. 'share_point' => "BI_audit_BENFORD",
  408. 'www_share_point' => "BI_audit_BENFORD",
  409. 'LOOKAT_FOLDER_LOOK_GLOB' => "BI_audit_BENFORD.<VARNAME>",
  410. 'LOOKAT_FOLDER_VARNAME' => "ID",
  411. 'DEST_FOLDER_FORMAT' => "BI_audit_BENFORD.<VARNAME1>",
  412. 'DEST_FOLDER_VARNAME1' => "ID",
  413. ],
  414. 'BI_audit_VALIDATE_COLUMN' => [
  415. 'mount_point' => "BI_audit_VALIDATE",
  416. 'share_point' => "BI_audit_VALIDATE",
  417. 'www_share_point' => "BI_audit_VALIDATE",
  418. 'LOOKAT_FOLDER_LOOK_GLOB' => "BI_audit_VALIDATE.<VARNAME>",
  419. 'LOOKAT_FOLDER_VARNAME' => "ID",
  420. 'DEST_FOLDER_FORMAT' => "BI_audit_VALIDATE.<VARNAME1>",
  421. 'DEST_FOLDER_VARNAME1' => "ID",
  422. ],
  423. ];
  424. return ('inc' == $outputFormat)
  425. ? implode("\n", array_merge(
  426. [
  427. '<?php',
  428. 'return function ($secret = "") {',
  429. "\t" . 'if ("secret-p5-password" !== $secret) return null;',
  430. "\t" . '$conf = [];',
  431. ],
  432. self::convertVariableToConfigIncContent($conf, $varName = '$conf'),
  433. [
  434. "\t" . 'return $conf;',
  435. '};',
  436. ]
  437. ))
  438. : implode("\n", array_merge(
  439. [
  440. ';<?php',
  441. ';die(); // For further security',
  442. '',
  443. ],
  444. self::convertVariableToConfigIniContent($conf, $varName = '$conf'),
  445. [ '' ]
  446. ))
  447. ;
  448. }
  449. public static function convertVariableToConfigIniContent($conf = [], $varName = '$conf') {
  450. $ini = [];
  451. foreach ($conf as $key => $val) {
  452. if (is_array($val)) {
  453. $ini[] = "[\"{$key}\"]";
  454. foreach ($val as $subKey => $subVal) {
  455. if (is_scalar($subVal)) {
  456. $ini[] = "{$subKey}=\"{$subVal}\"";
  457. } else {
  458. throw new Exception("Config ini bug ({$key}/{$subKey})");
  459. }
  460. }
  461. $ini[] = "";
  462. } else if (is_scalar($val)) {
  463. $ini[] = "{$key}=\"{$val}\"";
  464. } else {
  465. throw new Exception("Config ini bug ({$key})");
  466. }
  467. }
  468. return $ini;
  469. }
  470. public static function convertVariableToConfigIncContent($conf = [], $varName = '$conf') {
  471. $inc = [];
  472. foreach ($conf as $key => $val) {
  473. if (is_array($val)) {
  474. $inc[] = "\t{$varName}[\"{$key}\"] = [];";
  475. foreach ($val as $subKey => $subVal) {
  476. if (is_scalar($subVal)) {
  477. $inc[] = "\t{$varName}[\"{$key}\"][\"{$subKey}\"] = \"{$subVal}\";";
  478. } else {
  479. throw new Exception("Config inc bug ({$key}/{$subKey})");
  480. }
  481. }
  482. $ini[] = "";
  483. } else if (is_scalar($val)) {
  484. $inc[] = "\t{$varName}[\"{$key}\"] = \"{$val}\";";
  485. } else {
  486. throw new Exception("Config inc bug ({$key})");
  487. }
  488. }
  489. return $inc;
  490. }
  491. /**
  492. * Search for config ini file.
  493. * TODO: $conf_file == '' - main config file
  494. */
  495. public static function getConfFile($conf_file = '') {
  496. static $_cnf;
  497. if (!is_array($_cnf)) $_cnf = array();
  498. if (array_key_exists($conf_file, $_cnf)) {
  499. return $_cnf[$conf_file];
  500. }
  501. $_cnf[$conf_file] = null;
  502. $cnf = null;
  503. $file_prefix = '.cnf';
  504. if ($conf_file != '') $file_prefix .= '--'.$conf_file;
  505. $file_suffix = '.ini.php';
  506. $search_for_files = array();// kolejka includowania plikow
  507. $host = $_SERVER['SERVER_NAME'];
  508. $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . '-' . $host . $file_suffix;
  509. // dziedziczenie - subdomain np. www.biall.com.pl i www2.biall.com.pl -> biall.com.pl
  510. $host_subdomain_exp = explode('.', $host);
  511. $host_subdomain = reset($host_subdomain_exp);
  512. $host_parent = substr($host, strlen($host_subdomain . '.'));
  513. $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . '-' . $host_parent . $file_suffix;
  514. $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . $file_suffix;
  515. foreach ($search_for_files as $f) {
  516. if (1 == V::get('DBG_CNF', '', $_GET)) { echo "f(" . end(explode('/',$f)) . ")=(" . file_exists($f) . ")"; }
  517. if (file_exists($f)) {
  518. Lib::loadClass('Core_Config_INI');
  519. $cnf = new Core_Config_INI($f);
  520. $_cnf[$conf_file] = $cnf->getData();
  521. break;
  522. }
  523. }
  524. try {
  525. if (empty($_cnf[$conf_file])) {
  526. $file_suffix = '.inc.php';
  527. $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . '-' . $host . $file_suffix;
  528. $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . '-' . $host_parent . $file_suffix;
  529. $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . $file_suffix;
  530. foreach ($search_for_files as $f) {
  531. if (1 == V::get('DBG_CNF', '', $_GET)) { echo "f(" . end(explode('/',$f)) . ")=(" . file_exists($f) . ")"; }
  532. if (file_exists($f)) {
  533. $fun = include $f;
  534. if (!is_callable($fun)) throw new Exception("Config func is not callable");
  535. $_cnf[$conf_file] = $fun('secret-p5-password');
  536. if (null === $_cnf[$conf_file]) throw new Exception("Config error");
  537. break;
  538. }
  539. }
  540. }
  541. } catch (Exception $e) {
  542. DBG::log($e);
  543. }
  544. return $_cnf[$conf_file];
  545. }
  546. /**
  547. * activeProject - SE/projects/{activeProject}/
  548. * may be set by ENV or in CRM_CONFIG
  549. */
  550. public static function getProjectName() {
  551. static $_activeProject = null;
  552. if (null !== $_activeProject) return $_activeProject;
  553. $activeProject = V::get('P5_ACTIVE_PROJECT', '', $_SERVER);
  554. DBG::log("\$activeProject = '{$activeProject}' (ENV)");
  555. if ($activeProject) {
  556. $path = APP_PATH_ROOT . DS . "projects" . DS . "{$activeProject}";
  557. if (!file_exists($path)) throw new Exception("Missing project folder '{$activeProject}' (env)");
  558. }
  559. if (!$activeProject) {
  560. $activeProject = DB::getPDO()->fetchValue(" select c.CONF_VAL from CRM_CONFIG c where c.CONF_KEY = 'activeProject' ");
  561. if ($activeProject) {
  562. $path = APP_PATH_ROOT . DS . "projects" . DS . "{$activeProject}";
  563. if (!file_exists($path)) throw new Exception("Missing project folder '{$activeProject}' (db)");
  564. }
  565. }
  566. DBG::log("\$activeProject = '{$activeProject}' (ENV, DB)");
  567. $_activeProject = (string)$activeProject;
  568. return $_activeProject;
  569. }
  570. public static function getProjectPath() {
  571. $activeProject = self::getProjectName();
  572. if (!$activeProject) return null;
  573. return APP_PATH_ROOT . DS . "projects" . DS . "{$activeProject}";
  574. }
  575. }