user_has_rights() ) { if( $_SESSION[$_PAGE_INFO['id']]['recall_counter'] ) { // Return from call } else if (is_valid_action("version_new")) { // new item: generated temporary identifier as index in the array $t = gettimeofday(TRUE); $_SESSION[$_PAGE_INFO['id']]['version_id'] = "tmp_" . sprintf("%u%06u", $t, ($t - floor($t)) * 1000); $_SESSION[$_PAGE_INFO['id']]['version_info'] = array(); $_SESSION[$_PAGE_INFO['id']]['version_doc'] = array(); $_SESSION[$_PAGE_INFO['id']]['version_changelog'] = array(); $_SESSION[$_PAGE_INFO['id']]['version_changelog_doc'] = array(); // save the system component from system component page, or the search screen if( is_valid_call("system_component*") ) { $_SESSION[$_PAGE_INFO['id']]['version_info']['syscomp'] = $_SESSION[$_PAGE_INFO['id']]['syscomp_id']; } else { $_SESSION[$_PAGE_INFO['id']]['version_info']['syscomp'] = $_SESSION[$_PAGE_INFO['id']]['search']['s&o']['syscomp_id']; } if( is_valid_call("system_component*") ) { $_SESSION[$_PAGE_INFO['id']]['version_info']['device'] = $_SESSION[$_PAGE_INFO['id']]['syscomp_info']['device']; } } else if( is_valid_action("version_info","version_duplicate","version_change") ) { // get the identifier from either the command-line or the search screen if( isset($_GET['version_id']) ) { // set change log identifier from the URL $_SESSION[$_PAGE_INFO['id']]['version_id'] = decrypt($_GET['version_id'], "version_id_" . $_SESSION[$_PAGE_INFO['id']]['login']['user']['id']); } else { $_SESSION[$_PAGE_INFO['id']]['version_id'] = $_SESSION[$_PAGE_INFO['id']]['search']['s&o']['version_id']; } if (isset($_SESSION[$_PAGE_INFO['id']]['version_id'])) { if( is_valid_call("system_component_new","system_component_duplicate","system_component_change") && is_array($_SESSION[$_PAGE_INFO['id']]['syscomp_version'][$_SESSION[$_PAGE_INFO['id']]['version_id']]) ) { // version is stored in the system component info array $version = $_SESSION[$_PAGE_INFO['id']]['syscomp_version'][$_SESSION[$_PAGE_INFO['id']]['version_id']]; $version['id'] = $_SESSION[$_PAGE_INFO['id']]['version_id']; } else { $version = db_fetch_system_version($_SESSION[$_PAGE_INFO['id']]['version_id']); } if( $version ) { $_SESSION[$_PAGE_INFO['id']]['version_info'] = $version; // pre-fetch the documents and other uploads if( is_array($_SESSION[$_PAGE_INFO['id']]['syscomp_version_doc'][$version['id']]) ) { // version is stored in the system component info array $_SESSION[$_PAGE_INFO['id']]['version_doc'] = $_SESSION[$_PAGE_INFO['id']]['syscomp_version_doc'][$version['id']]; } else { // fetch the documents from the database $_SESSION[$_PAGE_INFO['id']]['version_doc'] = db_fetch_files($version['id'], "changelog_versie_documenten", FALSE, "ASC"); } // pre-fetch the change log items if( is_valid_call("system_component_new","system_component_duplicate","system_component_change") && is_array($_SESSION[$_PAGE_INFO['id']]['syscomp_version'][$version['id']]['changelog']) ) { if( is_valid_action("version_duplicate") ) { $_SESSION[$_PAGE_INFO['id']]['version_changelog'] = array(); foreach( $_SESSION[$_PAGE_INFO['id']]['syscomp_version'][$version['id']]['changelog'] as $change ) { // insert a copy of this change $change['id'] = "tmp_copy_" . $change['id']; $_SESSION[$_PAGE_INFO['id']]['version_changelog'][$change['id']] = $change; } // copy the documents $_SESSION[$_PAGE_INFO['id']]['version_changelog_doc'] = array(); foreach( $_SESSION[$_PAGE_INFO['id']]['syscomp_version'][$version['id']]['changelog_doc'] as $changelog_id => $documents ) { foreach( $documents as $doc ) { // insert a copy of the document $changelog_id = "tmp_copy_" . $changelog_id; $_SESSION[$_PAGE_INFO['id']]['version_changelog_doc'][$changelog_id][] = db_duplicate_file($doc); } } } else { $_SESSION[$_PAGE_INFO['id']]['version_changelog'] = $_SESSION[$_PAGE_INFO['id']]['syscomp_version'][$version['id']]['changelog']; $_SESSION[$_PAGE_INFO['id']]['version_changelog_doc'] = $_SESSION[$_PAGE_INFO['id']]['syscomp_version'][$version['id']]['changelog_doc']; } } else { $_SESSION[$_PAGE_INFO['id']]['version_changelog'] = array(); if( is_valid_action("version_duplicate") ) { $_SESSION[$_PAGE_INFO['id']]['version_changelog_doc'] = array(); } else { // change log documentation will be fetched when needed $_SESSION[$_PAGE_INFO['id']]['version_changelog_doc'] = NULL; } $changelog_items = db_fetch_version_changelog($version['id']); if( $changelog_items ) foreach( $changelog_items as $changelog_item ) { // save off the identifier; it will be replaced when the items are duplicated if( is_valid_action("version_duplicate") ) { $changelog_id = "tmp_copy_" . $changelog_item['id']; // fetch the documents for the original change $documents = db_fetch_files($changelog_item['id'], "changelog_versie_change_documenten", FALSE, "ASC"); // copy the documents for this change foreach( $documents as $doc ) { $_SESSION[$_PAGE_INFO['id']]['version_changelog_doc'][$changelog_id][] = db_duplicate_file($doc); } // clean-up unset($documents); // set the new, temporary identifier $changelog_item['id'] = $changelog_id; } $_SESSION[$_PAGE_INFO['id']]['version_changelog'][$changelog_item['id']] = $changelog_item; } // clean up unset($changelog_items); } if( is_valid_action("version_duplicate") ) { // the version identifier is invalid, as we are copying the original data $_SESSION[$_PAGE_INFO['id']]['version_id'] = "tmp_copy_" . $version['id']; // copy the documents $documents = $_SESSION[$_PAGE_INFO['id']]['version_doc']; $_SESSION[$_PAGE_INFO['id']]['version_doc'] = array(); foreach( $documents as $doc ) { $_SESSION[$_PAGE_INFO['id']]['version_doc'][] = db_duplicate_file($doc); } // clean-up unset($documents); } // clean-up unset($version); } else { // ID not valid!!! => Redirect back to search menu header("Location: ?id=" . $_PAGE_INFO['id'] . "&href=page/menu_version_search&action=" . current_action(TRUE)); trigger_error("Version ID not valid", E_USER_ERROR); } } else { // ID not selected header("Location: ?id=" . $_PAGE_INFO['id'] . "&href=page/menu_version_search&action=" . current_action(TRUE)); trigger_error("Version ID not set", E_USER_ERROR); } } // the version data is closely linked to the system component; fetch it // if not set (when this page is called bypassing 'syscomp_info') if( !is_valid_call("system_component*") ) { $_SESSION[$_PAGE_INFO['id']]['syscomp_info'] = db_fetch_system_component($_SESSION[$_PAGE_INFO['id']]['version_info']['syscomp']); } // Sort change log? if( is_valid_return("changelog_add") ) { function uasort_changelog($a,$b) { return $a['volgorde'] - $b['volgorde']; } uasort($_SESSION[$_PAGE_INFO['id']]['version_changelog'], "uasort_changelog"); } // Add calendar to header $extra_header_HTML = "\n"; // Show page header $y_position = (isset($_SESSION[$_PAGE_INFO['id']]['version_info']['y_position'])) ? ($_SESSION[$_PAGE_INFO['id']]['version_info']['y_position']) : 0; print_xml_header($y_position, $extra_header_HTML); // Include info content include("menu_version_info_content.php"); // Show page footer print_page_footer(); } else { // Redirect page back to login page force_logout(_("No valid rights"), "No rights for menu " . $page->menu . ": " . $page->rights); } ?>