diff --git a/application/controllers/DataController.php b/application/controllers/DataController.php index 8e63f655..3223c951 100644 --- a/application/controllers/DataController.php +++ b/application/controllers/DataController.php @@ -2,6 +2,7 @@ namespace Icinga\Module\Director\Controllers; +use Icinga\Module\Director\Objects\DirectorDatalist; use Icinga\Module\Director\Web\Controller\ActionController; class DataController extends ActionController @@ -10,7 +11,7 @@ class DataController extends ActionController { $this->view->addLink = $this->view->qlink( $this->translate('Add list'), - 'director/datalist/add', + 'director/data/list', null, array('class' => 'icon-plus') ); @@ -20,6 +21,98 @@ class DataController extends ActionController $this->prepareAndRenderTable('datalist'); } + public function listAction() + { + $this->view->stayHere = true; + + $form = $this->view->form = $this->loadForm('directorDatalist') + ->setSuccessUrl('director/data/lists') + ->setDb($this->db()); + + if ($id = $this->getRequest()->getUrl()->shift('id')) { + $form->loadObject($id); + $this->view->title = sprintf( + $this->translate('Data list: %s'), + $form->getObject()->list_name + ); + + $this->view->addLink = $this->view->qlink( + $this->translate('back'), + 'director/data/list', + null, + array('class' => 'icon-left-big') + ); + + $this->view->addLink .= $this->view->qlink( + $this->translate('Entries'), + 'director/data/listentry', + array('list_id' => $id), + array( + 'class' => 'icon-doc-text', + 'data-base-target' => '_next' + ) + ); + + $this->getTabs()->add('editlist', array( + 'url' => 'director/data/list' . '?id=' . $id, + 'label' => $this->translate('Edit list'), + ))->add('entries', array( + 'url' => 'director/data/listentry' . '?list_id=' . $id, + 'label' => $this->translate('List entries'), + ))->activate('editlist'); + + } else { + $this->view->title = $this->translate('Add data list'); + + $this->getTabs()->add('addlist', array( + 'url' => 'director/data/list', + 'label' => $this->view->title, + ))->activate('addlist'); + } + + $form->handleRequest(); + $this->setViewScript('object/form'); + } + + public function indexAction() + { + $edit = false; + + if ($id = $this->params->get('id')) { + $edit = true; + } + + if ($edit) { + $this->view->title = $this->translate('Edit list'); + $this->getTabs()->add('editlist', array( + 'url' => 'director/datalist/edit' . '?id=' . $id, + 'label' => $this->view->title, + ))->add('entries', array( + 'url' => 'director/data/listentry' . '?list_id=' . $id, + 'label' => $this->translate('List entries'), + ))->activate('editlist'); + } else { + $this->view->title = $this->translate('Add list'); + $this->getTabs()->add('addlist', array( + 'url' => 'director/datalist/add', + 'label' => $this->view->title, + ))->activate('addlist'); + } + + $form = $this->view->form = $this->loadForm('directorDatalist') + ->setSuccessUrl('director/data/lists') + ->setDb($this->db()); + + if ($edit) { + $form->loadObject($id); + } + + $form->handleRequest(); + + $this->render('object/form', null, true); + } + + public function fieldsAction() { $this->view->addLink = $this->view->qlink( @@ -36,26 +129,46 @@ class DataController extends ActionController public function listentryAction() { - $listId = $this->params->get('list_id'); - $this->view->lastId = $listId; + $this->view->stayHere = true; - $this->view->addLink = $this->view->qlink( - $this->translate('Add entry'), - 'director/datalistentry/add' . '?list_id=' . $listId, - null, - array('class' => 'icon-plus') - ); + $url = $this->getRequest()->getUrl(); + $entryName = $url->shift('entry_name'); + $list = DirectorDatalist::load($url->shift('list_id'), $this->db()); + $listId = $list->id; - $this->view->title = $this->translate('List entries'); + $form = $this->view->form = $this->loadForm('directorDatalistentry') + ->setSuccessUrl('director/data/listentry') + ->setList($list) + ->setDb($this->db()); + + if ($entryName) { + $form->loadObject(array( + 'list_id' => $listId, + 'entry_name' => $entryName + )); + $this->view->addLink = $this->view->qlink( + $this->translate('back'), + 'director/data/listentry' . '?list_id=' . $listId, + null, + array('class' => 'icon-left-big') + ); + } + + $form->handleRequest(); + + + $this->view->title = $this->translate('List entries') + . ': ' . $list->list_name; $this->getTabs()->add('editlist', array( - 'url' => 'director/datalist/edit' . '?id=' . $listId, + 'url' => 'director/data/list' . '?id=' . $listId, 'label' => $this->translate('Edit list'), ))->add('datalistentry', array( - 'url' => 'director/datalistentry' . '?list_id=' . $listId, + 'url' => 'director/data/listentry' . '?list_id=' . $listId, 'label' => $this->view->title, ))->activate('datalistentry'); - $this->prepareAndRenderTable('datalistEntry'); + $this->prepareTable('datalistEntry')->setList($list); + $this->setViewScript('objects/table'); } protected function prepareTable($name) @@ -63,11 +176,12 @@ class DataController extends ActionController $table = $this->loadTable($name)->setConnection($this->db()); $this->view->filterEditor = $table->getFilterEditor($this->getRequest()); $this->view->table = $this->applyPaginationLimits($table); - return $this; + return $table; } protected function prepareAndRenderTable($name) { - $this->prepareTable($name)->render('objects/table', null, 'objects'); + $this->prepareTable($name); + $this->setViewScript('objects/table'); } } diff --git a/application/controllers/DatalistController.php b/application/controllers/DatalistController.php deleted file mode 100644 index c860109a..00000000 --- a/application/controllers/DatalistController.php +++ /dev/null @@ -1,56 +0,0 @@ -indexAction(); - } - - public function editAction() - { - $this->indexAction(); - } - - public function indexAction() - { - $edit = false; - - if ($id = $this->params->get('id')) { - $edit = true; - } - - if ($edit) { - $this->view->title = $this->translate('Edit list'); - $this->getTabs()->add('editlist', array( - 'url' => 'director/datalist/edit' . '?id=' . $id, - 'label' => $this->view->title, - ))->add('entries', array( - 'url' => 'director/data/listentry' . '?list_id=' . $id, - 'label' => $this->translate('List entries'), - ))->activate('editlist'); - } else { - $this->view->title = $this->translate('Add list'); - $this->getTabs()->add('addlist', array( - 'url' => 'director/datalist/add', - 'label' => $this->view->title, - ))->activate('addlist'); - } - - $form = $this->view->form = $this->loadForm('directorDatalist') - ->setSuccessUrl('director/data/lists') - ->setDb($this->db()); - - if ($edit) { - $form->loadObject($id); - } - - $form->handleRequest(); - - $this->render('object/form', null, true); - } -} diff --git a/application/forms/DirectorDatalistForm.php b/application/forms/DirectorDatalistForm.php index 80da505d..bf8e3c17 100644 --- a/application/forms/DirectorDatalistForm.php +++ b/application/forms/DirectorDatalistForm.php @@ -10,9 +10,21 @@ class DirectorDatalistForm extends DirectorObjectForm public function setup() { $this->addElement('text', 'list_name', array( - 'label' => $this->translate('List name'), - 'required' => true, + 'label' => $this->translate('List name'), + 'description' => $this->translate( + 'Data lists are mainly used as data providers for custom variables' + . ' presented as dropdown boxes boxes. You can manually manage' + . ' their entries here in place, but you could also create dedicated' + . ' sync rules after creating a new empty list. This would allow you' + . ' to keep your available choices in sync with external data providers' + ), + 'required' => true, )); + $this->addSimpleDisplayGroup(array('list_name'), 'list', array( + 'legend' => $this->translate('Data list') + )); + + $this->setButtons(); } public function onSuccess() diff --git a/application/forms/DirectorDatalistentryForm.php b/application/forms/DirectorDatalistentryForm.php index 2e411a4a..2273407a 100644 --- a/application/forms/DirectorDatalistentryForm.php +++ b/application/forms/DirectorDatalistentryForm.php @@ -2,35 +2,50 @@ namespace Icinga\Module\Director\Forms; +use Icinga\Module\Director\Objects\DirectorDatalist; use Icinga\Module\Director\Web\Form\DirectorObjectForm; class DirectorDatalistEntryForm extends DirectorObjectForm { - protected $listId; + protected $datalist; public function setup() { $this->addElement('text', 'entry_name', array( - 'label' => 'Name' + 'label' => $this->translate('Key'), + 'required' => true, + 'description' => $this->translate( + 'Will be stored as a custom variable value when this entry' + . ' is chosen from the list' + ) )); + $this->addElement('text', 'entry_value', array( - 'label' => 'Value' + 'label' => $this->translate('Value'), + 'required' => true, + 'description' => $this->translate( + 'This will be the visible caption for this entry' + ) )); - $this->addElement('select', 'format', array( - 'label' => 'Type', - 'multiOptions' => array('string' => $this->translate('String')) + + $this->addHidden('list_id', $this->datalist->id); + $this->addHidden('format', 'string'); + if (!$this->isNew()) { + $this->addHidden('entry_name', $this->object->entry_name); + } + + $this->addSimpleDisplayGroup(array('entry_name', 'entry_value'), 'entry', array( + 'legend' => $this->isNew() + ? $this->translate('Add data list entry') + : $this->translate('Modify data list entry') )); + + $this->setButtons(); } - public function onSuccess() + public function setList(DirectorDatalist $list) { - $this->object()->list_id = $this->listId; - parent::onSuccess(); - } - - public function setListId($id) - { - $this->listId = $id; + $this->datalist = $list; return $this; } } diff --git a/application/tables/DatalistEntryTable.php b/application/tables/DatalistEntryTable.php index 0b39a244..e4218922 100644 --- a/application/tables/DatalistEntryTable.php +++ b/application/tables/DatalistEntryTable.php @@ -2,14 +2,29 @@ namespace Icinga\Module\Director\Tables; +use Icinga\Module\Director\Objects\DirectorDatalist; use Icinga\Module\Director\Web\Table\QuickTable; class DatalistEntryTable extends QuickTable { + protected $datalist; + protected $searchColumns = array( 'entry_name', + 'entry_value' ); + public function setList(DirectorDatalist $list) + { + $this->datalist = $list; + return $this; + } + + public function getList() + { + return $this->datalist; + } + public function getColumns() { return array( @@ -21,23 +36,18 @@ class DatalistEntryTable extends QuickTable protected function getActionUrl($row) { - return $this->url('director/datalistentry/edit', array( + return $this->url('director/data/listentry/edit', array( 'list_id' => $row->list_id, 'entry_name' => $row->entry_name, )); } - public function getListId() - { - return $this->view()->lastId; - } - public function getTitles() { $view = $this->view(); return array( - 'entry_name' => $view->translate('Name'), - 'entry_value' => $view->translate('Value'), + 'entry_name' => $view->translate('Key'), + 'entry_value' => $view->translate('Label'), ); } @@ -48,7 +58,10 @@ class DatalistEntryTable extends QuickTable $query = $db->select()->from( array('l' => 'director_datalist_entry'), array() - )->where('l.list_id = ?', $this->getListId())->order('l.entry_name ASC'); + )->where( + 'l.list_id = ?', + $this->getList()->id + )->order('l.entry_name ASC'); return $query; } diff --git a/application/tables/DatalistTable.php b/application/tables/DatalistTable.php index ffc2b38d..d804f1d0 100644 --- a/application/tables/DatalistTable.php +++ b/application/tables/DatalistTable.php @@ -21,7 +21,10 @@ class DatalistTable extends QuickTable protected function getActionUrl($row) { - return $this->url('director/data/listentry', array('list_id' => $row->id)); + return $this->url( + 'director/data/listentry', + array('list_id' => $row->id) + ); } public function getTitles() diff --git a/application/views/scripts/objects/table.phtml b/application/views/scripts/objects/table.phtml index 38580f28..549f4605 100644 --- a/application/views/scripts/objects/table.phtml +++ b/application/views/scripts/objects/table.phtml @@ -3,7 +3,7 @@ tabs ?>

escape($this->title) ?>quickSearch ?>

- +stayHere): ?> data-base-target="_next"> addLink ?> filterEditor): ?>