public static function intialize_csd_cache_metadata($csd_cache, $lists = array(), $requested_oids = array(), $options = array()) { if (!I2CE_MagicDataNode::checkKey($csd_cache) || !is_array($lists)) { I2CE::raiseError("Badness on CSD cache metadata args"); return false; } if (!is_array($requested_oids)) { $requested_oids = array(); } if (!is_array($options)) { $options = array(); } $config = I2CE::getConfig(); if (!($svs_config = $config->traverse("/modules/SVS/lists", true, false)) instanceof I2CE_MagicDataNode) { I2CE::raiseError("bad SVS root node"); return false; } if (!($csd_cache_config = $config->traverse("/modules/csd_cache/" . $csd_cache . "/args", true, false)) instanceof I2CE_MagicDataNode) { I2CE::raiseError("bad csd_cache config node"); return false; } $site_module = 'ihris'; $config->setIfIsSet($site_module, '/config/site/module'); $source_uri = "http://localhost/" . $site_module; if (array_key_exists('HTTP_HOST', $_SERVER)) { $source_uri = I2CE_Page::getAccessedBaseURL(); } if (!is_array($oids = $csd_cache_config->getAsArray('svs_dependencies'))) { $oids = array(); } foreach ($lists as $list) { if (array_key_exists($list, $oids)) { continue; } if (array_key_exists($list, $requested_oids)) { $oids[$list] = $oid = $requested_oids[$list]; } else { $oids[$list] = $oid = iHRIS_CSDCache::generateUUIDasOID(); } if (!I2CE_MagicDataNode::checkKey($oid)) { I2CE::raiseError("Invalid OID: {$oid}"); return false; } if (array_key_exists($list, $options) && is_array($options[$list])) { $opts = $options[$list]; } else { $opts = array(); } $styles = iHRIS_SVS::getAvailableStyles($list); if (array_key_exists('code_style', $opts) && is_scalar($opts['code_style'])) { $code_style = $opts['code_style']; } else { $code_style = 'code'; } if (!in_array($code_style, $styles)) { $code_style = 'id'; } $definition = array('list' => $list, 'meta' => array('Source' => $site_module, 'SourceURI' => $source_uri, 'code_style' => $code_style, 'code_system' => $oid)); if (!($svs_list_config = $svs_config->traverse($oid, true, false)) instanceof I2CE_MagicDataNode) { I2CE::raiseError("Could not create MD for {$oid} at " . $svs_config->getPath()); return false; } $svs_list_config->setValue($definition); try { $svs = new iHRIS_SVS($oid); $svs->publishConceptList(); } catch (Exception $e) { I2CE::raiseError("Could not create SVS list on OID: {$oid}"); return false; } } $transform_vars = array('sourceDirectory' => $source_uri, 'rootProviderURN' => 'urn:ihris.org:' . $site_module . ':providers', 'rootFacilityURN' => 'urn:ihris.org:' . $site_module . ':facilities', 'rootOrganizationURN' => 'urn:ihris.org:' . $site_module . ':organizations', 'rootServicesURN' => 'urn:ihris.org:' . $site_module . ':services'); foreach ($lists as $list) { $transform_vars[$list . 'CodingScheme'] = $oids[$list]; } $csd_cache_config->svs_dependencies = $oids; foreach ($transform_vars as $key => $val) { I2CE::raiseError("Setting {$key} at " . $csd_cache_config->getPath()); if (!$csd_cache_config->__isset("transform_vars/" . $key)) { $csd_cache_config->transform_vars->{$key} = $val; } } return true; }
protected function action_get($action) { switch ($action) { case 'publish': $params = $this->loadRequestParameters(self::$retrieve_single); try { $svs = new iHRIS_SVS($params['id']); } catch (Exception $e) { I2CE::raiseError("Couldn't create SVS for {$params['id']}"); return false; } if (!$svs->publishConceptList($params['version'], $params['lang'])) { I2CE::raiseError("Couldn't publish SVS for {$params['id']}"); $this->userMessage("Could not publish Shared Value Set " . $params['id']); } else { $this->userMessage("Published Shared Value Set " . $params['id']); } $this->redirect($this->page . '/config'); return true; case 'RetrieveMultipleValueSets': $params = $this->loadRequestParameters(self::$retrieve_multi); if (!($svs_doc = $this->generateMultiDoc($params)) instanceof DOMDocument) { I2CE::raiseError("Could not retrieve multiples"); return false; } if ($errors = I2CE_Dumper::cleanlyEndOutputBuffers()) { I2CE::raiseError("Got errors:\n{$errors}"); } header('Content-Type: text/xml'); echo $svs_doc->saveXML(); exit(0); default: case 'RetrieveValueSet': $params = $this->loadRequestParameters(self::$retrieve_single); if (!is_string($svs = iHRIS_SVS::getPublishedConceptList($params['id'], $params['version'], $params['lang']))) { I2CE::raiseError("Couldn't retrieve SVS for {$params['id']} on version {$params['version']} language {$params['lang']}"); return false; } if ($errors = I2CE_Dumper::cleanlyEndOutputBuffers()) { I2CE::raiseError("Got errors:\n{$errors}"); } header('Content-Type: text/xml'); header('Content-Disposition: attachment; filename="' . $params['id'] . '.xml"'); echo $svs; exit(0); } }
protected function fixup_svs_oids() { if (!($all_svs_config = I2CE::getConfig()->traverse("/modules/SVS/lists", true, false)) instanceof I2CE_MagicDataNode || !($csd_config = I2CE::getConfig()->traverse("/modules/csd_cache/", false, false)) instanceof I2CE_MagicDataNode) { I2CE::raiseError("no SVS lists or CSD caches defined"); return true; } $oids = $all_svs_config->getKeys(); foreach ($oids as $oid) { if (!preg_match('/2\\.25[0-9]/', $oid)) { I2CE::raiseMessage("OID {$oid} looks OK. Skipping"); continue; } if (!($svs_config = $all_svs_config->traverse($oid, false, false)) instanceof I2CE_MagicDataNode) { I2CE::raiseMessage("Could not traverse to SVS with OID {$oid}"); continue; } $new_oid = '2.25.' . substr($oid, 4); $definition = $svs_config->getAsArray(); if (!is_array($definition) || array_key_exists('code_system', $definition)) { I2CE::raiseMessage("No code system set for SVS list {$oid}"); continue; } $defintion['code_system'] = $new_oid; if (!($svs_list_config = $all_svs_config->traverse($new_oid, true, false)) instanceof I2CE_MagicDataNode) { I2CE::raiseMessage("Could not create MD for {$new_oid} at " . $all_svs_config->getPath()); continue; } $svs_list_config->setValue($definition); try { $svs = new iHRIS_SVS($new_oid); $svs->publishConceptList(); } catch (Exception $e) { I2CE::raiseMessage("Could not create SVS list on OID: {$oid}"); continue; } $svs_config->erase(); } $csd_caches = $csd_config->getKeys(); foreach ($csd_caches as $csd_cache) { I2CE::raiseMessage("Examining CSD Cache {$csd_cache}"); if (!is_array($transform_vars = $csd_config->getAsArray($csd_cache . '/args/transform_vars')) || !($transform_vars_config = $csd_config->traverse($csd_cache . '/args/transform_vars', false, false)) instanceof I2CE_MagicDataNode) { I2CE::raiseMessage("No csd cache transform vars for {$csd_cache}"); continue; } foreach ($transform_vars as $transform_var => $val) { if (!preg_match('/CodingScheme$/', $transform_var) || !preg_match('/2\\.25[0-9]/', $val)) { I2CE::raiseMessage("Skipping {$transform_var} => {$val}"); continue; } $new_oid = '2.25.' . substr($val, 4); I2CE::raiseError("Changing {$transform_var} from {$val} to {$new_oid}"); $transform_vars_config->{$transform_var} = $new_oid; } } return true; }