Skip to content

Commit

Permalink
implemented editable serversettings
Browse files Browse the repository at this point in the history
  • Loading branch information
peaceman committed Apr 24, 2012
1 parent 54dc880 commit efadf8e
Show file tree
Hide file tree
Showing 11 changed files with 302 additions and 9 deletions.
2 changes: 2 additions & 0 deletions application/configs/application.ini
Expand Up @@ -19,6 +19,8 @@ resources.db.params.host = "localhost"
resources.db.params.dbname = "9_tr"
resources.db.params.username = "9_tr"
resources.db.params.password = "googli23"
resources.db.params.profiler.class = "Zend_Db_Profiler_Firebug"
resources.db.params.profiler.enabled = true

[staging : production]

Expand Down
43 changes: 41 additions & 2 deletions application/controllers/ServerController.php
Expand Up @@ -27,12 +27,25 @@ public function createAction()
public function editAction()
{
$serverModel = $this->_getServerModelFromRequestOrRedirectToListing();
$serverEditForm = new Application_Form_ServerEdit(array('model' => $serverModel, 'serverTypes' => $this->_getAllServerTypesAsArray()));
$serverEditForm = new Application_Form_ServerEdit(array(
'model' => $serverModel,
'serverTypes' => $this->_getAllServerTypesAsArray(),
));

/** @var $request Zend_Controller_Request_Http */
$request = $this->getRequest();
if ($request->isPost() && $serverEditForm->isValid($request->getPost())) {
$serverModel->setFromArray($serverEditForm->getValues());
$formValues = $serverEditForm->getValues();
$settings = $formValues['settings'];
unset($formValues['settings']);

foreach ($settings as $settingName => $value) {
$serverSetting = $serverModel->getServerSettingByName($settingName);
$serverSetting->setValue($value);
$this->_getServerSetting2ServerMapper()->save($serverSetting);
}

$serverModel->setFromArray($formValues);
$this->_getServerMapper()->save($serverModel);
$this->getFlashMessenger()->addSuccessMessage(sprintf('successfully updated server %s', $serverModel->getName()));
$this->_redirect($this->url('index'), array('exit' => true));
Expand All @@ -44,6 +57,19 @@ public function editAction()
));
}

/**
* @return Application_Model_ServerSetting2ServerMapper
*/
protected function _getServerSetting2ServerMapper()
{
static $serverSetting2ServerMapper;
if ($serverSetting2ServerMapper === null) {
$serverSetting2ServerMapper = new Application_Model_ServerSetting2ServerMapper();
}

return $serverSetting2ServerMapper;
}

public function deleteAction()
{
$serverModel = $this->_getServerModelFromRequestOrRedirectToListing();
Expand Down Expand Up @@ -73,6 +99,19 @@ protected function _getServerMapper()
return $serverMapper;
}

/**
* @return Application_Model_ServerSettingMapper
*/
protected function _getServerSettingMapper()
{
static $serverSettingMapper;
if ($serverSettingMapper === null) {
$serverSettingMapper = new Application_Model_ServerSettingMapper;
}

return $serverSettingMapper;
}

/**
* @return Application_Model_ServerTypeMapper
*/
Expand Down
12 changes: 11 additions & 1 deletion application/forms/ServerEdit.php
Expand Up @@ -6,12 +6,22 @@
*/
class Application_Form_ServerEdit extends Application_Form_ServerCreate
{
/**
* @var Application_Model_Server
*/
protected $_model;

public function init()
{
parent::init();

$this->getElement('server_type_id')->setAttrib('disabled', 'disabled');
$this->getElement('submit')->setLabel('Edit server');
$submitElement = $this->getElement('submit');
$this->removeElement('submit');

$this->addSubForm(new Application_Form_ServerSettings(array('model' => $this->_model)), 'settings');
$submitElement->setLabel('Edit server');
$this->addElement($submitElement);
}

public function isValid($data)
Expand Down
145 changes: 145 additions & 0 deletions application/forms/ServerSettings.php
@@ -0,0 +1,145 @@
<?php
/**
* User: peaceman
* Date: 4/20/12
* Time: 11:22 PM
*/
class Application_Form_ServerSettings extends \SAP\Form
{
/**
* @var Application_Model_Server
*/
protected $_model;

public function init()
{
$serverSettings = $this->_model->getServerSettings();

foreach ($serverSettings as $serverSetting) {
$element = $this->_getElementForServerSetting($serverSetting);
$this->addElement($element);
}
}

protected function _getElementForServerSetting(Application_Model_ServerSetting2Server $serverSetting)
{
$name = $serverSetting->getSetting()->getName();

switch ($name) {
case 'MaxUser':
$element = new Zend_Form_Element_Text($name);
$element->setRequired(true)
->setAllowEmpty(false)
->addValidator(new Zend_Validate_Int(), true)
->addValidator(new Zend_Validate_GreaterThan(0));
break;
case 'Password':
$element = new Zend_Form_Element_Text($name);
$element->setRequired(true)
->setAllowEmpty(false)
->addValidator(new Zend_Validate_Alnum(false));
break;
case 'PortBase':
$element = new Zend_Form_Element_Text($name);
$element->setRequired(true)
->setAllowEmpty(false)
->addValidator(new Zend_Validate_Int(), true)
->addValidator(new Zend_Validate_GreaterThan(1024));
break;
case 'ShowLastSongs':
$element = new Zend_Form_Element_Text($name);
$element->setRequired(true)
->setAllowEmpty(false)
->addValidator(new Zend_Validate_Int(), true)
->addValidator(new Zend_Validate_GreaterThan(0))
->addValidator(new Zend_Validate_LessThan(21));
break;
case 'SrcIP':
$element = new Zend_Form_Element_Text($name);
$element->setRequired(true)
->setAllowEmpty(false)
->addValidator(new Zend_Validate_Callback(array($this, 'validateIpOrAny')));
break;
case 'AdminPassword':
$element = new Zend_Form_Element_Text($name);
$element->setRequired(true)
->setAllowEmpty(false)
->addValidator(new Zend_Validate_Alnum(false));
break;
case 'AutoDumpUsers':
$element = new Zend_Form_Element_Checkbox($name);
$element->setRequired(true)
->setAllowEmpty(false);
break;
case 'AutoDumpSourceTime':
$element = new Zend_Form_Element_Text($name);
$element->setRequired(true)
->setAllowEmpty(false)
->addValidator(new Zend_Validate_Int())
->addValidator(new Zend_Validate_GreaterThan(0));
break;
case 'IntroFile':
$element = new Zend_Form_Element_Text($name);
break;
case 'BackupFile':
$element = new Zend_Form_Element_Text($name);
break;
case 'TitleFormat':
$element = new Zend_Form_Element_Text($name);
break;
case 'URLFormat':
$element = new Zend_Form_Element_Text($name);
break;
case 'PublicServer':
$element = new Zend_Form_Element_Select($name);
$element->setRequired(true)
->setAllowEmpty(false)
->setMultiOptions(array(
'default',
'always',
'never',
));
break;
case 'AllowRelay':
$element = new Zend_Form_Element_Checkbox($name);
$element->setRequired(true)
->setAllowEmpty(false);
break;
case 'AllowPublicRelay':
$element = new Zend_Form_Element_Checkbox($name);
$element->setRequired(true)
->setAllowEmpty(false);
break;
case 'MetaInterval':
$element = new Zend_Form_Element_Text($name);
$element->setRequired(true)
->setAllowEmpty(false)
->addValidator(new Zend_Validate_Int());
break;
}

$element->setLabel($name)
->setValue($serverSetting->getValue());

return $element;
}

/**
* @param string $srcIp
* @return bool
*/
public function validateIpOrAny($srcIp)
{
static $ipValidator;

if (strtolower($srcIp) === 'any') {
return true;
}

if ($ipValidator === null) {
$ipValidator = new Zend_Validate_Ip();
}

return $ipValidator->isValid($srcIp);
}
}
2 changes: 1 addition & 1 deletion application/models/DbTable/ServerSetting2Server.php
Expand Up @@ -6,5 +6,5 @@
*/
class Application_Model_DbTable_ServerSetting2Server extends Zend_Db_Table_Abstract
{
protected $_table = 'server_setting2server';
protected $_name = 'server_setting2server';
}
89 changes: 89 additions & 0 deletions application/models/Server.php
Expand Up @@ -11,6 +11,11 @@ class Application_Model_Server extends \SAP\Model\AbstractModel
*/
protected $_serverType;

/**
* @var Application_Model_ServerSetting2Server[]
*/
protected $_serverSettings;

public function getName()
{
return $this->_get('name');
Expand Down Expand Up @@ -43,6 +48,90 @@ public function getServerType()
return $this->_serverType;
}

/**
* @param string $name
* @return Application_Model_ServerSetting2Server|null
* @throws InvalidArgumentException
*/
public function getServerSettingByName($name)
{
if (!is_string($name)) {
throw new InvalidArgumentException('expected a string got ' . gettype($name));
}

$allServerSettings = $this->getServerSettings();
foreach ($allServerSettings as $serverSetting) {
if ($serverSetting->getSetting()->getName() === $name) {
return $serverSetting;
}
}

return null;
}

/**
* @return Application_Model_ServerSetting2Server[]
*/
public function getServerSettings()
{
if ($this->_serverSettings === null) {
$serverSettings = $this->_getServerSetting2ServerMapper()->fetchAll(array(
'server_id = ?' => $this->getId()
));

$allPossibleServerSettings = $this->_getServerSettingMapper()->fetchAll(array(
'server_type_id = ? OR server_type_id IS NULL' => $this->getServerTypeId(),
));
$allPossibleServerSettingIds = array_map(function($serverSetting) {
/** @var $serverSetting Application_Model_ServerSetting */
return $serverSetting->getId();
}, $allPossibleServerSettings);

$serverSettingIds = array_map(function($serverSetting) {
/** @var $serverSetting Application_Model_ServerSetting2Server */
return $serverSetting->getSettingId();
}, $serverSettings);

$missingServerSettingIds = array_diff($allPossibleServerSettingIds, $serverSettingIds);
foreach ($missingServerSettingIds as $missingServerSettingId) {
$serverSetting = new Application_Model_ServerSetting2Server();
$serverSetting->setFromArray(array(
'server_id' => $this->getId(),
'setting_id' => $missingServerSettingId,
));

$serverSettings[] = $serverSetting;
}

$this->_serverSettings = $serverSettings;
}

return $this->_serverSettings;
}

protected function _getServerSettingMapper()
{
static $serverSettingMapper;
if ($serverSettingMapper === null) {
$serverSettingMapper = new Application_Model_ServerSettingMapper();
}

return $serverSettingMapper;
}

/**
* @return Application_Model_ServerSetting2ServerMapper
*/
protected function _getServerSetting2ServerMapper()
{
static $serverSetting2ServerMapper;
if ($serverSetting2ServerMapper === null) {
$serverSetting2ServerMapper = new Application_Model_ServerSetting2ServerMapper;
}

return $serverSetting2ServerMapper;
}

/**
* @return Application_Model_ServerTypeMapper
*/
Expand Down
3 changes: 3 additions & 0 deletions application/models/ServerSetting2Server.php
Expand Up @@ -16,6 +16,9 @@ public function setSettingId($settingId)
$this->_set('setting_id', $settingId);
}

/**
* @return Application_Model_ServerSetting
*/
public function getSetting()
{
$serverSetting = $this->_getServerSettingMapper()->find($this->getSettingId());
Expand Down
2 changes: 1 addition & 1 deletion application/models/ServerSetting2ServerMapper.php
Expand Up @@ -4,7 +4,7 @@
* Date: 4/19/12
* Time: 10:34 PM
*/
class Application_Model_ServerSetting2ServerMapper extends \SAP\Model\AbstractModel
class Application_Model_ServerSetting2ServerMapper extends \SAP\Model\AbstractMapper
{
protected $_dbTableClass = 'Application_Model_DbTable_ServerSetting2Server';
protected $_modelClass = 'Application_Model_ServerSetting2Server';
Expand Down
2 changes: 1 addition & 1 deletion application/views/layouts/layout.phtml
Expand Up @@ -4,7 +4,7 @@
<head>
<?php echo $this->headTitle() ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl('css/framework.css') ?>"/>
<!--<link rel="stylesheet" type="text/css" href="<?php echo $this->baseUrl('css/framework.css') ?>"/>-->
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<script type="text/javascript" src="<?php echo $this->baseUrl('js/jquery.min.js') ?>"></script>
Expand Down

0 comments on commit efadf8e

Please sign in to comment.