diff --git a/pages/UI.php b/pages/UI.php index 434fec3eac..5741e11d0f 100644 --- a/pages/UI.php +++ b/pages/UI.php @@ -503,15 +503,7 @@ function DisplayMultipleSelectionForm($oP, $oFilter, $sNextOperation, $oChecker, $oBlock->Display($oP, 1, $aExtraParams); $oP->add("  \n"); $oP->add("\n"); - $oP->add_ready_script( -<<add_ready_script("$('#1 table.listResults').trigger('check_all');"); } /*********************************************************************************** @@ -743,7 +735,7 @@ try $oP->add("\n"); $oLeafsFilter->AddCondition('id', $aLeafs, 'IN'); $oBlock = new DisplayBlock($oLeafsFilter, 'list', false); - $oBlock->Display($oP, $iBlock++); + $oBlock->Display($oP, $iBlock++, array('table_id' => 'global_search')); $oP->P(' '); // Some space ? } } diff --git a/pages/ajax.render.php b/pages/ajax.render.php index 2788828bda..0cd6ef9d07 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -30,6 +30,7 @@ require_once(APPROOT.'/application/ajaxwebpage.class.inc.php'); require_once(APPROOT.'/application/wizardhelper.class.inc.php'); require_once(APPROOT.'/application/ui.linkswidget.class.inc.php'); require_once(APPROOT.'/application/ui.extkeywidget.class.inc.php'); +require_once(APPROOT.'/application/datatable.class.inc.php'); try { @@ -51,13 +52,22 @@ try switch($operation) { + case 'datatable': case 'pagination': $oPage->SetContentType('text/html'); - $sExtraParams = stripslashes(utils::ReadParam('extra_param', '', false, 'raw_data')); - $aExtraParams = array(); - if (!empty($sExtraParams)) + $extraParams = utils::ReadParam('extra_param', '', false, 'raw_data'); + if (is_array($extraParams)) { - $aExtraParams = json_decode(str_replace("'", '"', $sExtraParams), true /* associative array */); + $aExtraParams = $extraParams; + } + else + { + $sExtraParams = stripslashes($extraParams); + $aExtraParams = array(); + if (!empty($sExtraParams)) + { + $aExtraParams = json_decode(str_replace("'", '"', $sExtraParams), true /* associative array */); + } } if ($sEncoding == 'oql') { @@ -72,91 +82,124 @@ try $iSortCol = utils::ReadParam('sort_col','null'); $sSelectMode = utils::ReadParam('select_mode', ''); $bDisplayKey = utils::ReadParam('display_key', 'true') == 'true'; - $aList = utils::ReadParam('display_list', array()); - $sClassName = $oFilter->GetClass(); + $aColumns = utils::ReadParam('columns', array(), false, 'raw_data'); + $aClassAliases = utils::ReadParam('class_aliases', array()); + $iListId = utils::ReadParam('list_id', 0); //$aList = cmdbAbstractObject::FlattenZList(MetaModel::GetZListItems($sClassName, 'list')); // Filter the list to removed linked set since we are not able to display them here $aOrderBy = array(); - $aConfig = array(); $iSortIndex = 0; - if ($sSelectMode != '') + + $aColumnsLoad = array(); + foreach($aClassAliases as $sAlias => $sClassName) { - $aConfig['form::select'] = array(); - $iSortIndex++; // Take into account the extra (non-sortable) column for the checkbox/radio button. - } - if ($bDisplayKey) - { - $aConfig['key'] = array(); - if (($iSortCol != 'null') && ($iSortIndex == $iSortCol)) + $aColumnsLoad[$sAlias] = array(); + foreach($aColumns[$sAlias] as $sAttCode => $aData) { - $aOrderBy['friendlyname'] = (utils::ReadParam('sort_order', 'asc') == 'asc'); - } - $iSortIndex++; - } - foreach($aList as $sAttCode) - { - $aConfig[$sAttCode] = array(); - } - - foreach($aList as $index => $sAttCode) - { - $oAttDef = MetaModel::GetAttributeDef($sClassName, $sAttCode); - if ($oAttDef instanceof AttributeLinkedSet) - { - // Removed from the display list - unset($aList[$index]); - } - if ($iSortCol == $iSortIndex) - { - if ($oAttDef->IsExternalKey()) + if ($aData['checked'] == 'true') { - $sSortCol = $sAttCode.'_friendlyname'; + $aColumns[$sAlias][$sAttCode]['checked'] = true; + if ($sAttCode == '_key_') + { + if ($iSortCol == $iSortIndex) + { + $aOrderBy['friendlyname'] = (utils::ReadParam('sort_order', 'asc') == 'asc'); + } + } + else + { + $oAttDef = MetaModel::GetAttributeDef($sClassName, $sAttCode); + if ($oAttDef instanceof AttributeLinkedSet) + { + // Removed from the display list + unset($aColumns[$sAlias][$sAttCode]); + } + else + { + $aColumnsLoad[$sAlias][] = $sAttCode; + } + if ($iSortCol == $iSortIndex) + { + if ($oAttDef->IsExternalKey()) + { + $sSortCol = $sAttCode.'_friendlyname'; + } + else + { + $sSortCol = $sAttCode; + } + $aOrderBy[$sSortCol] = (utils::ReadParam('sort_order', 'asc') == 'asc'); + } + } + $iSortIndex++; } else { - $sSortCol = $sAttCode; + $aColumns[$sAlias][$sAttCode]['checked'] = false; } - $aOrderBy[$sSortCol] = (utils::ReadParam('sort_order', 'asc') == 'asc'); } - $iSortIndex++; + } // Load only the requested columns $oSet = new DBObjectSet($oFilter, $aOrderBy, $aExtraParams, null, $iEnd-$iStart, $iStart); - $sClassAlias = $oSet->GetFilter()->GetClassAlias(); - $oSet->OptimizeColumnLoad(array($sClassAlias => $aList)); - - while($oObj = $oSet->Fetch()) + $oSet->OptimizeColumnLoad($aColumnsLoad); + + $oDataTable = new DataTable($iListId, $oSet, $oSet->GetSelectedClasses()); + if ($operation == 'datatable') { - $aRow = array(); - $sDisabled = ''; - switch ($sSelectMode) - { - case 'single': - $aRow['form::select'] = "GetKey()."\">"; - break; - - case 'multiple': - $aRow['form::select'] = "GetKey()."\">"; - break; - } - if ($bDisplayKey) - { - $aRow['key'] = $oObj->GetHyperLink(); - } - $sHilightClass = $oObj->GetHilightClass(); - if ($sHilightClass != '') - { - $aRow['@class'] = $sHilightClass; - } - foreach($aList as $sAttCode) - { - $aRow[$sAttCode] = $oObj->GetAsHTML($sAttCode); - } - $sRow = $oPage->GetTableRow($aRow, $aConfig); - $oPage->add($sRow); + // Redraw the whole table + $sHtml = $oDataTable->UpdatePager($oPage, $iEnd-$iStart, $iStart); // Set the default page size + $sHtml .= $oDataTable->GetHTMLTable($oPage, $aColumns, $sSelectMode, $iEnd-$iStart, $bDisplayKey, $aExtraParams); } + else + { + // redraw just the needed rows + $sHtml = $oDataTable->GetAsHTMLTableRows($oPage, $iEnd-$iStart, $aColumns, $sSelectMode, $bDisplayKey, $aExtraParams); + } + $oPage->add($sHtml); + break; + + case 'datatable_save_settings': + $iPageSize = utils::ReadParam('page_size', 10); + $sTableId = utils::ReadParam('table_id', null, false, 'raw_data'); + $bSaveAsDefaults = (utils::ReadParam('defaults', 'true') == 'true'); + $aClassAliases = utils::ReadParam('class_aliases', array(), false, 'raw_data'); + $aColumns = utils::ReadParam('columns', array(), false, 'raw_data'); + + foreach($aColumns as $sAlias => $aList) + { + foreach($aList as $sAttCode => $aData) + { + $aColumns[$sAlias][$sAttCode]['checked'] = ($aData['checked'] == 'true'); + $aColumns[$sAlias][$sAttCode]['disabled'] = ($aData['disabled'] == 'true'); + } + } + + $oSettings = new DataTableSettings($aClassAliases, $sTableId); + $oSettings->iDefaultPageSize = $iPageSize; + $oSettings->aColumns = $aColumns; + + if ($bSaveAsDefaults) + { + $bRet = $oSettings->SaveAsDefault(); + } + else + { + $bRet = $oSettings->Save(); + } + $oPage->add($bRet ? 'Ok' : 'KO'); + break; + + case 'datatable_reset_settings': + $sTableId = utils::ReadParam('table_id', null, false, 'raw_data'); + $aClassAliases = utils::ReadParam('class_aliases', array(), false, 'raw_data'); + $bResetAll = (utils::ReadParam('defaults', 'true') == 'true'); + + $oSettings = new DataTableSettings($aClassAliases, $sTableId); + $bRet = $oSettings->ResetToDefault($bResetAll); + $oPage->add($bRet ? 'Ok' : 'KO'); break; // ui.linkswidget