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); }