bar [section1] => Array ( [foo1] => bar1 ) ) * * Struktura pliku .cnf*.inc.php "", // ... ]; return $conf; }; */ class Config { public static function get($key, $section = null) { static $_main_config; if ($_main_config === null) { $_main_config = self::getConfFile(); } if ($key == 'get-all-data') { return $_main_config; } $cur_conf = $_main_config; if ($section !== null) { $cur_conf = V::get($section, null, $_main_config); } return V::get($key, null, $cur_conf); } public static function getData() { return self::get('get-all-data'); } /** * Search for zasob config ini file. * Config file name must contain zasob_{$ID} for example: * .cnf--zasob_{$ID}.ini.php - config file for zasob $ZASOB_ID * .cnf--zasob_{$ID}-{$host}.ini.php - config file for zasob $ZASOB_ID on host */ public static function getZasobConf($zasob_id) { return self::getConfFile("zasob_{$zasob_id}"); } /** * Search for zasob config ini file. */ public static function getColumnConf($col) { return self::getConfFile("column_init_{$col}"); } public static function generateDefaultDbConfigFile($params = [], $outputFormat = 'ini') { if (empty($params['database'])) throw new Exception("Missing database name"); if (empty($params['password'])) throw new Exception("Missing password"); if (!in_array($outputFormat, ['ini', 'inc'])) throw new Exception("Not implemented outputFormat = '{$outputFormat}'"); $conf = [ 'type' => "mysql", 'host' => "127.0.0.1", 'port' => "3306", 'user' => "root", 'pass' => $params['password'], 'database' => $params['database'], 'zasob_id' => "2", ]; return ('inc' == $outputFormat) ? implode("\n", array_merge( [ ' "3", 'host' => "127.0.0.1", // 'port' => "3306", 'user' => $params['user'], 'pass' => $params['pass'], 'base_dn' => $params['base_dn'], ]; return ('inc' == $outputFormat) ? implode("\n", array_merge( [ ' [ 'mount_point' => "/Library/Server/Web/Data/Sites/Default/PLIKI/{$params['remote_folder_root']}", 'share_point' => "//{$params['server_address']}/{$params['remote_folder_root']}", 'www_share_point' => "https://{$params['server_address']}/PLIKI/{$params['remote_folder_root']}", ], 'm_dist_files_types' => [ 'ARTYKUL' => "ARTYKUL", 'CERT_CE' => "CERT_CE", 'CERTYFIKAT' => "CERTYFIKAT", 'DEKLARACJA' => "DEKLARACJA", 'DOKUMENTACJA' => "DOKUMENTACJA", 'DOK_POWYK' => "DOK_POWYK", 'DRUK' => "DRUK", // 'ETYKIETA' => "ETYKIETA", 'FAKTURA' => "FAKTURA", 'FIRMWARE' => "FIRMWARE", // 'INSTRUKCJA' => "INSTRUKCJA", // 'INSTRUKCJA_PL' => "INSTRUKCJA_PL", // 'INSTRUKCJA_PL_DRUK' => "INSTRUKCJA_PL_DRUK", // 'KARTA' => "KARTA", 'INNE' => "INNE", 'INSTRUKCJA' => "INSTRUKCJA", 'KARTA_GWARANCYJNA' => "KARTA_GWARANCYJNA", // 'KOMPLETACJA' => "KOMPLETACJA", 'LIST_PRZEWOZ' => "LIST_PRZEWOZ", 'NOTATKA' => "NOTATKA", 'OFERTA' => "OFERTA", // 'OVERLAY' => "OVERLAY", 'PISMO' => "PISMO", 'POLISA' => "POLISA", 'PREZENTACJA' => "PREZENTACJA", 'PROJEKT' => "PROJEKT", 'PROJEKT_BUD' => "PROJEKT_BUD", 'PROJEKT_GRAF' => "PROJEKT_GRAF", 'PROTOKOL' => "PROTOKOL", 'PROTOK_ODB_TOWAR' => "PROTOK_ODB_TOWAR", 'REKLAMACJA' => "REKLAMACJA", 'RYS_TECHNICZNY' => "RYS_TECHNICZNY", 'SPEC_WYROBU' => "SPEC_WYROBU", 'SOFT_CD' => "SOFT_CD", 'SWIAD_JAKOSCI' => "SWIAD_JAKOSCI", 'TODO' => "TODO", 'UMOWA' => "UMOWA", 'UCHWALA' => "UCHWALA", 'UCHWALA_WWW' => "UCHWALA_WWW", 'UZGODNIENIE' => "UZGODNIENIE", 'WEZW_DO_ZAPL' => "WEZW_DO_ZAPL", 'WWW_DOKUMENTY' => "WWW_DOKUMENTY", 'WWW_PRACA' => "WWW_PRACA", 'WZORZEC' => "WZORZEC", 'WNIOSEK' => "WNIOSEK", 'WNIOSEK_URLOP' => "WNIOSEK_URLOP", 'WYD_MAGAZYN' => "WYD_MAGAZYN", 'WYCENA' => "WYCENA", 'ZDJECIE' => "ZDJECIE", 'ZDJECIE_HI' => "ZDJECIE_HI", 'ZWOLNIENIE_LEK' => "ZWOLNIENIE_LEK", 'ZAMOWIENIE' => "ZAMOWIENIE", ], 'default_COLUMN' => [ 'mount_point' => "default", 'share_point' => "default", 'www_share_point' => "default", 'LOOKAT_NEGFILE_LOOK_REGEX' => "/./", 'LOOKAT_NEGFILE_VARNAME' => "ID", 'LOOKAT_FOLDER_LOOK_REGEX' => "/../", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_M_DIST_FILES_INDEXNAME' => "ID", ], 'ADMIN_USERS_COLUMN' => [ 'mount_point' => "ADMIN_USERS", 'share_point' => "ADMIN_USERS", 'www_share_point' => "ADMIN_USERS", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "ADM_NAME", ], 'CRM_LISTA_ZASOBOW_COLUMN' => [ 'mount_point' => "DRUKI", 'share_point' => "DRUKI", 'www_share_point' => "DRUKI", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "DESC", ], 'CRM_LISTA_ZASOBOW_COLUMN' => [ 'mount_point' => "DRUKI", 'share_point' => "DRUKI", 'www_share_point' => "DRUKI", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "DESC", ], 'CRM_PROCES_COLUMN' => [ 'mount_point' => "CRM_PROCES", 'share_point' => "CRM_PROCES", 'www_share_point' => "CRM_PROCES", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "DESC", ], 'QUALITY_NOTICES_COLUMN' => [ 'mount_point' => "QUALITY_NOTICES", 'share_point' => "QUALITY_NOTICES", 'www_share_point' => "QUALITY_NOTICES", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "ID_PROCES", ], 'GRAFIK_PRACY_COLUMN' => [ 'mount_point' => "GRAFIK_PRACY", 'share_point' => "GRAFIK_PRACY", 'www_share_point' => "GRAFIK_PRACY", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "DATE", 'DEST_FOLDER_VARNAME3' => "L_APPOITMENT_USER", ], 'PROBLEMS_COLUMN' => [ 'mount_point' => "PROBLEMS", 'share_point' => "PROBLEMS", 'www_share_point' => "PROBLEMS", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "A_PROBLEM_DESC", ], 'BUILDINGS_COLUMN' => [ 'mount_point' => "BUILDINGS", 'share_point' => "BUILDINGS", 'www_share_point' => "BUILDINGS", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "S_ADDRESS_STREET", ], 'IN7_MK_BAZA_DYSTRYBUCJI_COLUMN' => [ 'mount_point' => "PROJEKTY", 'share_point' => "PROJEKTY", 'www_share_point' => "PROJEKTY", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "M_DIST_DESC", ], 'IN7_DZIENNIK_KORESP_COLUMN' => [ 'mount_point' => "PISMA", 'share_point' => "PISMA", 'www_share_point' => "PISMA", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".-", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "K_OD_KOGO", 'DEST_FOLDER_VARNAME3' => "K_ZAWARTOS", ], 'DEVICES_COLUMN' => [ 'mount_point' => "DEVICES", 'share_point' => "DEVICES", 'www_share_point' => "DEVICES", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => "._", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "T_PRODUCER", 'DEST_FOLDER_VARNAME3' => "S_HW", ], 'WIZJE_LOKALNE_COLUMN' => [ 'mount_point' => "WIZJE_LOKALNE", 'share_point' => "WIZJE_LOKALNE", 'www_share_point' => "WIZJE_LOKALNE", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".WIZJE_LOKALNE", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "A_RECORD_CREATE_DATE", ], 'SCANS_COLUMN' => [ 'mount_point' => "SKANY", 'share_point' => "SKANY", 'www_share_point' => "SKANY", ], 'WMS_LAYERS_COLUMN' => [ 'mount_point' => "WMS_LAYERS", 'share_point' => "WMS_LAYERS", 'www_share_point' => "WMS_LAYERS", 'LOOKAT_FOLDER_LOOK_GLOB' => "", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => "", 'DEST_FOLDER_VARNAME1' => "ID", ], 'MK_Rewiry_COLUMN' => [ 'mount_point' => "MK_Rewiry", 'share_point' => "MK_Rewiry", 'www_share_point' => "MK_Rewiry", 'LOOKAT_FOLDER_LOOK_GLOB' => ".*", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => ".MK_Rewiry_", 'DEST_FOLDER_VARNAME1' => "ID", 'DEST_FOLDER_VARNAME2' => "NAZWA_REWI", ], 'BI_audit_ENERGA_RUM_KONTRAHENCI_POWIAZANIA_COLUMN' => [ 'mount_point' => "BI_audit_POWIAZANIA", 'share_point' => "BI_audit_POWIAZANIA", 'www_share_point' => "BI_audit_POWIAZANIA", 'LOOKAT_FOLDER_LOOK_GLOB' => "BI_audit_POWIAZANIA.", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => "BI_audit_POWIAZANIA.", 'DEST_FOLDER_VARNAME1' => "ID", ], 'BI_audit_KW_requested_COLUMN' => [ 'mount_point' => "BI_audit_KW_requested", 'share_point' => "BI_audit_KW_requested", 'www_share_point' => "BI_audit_KW_requested", 'LOOKAT_FOLDER_LOOK_GLOB' => "BI_audit_KW_requested.", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => "BI_audit_KW_requested.", 'DEST_FOLDER_VARNAME1' => "ID", ], 'BI_audit_BENFORD_COLUMN' => [ 'mount_point' => "BI_audit_BENFORD", 'share_point' => "BI_audit_BENFORD", 'www_share_point' => "BI_audit_BENFORD", 'LOOKAT_FOLDER_LOOK_GLOB' => "BI_audit_BENFORD.", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => "BI_audit_BENFORD.", 'DEST_FOLDER_VARNAME1' => "ID", ], 'BI_audit_VALIDATE_COLUMN' => [ 'mount_point' => "BI_audit_VALIDATE", 'share_point' => "BI_audit_VALIDATE", 'www_share_point' => "BI_audit_VALIDATE", 'LOOKAT_FOLDER_LOOK_GLOB' => "BI_audit_VALIDATE.", 'LOOKAT_FOLDER_VARNAME' => "ID", 'DEST_FOLDER_FORMAT' => "BI_audit_VALIDATE.", 'DEST_FOLDER_VARNAME1' => "ID", ], ]; return ('inc' == $outputFormat) ? implode("\n", array_merge( [ ' $val) { if (is_array($val)) { $ini[] = "[\"{$key}\"]"; foreach ($val as $subKey => $subVal) { if (is_scalar($subVal)) { $ini[] = "{$subKey}=\"{$subVal}\""; } else { throw new Exception("Config ini bug ({$key}/{$subKey})"); } } $ini[] = ""; } else if (is_scalar($val)) { $ini[] = "{$key}=\"{$val}\""; } else { throw new Exception("Config ini bug ({$key})"); } } return $ini; } public static function convertVariableToConfigIncContent($conf = [], $varName = '$conf') { $inc = []; foreach ($conf as $key => $val) { if (is_array($val)) { $inc[] = "\t{$varName}[\"{$key}\"] = [];"; foreach ($val as $subKey => $subVal) { if (is_scalar($subVal)) { $inc[] = "\t{$varName}[\"{$key}\"][\"{$subKey}\"] = \"{$subVal}\";"; } else { throw new Exception("Config inc bug ({$key}/{$subKey})"); } } $ini[] = ""; } else if (is_scalar($val)) { $inc[] = "\t{$varName}[\"{$key}\"] = \"{$val}\";"; } else { throw new Exception("Config inc bug ({$key})"); } } return $inc; } /** * Search for config ini file. * TODO: $conf_file == '' - main config file */ public static function getConfFile($conf_file = '') { static $_cnf; if (!is_array($_cnf)) $_cnf = array(); if (array_key_exists($conf_file, $_cnf)) { return $_cnf[$conf_file]; } $_cnf[$conf_file] = null; $cnf = null; $file_prefix = '.cnf'; if ($conf_file != '') $file_prefix .= '--'.$conf_file; $file_suffix = '.ini.php'; $search_for_files = array();// kolejka includowania plikow $host = $_SERVER['SERVER_NAME']; $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . '-' . $host . $file_suffix; // dziedziczenie - subdomain np. www.biall.com.pl i www2.biall.com.pl -> biall.com.pl $host_subdomain_exp = explode('.', $host); $host_subdomain = reset($host_subdomain_exp); $host_parent = substr($host, strlen($host_subdomain . '.')); $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . '-' . $host_parent . $file_suffix; $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . $file_suffix; foreach ($search_for_files as $f) { if (1 == V::get('DBG_CNF', '', $_GET)) { echo "f(" . end(explode('/',$f)) . ")=(" . file_exists($f) . ")"; } if (file_exists($f)) { Lib::loadClass('Core_Config_INI'); $cnf = new Core_Config_INI($f); $_cnf[$conf_file] = $cnf->getData(); break; } } try { if (empty($_cnf[$conf_file])) { $file_suffix = '.inc.php'; $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . '-' . $host . $file_suffix; $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . '-' . $host_parent . $file_suffix; $search_for_files[] = APP_PATH_CONFIG . DS . $file_prefix . $file_suffix; foreach ($search_for_files as $f) { if (1 == V::get('DBG_CNF', '', $_GET)) { echo "f(" . end(explode('/',$f)) . ")=(" . file_exists($f) . ")"; } if (file_exists($f)) { $fun = include $f; if (!is_callable($fun)) throw new Exception("Config func is not callable"); $_cnf[$conf_file] = $fun('secret-p5-password'); if (null === $_cnf[$conf_file]) throw new Exception("Config error"); break; } } } } catch (Exception $e) { DBG::log($e); } return $_cnf[$conf_file]; } /** * activeProject - SE/projects/{activeProject}/ * may be set by ENV or in CRM_CONFIG */ public static function getProjectName() { static $_activeProject = null; if (null !== $_activeProject) return $_activeProject; $activeProject = V::get('P5_ACTIVE_PROJECT', '', $_SERVER); DBG::log("\$activeProject = '{$activeProject}' (ENV)"); if ($activeProject) { $path = APP_PATH_ROOT . DS . "projects" . DS . "{$activeProject}"; if (!file_exists($path)) throw new Exception("Missing project folder '{$activeProject}' (env)"); } if (!$activeProject) { $activeProject = DB::getPDO()->fetchValue(" select c.CONF_VAL from CRM_CONFIG c where c.CONF_KEY = 'activeProject' "); if ($activeProject) { $path = APP_PATH_ROOT . DS . "projects" . DS . "{$activeProject}"; if (!file_exists($path)) throw new Exception("Missing project folder '{$activeProject}' (db)"); } } DBG::log("\$activeProject = '{$activeProject}' (ENV, DB)"); $_activeProject = (string)$activeProject; return $_activeProject; } public static function getProjectPath() { $activeProject = self::getProjectName(); if (!$activeProject) return null; return APP_PATH_ROOT . DS . "projects" . DS . "{$activeProject}"; } }