public function GetHTMLTable(WebPage $oPage, $aColumns, $sSelectMode, $iPageSize, $bViewLink, $aExtraParams)
 {
     $iNbPages = $iPageSize < 1 ? 1 : ceil($this->iNbObjects / $iPageSize);
     if ($iPageSize < 1) {
         $iPageSize = -1;
         // convention: no pagination
     }
     $aAttribs = $this->GetHTMLTableConfig($aColumns, $sSelectMode, $bViewLink);
     $aValues = $this->GetHTMLTableValues($aColumns, $sSelectMode, $iPageSize, $bViewLink, $aExtraParams);
     $sHtml = $oPage->GetTable($aAttribs, $aValues);
     return $sHtml;
 }
 protected function GetHistoryTable(WebPage $oPage, DBObjectSet $oSet)
 {
     $sHtml = '';
     // First the latest change that the user is allowed to see
     $oSet->Rewind();
     // Reset the pointer to the beginning of the set
     $aChanges = array();
     while ($oChangeOp = $oSet->Fetch()) {
         $sChangeDescription = $oChangeOp->GetDescription();
         if ($sChangeDescription != '') {
             // The change is visible for the current user
             $changeId = $oChangeOp->Get('change');
             $aChanges[$changeId]['date'] = $oChangeOp->Get('date');
             $aChanges[$changeId]['userinfo'] = $oChangeOp->Get('userinfo');
             if (!isset($aChanges[$changeId]['log'])) {
                 $aChanges[$changeId]['log'] = array();
             }
             $aChanges[$changeId]['log'][] = $sChangeDescription;
         }
     }
     $aAttribs = array('date' => array('label' => Dict::S('UI:History:Date'), 'description' => Dict::S('UI:History:Date+')), 'userinfo' => array('label' => Dict::S('UI:History:User'), 'description' => Dict::S('UI:History:User+')), 'log' => array('label' => Dict::S('UI:History:Changes'), 'description' => Dict::S('UI:History:Changes+')));
     $aValues = array();
     foreach ($aChanges as $aChange) {
         $aValues[] = array('date' => $aChange['date'], 'userinfo' => htmlentities($aChange['userinfo'], ENT_QUOTES, 'UTF-8'), 'log' => "<ul><li>" . implode('</li><li>', $aChange['log']) . "</li></ul>");
     }
     $sHtml .= $oPage->GetTable($aAttribs, $aValues);
     return $sHtml;
 }
    public function GetHTMLTable(WebPage $oPage, $aColumns, $sSelectMode, $iPageSize, $bViewLink, $aExtraParams)
    {
        $iNbPages = $iPageSize < 1 ? 1 : ceil($this->iNbObjects / $iPageSize);
        if ($iPageSize < 1) {
            $iPageSize = -1;
            // convention: no pagination
        }
        $aAttribs = $this->GetHTMLTableConfig($aColumns, $sSelectMode, $bViewLink);
        $aValues = $this->GetHTMLTableValues($aColumns, $sSelectMode, $iPageSize, $bViewLink, $aExtraParams);
        $sHtml = '<table class="listContainer">';
        foreach ($this->oSet->GetFilter()->GetInternalParams() as $sName => $sValue) {
            $aExtraParams['query_params'][$sName] = $sValue;
        }
        $sHtml .= "<tr><td>";
        $sHtml .= $oPage->GetTable($aAttribs, $aValues);
        $sHtml .= '</td></tr>';
        $sHtml .= '</table>';
        $iCount = $this->iNbObjects;
        $aArgs = $this->oSet->GetArgs();
        $sExtraParams = addslashes(str_replace('"', "'", json_encode(array_merge($aExtraParams, $aArgs))));
        // JSON encode, change the style of the quotes and escape them
        $sSelectModeJS = '';
        $sHeaders = '';
        if ($sSelectMode == 'single' || $sSelectMode == 'multiple') {
            $sSelectModeJS = $sSelectMode;
            $sHeaders = 'headers: { 0: {sorter: false}},';
        }
        $sDisplayKey = $bViewLink ? 'true' : 'false';
        // Protect against duplicate elements in the Zlist
        $aUniqueOrderedList = array();
        foreach ($this->aClassAliases as $sAlias => $sClassName) {
            foreach ($aColumns[$sAlias] as $sAttCode => $aData) {
                if ($aData['checked']) {
                    $aUniqueOrderedList[$sAttCode] = true;
                }
            }
        }
        $aUniqueOrderedList = array_keys($aUniqueOrderedList);
        $sJSColumns = json_encode($aColumns);
        $sJSClassAliases = json_encode($this->aClassAliases);
        $sCssCount = isset($aExtraParams['cssCount']) ? ", cssCount: '{$aExtraParams['cssCount']}'" : '';
        $this->oSet->ApplyParameters();
        // Display the actual sort order of the table
        $aRealSortOrder = $this->oSet->GetRealSortOrder();
        $aDefaultSort = array();
        $iColOffset = 0;
        if ($sSelectMode == 'single' || $sSelectMode == 'multiple') {
            $iColOffset += 1;
        }
        if ($bViewLink) {
            //			$iColOffset += 1;
        }
        foreach ($aRealSortOrder as $sColCode => $bAscending) {
            $iPos = array_search($sColCode, $aUniqueOrderedList);
            if ($iPos !== false) {
                $aDefaultSort[] = "[" . ($iColOffset + $iPos) . "," . ($bAscending ? '0' : '1') . "]";
            } else {
                if (($iPos = array_search(preg_replace('/_friendlyname$/', '', $sColCode), $aUniqueOrderedList)) !== false) {
                    // if sorted on the friendly name of an external key, then consider it sorted on the column that shows the links
                    $aDefaultSort[] = "[" . ($iColOffset + $iPos) . "," . ($bAscending ? '0' : '1') . "]";
                } else {
                    if ($sColCode == 'friendlyname' && $bViewLink) {
                        $aDefaultSort[] = "[" . $iColOffset . "," . ($bAscending ? '0' : '1') . "]";
                    }
                }
            }
        }
        $sFakeSortList = '';
        if (count($aDefaultSort) > 0) {
            $sFakeSortList = '[' . implode(',', $aDefaultSort) . ']';
        }
        $sOQL = addslashes($this->oSet->GetFilter()->serialize());
        $oPage->add_ready_script(<<<EOF
var oTable = \$('#{$this->iListId} table.listResults');
oTable.tablesorter( { {$sHeaders} widgets: ['myZebra', 'truncatedList']} ).tablesorterPager({container: \$('#pager{$this->iListId}'), totalRows:{$iCount}, size: {$iPageSize}, filter: '{$sOQL}', extra_params: '{$sExtraParams}', select_mode: '{$sSelectModeJS}', displayKey: {$sDisplayKey}, columns: {$sJSColumns}, class_aliases: {$sJSClassAliases} {$sCssCount}});
EOF
);
        if ($sFakeSortList != '') {
            $oPage->add_ready_script("oTable.trigger(\"fakesorton\", [{$sFakeSortList}]);");
        }
        //if ($iNbPages == 1)
        if (false) {
            if (isset($aExtraParams['cssCount'])) {
                $sCssCount = $aExtraParams['cssCount'];
                if ($sSelectMode == 'single') {
                    $sSelectSelector = ":radio[name^=selectObj]";
                } else {
                    if ($sSelectMode == 'multiple') {
                        $sSelectSelector = ":checkbox[name^=selectObj]";
                    }
                }
                $oPage->add_ready_script(<<<EOF
\t\$('#{$this->iListId} table.listResults {$sSelectSelector}').change(function() {
\t\tvar c = \$('{$sCssCount}');\t\t\t\t\t\t\t
\t\tvar v = \$('#{$this->iListId} table.listResults {$sSelectSelector}:checked').length;
\t\tc.val(v);
\t\t\$('#{$this->iListId} .selectedCount').text(v);
\t\tc.trigger('change');\t
\t});
EOF
);
            }
        }
        return $sHtml;
    }