public function __construct($module) { parent::__construct(); $this->assign('__action', 'add'); $tpl = Mreg::get('tpl'); $tpl->concat('adminTitle', ' :: ' . $this->moduloptions['title'] . ' :: ' . __('Add record')); $mopts = PEAR::getStaticProperty('m_office', 'options'); $mopt = $mopts['modules'][$module]; $table = $mopt['table']; $do = M_Office_Util::doForModule($module); $this->append('subActions', '<a href="' . M_Office_Util::getQueryParams(array(), array('record', 'doSingleAction')) . '">' . __('Go to the %s list', array($mopt['title'])) . '</a>'); $formBuilder =& MyFB::create($do); // linkNewValue creates an issue if some linked elements are put in predefgroups // $formBuilder->linkNewValue = true; $form = new MyQuickForm('editRecord', 'POST', M_Office_Util::getQueryParams(array(), array(), false), '_self', null, true); $form->addElement('hidden', 'submittedNewRecord', 1); if (isset($_REQUEST['filterField'])) { $form->addElement('hidden', 'filterField', $_REQUEST['filterField']); $form->addElement('hidden', 'filterValue', $_REQUEST['filterValue']); $do->{$_REQUEST['filterField']} = $_REQUEST['filterValue']; } $links = $do->links(); if (key_exists($_REQUEST['filterField'], $links)) { $linfo = explode(':', $links[$_REQUEST['filterField']]); $form->addElement('static', 'mod', '', __('Add record with %s = %s', array($_REQUEST['filterField'], $_REQUEST['filterValue'])) . '. ' . '<a href="' . M_Office_Util::getQueryParams(array('table' => $linfo[0], 'record' => $_REQUEST['filterValue']), array('addRecord', 'filterField', 'filterValue')) . '">' . __('Back to main record') . '</a>'); } $formBuilder->useForm($form); $formBuilder->getForm(); if ($this->getOption('createAnother', $table)) { $form->addElement('static', ' ', ' '); $form->addElement('checkbox', 'returnHere', __('Create another record')); if (isset($_REQUEST['returnHere']) && $_REQUEST['returnHere']) { $form->setDefaults(array('returnHere' => true)); } } M_Office_Util::addHiddenFields($form); if ($form->validate()) { if (PEAR::isError($ret = $form->process(array(&$formBuilder, 'processForm'), false))) { $this->append('error', __('An error occured while inserting record') . ' : ' . $ret->getMessage()); } else { $pk = DB_DataObject_FormBuilder::_getPrimaryKey($do); $this->say(__('New record was successfully created. Its identifier is : %s', array($do->{$pk}))); if ($this->getOption('createAnother', $table) && isset($_REQUEST['returnHere']) && $_REQUEST['returnHere']) { M_Office_Util::refresh(M_Office_Util::getQueryParams(array('returnHere' => $_REQUEST['returnHere']), array(), false)); } else { $pk = DB_DataObject_FormBuilder::_getPrimaryKey($do); M_Office_Util::refresh(M_Office_Util::getQueryParams(array('record' => $do->{$pk}), array('returnHere', 'addRecord'), false)); } } } elseif ($form->isSubmitted()) { } $this->assign('addForm', $form); $this->assign('do', $do); }
public function loginForm($table) { $form = new MyQuickForm('loginform', 'POST', M_Office_Util::getQueryParams(array(), array(), false), '_self', null, true); $authDO = DB_DataObject::factory($table); $authDO->prepareForLogin(false, false); $authFB = MyFB::create($authDO); $authFB->useForm($form); $authFB->getForm(); if ($form->validate()) { M_Office_Util::refresh($_SERVER['REQUEST_URI']); } M_Office::$dsp = 'login'; $this->assign('loginForm', $form); }
public function doExecLogin() { ob_clean(); $do = User::getInstance('office')->getDBDO(); $do->getPlugin('user')->prepareForLogin($do, $do->userFields['register'], $do->userFields['reminder']); $fb = MyFB::create($do); $form = new MyQuickForm('loginform', 'POST', URL::get('user/login')); $fb->useForm($form); $fb->getForm(); $this->assignRef('form', $form); if ($form->validate()) { $this->redirect(User::getInstance('office')->getTarget()); } }
public function doExecAdd() { $form = new MyQuickForm('addform', 'POST', M_Office::URL()); $p = DB_DataObject::factory('photo'); $p->record_table = $_GET['table']; $p->record_id = $_GET['record']; $fb = MyFB::create($p); $fb->useForm($form); $fb->getForm(); if ($form->validate()) { // trigger_error('form validate') $form->process(array($fb, 'processForm'), false); $this->assign('success', 1); } $this->assign('form', $form); }
public function postGenerateForm($form, $fb, $obj) { $info = $obj->_getPluginsDef(); $info = $info['l10n']; if (!$this->_autoActions) { $langs = array(T::getLang()); } else { $langs = $this->getLangs($obj); } foreach ($obj->_l10ndos as $lang => $arec) { $obj->_l10nfbs[$lang] = MyFB::create($obj->_l10ndos[$lang]); $obj->_l10nfbs[$lang]->useForm($form); $obj->_l10nfbs[$lang]->getForm(); } // @ todo : the BIG todo : find a way to make a conditional form rule : // If a lang is marked as 'specific', check required fields // If a lang is marked as 'not available' or 'mirror of ...', // don't check required fields for this lang. // for now required fields are bypassed... $elements = $obj->_l10nfbs[$lang]->_reorderElements(); if (is_array($obj->fb_fieldsToRender)) { $iFields = array_intersect($info, $obj->fb_fieldsToRender); } else { $iFields = $info; } $allLangs = array_diff($langs, array($this->getDefaultLang($obj))); array_unshift($allLangs, $this->getDefaultLang($obj)); // $langs = $allLangs; foreach ($iFields as $field) { $fields = array(); foreach ($langs as $lang) { $completename = $obj->fb_elementNamePrefix . $field . $obj->fb_elementNamePostfix; $elem = $form->getElement($completename . '_' . $lang); $elem->setAttribute('rel', $completename); if ($lang == $this->getDefaultLang($obj)) { $class = 'translatesource field_' . $lang; $id = 'autotransid_' . $completename; } else { $class = 'autotranslate source_autotransid_' . $completename . ' field_' . $lang; $id = 'autotransid_' . $completename . '_' . $lang; } $elem->setAttribute('class', $elem->getAttribute('class') . ($elem->getAttribute('class') ? ' ' : '') . $class); } } }
public function postGenerateForm($form, $fb, $obj) { $info = $obj->_getPluginsDef(); $info = $info['i18n']; $langs = $this->getLocales($obj); foreach ($obj->_i18ndos as $lang => $arec) { if ($this->_grouped) { $obj->_i18ndos[$lang]->fb_addFormHeader = false; } $obj->_i18nfbs[$lang] = MyFB::create($obj->_i18ndos[$lang]); $obj->_i18nfbs[$lang]->useForm($form); $obj->_i18nfbs[$lang]->getForm(); } if ($this->_grouped) { $this->postGenerateFormGrouped($form, $fb, $info, $langs, $obj); return; } $elements = $obj->_i18nfbs[$lang]->_reorderElements(); if (is_array($obj->fb_fieldsToRender)) { $iFields = array_intersect($info, $obj->fb_fieldsToRender); } else { $iFields = $info; } $allLangs = array_diff($langs, array($this->getDefaultLang($obj))); array_unshift($allLangs, $this->getDefaultLang($obj)); $langs = $allLangs; foreach ($iFields as $field) { $fields = array(); foreach ($langs as $lang) { $completename = $obj->fb_elementNamePrefix . $field . $obj->fb_elementNamePostfix; $elem = $form->getElement($completename . '_' . $lang); $elem->setAttribute('rel', $completename); if ($lang == $this->getDefaultLang($obj)) { $class = 'translatesource field_' . $lang; $id = 'autotransid_' . $completename; } else { $class = 'autotranslate source_autotransid_' . $completename . ' field_' . $lang; $id = 'autotransid_' . $completename . '_' . $lang; } $elem->setAttribute('class', $elem->getAttribute('class') . ($elem->getAttribute('class') ? ' ' : '') . $class); } } }
public function prepare($do, $module, $pager = true) { $do->loadPlugin('pager'); $fb = MyFB::create($do); $builder = $fb->builder; if ($builder) { $builder->before_form($fb); } $f = array_keys($do->table()); if ($do->i18nFields) { $f = array_merge($f, $do->i18nFields); } $this->fieldNames = array_combine($f, $f); if (is_array($fb->fieldLabels)) { foreach ($fb->fieldLabels as $k => &$v) { if (is_array($v)) { if (key_exists('unit', $v)) { $unitFormatters[$k] = $v['unit']; } $v = $v[0]; } } $this->fieldNames = array_merge($this->fieldNames, $fb->fieldLabels); } if ($pager) { $perPage = $this->getControllerOption('recordsPerPage', $module); $perPage = $perPage === true ? 10 : $perPage; } else { $perPage = 100000000000; } $do->getPlugin('pager')->setOption('perPage', $perPage); $pk = $do->pkName(); $AllFields = array_keys($do->table()); $links = $do->links(); $fields = $this->getControllerOption('fields', $module); $columns = $this->getControllerOption('columns', $module); if (!is_array($columns)) { $columns = $fields; } if (!is_array($fields)) { $fields = array_diff($AllFields, array($pk)); } $usedFields = array_intersect($fields, $AllFields); $fb->fieldsToRender = $fields; $do->selectAdd(); $plugins = $do->_getPluginsDef(); if (is_array($plugins['i18n'])) { $tmparr = array_intersect($fields, $plugins['i18n']); $i18nfields = implode(',' . $do->tablename() . '_i18n' . '.', $tmparr); if (!empty($i18nfields)) { $i18nfields = $do->tablename() . '_i18n' . '.' . $i18nfields; } $fieldsToRender = array_merge($usedFields, $tmparr); unset($tmparr); } elseif (is_array($plugins['l10n'])) { $tmparr = array_intersect($fields, $plugins['l10n']); $i18nfields = implode(',' . $do->tablename() . '_l10n' . '.', $tmparr); $i18nfields = $do->tablename() . '_l10n' . '.' . $i18nfields; $fieldsToRender = array_merge($usedFields, $tmparr); unset($tmparr); } else { $i18nfields = null; $fieldsToRender = $usedFields; } if ($plugins['tag'] && in_array('tagplugin_cache', $AllFields)) { $usedFields[] = 'tagplugin_cache'; } if (!in_array($pk, $usedFields)) { $selectAdd = $do->tablename() . '.' . $pk . ',' . $do->tablename() . '.' . implode(',' . $do->tablename() . '.', $usedFields) . ($i18nfields ? ',' . $i18nfields : ''); } else { $selectAdd = $do->tablename() . '.' . implode(',' . $do->tablename() . '.', $usedFields) . ($i18nfields ? ',' . $i18nfields : ''); } $do->selectAdd('distinct ' . $selectAdd); $fb->populateOptions(); $specialElements = $fb->_getSpecialElementNames(); $eltTypes = $do->table(); foreach ($fieldsToRender as $aField) { switch (true) { case array_key_exists($aField, $links): $fieldTypes[$aField] = 'link'; break; case is_array($fb->enumFields) && in_array($aField, $fb->enumFields): $fieldTypes[$aField] = 'enum'; break; case $eltTypes[$aField] & DB_DATAOBJECT_BOOL: $fieldTypes[$aField] = 'bool'; break; case $eltTypes[$aField] & DB_DATAOBJECT_TIME: $fieldTypes[$aField] = 'datetime'; break; case $eltTypes[$aField] & DB_DATAOBJECT_DATE: $fieldTypes[$aField] = 'date'; break; default: $fieldTypes[$aField] = 'bypass'; } } foreach ($columns as $field) { $columnsTypes[$field] = $fieldTypes[$field]; } $this->columns = $columnsTypes; if (can('update', $module) || can('read', $module)) { Mreg::get('tpl')->assign('edit', true); } if ($this->_controller->hasActions) { Mreg::get('tpl')->assign('selectable', true); Mreg::get('tpl')->addJSinline("\n \$('a[rel=checkboxes]').click(function() {\n \$('#showTableForm input:checkbox').each(function(){\$(this).prop('checked',true);});\n return false;\n });\n \$('a[rel=uncheckboxes]').click(function() {\n \$('#showTableForm input:checkbox').prop('checked',false);\n });\n ", 'ready'); } Mreg::get('tpl')->concat('adminTitle', ' ' . 'page ' . ($_REQUEST['pageID'] ? $_REQUEST['pageID'] : 1)); if (isset($_REQUEST['_ps'])) { $do->orderBy(); $do->getPlugin('pager')->setValues($_REQUEST['_ps'], $_REQUEST['_pd']); } elseif ($ord = $this->_controller->moduloptions['order']) { $do->orderBy(); $do->getPlugin('pager')->setDefaultSort($ord); } elseif (isset($fb->linkOrderFields) && is_array($fb->linkOrderFields)) { $do->getPlugin('pager')->setDefaultSort($fb->linkOrderFields); } $this->fields = $fieldTypes; $do->find(); $this->do = $do; $this->totalItems = $do->getPlugin('pager')->totalItems; }
"><?php echo $dg->fieldNames[$field]; ?> </a></th> <?php } ?> <?php $this->i('listview/dopaging/end_header', null, true); ?> </tr> </thead> <?php $do = $dg->do; ?> <?php $pk = MyFB::_getPrimaryKey($do); ?> <tbody> <?php foreach ($do as $rec) { ?> <?php $col = $col == 'odd' ? 'even' : 'odd'; ?> <tr class="<?php echo $col; ?> "> <?php if ($selectable) { ?> <?php
protected function &getSearchForm() { if (!$this->getConfig('search')) { return false; } if ($this->_searchform) { return $this->_searchform; } $do = $this->getDO(); $form = new MyQuickForm('searchform', 'GET', URL::get($this->_modulename . '/list'), '', null, true); if (method_exists($do, 'prepareSearchForm')) { $do->prepareSearchForm(); } $formBuilder = MyFB::create($do); $formBuilder->selectAddEmpty = array(); if (is_array($do->links())) { foreach ($do->links() as $field => $link) { $formBuilder->selectAddEmpty[] = $field; } } if (is_array($formBuilder->enumFields)) { foreach ($formBuilder->enumFields as $field) { $formBuilder->selectAddEmpty[] = $field; } } $formBuilder->linkNewValue = false; if ($o = $do->getPlugin('ownership')) { if ($o->userIsInAdminMode()) { $formBuilder->fieldsToRender[] = $do->ownerShipField; $formBuilder->fieldLabels[$do->ownerShipField] = 'géré par'; } } $formBuilder->userEditableFields = $do->fb_fieldsToRender; $formBuilder->formHeaderText = __('Search'); $formBuilder->submitText = '>>'; $formBuilder->preGenerateFormCallback = 'fake'; $formBuilder->useForm($form); $specialElements = array_keys($formBuilder->_getSpecialElementNames()); foreach ($specialElements as $specialField) { unset($fieldsToRender[$specialField]); } $formBuilder->getForm(); $form->addElement('hidden', 'searchSubmit', 1); $form->_rules = array(); $form->_formRules = array(); $form->_required = array(); M_Office_Util::addHiddenFields($form, array('search', 'page'), true); $form->addElement('checkbox', '__dontpaginate', '', __('Afficher les résultats sur une seule page')); $this->_searchform = $form; return $this->_searchform; }
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; }
public function run() { $this->do = $this->getRecord(); deny_unless_can('read', $this->do); $this->assign('__action', 'edit'); $this->append('subActions', '<a href="' . M_Office_Util::getQueryParams(array(), array('record', 'doSingleAction', '__record_ref')) . '">' . __('< Back to list') . '</a>'); $tpl = Mreg::get('tpl'); $tpl->concat('adminTitle', $this->do->__toString() . ' :: ' . $this->moduloptions['title']); $tpl->assign('adminHeader', $this->do->__toString()); $database = $this->do->database(); /** * * Actions * **/ if (isset($_REQUEST['doSingleAction']) && $this->getGlobalOption('actions', 'showtable', $this->module)) { $subController = new M_Office_Actions($this->getOptions()); $subController->run($this->do, $_REQUEST['doSingleAction'], 'single'); if ($subController->hasOutput()) { return; } } $this->createActions(); $formBuilder = MyFB::create($this->do); if (!can('update', $this->module)) { $formBuilder->userEditableFields = array('__fakefield'); } $editopts = PEAR::getStaticProperty('m_office_editrecord', 'options'); if (!empty($editopts['tableOptions'][$this->module]['fields'])) { $formBuilder->fieldsToRender = $editopts['tableOptions'][$this->module]['fields']; } $form = new MyQuickForm('editRecord', 'POST', M_Office_Util::doURL($this->do, $this->module, array()), '_self', null, true); $formBuilder->elementTypeAttributes = array('longtext' => array('cols' => 50, 'rows' => 10)); $formBuilder->useForm($form); if ($this->getOption('edit', $this->module)) { $this->assign('editable', true); } else { $doFreeze = true; } $form = $formBuilder->getForm(); if (PEAR::isError($form)) { throw new Exception($form->getMessage() . ' ' . print_r($form->getUserInfo(), true)); } if ($doFreeze) { $form->freeze(); $submit = $form->getElement('__submit__'); if (!PEAR::isError($submit)) { $form->removeElement('__submit__'); } } if ($form->validate()) { $ret = $form->process(array($formBuilder, 'processForm'), false); if (PEAR::isError($ret)) { $this->append('errors', __('An error occured while updating record') . ' : ' . $ret->getMessage()); $this->assign('__action', 'error'); return; } else { $params_to_remove = array(); $values = $form->exportValues(); if ($values['__backtolist__']) { $params_to_remove[] = 'record'; } if (!key_exists('debug', $_REQUEST)) { $this->say(__('Record saved !')); M_Office_Util::refresh(M_Office_Util::doURL($this->do, $this->module, array(), $params_to_remove)); } } } $this->assign('editForm', $form); if ($linkFromTables = $this->getOption('linkFromTables', $this->table)) { $ajaxFrom = $this->getOption('ajaxLinksFromTable', $this->table); if (!is_array($ajaxFrom)) { $ajaxFrom = array(); } foreach ($this->do->reverseLinks() as $linkFromTable => $field) { list($linkTab, $linkField) = explode(':', $linkFromTable); switch (true) { case !$this->getGlobalOption('view', 'showtable', $linkTab): break; case key_exists($linkTab, $ajaxFrom): $fromfield = $ajaxFrom[$linkFromTable]['fromfield']; if ($fromfield == $linkField || !$fromfield) { $info = $ajaxFrom[$linkTab]; $aja = new M_Office_ajaxFromTable($this->do, $this->module, $linkTab, $linkField, $this->do->{$field}); if ($info['position'] == 'before') { $ajaxLinksBefore[] = $aja->getBlock(); } else { $ajaxLinksAfter[] = $aja->getBlock(); } } break; case $linkFromTables === TRUE || is_array($linkFromTables) && in_array($linkTab, $linkFromTables): if ($linkInfo = $this->getLinkFromTableItem($linkTab, $linkField, $field)) { $linkFromTableArray[] = $linkInfo; } break; } } } M::hook($this->do->tableName(), 'alterLinkFromTables', array(&$linkFromTableArray, $this->do)); $this->assign('linkFromTables', $linkFromTableArray); $this->assign('ajaxFrom', array('before' => $ajaxLinksBefore, 'after' => $ajaxLinksAfter)); $related = ''; if (($linkToTables = $this->getOption('linkToTables', $this->table)) && is_array($links = $this->do->links())) { foreach ($links as $linkField => $link) { list($linkTab, $linkRec) = explode(':', $link); if ((!is_array($linkToTables) || in_array($linkTab, $linkToTables)) && $this->getOption('view', $linkTab)) { $linkDo = $this->do->getLink($linkField); if ($linkDo) { $this->append('linkToTables', array('table' => $linkTab, 'link' => M_Office_Util::DoUrl($linkDo, $linkTab, array(), array('page')))); } } } } $this->assign('related', $related); $this->assign('do', $this->do); }
function &prepare(&$do, $module, $pager = true) { $this->_do =& $do; $do->orderBy($do->treeFields['left'] . ' ASC'); $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]; } } } $pk = MyFB::_getPrimaryKey($do); $fields = $this->getControllerOption('fields', $do->tableName()); if (!is_array($fields)) { $fields = array_keys($do->table()); } $do->fb_fieldsToRender = $fields; $fb =& MyFB::create($do); $fb->populateOptions(); $specialElements = $fb->_getSpecialElementNames(); $this->fields = $fields; if ($this->getControllerOption('edit', $do->tableName()) || $this->getControllerOption('view', $do->tableName())) { $this->fields[] = array($pk, array('M_Office_View_tree', 'getEditLink'), array('database' => $do->database(), 'table' => $do->tableName(), 'pk' => $pk)); $this->fields[] = array($pk, array('M_Office_View_tree', 'getChildLink'), array('database' => $do->database(), 'table' => $do->tableName(), 'pk' => $pk)); } if ($this->_controller->hasActions) { $this->fields[] = array($pk, array('M_Office_View_tree', 'getSelectedEntry'), array('pk' => $pk)); } $formatters = $this->getControllerOption('formatters', $do->tableName()); if (!is_array($formatters)) { $formatters = array(); } Mreg::get('tpl')->addJS('interface'); Mreg::get('tpl')->addJSinline(' $("a[rel=treeviewtoggle]").toggle( function(){ $(this).parent().parent().find("ul").hide(); }, function(){ $(this).parent().parent().find("ul").show(); } );', 'ready'); }
public function testWithNamePrefix() { T::setLang('fr'); $t = DB_DataObject::factory('formtest'); $t->fb_elementNamePrefix = 'test'; $fb = MyFB::create($t); $form = new MyQuickForm('testform', 'POST', M_Office::URL()); $post = array_merge($form->exportValues(), array('testtitre_group' => array('testtitre_fr' => 'Test titre', 'testtitre_en' => 'title', 'testtitre_es' => 'titulo'), 'testdescription_group' => array('testdescription_fr' => 'Nouv desc 2 FR', 'testdescription_en' => null, 'testdescription_es' => 'Nueva desc 2 ES'), 'testpays' => 'ma', 'testtestuser_id' => 1, '_qf__' . $form->getAttribute('name') => 1, 'testi18n_id_fr' => '', 'testi18n_id_en' => '', 'testi18n_id_es' => '', 'testid' => '')); $get = $_GET; $request = array_merge($get, $post); $form->initRequest($get, $post, $request); $fb->useForm($form); $fb->getForm(); $form->validate(); $form->process(array($fb, 'processForm'), false); T::setLang('es'); $t2 = DB_DataObject::factory('formtest'); $t2->get($t->id); $this->assertEqual($t2->titre, 'titulo'); T::setLang('en'); $t2 = DB_DataObject::factory('formtest'); $t2->get($t->id); $this->assertEqual($t2->titre, 'title'); }
public function filterFields(&$do) { if (isset($_REQUEST['filterField']) && isset($_REQUEST['filterValue'])) { if (is_array($_REQUEST['filterValue'])) { $db = $do->getDatabaseConnection(); $do->whereAdd($db->quoteIdentifier($do->tableName()) . '.' . $db->quoteIdentifier($_REQUEST['filterField']) . ' IN (' . $do->sqlin($_REQUEST['filterValue']) . ')'); } else { $do->{$_REQUEST['filterField']} = $_REQUEST['filterValue']; } $filterString = __('%s for %s', array($do->tableName(), $_REQUEST['filterField'])) . ' = '; $links = $do->links(); if (isset($links[$_REQUEST['filterField']])) { list($lTab, $lFld) = explode(':', $links[$_REQUEST['filterField']]); if ($lTab) { $linkedDo = DB_DataObject::factory($lTab); $linkedDo->get($lFld, $_REQUEST['filterValue']); $filterString .= '<a href="' . M_Office_Util::doURL($linkedDo, $lTab, array(), array('filterValue', 'filterField')) . '">' . MyFB::getDataObjectString($linkedDo) . ' (' . $_REQUEST['filterValue'] . ')</a>'; } } else { $filterString .= $_REQUEST['filterValue'] . '<br/>'; } $this->append('subActions', $filterString); } if (isset($_REQUEST['filternTable']) && isset($_REQUEST['filternField']) && isset($_REQUEST['filternValue'])) { $joinDo = DB_DataObject::factory($_REQUEST['filternTable']); $joinDo->{$_REQUEST['filternField']} = $_REQUEST['filternValue']; $do->joinAdd($joinDo); $joinDOlinks = $joinDo->links(); $targetTableArray = explode(':', $joinDOlinks[$_REQUEST['filternField']]); $targetDO = DB_DataObject::factory($targetTableArray[0]); $targetDO->get($_REQUEST['filternValue']); if (method_exists($targetDO, '__toString')) { $targetName = $targetDO->__toString(); } else { $targetName = $targetDO->pk(); } $filterString = __('%s linked to %s', array($do->tableName(), $targetTableArray[0])) . ' ' . $targetName; $this->append('subActions', $filterString); } if (isset($_REQUEST['ids']) && is_array($_REQUEST['ids'])) { $db = $do->getDatabaseConnection(); $ids = array(); foreach ($_REQUEST['ids'] as $id) { $ids[] = $db->quote($id); } $do->whereAdd($do->tableName() . '.id IN(' . implode(',', $ids) . ')'); } }
function &_generateForm($action = false, $target = '_self', $formName = false, $method = 'post') { if ($formName === false) { $formName = strtolower(get_class($this->_do)); } if ($action === false) { $action = $_SERVER['PHP_SELF']; } // Retrieve the form object to use (may depend on the current renderer) $this->_form->_createFormObject($formName, $method, $action, $target); // Initialize array with default values //$formValues = $this->_do->toArray(); if ($this->addFormHeader) { // Add a header to the form - set addFormHeader property to false to prevent this $this->_form->_addFormHeader(is_null($this->formHeaderText) ? $this->prettyName($this->_do->tableName()) : $this->formHeaderText); } // Go through all table fields and create appropriate form elements $keys = $this->_do->keys(); // Reorder elements if requested, will return _getFieldsToRender if no reordering is needed $elements = $this->_reorderElements(); //get elements to freeze $user_editable_fields = $this->_getUserEditableFields(); if (is_array($user_editable_fields)) { $elements_to_freeze = array_diff(array_keys($elements), $user_editable_fields); } else { $elements_to_freeze = array(); } if (!is_array($links = $this->_do->links())) { $links = array(); } $pk = $this->_getPrimaryKey($this->_do); $rules = array(); foreach ($elements as $key => $type) { // Check if current field is primary key. And primary key hiding is on. If so, make hidden field if (in_array($key, $keys) && $this->hidePrimaryKey == true) { $formValues[$key] = $this->_do->{$key}; $element =& $this->_form->_createHiddenField($key); } else { unset($element); // Try to determine field types depending on object properties $notNull = $type & DB_DATAOBJECT_NOTNULL; if (in_array($key, $this->dateFields)) { $type = DB_DATAOBJECT_DATE; } elseif (in_array($key, $this->timeFields)) { $type = DB_DATAOBJECT_TIME; } elseif (in_array($key, $this->textFields)) { $type = DB_DATAOBJECT_TXT; } elseif (in_array($key, $this->enumFields)) { $type = DB_DATAOBJECT_FORMBUILDER_ENUM; } elseif (in_array($key, $this->booleanFields)) { $type = DB_DATAOBJECT_BOOL; } if ($notNull || in_array($key, $this->fieldsRequired)) { $type |= DB_DATAOBJECT_NOTNULL; } if (isset($this->preDefElements[$key]) && (is_object($this->preDefElements[$key]) || is_array($this->preDefElements[$key]))) { // Use predefined form field, IMPORTANT: This may depend on the used renderer!! $element =& $this->preDefElements[$key]; } elseif (isset($links[$key])) { // If this field links to another table, display selectbox or radiobuttons if (in_array($key, $elements_to_freeze)) { $do =& $this->_do->getLink($key); if (!is_object($do)) { $string = ''; } else { $string = $this->getDataObjectString($do); } $element =& $this->_form->_createStaticField($key, $string); } else { $isRadio = isset($this->linkElementTypes[$key]) && $this->linkElementTypes[$key] == 'radio'; $opt = $this->getSelectOptions($key, false, false, $isRadio ? $this->radioAddEmptyLabel : $this->selectAddEmptyLabel); if ($isRadio) { $element =& $this->_form->_createRadioButtons($key, $opt); } else { $element =& $this->_form->_createSelectBox($key, $opt); } unset($opt); } } // No predefined object available, auto-generate new one $elValidator = false; $elValidRule = false; // Auto-detect field types depending on field's database type switch (true) { case $type & DB_DATAOBJECT_BOOL: if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $formValues[$key] = $this->_do->{'get' . $key}(); } else { $formValues[$key] = $this->_do->{$key}; } if ($formValues[$key] === 'f') { $formValues[$key] = 0; } if (!isset($element)) { $element =& $this->_form->_createCheckbox($key, null, null, $this->getFieldLabel($key)); } break; case $type & DB_DATAOBJECT_INT: if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $formValues[$key] = $this->_do->{'get' . $key}(); } else { $formValues[$key] = $this->_do->{$key}; } if (!isset($element)) { $element =& $this->_form->_createIntegerField($key); $elValidator = 'numeric'; } break; case $type & DB_DATAOBJECT_DATE && $type & DB_DATAOBJECT_TIME: $this->debug('DATE & TIME CONVERSION using callback for element ' . $key . ' (' . $this->_do->{$key} . ')!', 'FormBuilder'); if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $fieldValue = $this->_do->{'get' . $key}(); } else { $fieldValue = $this->_do->{$key}; } if ($this->isCallableAndExists($this->dateFromDatabaseCallback)) { $formValues[$key] = call_user_func($this->dateFromDatabaseCallback, $fieldValue); } else { $this->debug('WARNING: dateFromDatabaseCallback callback not callable', 'FormBuilder'); $formValues[$key] = $fieldValue; } if (!isset($element)) { $element = $this->_form->_createDateTimeElement($key); } break; case $type & DB_DATAOBJECT_DATE: $this->debug('DATE CONVERSION using callback for element ' . $key . ' (' . $this->_do->{$key} . ')!', 'FormBuilder'); if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $fieldValue = $this->_do->{'get' . $key}(); } else { $fieldValue = $this->_do->{$key}; } if ($this->isCallableAndExists($this->dateFromDatabaseCallback)) { $formValues[$key] = call_user_func($this->dateFromDatabaseCallback, $fieldValue); } else { $this->debug('WARNING: dateFromDatabaseCallback callback not callable', 'FormBuilder'); $formValues[$key] = $fieldValue; } if (!isset($element)) { $element =& $this->_form->_createDateElement($key); } break; case $type & DB_DATAOBJECT_TIME: $this->debug('TIME CONVERSION using callback for element ' . $key . ' (' . $this->_do->{$key} . ')!', 'FormBuilder'); if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $fieldValue = $this->_do->{'get' . $key}(); } else { $fieldValue = $this->_do->{$key}; } if ($this->isCallableAndExists($this->dateFromDatabaseCallback)) { $formValues[$key] = call_user_func($this->dateFromDatabaseCallback, $fieldValue); } else { $this->debug('WARNING: dateFromDatabaseCallback callback not callable', 'FormBuilder'); $formValues[$key] = $fieldValue; } if (!isset($element)) { $element =& $this->_form->_createTimeElement($key); } break; case $type & DB_DATAOBJECT_TXT || $type & DB_DATAOBJECT_BLOB: if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $formValues[$key] = $this->_do->{'get' . $key}(); } else { $formValues[$key] = $this->_do->{$key}; } if (!isset($element)) { $element =& $this->_form->_createTextArea($key); } break; case $type & DB_DATAOBJECT_STR: if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $formValues[$key] = $this->_do->{'get' . $key}(); } else { $formValues[$key] = $this->_do->{$key}; } if (!isset($element)) { // If field content contains linebreaks, make textarea - otherwise, standard textbox if (isset($this->_do->{$key}) && strlen($this->_do->{$key}) && strstr($this->_do->{$key}, "\n")) { $element =& $this->_form->_createTextArea($key); } else { $element =& $this->_form->_createTextField($key); } } break; case $type & DB_DATAOBJECT_FORMBUILDER_CROSSLINK: unset($element); $crossLink = $this->crossLinks[$key]; $groupName = $this->_sanitizeFieldName($key); $crossLinkDo = DB_DataObject::factory($crossLink['table']); if (PEAR::isError($crossLinkDo)) { throw new Exception($crossLinkDo->getMessage()); } if (!is_array($crossLinkLinks = $crossLinkDo->links())) { $crossLinkLinks = array(); } list($linkedtable, $linkedfield) = explode(':', $crossLinkLinks[$crossLink['toField']]); list($fromtable, $fromfield) = explode(':', $crossLinkLinks[$crossLink['fromField']]); $all_options = $this->_getSelectOptions($linkedtable, false, false, false, $linkedfield, false, $crossLinkDo, isset($crossLinkDo->fb_crossLinkExtraFields)); $colNames = array(); $selected_options = array(); if (isset($this->_do->{$fromfield})) { $crossLinkDo->{$crossLink['fromField']} = $this->_do->{$fromfield}; if ($this->isCallableAndExists($this->prepareLinkedDataObjectCallback)) { call_user_func_array($this->prepareLinkedDataObjectCallback, array(&$crossLinkDo, $key)); } if ($crossLinkDo->find() > 0) { while ($crossLinkDo->fetch()) { $selected_options[$crossLinkDo->{$crossLink['toField']}] = clone $crossLinkDo; } } } if (isset($crossLink['type']) && $crossLink['type'] == 'select') { unset($element); $element =& $this->_form->_createSelectBox($groupName, $all_options, true); $formValues[$groupName] = array_keys($selected_options); // set defaults later // ***X*** generate checkboxes } else { $element = array(); $rowNames = array(); foreach ($all_options as $optionKey => $value) { if (isset($selected_options[$optionKey])) { if (!isset($formValues[$groupName])) { $formValues[$groupName] = array(); } $formValues[$groupName][$optionKey] = $optionKey; } $crossLinkElement = $this->_form->_createCheckbox($groupName . '[' . $optionKey . ']', $value, $optionKey); $elementNamePrefix = $this->elementNamePrefix . $groupName . '__' . $optionKey . '_'; $elementNamePostfix = '_' . $this->elementNamePostfix; //']'; if (isset($crossLinkDo->fb_crossLinkExtraFields)) { $row = array(&$crossLinkElement); if (isset($selected_options[$optionKey])) { $extraFieldDo = $selected_options[$optionKey]; } else { unset($extraFieldDo); $extraFieldDo = DB_DataObject::factory($crossLink['table']); } unset($tempFb); $tempFb = MyFB::create($extraFieldDo, false, 'QuickForm', get_class($this)); $extraFieldDo->fb_fieldsToRender = $crossLinkDo->fb_crossLinkExtraFields; $extraFieldDo->fb_elementNamePrefix = $elementNamePrefix; $extraFieldDo->fb_elementNamePostfix = $elementNamePostfix; $extraFieldDo->fb_linkNewValue = false; $this->_extraFieldsFb[$elementNamePrefix . $elementNamePostfix] =& $tempFb; $tempForm = $tempFb->getForm(); $colNames = array(''); foreach ($crossLinkDo->fb_crossLinkExtraFields as $extraField) { if ($tempForm->elementExists($elementNamePrefix . $extraField . $elementNamePostfix)) { $tempEl =& $tempForm->getElement($elementNamePrefix . $extraField . $elementNamePostfix); $colNames[$extraField] = $tempEl->getLabel(); } else { $tempEl =& $this->_form->_createStaticField($elementNamePrefix . $extraField . $elementNamePostfix, 'Error - element not found for extra field ' . $extraField); } $row[] =& $tempEl; if (!isset($formValues[$groupName . '__extraFields'])) { $formValues[$groupName . '__extraFields'] = array(); } if (!isset($formValues[$groupName . '__extraFields'][$optionKey])) { $formValues[$groupName . '__extraFields'][$optionKey] = array(); } $formValues[$groupName . '__extraFields'][$optionKey][$extraField] = $tempEl->getValue(); unset($tempEl); } $element[] = $row; unset($tempFb, $tempForm, $extraFieldDo, $row); $rowNames[] = '<label for="' . $crossLinkElement->getAttribute('id') . '">' . $value . '</label>'; $crossLinkElement->setText(''); } elseif ($crossLink['collapse']) { $element[] = array(&$crossLinkElement); $rowNames[] = '<label for="' . $crossLinkElement->getAttribute('id') . '">' . $value . '</label>'; $crossLinkElement->setText(''); $colNames = array(); } else { $element[] =& $crossLinkElement; } unset($crossLinkElement); } if (isset($crossLinkDo->fb_crossLinkExtraFields) || $crossLink['collapse']) { $this->_form->_addElementGrid($groupName, array_values($colNames), $rowNames, $element); } else { $this->_form->_addElementGroup($element, $groupName, $this->crossLinkSeparator); } if ($crossLink['collapse']) { $this->_form->_collapseRecordList($groupName); } unset($element); unset($rowNames); unset($colNames); } break; case $type & DB_DATAOBJECT_FORMBUILDER_TRIPLELINK: unset($element); $tripleLink = $this->tripleLinks[$key]; $elName = $this->_sanitizeFieldName('__tripleLink_' . $tripleLink['table'] . '_' . $tripleLink['fromField'] . '_' . $tripleLink['toField1'] . '_' . $tripleLink['toField2']); $freeze = array_search($elName, $elements_to_freeze); unset($tripleLinkDo); $tripleLinkDo = DB_DataObject::factory($tripleLink['table']); if (PEAR::isError($tripleLinkDo)) { throw new Exception($tripleLinkDo->getMessage()); } if (!is_array($tripleLinkLinks = $tripleLinkDo->links())) { $tripleLinkLinks = array(); } list($linkedtable1, $linkedfield1) = explode(':', $tripleLinkLinks[$tripleLink['toField1']]); list($linkedtable2, $linkedfield2) = explode(':', $tripleLinkLinks[$tripleLink['toField2']]); list($fromtable, $fromfield) = explode(':', $tripleLinkLinks[$tripleLink['fromField']]); //if ($fromtable !== $this->_do->tableName()) error? $all_options1 = $this->_getSelectOptions($linkedtable1, false, false, false, $linkedfield1); $all_options2 = $this->_getSelectOptions($linkedtable2, false, false, false, $linkedfield2); $selected_options = array(); if (isset($this->_do->{$fromfield})) { $tripleLinkDo->{$tripleLink['fromField']} = $this->_do->{$fromfield}; if ($this->isCallableAndExists($this->prepareLinkedDataObjectCallback)) { call_user_func_array($this->prepareLinkedDataObjectCallback, array(&$tripleLinkDo, $key)); } if ($tripleLinkDo->find() > 0) { while ($tripleLinkDo->fetch()) { $selected_options[$tripleLinkDo->{$tripleLink['toField1']}][] = $tripleLinkDo->{$tripleLink['toField2']}; } } } $columnNames = array(); foreach ($all_options2 as $key2 => $value2) { $columnNames[] = $value2; } $rows = array(); $rowNames = array(); $formValues[$key] = array(); foreach ($all_options1 as $key1 => $value1) { $rowNames[] = $value1; $row = array(); foreach ($all_options2 as $key2 => $value2) { unset($tripleLinkElement); $tripleLinkElement = $this->_form->_createCheckbox($elName . '[' . $key1 . '][' . $key2 . ']', '', $key2); if (isset($selected_options[$key1])) { if (in_array($key2, $selected_options[$key1])) { $tripleLinkName = '__tripleLink_' . $tripleLink['table'] . '_' . $tripleLink['fromField'] . '_' . $tripleLink['toField1'] . '_' . $tripleLink['toField2']; if (!isset($formValues[$tripleLinkName][$key1])) { $formValues[$tripleLinkName][$key1] = array(); } $formValues[$tripleLinkName][$key1][$key2] = $key2; } } $row[] =& $tripleLinkElement; } $rows[] =& $row; unset($row); } $this->_form->_addElementGrid($elName, $columnNames, $rowNames, $rows); unset($columnNames, $rowNames, $rows); break; case $type & DB_DATAOBJECT_FORMBUILDER_ENUM: if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $formValues[$key] = $this->_do->{'get' . $key}(); } else { $formValues[$key] = $this->_do->{$key}; } if (!isset($element)) { $isRadio = isset($this->linkElementTypes[$key]) && $this->linkElementTypes[$key] == 'radio'; if (isset($this->enumOptions[$key])) { $options = $this->enumOptions[$key]; } else { if ($this->isCallableAndExists($this->enumOptionsCallback)) { $options = call_user_func($this->enumOptionsCallback, $this->_do->__table, $key); } else { $options =& PEAR::raiseError('enumOptionsCallback is an invalid callback'); } if (PEAR::isError($options)) { return $options; } } /*if (array_keys($options) === range(0, count($options)-1)) { $newOptions = array(); foreach ($options as $value) { $newOptions[$value] = $value; } $options = $newOptions; }*/ if (in_array($key, $this->selectAddEmpty) || !($type & DB_DATAOBJECT_NOTNULL) && !$isRadio) { $options = array('' => $isRadio ? $this->radioAddEmptyLabel : $this->selectAddEmptyLabel) + $options; } if (!$options) { return PEAR::raiseError('There are no options defined for the enum field "' . $key . '". You may need to set the options in the enumOptions option or use your own enumOptionsCallback.'); } $element = array(); if ($isRadio) { $element =& $this->_form->_createRadioButtons($key, $options); } else { $element =& $this->_form->_createSelectBox($key, $options); } unset($options); } break; case $type & DB_DATAOBJECT_FORMBUILDER_REVERSELINK: unset($element); $element = array(); $elName = $this->_sanitizeFieldName('__reverseLink_' . $this->reverseLinks[$key]['table'] . '_' . $this->reverseLinks[$key]['field']); unset($do); $do = DB_DataObject::factory($this->reverseLinks[$key]['table']); if ($this->isCallableAndExists($this->prepareLinkedDataObjectCallback)) { call_user_func_array($this->prepareLinkedDataObjectCallback, array(&$do, $key)); } if (!is_array($rLinks = $do->links())) { $rLinks = array(); } $rPk = $this->_getPrimaryKey($do); //$rFields = $do->table(); list($lTable, $lField) = explode(':', $rLinks[$this->reverseLinks[$key]['field']]); $formValues[$elName] = array(); if ($this->reverseLinks[$key]['collapse']) { $table = $rowNames = array(); } if (is_array($do->fb_linkOrderFields)) { $orderStr = implode(', ', $do->fb_linkOrderFields); if ($orderStr) { $do->orderBy($orderStr); } } if ($do->find()) { while ($do->fetch()) { $label = $this->getDataObjectString($do); if ($do->{$this->reverseLinks[$key]['field']} == $this->_do->{$lField}) { $formValues[$elName][$do->{$rPk}] = $do->{$rPk}; } elseif ($rLinked =& $do->getLink($this->reverseLinks[$key]['field'])) { $label .= '<b>' . $this->reverseLinks[$key]['linkText'] . $this->getDataObjectString($rLinked) . '</b>'; } if (isset($this->linkElementTypes[$elName]) && $this->linkElementTypes[$elName] == 'subForm') { unset($subFB, $subForm, $subFormEl); $subFB =& DB_DataObject_FormBuilder::create($do, false, 'QuickForm', get_class($this)); $this->reverseLinks[$key]['FBs'][] =& $subFB; $subFB->elementNamePrefix = $elName; $subFB->elementNamePostfix = '_' . count($this->reverseLinks[$key]['FBs']); $subFB->createSubmit = false; $subFB->formHeaderText = $this->getDataObjectString($do); //$this->getFieldLabel($elName).' '.count($this->reverseLinks[$key]['FBs']); $do->fb_linkNewValue = false; $subForm =& $subFB->getForm(); $this->reverseLinks[$key]['SFs'][] = $subForm; $subFormEl =& $this->_form->_createSubForm($elName . count($this->reverseLinks[$key]['FBs']), null, $subForm); $element[] =& $subFormEl; } else { if ($this->reverseLinks[$key]['collapse']) { $table[] = array($this->_form->_createCheckbox($elName . '[' . $do->{$rPk} . ']', '', $do->{$rPk})); $rowNames[] = $label; } else { $element[] =& $this->_form->_createCheckbox($elName . '[' . $do->{$rPk} . ']', $label, $do->{$rPk}); } } } } if (isset($this->reverseLinkNewValue[$elName]) && $this->reverseLinkNewValue[$elName] !== false) { if (is_int($this->reverseLinkNewValue[$elName])) { $totalSubforms = $this->reverseLinkNewValue[$elName]; } else { $totalSubforms = 1; } for ($i = 0; $i < $totalSubforms; $i++) { unset($subFB, $subForm, $subFormEl); // Add a subform to add a new reverseLink record. $do = DB_DataObject::factory($this->reverseLinks[$key]['table']); $do->{$lField} = $this->_do->{$this->_getPrimaryKey($this->_do)}; $subFB =& DB_DataObject_FormBuilder::create($do, false, 'QuickForm', get_class($this)); $this->reverseLinks[$key]['FBs'][] =& $subFB; $subFB->elementNamePrefix = $elName; $subFB->elementNamePostfix = '_' . count($this->reverseLinks[$key]['FBs']); $subFB->createSubmit = false; $subFB->formHeaderText = 'New ' . (isset($do->fb_formHeaderText) ? $do->fb_formHeaderText : $this->prettyName($do->__table)); $do->fb_linkNewValue = false; $subForm =& $subFB->getForm(); $this->reverseLinks[$key]['SFs'][] =& $subForm; $subFormEl =& $this->_form->_createSubForm($elName . count($this->reverseLinks[$key]['FBs']), null, $subForm); $element[] =& $subFormEl; } } if ($this->reverseLinks[$key]['collapse']) { $this->_form->_addElementGrid($elName, array(), $rowNames, $table); $this->_form->_collapseRecordList($elName); } else { $this->_form->_addElementGroup($element, $elName, $this->crossLinkSeparator); } unset($element); break; case $type & DB_DATAOBJECT_FORMBUILDER_GROUP: unset($element); $element =& $this->_form->_createHiddenField($key . '__placeholder'); break; default: if ($this->useAccessors && method_exists($this->_do, 'get' . $key)) { $formValues[$key] = $this->_do->{'get' . $key}(); } else { $formValues[$key] = $this->_do->{$key}; } if (!isset($element)) { $element =& $this->_form->_createTextField($key); } } // End switch //} // End else if ($elValidator !== false) { if (!isset($rules[$key])) { $rules[$key] = array(); } $rules[$key][] = array('validator' => $elValidator, 'rule' => $elValidRule, 'message' => $this->ruleViolationMessage); } // End if } // End else //GROUP OR ELEMENT ADDITION if (isset($this->preDefGroups[$key]) && !($type & DB_DATAOBJECT_FORMBUILDER_GROUP)) { $group = $this->preDefGroups[$key]; $groups[$group][] = $element; } elseif (isset($element)) { if (is_array($element)) { $this->_form->_addElementGroup($element, $key); } else { $this->_form->_addElement($element); } } // End if //SET AUTO-RULES IF NOT DEACTIVATED FOR THIS OR ALL ELEMENTS if (!$this->_excludeAllFromAutoRules && !in_array($key, $this->excludeFromAutoRules)) { //ADD REQURED RULE FOR NOT_NULL FIELDS if ((!in_array($key, $keys) || $this->hidePrimaryKey == false) && $type & DB_DATAOBJECT_NOTNULL && !in_array($key, $elements_to_freeze) && !($type & DB_DATAOBJECT_BOOL)) { $this->_form->_setFormElementRequired($key); $this->debug('Adding required rule for ' . $key); } // VALIDATION RULES if (isset($rules[$key])) { $this->_form->_addFieldRules($rules[$key], $key); $this->debug("Adding rule '{$rules[$key]}' to {$key}"); } } else { $this->debug($key . ' excluded from auto-rules'); } } // End foreach if ($this->linkNewValue) { $this->_form->_addRuleForLinkNewValues(); } // Freeze fields that are not to be edited by the user $this->_form->_freezeFormElements($elements_to_freeze); //GROUP SUBMIT $flag = true; if (isset($this->preDefGroups['__submit__'])) { $group = $this->preDefGroups['__submit__']; if (count($groups[$group]) > 1) { $groups[$group][] =& $this->_form->_createSubmitButton('__submit__', $this->submitText); $flag = false; } else { $flag = true; } } //GROUPING if (isset($groups) && is_array($groups)) { //apply grouping reset($groups); while (list($grp, $elements) = each($groups)) { if (count($elements) == 1) { $this->_form->_addElement($elements[0]); $this->_form->_moveElementBefore($this->_form->_getElementName($elements[0]), $grp . '__placeholder'); } elseif (count($elements) > 1) { $this->_form->_addElementGroup($elements, $grp, ' '); $this->_form->_moveElementBefore($grp, $grp . '__placeholder'); } } } //ELEMENT SUBMIT if ($flag == true && $this->createSubmit == true) { $this->_form->_addSubmitButton('__submit__', $this->submitText); } $this->_form->_finishForm(); // Assign default values to the form $fixedFormValues = array(); foreach ($formValues as $key => $value) { if (in_array($key, $elements_to_freeze) && isset($links[$key])) { } else { $fixedFormValues[$this->getFieldName($key)] = $value; } } $this->_form->_setFormDefaults($fixedFormValues); return $this->_form->getForm(); }
public static function &getSearchForm($do, $module) { MyQuickForm::registerElementType('advandate', 'HTML/QuickForm/advandate.php', 'HTML_QuickForm_advandate'); $form = new MyQuickForm('formSearch', 'GET', self::getQueryParams(array(), array('page', '_c_'), false)); $fields = $_GET; unset($fields['_c_']); unset($fields['page']); unset($fields['module']); unset($fields['action']); unset($fields['filterField']); unset($fields['filterValue']); if (count($fields) == 0) { Log::info('caching search form'); $cache = true; } else { Log::info('NO SEARCH FORM CACHING'); $cache = false; } $cacheName = 'searchform_' . $module; $options = array('caching' => $cache, 'cacheDir' => APP_ROOT . 'app/' . APP_NAME . '/cache/forms/', 'lifeTime' => 3600, 'fileNameProtection' => false); $cache = new Cache_Lite($options); if ($_cachedData = $cache->get($cacheName)) { Mreg::append('autoloadcallback', array(array('MyQuickForm', 'autoloadElements'))); $_cachedData = unserialize($_cachedData); foreach ($_cachedData as $element) { $form->addElement($element); } } else { $do->fb_selectAddEmpty = array(); if (is_array($do->links())) { foreach ($do->links() as $field => $link) { $do->fb_selectAddEmpty[] = $field; } } if (is_array($do->fb_enumFields)) { foreach ($do->fb_enumFields as $field) { $do->fb_selectAddEmpty[] = $field; } } $do->fb_formHeaderText = __('Search'); $do->fb_submitText = '>>'; $do->fb_linkNewValue = false; $formBuilder =& MyFB::create($do); $formBuilder->_cacheOptions = array('name' => 'office_searchform', 'cacheDir' => APP_ROOT . 'app/' . APP_NAME . '/cache/forms/'); $formBuilder->preGenerateFormCallback = array($do, 'prepareSearchForm'); $do->prepareSearchForm($fb); $do->fb_userEditableFields = $do->fb_fieldsToRender; $table = $do->table(); foreach ($do->fb_fieldsToRender as $field) { if ($table[$field] & DB_DATAOBJECT_DATE || $table[$field] & DB_DATAOBJECT_TIME) { $label = $do->fb_fieldLabels[$field] ? $do->fb_fieldLabels[$field] : $field; $do->fb_preDefElements[$field] = MyQuickForm::createElement('advandate', $field, $label, array("language" => T::getLang())); } } $formBuilder->postGenerateFormCallback = array($do, 'postPrepareSearchForm'); $formBuilder->useForm($form); $formBuilder->getForm(); foreach ($form->_elements as $elem) { $cached[] = $elem; } if ($cache) { $cache->save(serialize($cached)); } } $form->_rules = array(); $form->_formRules = array(); $form->_required = array(); self::addHiddenFields($form, array('search', 'page', '__dontpaginate', '_c_'), true); $form->addElement('checkbox', '__dontpaginate', 'Afficher les résultats sur une seule page'); return $form; }
function &getAddFormObject($record = null) { if (is_null($record)) { $record = $this->getObject(); } if (!$record->isNew()) { $formaction = 'updateFromTableRecord'; $formclass = 'updateFromTableForm'; $formactionval = $record->pk(); $formname = 'addFromTable__' . $this->table . $record->pk(); $update = $this->table . $record->pk(); $sub = "OK"; } else { $formaction = 'addFromTableRecord'; $formclass = 'addFromTableForm'; $formactionval = 1; $formname = 'addFromTable__' . $this->table; $update = 'endList__' . $this->table; $sub = "+"; } $form = new MyQuickForm($formname, 'POST', M_Office_Util::getQueryParams(array('module' => $this->table, 'filterField' => $this->field, 'filterValue' => $this->value, $formaction => $formactionval, 'ajaxfromtable' => 1), array_keys($_REQUEST), false)); $form->updateAttributes(array('class' => $formclass, 'target' => $update)); Mtpl::addJS('jquery.form'); $record->fb_requiredRuleMessage = __('The field "%s" is required'); $record->fb_ruleViolationMessage = __('The field "%s" is not valid'); $record->fb_formAddHeader = true; $record->fb_createSubmit = false; $record->fb_submitText = $sub; $this->fb =& MyFB::create($record); $this->fb->useForm($form); $this->fb->getForm(); if ($form->elementExists($this->field)) { $form->removeElement($this->field); } $form->addElement('submit', '__submit__', '+'); $form->addElement('hidden', $this->field, $this->value); // $form->addElement('static','st','','<pre>'.print_r($_REQUEST,true).'</pre>'); return $form; }