* @author Romain Quetiez * @author Denis Flaven * @license http://www.opensource.org/licenses/gpl-3.0.html LGPL */ if (!defined('__DIR__')) define('__DIR__', dirname(__FILE__)); require_once(__DIR__.'/../approot.inc.php'); require_once(APPROOT.'/application/application.inc.php'); require_once(APPROOT.'/application/nicewebpage.class.inc.php'); require_once(APPROOT.'/application/csvpage.class.inc.php'); require_once(APPROOT.'/application/xmlpage.class.inc.php'); require_once(APPROOT.'/application/startup.inc.php'); require_once(APPROOT.'/application/loginwebpage.class.inc.php'); LoginWebPage::DoLogin(); // Check user rights and prompt if needed ApplicationContext::SetUrlMakerClass('iTopStandardURLMaker'); $sOperation = utils::ReadParam('operation', 'menu'); $oAppContext = new ApplicationContext(); $iActiveNodeId = utils::ReadParam('menu', -1); $currentOrganization = utils::ReadParam('org_id', ''); // Main program $sExpression = utils::ReadParam('expression', '', true /* Allow CLI */, 'raw_data'); $sFormat = strtolower(utils::ReadParam('format', 'html')); $sFields = utils::ReadParam('fields', '', true, 'raw_data'); // CSV field list (allows to specify link set attributes, still not taken into account for XML export) $aFields = explode(',', $sFields); // Clean the list of columns (empty it if every string is empty) foreach($aFields as $index => $sField) { $aFields[$index] = trim($sField); if(strlen($aFields[$index]) == 0) { unset($aFields[$index]); } } $oP = null; if (!empty($sExpression)) { try { $oFilter = DBObjectSearch::FromOQL($sExpression); if ($oFilter) { $oSet = new CMDBObjectSet($oFilter); switch($sFormat) { case 'html': $oP = new NiceWebPage("iTop - Export"); // The HTML output is made for pages located in the /pages/ folder // since this page is in a different folder, let's adjust the HTML 'base' attribute // to make the relative hyperlinks in the page work $sUrl = utils::GetAbsoluteUrlAppRoot(); $oP->set_base($sUrl.'pages/'); if(count($aFields) > 0) { $iSearch = array_search('id', $aFields); if ($iSearch !== false) { $bViewLink = true; unset($aFields[$iSearch]); } else { $bViewLink = false; } $sFields = implode(',', $aFields); $aExtraParams = array('menu' => false, 'display_limit' => false, 'zlist' => false, 'extra_fields' => $sFields, 'view_link' => $bViewLink); } else { $aExtraParams = array('menu' => false, 'display_limit' => false, 'zlist' => 'details'); } $oResultBlock = new DisplayBlock($oFilter, 'list', false, $aExtraParams); $oResultBlock->Display($oP, 'expresult'); break; case 'csv': $oP = new CSVPage("iTop - Export"); $sFields = implode(',', $aFields); cmdbAbstractObject::DisplaySetAsCSV($oP, $oSet, array('fields' => $sFields)); break; case 'xml': $oP = new XMLPage("iTop - Export", true /* passthrough */); cmdbAbstractObject::DisplaySetAsXML($oP, $oSet); break; default: $oP = new WebPage("iTop - Export"); $oP->add("Unsupported format '$sFormat'. Possible values are: html, csv or xml."); } } } catch(Exception $e) { $oP = new WebPage("iTop - Export"); $oP->p("Error the query can not be executed."); $oP->p($e->GetHtmlDesc()); } } if (!$oP) { // Display a short message about how to use this page $oP = new WebPage("iTop - Export"); $oP->p("General purpose export page."); $oP->p("Parameters:"); $oP->p(""); } $oP->output(); ?>