function &prepare(&$do, $frontend = true, $pager = true) { $unitFormatters = array(); if (is_array($do->fb_fieldLabels)) { foreach ($do->fb_fieldLabels as $k => &$v) { if (is_array($v)) { if (key_exists('unit', $v)) { $unitFormatters[$k] = $v['unit']; } $v = $v[0]; } } } if ($frontend && $pager) { $perPage = $this->getControllerOption('recordsPerPage', $do->tableName()); $perPage = $perPage === true ? 10 : $perPage; } else { $perPage = null; } $pk = MyFB::_getPrimaryKey($do); $AllFields = array_keys($do->table()); $links = $do->links(); $links = is_array($links) ? $links : array(); $LinkFields = array_keys($links); $noLinkFields = array_diff($AllFields, $LinkFields); $fields = $this->getControllerOption('fields', $do->tableName()); if (!is_array($fields)) { $fields = array_diff($AllFields, array($pk)); } $usedFields = array_merge($noLinkFields, array_intersect($fields, $LinkFields)); while ($offset = array_search($pk, $usedFields)) { unset($usedFields[$offset]); } if ($o = $do->getPlugin('ownership')) { Log::info('table filtrée par owner'); if ($o->userIsInAdminMode()) { Log::info('ajout du champ owner'); $fields = array_merge(array($do->ownerShipField), $fields); $usedFields = array_merge(array($do->ownerShipField), $usedFields); $do->fb_fieldLabels[$do->ownerShipField] = 'Gérant'; } } $do->fb_fieldsToRender = $usedFields; $fb =& MyFB::create($do); $do->selectAdd(); if (!in_array($pk, $usedFields)) { $do->selectAdd($pk . ',' . implode(',', $usedFields)); } else { $do->selectAdd(implode(',', $usedFields)); } $fb->populateOptions(); $specialElements = $fb->_getSpecialElementNames(); $dg = new Structures_DataGrid($perPage); $dts = new Structures_DataGrid_DataSource_MyDataObj(); $dts->bind($do, array('generate_columns' => false, 'fields' => $usedFields)); $dg->bindDataSource($dts); if ($frontend) { if ($this->getControllerOption('edit', $do->tableName()) || $this->getControllerOption('view', $do->tableName())) { $dg->addColumn(new Structures_DataGrid_Column(null, null, null, array('width' => '50px'), null, array('M_Office_ShowTable', 'getEditLink'), array('database' => $do->database(), 'table' => $do->tableName(), 'pk' => $pk))); } if ($this->_controller->hasActions) { $dg->addColumn(new Structures_DataGrid_Column('', null, null, array('width' => '20px'), null, array('M_Office_ShowTable', 'getSelectedEntry'), array('pk' => $pk))); } $formatters = $this->getControllerOption('formatters', $do->tableName()); } if (!is_array($formatters)) { $formatters = array(); } if (isset($do->fb_linkOrderFields) && is_array($do->fb_linkOrderFields)) { $dg->setDefaultSort($do->fb_linkOrderFields); } $eltTypes = $do->table(); $dateRenderer = $this->getControllerOption('dateRenderer'); foreach ($fields as $field) { if (!isset($specialElements[$field])) { if (key_exists($field, $unitFormatters)) { $dg->addColumn(new Structures_DataGrid_Column($fb->getFieldLabel($field), $field, in_array($field, $AllFields) ? $field : null, null, null, key_exists($field, $formatters) ? $formatters[$field]['callback'] : array('M_Office_ShowTable', 'getFieldWithUnit'), key_exists($field, $formatters) ? $formatters[$field]['args'] : array('field' => $field, 'unit' => $unitFormatters[$field]))); } elseif ($eltTypes[$field] & DB_DATAOBJECT_DATE && !empty($dateRenderer) && $dateRenderer !== true) { $dg->addColumn(new Structures_DataGrid_Column($fb->getFieldLabel($field), $field, in_array($field, $AllFields) ? $field : null, null, null, key_exists($field, $formatters) ? $formatters[$field]['callback'] : $dateRenderer, key_exists($field, $formatters) ? $formatters[$field]['args'] : array('field' => $field))); } else { $dg->addColumn(new Structures_DataGrid_Column($fb->getFieldLabel($field), $field, in_array($field, $AllFields) ? $field : null, null, null, key_exists($field, $formatters) ? $formatters[$field]['callback'] : null, key_exists($field, $formatters) ? $formatters[$field]['args'] : null)); } } } if (isset($_REQUEST['orderBy'])) { $dg->sortRecordSet($_REQUEST['orderBy'], $_REQUEST['direction']); } $renderer =& new Structures_DataGrid_Renderer_HTMLTable(); $renderer->setTableAttribute('width', '100%'); $renderer->setTableAttribute('cellspacing', '0'); $renderer->setTableAttribute('cellpadding', '0'); $renderer->setTableAttribute('class', 'datagrid'); $renderer->setTableOddRowAttributes(array('class' => 'oddRow')); $renderer->setTableEvenRowAttributes(array('class' => 'evenRow')); $renderer->sortIconASC = '↑'; $renderer->sortIconDESC = '↓'; $renderer->setOption('selfPath', ROOT_ADMIN_URL . ROOT_ADMIN_SCRIPT); $dg->attachRenderer($renderer); $this->_view =& $dg; }