Config.php 20 KB

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