Config.php 19 KB

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