public function displayValues($content_node, $transient_options, $action)
 {
     if (!($mainNode = $this->template->appendFileByNode('swiss_svs_lists.html', 'div', $content_node)) instanceof DOMNode || !($listNode = $this->template->getElementByName('lists', 0, $mainNode)) instanceof DOMNode) {
         return false;
     }
     $publish_text = 'Publish a new version';
     $retrieve_text = 'Retrieve the most recent version';
     $edit_text = 'Edit %s configuration';
     $other_text = 'Other Versions:';
     $based_on_form_text = 'Based on the list %s';
     I2CE::getConfig()->setIfIsSet($publish_text, "/modules/SVS/messages/publish");
     I2CE::getConfig()->setIfIsSet($retrieve_text, "/modules/SVS/messages/retrieve");
     I2CE::getConfig()->setIfIsSet($edit_text, "/modules/SVS/messages/edit");
     I2CE::getConfig()->setIfIsSet($other_text, "/modules/SVS/messages/other");
     I2CE::getConfig()->setIfIsSet($based_on_form_text, "/modules/SVS/messages/basd_on_form_style");
     foreach ($this->storage->getKeys() as $oid) {
         if (!($swissChild = $this->getChild($oid)) instanceof I2CE_Swiss_SVS) {
             continue;
         }
         $form = $swissChild->getField('list');
         $id = 'list_' . $oid;
         $listNode->appendChild($liNode = $this->template->createElement('li'));
         $liNode->appendChild($spanNode = $this->template->createElement('span', array('id' => $id)));
         $spanNode->appendChild($aNode = $this->template->createElement('a', array('id' => $id . '_link')));
         $aNode->appendChild($this->template->createElement('h3', array(), sprintf($edit_text, $oid)));
         if ($form) {
             $spanNode->appendChild($pNode = $this->template->createElement('p', array(), sprintf($based_on_form_text, $form)));
         }
         $spanNode->appendChild($divNode = $this->template->createElement('div', array('id' => $id . '_ajax', 'class' => 'indented')));
         $spanNode->appendChild($linkDivNode = $this->template->createElement('div', array('class' => 'indented')));
         $publish = I2CE_Page::getAccessedBaseURL() . '/SVS/publish?id=' . $oid;
         $retrieve = I2CE_Page::getAccessedBaseURL() . '/SVS/RetrieveValueSet?id=' . $oid;
         $linkDivNode->appendChild($this->template->createElement('a', array('href' => $publish), $publish_text));
         $linkDivNode->appendChild($this->template->createElement('br'));
         $versions = iHRIS_SVS::getVersions($oid);
         if (count($versions) > 0) {
             $linkDivNode->appendChild($this->template->createElement('a', array('href' => $retrieve), $retrieve_text));
             $linkDivNode->appendChild($this->template->createElement('br'));
             $linkDivNode->appendChild($this->template->createTextNode($other_text));
             sort($versions);
             foreach ($versions as $i => $version) {
                 if ($i != 0) {
                     $linkDivNode->appendChild($this->template->createTextNode(','));
                 }
                 $linkDivNode->appendChild($this->template->createElement('a', array('href' => $retrieve . '&version=' . $version), " {$version} "));
             }
         }
         $linkDivNode->appendChild($this->template->createElement('pre', array(), $retrieve));
         $swissChild->addAjaxLink($id . '_link', 'contents', $id . '_ajax', $spanNode, $action, $transient_options);
     }
     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);
     }
 }
Пример #3
0
 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 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;
 }