Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 106 additions & 0 deletions application/controllers/DataController.php
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,112 @@ public function listentryAction()
$this->setViewScript('objects/table');
}

public function dictionariesAction() {
$this->view->addLink = $this->view->qlink(
$this->translate('Add Dictionary'),
'director/data/dictionary',
null,
array('class' => 'icon-plus')
);

$this->setDataTabs()->activate('dictionary');
$this->view->title = $this->translate('Dictionaries');
$this->prepareAndRenderTable('dictionary');
}

public function dictionaryAction() {
$this->view->stayHere = true;

$form = $this->view->form = $this->loadForm('directorDictionary')
->setSuccessUrl('director/data/dictionaries')
->setDb($this->db());

if ($id = $this->getRequest()->getUrl()->shift('id')) {
$form->loadObject($id);
$this->view->title = sprintf(
$this->translate('Dictionary: %s'),
$form->getObject()->dictionary_name
);

$this->view->addLink = $this->view->qlink(
$this->translate('back'),
'director/data/dictionary',
null,
array('class' => 'icon-left-big')
);


$this->getTabs()->add('editdictionary', array(
'url' => 'director/data/dictionary' . '?id=' . $id,
'label' => $this->translate('Edit dictionary'),
))->activate('editdictionary');

} else {
$this->view->title = $this->translate('Add dictionary');

$this->getTabs()->add('adddictionary', array(
'url' => 'director/data/dictionary',
'label' => $this->view->title,
))->activate('adddictionary');
}

$form->handleRequest();
$this->setViewScript('object/form');
}

public function dictionaryfieldsAction() {
$this->view->addLink = $this->view->qlink(
$this->translate('Add Dictionary Field'),
'director/data/dictionaryfield',
null,
array('class' => 'icon-plus')
);

$this->setDataTabs()->activate('dictionaryfield');
$this->view->title = $this->translate('Dictionary Fields');
$this->prepareAndRenderTable('dictionaryfield');
}

public function dictionaryfieldAction() {
$this->view->stayHere = true;

$form = $this->view->form = $this->loadForm('directorDictionaryfield')
->setSuccessUrl('director/data/dictionaryfields')
->setDb($this->db());

if ($dictionaryfield_id = $this->getRequest()->getUrl()->shift('id')) {
$form->loadObject($dictionaryfield_id);
$this->view->title = sprintf(
$this->translate('Dictionary Field: %s'),
$form->getObject()->dictionaryfield_name
);

$this->view->addLink = $this->view->qlink(
$this->translate('back'),
'director/data/dictionaryfield',
null,
array('class' => 'icon-left-big')
);


$this->getTabs()->add('editdictionaryfield', array(
'url' => 'director/data/dictionaryfield' . '?id=' . $dictionaryfield_id,
'label' => $this->translate('Edit dictionary field'),
))->activate('editdictionaryfield');

} else {
$this->view->title = $this->translate('Add dictionary field');

$this->getTabs()->add('adddictionaryfield', array(
'url' => 'director/data/dictionaryfield',
'label' => $this->view->title,
))->activate('adddictionaryfield');
}

$form->handleRequest();
$this->setViewScript('object/form');
}

protected function prepareTable($name)
{
$table = $this->loadTable($name)->setConnection($this->db());
Expand Down
25 changes: 25 additions & 0 deletions application/forms/DirectorDictionaryForm.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace Icinga\Module\Director\Forms;

use Icinga\Module\Director\Web\Form\DirectorObjectForm;
use Icinga\Authentication\Auth;

class DirectorDictionaryForm extends DirectorObjectForm
{
public function setup()
{
$this->addElement('text', 'dictionary_name', array(
'label' => $this->translate('dictionary name'),
'description' => $this->translate(
'poop'
),
'required' => true,
));
$this->addSimpleDisplayGroup(array('dictionary_name'), 'dictionary', array(
'legend' => $this->translate('Data dictionary')
));

$this->setButtons();
}
}
81 changes: 81 additions & 0 deletions application/forms/DirectorDictionaryfieldForm.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
<?php

namespace Icinga\Module\Director\Forms;

use Icinga\Module\Director\Web\Form\DirectorObjectForm;
use Icinga\Authentication\Auth;

class DirectorDictionaryfieldForm extends DirectorObjectForm
{
public function setup()
{
$this->addElement('text', 'dictionaryfield_name', array(
'label' => $this->translate('Name'),
'description' => $this->translate(
'poop'
),
'required' => true,
));
$this->addElement('select', 'dictionary_id', array(
'label' => $this->translate('Dictionary'),
'description' => $this->translate(
'Dictionary poop'
),
'multiOptions' => $this->optionalEnum($this->enumDictionaries())
));
$this->addElement('select', 'datafield_id', array(
'label' => $this->translate('Datafield'),
'description' => $this->translate(
'Datafield poop'
),
'multiOptions' => $this->optionalEnum($this->enumDatafields())
));

$this->optionalBoolean(
'is_required',
$this->translate('Required'),
$this->translate('Whether to option is required')
);

$this->optionalBoolean(
'allow_multiple',
$this->translate('Allow Multiple'),
$this->translate('Whether to the field is an array of xxx')
);

$this->addSimpleDisplayGroup(array('dictionaryfield_name', 'dictionary_id', 'datafield_id', 'is_required', 'allow_multiple'),
'dictionaryfield', array(
'legend' => $this->translate('Dictionary Field')
));

$this->setButtons();
}

protected function enumDictionaries()
{
$db = $this->db->getDbAdapter();
$select = $db->select()->from(
'director_dictionary',
array(
'id',
'dictionary_name'
)
)->order('dictionary_name');

return $db->fetchPairs($select);
}

protected function enumDatafields()
{
$db = $this->db->getDbAdapter();
$select = $db->select()->from(
'director_datafield',
array(
'id',
'caption'
)
)->order('caption');

return $db->fetchPairs($select);
}
}
50 changes: 50 additions & 0 deletions application/tables/DictionaryTable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

namespace Icinga\Module\Director\Tables;

use Icinga\Module\Director\Web\Table\QuickTable;

class DictionaryTable extends QuickTable
{
protected $searchColumns = array(
'dictionary_name',
);

public function getColumns()
{
return array(
'id' => 'l.id',
'dictionary_name' => 'l.dictionary_name',
//'owner' => 'l.owner',
);
}

protected function getActionUrl($row)
{
return $this->url(
'director/data/dictionary',
array('2id' => $row->id)
);
}

public function getTitles()
{
$view = $this->view();
return array(
'dictionary_name' => $view->translate('Dictionary name'),
//'owner' => $view->translate('Owner'),
);
}

public function getBaseQuery()
{
$db = $this->connection()->getConnection();

$query = $db->select()->from(
array('l' => 'director_dictionary'),
array()
)->order('dictionary_name ASC');

return $query;
}
}
55 changes: 55 additions & 0 deletions application/tables/DictionaryfieldTable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php

namespace Icinga\Module\Director\Tables;

use Icinga\Module\Director\Web\Table\QuickTable;

class DictionaryfieldTable extends QuickTable
{
protected $searchColumns = array(
'dictionaryfield_name',
);

public function getColumns()
{
return array(
'id' => 'l.id',
'dictionary_id' => 'l.dictionary_id',
'datafield_id' => 'l.datafield_id',
'dictionaryfield_name' => 'l.dictionaryfield_name',
'is_required' => 'l.is_required',
'allow_multiple' => 'l.allow_multiple',
);
}

protected function getActionUrl($row)
{
return $this->url(
'director/data/dictionaryfield',
array(
'id' => $row->id
)
);
}

public function getTitles()
{
$view = $this->view();
return array(
'dictionaryfield_name' => $view->translate('Dictionary Field Name'),
//TODO: add related datafield value and dictionary name
);
}

public function getBaseQuery()
{
$db = $this->connection()->getConnection();

$query = $db->select()->from(
array('l' => 'director_dictionaryfield'),
array()
)->order('dictionaryfield_name ASC');

return $query;
}
}
56 changes: 56 additions & 0 deletions application/views/helpers/FormDictionary.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

/**
* View helper for extensible sets
*
* Avoid complaints about class names:
* @codingStandardsIgnoreStart
*/
class Zend_View_Helper_FormDictionary extends Zend_View_Helper_FormTextarea
{
/**
* Generates a 'textarea' element.
*
* @access public
*
* @param string|array $name If a string, the element name. If an
* array, all other parameters are ignored, and the array elements
* are extracted in place of added parameters.
*
* @param mixed $value The element value.
*
* @param array $attribs Attributes for the element tag.
*
* @return string The element XHTML.
*/
public function formDictionary($name, $value = null, $attribs = null)
{
$info = $this->_getInfo($name, $value, $attribs);
extract($info); // name, value, attribs, options, listsep, disable

// is it disabled?
$disabled = '';
if ($disable) {
// disabled.
$disabled = ' disabled="disabled"';
}

// Make sure that there are 'rows' and 'cols' values
// as required by the spec. noted by Orjan Persson.
if (empty($attribs['rows'])) {
$attribs['rows'] = (int) $this->rows;
}
if (empty($attribs['cols'])) {
$attribs['cols'] = (int) $this->cols;
}

// build the element
$xhtml = '<textarea name="' . $this->view->escape($name) . '"'
. ' id="' . $this->view->escape($id) . '"'
. $disabled
. $this->_htmlAttribs($attribs) . '>'
. json_encode($value, JSON_PRETTY_PRINT) . '</textarea>';

return $xhtml;
}
}
Loading