Esempio n. 1
0
 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', '&nbsp;', '&nbsp;');
         $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);
 }
Esempio n. 2
0
File: Auth.php Progetto: demental/m
 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);
 }
Esempio n. 3
0
 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());
     }
 }
Esempio n. 4
0
 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);
 }
Esempio n. 5
0
File: db.php Progetto: demental/m
 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);
         }
     }
 }
Esempio n. 6
0
File: db.php Progetto: demental/m
 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);
         }
     }
 }
Esempio n. 7
0
 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;
 }
Esempio n. 8
0
"><?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 
Esempio n. 9
0
 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;
 }
Esempio n. 10
0
 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 = '&uarr;';
     $renderer->sortIconDESC = '&darr;';
     $renderer->setOption('selfPath', ROOT_ADMIN_URL . ROOT_ADMIN_SCRIPT);
     $dg->attachRenderer($renderer);
     $this->_view =& $dg;
 }
Esempio n. 11
0
 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')) . '">' . __('&lt; 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);
 }
Esempio n. 12
0
File: tree.php Progetto: demental/m
 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');
 }
Esempio n. 13
0
 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');
 }
Esempio n. 14
0
 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) . ')');
     }
 }
Esempio n. 15
0
File: MyFB.php Progetto: demental/m
 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, '&nbsp;');
                 $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();
 }
Esempio n. 16
0
File: Util.php Progetto: demental/m
 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;
 }
Esempio n. 17
0
 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;
 }