/** * Add an Action to the DataGrid * @param $object A TDataGridAction object */ public function addAction(TDataGridAction $object) { if (!$object->getField()) { throw new Exception(AdiantiCoreTranslator::translate('You must define the field for the action (^1)', $object->toString())); } if ($this->modelCreated) { throw new Exception(AdiantiCoreTranslator::translate('You must call ^1 before ^2', __METHOD__, 'createModel')); } else { $this->actions[] = $object; } }
/** * Execute the action * @param $action A TDataGridAction object * @ignore-autocomplete on */ public function onExecute(TDataGridAction $action) { $selection = $this->view->get_selection(); if ($selection) { list($model, $iter) = $selection->get_selected(); if ($iter) { $activeObject = $this->model->get_value($iter, $this->count); $field = $action->getField(); $label = $action->getLabel(); if (is_null($field)) { throw new Exception(AdiantiCoreTranslator::translate('Field for action ^1 not defined', $label) . '.<br>' . AdiantiCoreTranslator::translate('Use the ^1 method', 'setField' . '()') . '.'); } $array['key'] = $activeObject->{$field}; $callb = $action->getAction(); if (is_array($callb)) { if (is_object($callb[0])) { $object = $callb[0]; $window_visible = method_exists($object, 'get_visible') ? $object->get_visible() : $object->is_visible(); // execute action call_user_func($callb, $array); if (method_exists($object, 'show')) { } // if the window wasn't visible before // the operation, shows it. // Forms: window wasn't visible, then show. // SeekBtns: window was visible, do nothing. // the operation itself closes the window. if (!$window_visible) { if ($object->get_child()) { $object->show(); } } } else { $class = $callb[0]; $method = $callb[1]; AdiantiCoreApplication::executeMethod($class, $method, $array); } } else { // execute action call_user_func($callb, $array); } } } }