/**
  * Static function for create list page
  * Read params from setting 
  * Create object of class in accordance with mode displaying page 
  */
 function &createListPage($table, $options)
 {
     global $bSubqueriesSupported, $strTableName, $conn, $locale_info, $isGroupSecurity;
     $gQuery = GetTableData($table, ".sqlquery", null);
     $params = array();
     $params = $options;
     $params['origTName'] = GetTableData($table, ".OriginalTable", '');
     $params['sessionPrefix'] = $strTableName;
     $params['tName'] = $table;
     $params['conn'] =& $conn;
     $params['gPageSize'] = GetTableData($table, ".pageSize", 0);
     $params['gOrderIndexes'] = GetTableData($table, ".orderindexes", array());
     $params['gstrOrderBy'] = GetTableData($table, ".strOrderBy", '');
     $params['gsqlHead'] = GetTableData($table, ".sqlHead", '');
     $params['gsqlFrom'] = GetTableData($table, ".sqlFrom", '');
     $params['gsqlWhereExpr'] = GetTableData($table, ".sqlWhereExpr", '');
     $params['gsqlGroupBy'] = $gQuery->GroupByToSql();
     $oHaving = $gQuery->Having();
     $params['gsqlHaving'] = $oHaving->toSql($gQuery);
     $params['locale_info'] =& $locale_info;
     $params["subQueriesSupp"] = $bSubqueriesSupported;
     $params['nSecOptions'] = GetTableData($table, ".nSecOptions", 0);
     $params['nLoginMethod'] = GetGlobalData("nLoginMethod", 0);
     $params['recsPerRowList'] = GetTableData($table, ".recsPerRowList", 0);
     $params['tableGroupBy'] = GetTableData($table, ".tableGroupBy", '');
     $params['dbType'] = GetGlobalData("dbType", 0);
     $params['mainTableOwnerID'] = GetTableData($table, ".mainTableOwnerID", '');
     $params['moveNext'] = GetTableData($table, ".moveNext", 0);
     $params['exportTo'] = GetTableData($table, ".exportTo", false);
     $params['printFriendly'] = GetTableData($table, ".printFriendly", false);
     $params['deleteRecs'] = GetTableData($table, ".delete", false);
     $params['rowHighlite'] = GetTableData($table, ".rowHighlite", false);
     $params["delFile"] = GetGlobalData("delFile", false);
     $params["isGroupSecurity"] = $isGroupSecurity;
     $params['arrKeyFields'] = GetTableData($table, ".arrKeyFields", array());
     $params["useIbox"] = GetTableData($table, ".useIbox", false);
     $params["isUseInlineAdd"] = GetTableData($table, ".isUseInlineAdd", false);
     $params["isUseInlineEdit"] = GetTableData($table, ".isUseInlineEdit", false);
     $params["isUseInlineJs"] = $params["isUseInlineAdd"] || $params["isUseInlineEdit"];
     $params["globSearchFields"] = GetTableData($table, ".globSearchFields", array());
     $params["panelSearchFields"] = GetTableData($table, ".panelSearchFields", array());
     $params['isVerLayout'] = GetTableData($table, ".isVerLayout", false);
     $params['isDisplayLoading'] = GetTableData($table, ".isDisplayLoading", false);
     $params['createLoginPage'] = GetGlobalData("createLoginPage", false);
     $params['subQueriesSupAccess'] = GetTableData($table, ".subQueriesSupAccess", false);
     $params['noRecordsFirstPage'] = GetTableData($table, ".noRecordsFirstPage", false);
     $params['totalsFields'] = GetTableData($table, ".totalsFields", array());
     $params['listIcons'] = GetTableData($table, ".listIcons", false);
     $params['edit'] = GetTableData($table, ".edit", false);
     $params['inlineEdit'] = GetTableData($table, ".inlineEdit", false);
     $params['iCopy'] = GetTableData($table, ".copy", false);
     $params['iView'] = GetTableData($table, ".view", false);
     $params['listAjax'] = GetTableData($table, ".listAjax", false);
     $params['arrRecsPerPage'] = GetTableData($table, ".arrRecsPerPage", array());
     $params['audit'] = GetAuditObject($table);
     $params['listFields'] = array();
     $allfields = GetFieldsList($table);
     foreach ($allfields as $f) {
         if (!AppearOnListPage($f, $table)) {
             continue;
         }
         $params['listFields'][] = array("fName" => $f, "goodFieldName" => GoodFieldName($f), "valueFieldName" => GoodFieldName($f) . "_value", "viewFormat" => GetFieldData($table, $f, "ViewFormat", ""), "editFormat" => GetFieldData($table, $f, "EditFormat", ""));
     }
     // choose class by mode
     if ($params["mode"] == LIST_SIMPLE) {
         $pageObject = new ListPage_Simple($params);
     } else {
         if ($params["mode"] == LIST_AJAX) {
             $pageObject = new ListPage_Ajax($params);
         } else {
             if ($params["mode"] == LIST_LOOKUP) {
                 $pageObject = new ListPage_Lookup($params);
             } else {
                 if ($params["mode"] == LIST_DETAILS) {
                     $pageObject = new ListPage_DPInline($params);
                 } else {
                     if ($params["mode"] == RIGHTS_PAGE) {
                         $pageObject = new RightsPage($params);
                     } else {
                         if ($params["mode"] == MEMBERS_PAGE) {
                             $pageObject = new MembersPage($params);
                         }
                     }
                 }
             }
         }
     }
     return $pageObject;
 }
function getFieldNamesByHeaders($fields)
{
    global $strTableName, $conn, $strOriginalTableName, $ext;
    // check fields in column headers
    // check that we have labes in column headers
    $fieldsNotFoundArr = array();
    $fNamesArr = array();
    $fNamesFromQuery = GetFieldsList($strTableName);
    $fieldLabelError = false;
    $labelFieldsNotFoundArr = array();
    for ($j = 0; $j < count($fields); $j++) {
        $labelNotFound = true;
        for ($i = 0; $i < count($fNamesFromQuery); $i++) {
            if ($ext == ".CSV") {
                $label = GoodFieldName($fNamesFromQuery[$i]);
            } else {
                $label = GetFieldLabel(GoodFieldName($strTableName), GoodFieldName($fNamesFromQuery[$i]));
            }
            if ($fields[$j] == $label) {
                $fNamesArr[$j] = $fNamesFromQuery[$i];
                $labelNotFound = false;
                break;
            }
        }
        if ($labelNotFound) {
            $fieldLabelError = true;
            $labelFieldsNotFoundArr[] = $fields[$j];
        }
    }
    // if field names are not labels, than compare them with fields from query
    $fieldsListError = false;
    $queryFieldsNotFoundArr = array();
    if ($fieldLabelError) {
        $fieldFromListNotFound = true;
        $fNamesArr = array();
        for ($j = 0; $j < count($fields); $j++) {
            $fieldNotFound = true;
            for ($i = 0; $i < count($fNamesFromQuery); $i++) {
                if ($fields[$j] == $fNamesFromQuery[$i]) {
                    $fNamesArr[$j] = $fNamesFromQuery[$i];
                    $fieldNotFound = false;
                    $fieldFromListNotFound = false;
                    break;
                }
            }
            if ($fieldNotFound) {
                $fieldsListError = true;
                $queryFieldsNotFoundArr[] = $fields[$j];
            }
        }
    }
    // if field list not lables or fields from query, than compare fields from DB
    $fieldsDbError = false;
    $dbFieldsNotFoundArr = array();
    if ($fieldLabelError && $fieldsListError) {
        $fNamesArr = array();
        $strSQL = "select * from " . AddTableWrappers($strOriginalTableName);
        $rs = db_query($strSQL, $conn);
        $dbFieldNum = db_numfields($rs);
        for ($j = 0; $j < count($fields); $j++) {
            $fieldFromDBNotFound = true;
            for ($i = 0; $i < $dbFieldNum; $i++) {
                $fNameFromDB = db_fieldname($rs, $i);
                if ($fields[$j] == $fNameFromDB) {
                    $fNamesArr[$j] = $fNameFromDB;
                    $fieldFromDBNotFound = false;
                    break;
                }
            }
            if ($fieldFromDBNotFound) {
                $fieldsDbError = true;
                $dbFieldsNotFoundArr[] = $fields[$j];
            }
        }
    }
    // if fields are not labels, fields from list and fields from table
    if ($fieldLabelError && $fieldsListError && $fieldsDbError) {
        if (count($labelFieldsNotFoundArr) < count($dbFieldsNotFoundArr) && count($labelFieldsNotFoundArr) < count($queryFieldsNotFoundArr)) {
            $fieldsNotFoundArr = $labelFieldsNotFoundArr;
        } elseif (count($dbFieldsNotFoundArr) < count($labelFieldsNotFoundArr) && count($dbFieldsNotFoundArr) < count($queryFieldsNotFoundArr)) {
            $fieldsNotFoundArr = $dbFieldsNotFoundArr;
        } elseif (count($queryFieldsNotFoundArr) < count($labelFieldsNotFoundArr) && count($queryFieldsNotFoundArr) < count($dbFieldsNotFoundArr)) {
            $fieldsNotFoundArr = $queryFieldsNotFoundArr;
        } elseif (count($queryFieldsNotFoundArr) == count($labelFieldsNotFoundArr) && count($queryFieldsNotFoundArr) == count($dbFieldsNotFoundArr)) {
            $fieldsNotFoundArr = $dbFieldsNotFoundArr;
        }
        echo "Import didn't succeed, couldn't find followind fields: " . implode(", ", $fieldsNotFoundArr);
        exit;
    } else {
        return $fNamesArr;
    }
}
        $checkResult = false;
    }
    if ($field == "Password") {
        $checkResult = false;
    }
    if ($checkResult) {
        if (!@$_SESSION["UserID"]) {
            return;
        }
        if (!CheckSecurity(@$_SESSION["_" . $strTableName . "_OwnerID"], "Edit") && !CheckSecurity(@$_SESSION["_" . $strTableName . "_OwnerID"], "Add") && !CheckSecurity(@$_SESSION["_" . $strTableName . "_OwnerID"], "Search")) {
            return;
        }
    }
}
$hasWhere = false;
$fieldsArr = GetFieldsList($strTableName);
foreach ($fieldsArr as $f) {
    $fEditFormat = GetFieldData($strTableName, $f, 'EditFormat', '');
    if ($fEditFormat != EDIT_FORMAT_LOOKUP_WIZARD || GoodFieldName($f) != $field) {
        continue;
    }
    $LookupType = GetFieldData($strTableName, $f, 'LookupType', '');
    if ($LookupType == LT_LOOKUPTABLE) {
        $LookupSQL = "SELECT ";
        if (GetFieldData($strTableName, $f, 'LookupUnique', false)) {
            $LookupSQL .= "DISTINCT ";
        }
        $LookupSQL .= GetLWLinkField($f, $strTableName, true);
        $LookupSQL .= "," . GetLWDisplayField($f, $strTableName, true);
        $LookupSQL .= " FROM " . AddTableWrappers(GetFieldData($strTableName, $f, 'LookupTable', '')) . " ";
        $strLookupWhere = LookupWhere($f, $strTableName);
 /**
  * Get array of fields by current page type
  * return array - of fields
  */
 function getFieldsByPageType()
 {
     $arrFields = array();
     $allfields = GetFieldsList($this->tName);
     foreach ($allfields as $fName) {
         if ($this->pageType == PAGE_EDIT && $this->pageEditLikeInline) {
             $app = AppearOnCurrentPage($fName, $this->pageType, true);
         } else {
             if ($this->pageType == PAGE_ADD && $this->pageAddLikeInline) {
                 $app = AppearOnCurrentPage($fName, $this->pageType, true);
             } else {
                 $app = AppearOnCurrentPage($fName, $this->pageType);
             }
         }
         if ($app === 'break') {
             break;
         } elseif (!$app) {
             continue;
         }
         $arrFields[] = $fName;
     }
     return $arrFields;
 }
function GetListOfFieldsByExprType($needaggregate, $table = "")
{
    global $strTableName, $tables_data;
    if (!strlen($table)) {
        $table = $strTableName;
    }
    if (!array_key_exists($table, $tables_data)) {
        return array();
    }
    $query =& $tables_data[$table][".sqlquery"];
    $fields = GetFieldsList($table);
    $out = array();
    foreach ($fields as $idx => $f) {
        $aggr = $query->IsAggrFuncField($idx);
        if ($needaggregate && $aggr || !$needaggregate && !$aggr) {
            $out[] = $f;
        }
    }
    return $out;
}
function ExportToExcel()
{
    global $rs, $nPageSize, $strTableName, $conn, $eventObj;
    if ($eventObj->exists("ListFetchArray")) {
        $row = $eventObj->ListFetchArray($rs);
    } else {
        $row = db_fetch_array($rs);
    }
    //	if(!$row)
    //		return;
    $arrLabel = array();
    $arrColumnWidth = array();
    $arrTotal = array();
    $arrTotalMessage = array();
    $totals = array();
    $arrFields = array();
    $arrTmpTotal = array();
    $arrFields = GetFieldsList($strTableName);
    $arrTmpTotal = GetTableData($strTableName, ".totalsFields", array());
    foreach ($arrFields as $value) {
        $arrLabel[$value] = label($value, $strTableName);
        $arrColumnWidth[$value] = 10;
        $totals[$value] = 0;
        $totalsType = "";
        foreach ($arrTmpTotal as $tvalue) {
            if ($tvalue["fName"] == $value) {
                $totalsType = $tvalue["totalsType"];
            }
        }
        $totalsFields[] = array('fName' => $value, 'totalsType' => $totalsType, 'viewFormat' => ViewFormat($value, $strTableName));
    }
    // write data rows
    $iNumberOfRows = 0;
    $objPHPExcel = ExportExcelInit($arrLabel, $arrColumnWidth);
    while ((!$nPageSize || $iNumberOfRows < $nPageSize) && $row) {
        countTotals($totals, $totalsFields, $row);
        $values = array();
        $arrData = array();
        $arrDataType = array();
        foreach ($arrFields as $value) {
            if (GetEditFormat($value, $strTableName) == EDIT_FORMAT_LOOKUP_WIZARD || GetEditFormat($value, $strTableName) == EDIT_FORMAT_RADIO) {
                $values[$value] = "";
                if (strlen($row[$value])) {
                    $values[$value] = DisplayLookupWizard($value, $row[$value], $row, "", MODE_EXPORT);
                }
            } elseif (IsBinaryType(GetFieldType($value, $strTableName))) {
                $values[$value] = $row[$value];
            } else {
                if (ViewFormat($value, $strTableName) != FORMAT_FILE_IMAGE && ViewFormat($value, $strTableName) != FORMAT_FILE && ViewFormat($value, $strTableName) != FORMAT_HYPERLINK && ViewFormat($value, $strTableName) != FORMAT_EMAILHYPERLINK && ViewFormat($value, $strTableName) != FORMAT_CHECKBOX) {
                    $format = ViewFormat($value, $strTableName);
                } else {
                    $format = FORMAT_NONE;
                }
                $values[$value] = GetData($row, $value, $format);
            }
        }
        $eventRes = true;
        if ($eventObj->exists('BeforeOut')) {
            $eventRes = $eventObj->BeforeOut($row, $values, $arrColumnWidth, $iNumberOfRows + 1, $objPHPExcel);
        }
        if ($eventRes) {
            $iNumberOfRows++;
            $i = 0;
            foreach ($arrFields as $value) {
                if (IsBinaryType(GetFieldType($value, $strTableName))) {
                    $arrDataType[$value] = "binary";
                } elseif (ViewFormat($value, $strTableName) == FORMAT_FILE_IMAGE) {
                    $arrDataType[$value] = "file";
                } elseif (ViewFormat($value, $strTableName) == FORMAT_DATE_SHORT || ViewFormat($value, $strTableName) == FORMAT_DATE_LONG || ViewFormat($value, $strTableName) == FORMAT_DATE_TIME) {
                    $arrDataType[$value] = "date";
                } else {
                    $arrDataType[$value] = "";
                }
                $arrData[$value] = $values[$value];
            }
            ExportExcelRecord($arrData, $arrDataType, $iNumberOfRows, $objPHPExcel);
        }
        if ($eventObj->exists("ListFetchArray")) {
            $row = $eventObj->ListFetchArray($rs);
        } else {
            $row = db_fetch_array($rs);
        }
    }
    if (count($arrTmpTotal)) {
        foreach ($arrFields as $fName) {
            $value = array();
            foreach ($arrTmpTotal as $tvalue) {
                if ($tvalue["fName"] == $fName) {
                    $value = $tvalue;
                }
            }
            $total = "";
            $totalMess = "";
            if ($value["totalsType"]) {
                if ($value["totalsType"] == "COUNT") {
                    $totalMess = "Count" . ": ";
                } elseif ($value["totalsType"] == "TOTAL") {
                    $totalMess = "Total" . ": ";
                } elseif ($value["totalsType"] == "AVERAGE") {
                    $totalMess = "Average" . ": ";
                }
                $total = GetTotals($fName, $totals[$fName], $value["totalsType"], $iNumberOfRows, $value["viewFormat"]);
            }
            $arrTotal[$fName] = $total;
            $arrTotalMessage[$fName] = $totalMess;
        }
    }
    ExportExcelTotals($arrTotal, $arrTotalMessage, ++$iNumberOfRows, $objPHPExcel);
    $formatExcel = "Excel2007";
    $extExcel = ".xlsx";
    if (@$_REQUEST["type"] == "excel5") {
        $formatExcel = "Excel5";
        $extExcel = ".xls";
    }
    ExportExcelSave(GoodFieldName($strTableName) . $extExcel, $formatExcel, $objPHPExcel);
}