loadWSInfoFile()) throw new Exception('Error to load workspace info file.'); //Update WS if need if (!$this->update()) throw new Exception('Error during user workspace conversion.'); return TRUE; } public function update() { while (IHMUserWSManagerClass::$WS_VERSION > $this->wsInfo['version']) { $updateMethod = "updateFromVersion".$this->wsInfo['version']; if (method_exists($this,$updateMethod)) { if (!$this->{$updateMethod}()) { return FALSE; } } $this->wsInfo['version'] += 1; if (!$this->saveWSInfoFile()) { return FALSE; } } return TRUE; } private function loadWSInfoFile() { if (file_exists(IHMConfigClass::getUserWSInfoFilePath())) { $infoContent = file_get_contents(IHMConfigClass::getUserWSInfoFilePath()); if (empty($infoContent)) { return FALSE; } $this->wsInfo = json_decode($infoContent, TRUE); if (empty($this->wsInfo)) { return FALSE; } return TRUE; } //Init info file $this->wsInfo = array( "version" => 0, ); return $this->saveWSInfoFile(); } private function saveWSInfoFile() { if (empty($this->wsInfo)) { return FALSE; } $json_data = json_encode($this->wsInfo); if ($json_data === FALSE) { return FALSE; } return file_put_contents(IHMConfigClass::getUserWSInfoFilePath(),$json_data); } private function updateFromVersion2() { // Update WS for save statistic requests // Load user requests file $req_mgr_file_path = IHMConfigClass::getUserRequestManagerFilePath(); if (!file_exists($req_mgr_file_path)) { return TRUE; } $dom = new DOMDocument(); if (!$dom->load($req_mgr_file_path)) { return FALSE; } $statisticNodeTag = 'statisticList'; $statisticNodes = $dom->documentElement->getElementsByTagName($statisticNodeTag); // Id statistic root node already exists, nothing to do if ($statisticNodes->length > 0) { return TRUE; } // Create statistic root node $statisticNode = $dom->createElement($statisticNodeTag); $statisticNode->setAttribute('xml:id', 'statistic-treeRootNode'); $dom->documentElement->appendChild($statisticNode); return $dom->save($req_mgr_file_path); } private function updateFromVersion1() { // Update WS for save download requests // Load user requests file $req_mgr_file_path = IHMConfigClass::getUserRequestManagerFilePath(); if (!file_exists($req_mgr_file_path)) { return TRUE; } $dom = new DOMDocument(); if (!$dom->load($req_mgr_file_path)) { return FALSE; } $downloadNodeTag = 'downloadList'; $downloadNodes = $dom->documentElement->getElementsByTagName($downloadNodeTag); // Id download root node already exists, nothing to do if ($downloadNodes->length > 0) { return TRUE; } // Create download root node $downloadNode = $dom->createElement($downloadNodeTag); $downloadNode->setAttribute('xml:id', 'download-treeRootNode'); $dom->documentElement->appendChild($downloadNode); return $dom->save($req_mgr_file_path); } private function updateFromVersion0() { // This update split plot requests // Load user requests file $req_mgr_file_path = IHMConfigClass::getUserRequestManagerFilePath(); if (!file_exists($req_mgr_file_path)) { return TRUE; } $dom = new DOMDocument(); if (!$dom->load($req_mgr_file_path)) { return FALSE; } // Retrieve all plot requests and last request id $plot_requests = array(); $last_id = 0; foreach ($dom->getElementsByTagName('request') as $requestNode) { $request_id = $requestNode->getAttribute("xml:id"); $plot_requests[$request_id] = $requestNode; sscanf($request_id, "req_%d", $crt_id); if ($crt_id > $last_id) { $last_id = $crt_id; } } if (empty($plot_requests)) { //No plot requests return TRUE; } // Split requests $split_plot = array(); foreach ($plot_requests as $id => $node) { $req_data_path = IHMConfigClass::getStoredRequestPath() . $id; if (!file_exists($req_data_path)) { continue; } $req_data_content = file_get_contents($req_data_path); if (!$req_data_content) { continue; } $req_data_json = json_decode($req_data_content,TRUE); if (!$req_data_json) { continue; } if (array_key_exists("tabs", $req_data_json)) { $split_plot[$id] = array(); $tab_index = 1; foreach ($req_data_json["tabs"] as $tab) { $new_splitted_request = array_merge(array(), $tab); foreach (array_keys($req_data_json) as $key) { if (in_array($key, array('tabs', 'startDate', 'stopDate', 'durationDay', 'durationHour', 'durationMin', 'durationSec', 'durationMs'))) { continue; } $new_splitted_request[$key] = $req_data_json[$key]; } if (count($req_data_json["tabs"]) > 1) { if (!empty($new_splitted_request['tab-name'])) { $new_splitted_request['name'] .= ('_' . $new_splitted_request['tab-name']); } else { $new_splitted_request['name'] .= ('_Plot' . $tab_index); } } foreach (array("tab-name", "last-plotted-tab", "active-tab-id", "last-tab-id", "multi-plot-linked") as $key) { unset($new_splitted_request[$key]); } ++$last_id; $new_splitted_request['id'] = "req_".$last_id; file_put_contents(IHMConfigClass::getStoredRequestPath() . $new_splitted_request['id'], json_encode($new_splitted_request)); $split_plot[$id][$new_splitted_request['id']] = $new_splitted_request['name']; ++$tab_index; } } } if (!empty($split_plot)) { //Backup $backupPath = IHMConfigClass::getMigrationBackupPath($this->wsInfo['version']); copy($req_mgr_file_path, $backupPath.basename($req_mgr_file_path)); foreach ($split_plot as $old_key => $split) { $req_data_path = IHMConfigClass::getStoredRequestPath() . $old_key; copy($req_data_path, $backupPath.basename($req_data_path)); } //Apply split in user requests file + cleanup foreach ($split_plot as $old_key => $split) { $parentNode = $plot_requests[$old_key]->parentNode; $parentNode->removeChild($plot_requests[$old_key]); unlink(IHMConfigClass::getStoredRequestPath() . $old_key); foreach ($split as $new_key => $new_name) { $new_node = $dom->createElement("request"); $new_node->setAttribute("xml:id", $new_key); $new_node->setAttribute("name", $new_name); $parentNode->appendChild($new_node); } } $dom->save($req_mgr_file_path); } return TRUE; } }