_lang = Msd_Language::getInstance(); $this->setDisableLoadDefaultDecorators(true); $this->setDecorators(array('SubForm')); $this->addDisplayGroupPrefixPath( 'Msd_Form_Decorator', 'Msd/Form/Decorator/' ); $this->setDisplayGroupDecorators(array('DisplayGroup')); $this->_addButtonFtpAdd(); $ftpConfig = $config->get('config.ftp'); $ftpKeys = array_keys($ftpConfig); $nrOfFtpProfiles = count($ftpKeys, 1); foreach ($ftpKeys as $ftpConnectionId) { $this->_addRadioActivated($ftpConnectionId); $this->_addInputTimeout($ftpConnectionId); $this->_addCheckboxPassiveMode($ftpConnectionId); $this->_addCheckboxSsl($ftpConnectionId); $this->_addInputServerAndPort($ftpConnectionId); $this->_addInputUserAndPass($ftpConnectionId); $this->_addInputPath($ftpConnectionId); if ($nrOfFtpProfiles > 1) { $buttonDelete = 'ftpDelete' . $ftpConnectionId; } else { $buttonDelete = ''; } $this->_addButtonsTestAndDelete($ftpConnectionId, $buttonDelete); $legend = $this->_lang->getTranslator()->_('L_FTP_CONNECTION') . ' ' . ($ftpConnectionId + 1); $this->addDisplayGroup( array( 'ftp_' . $ftpConnectionId . '_use', 'ftp_' . $ftpConnectionId . '_timeout', 'ftp_' . $ftpConnectionId . '_passiveMode', 'ftp_' . $ftpConnectionId . '_ssl', 'ftp_' . $ftpConnectionId . '_server', 'ftp_' . $ftpConnectionId . '_port', 'ftp_' . $ftpConnectionId . '_user', 'ftp_' . $ftpConnectionId . '_pass', 'ftp_' . $ftpConnectionId . '_dir', 'ftpCheck' . $ftpConnectionId, $buttonDelete, ), 'ftp' . $ftpConnectionId, array( 'disableLoadDefaultDecorators' => true, 'decorators' => array('DisplayGroup'), 'legend' => $legend, ) ); } } /** * Add button "Add ftp connection" * * @return void */ private function _addButtonFtpAdd() { $this->addElement( 'button', 'headElement', array( 'disableLoadDefaultDecorators' => true, 'content' => $this->getView()->getIcon('plus') . ' ' . $this->_lang->getTranslator()->_('L_FTP_ADD_CONNECTION'), 'decorators' => array('Default'), 'escape' => false, 'label' => '', 'class' => 'Formbutton', 'onclick' => "addFtpConnection();", ) ); } /** * Add radio "ftp activated" * * @param int $index * * @return void */ private function _addRadioActivated($index) { $this->addElement( 'radio', 'ftp_' . $index . '_use', array( 'class' => 'radio toggler', 'label' => 'L_FTP_TRANSFER', 'onclick' => "myToggle(this, 'y', 'ftpToggle" . $index . "');", 'listsep' => ' ', 'disableLoadDefaultDecorators' => true, 'multiOptions' => array( 'y' => 'L_ACTIVATED', 'n' => 'L_NOT_ACTIVATED', ), 'decorators' => array('Default'), ) ); } /** * Add input "ftp timeout" * * @param int $index * * @return void */ private function _addInputTimeout($index) { $this->addElement( 'text', 'ftp_' . $index . '_timeout', array( 'class' => 'text ftpToggle' . $index, 'label' => 'L_FTP_TIMEOUT', 'secondLabel' => 'L_SECONDS', 'disableLoadDefaultDecorators' => true, 'size' => 3, 'maxlength' => 3, 'decorators' => array('DoubleLabel'), 'validators' => array('Digits'), ) ); } /** * Add checkbox "passive mode" * * @param int $index * * @return void */ private function _addCheckboxPassiveMode($index) { $this->addElement( 'checkbox', 'ftp_' . $index . '_passiveMode', array( 'class' => 'checkbox ftpToggle' . $index, 'label' => 'L_FTP_CHOOSE_MODE', 'secondLabel' => 'L_FTP_PASSIVE', 'disableLoadDefaultDecorators' => true, 'checkedValue' => 'y', 'uncheckedValue' => 'n', 'decorators' => array('DoubleLabel'), ) ); } /** * Add checkbox "ssl" * * @param int $index * * @return void */ private function _addCheckboxSsl($index) { $this->addElement( 'checkbox', 'ftp_' . $index . '_ssl', array( 'class' => 'checkbox ftpToggle' . $index, 'label' => 'L_FTP_SSL', 'secondLabel' => 'L_FTP_USESSL', 'disableLoadDefaultDecorators' => true, 'checkedValue' => 'y', 'uncheckedValue' => 'n', 'decorators' => array('DoubleLabel'), ) ); } /** * Add input "server" * * @param int $index * * @return void */ private function _addInputServerAndPort($index) { $this->addElement( 'text', 'ftp_' . $index . '_server', array( 'class' => 'text ftpToggle' . $index, 'label' => 'L_FTP_SERVER', 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), ) ); $this->addElement( 'text', 'ftp_' . $index . '_port', array( 'class' => 'text ftpToggle' . $index, 'label' => 'L_FTP_PORT', 'disableLoadDefaultDecorators' => true, 'size' => 4, 'maxlength' => 5, 'validators' => array('Digits'), 'decorators' => array('Default'), ) ); } /** * Add input "user" * * @param int $index * * @return void */ private function _addInputUserAndPass($index) { $this->addElement( 'text', 'ftp_' . $index . '_user', array( 'class' => 'text ftpToggle' . $index, 'label' => 'L_FTP_USER', 'disableLoadDefaultDecorators' => true, 'size' => 60, 'decorators' => array('Default'), ) ); $this->addElement( 'password', 'ftp_' . $index . '_pass', array( 'class' => 'text ftpToggle' . $index, 'label' => 'L_FTP_PASS', 'disableLoadDefaultDecorators' => true, 'size' => 60, 'decorators' => array('Default'), 'renderPassword' => true, ) ); } /** * Add input server * * @param int $index * * @return void */ private function _addInputPath($index) { $this->addElement( 'text', 'ftp_' . $index . '_dir', array( 'class' => 'text ftpToggle' . $index, 'label' => 'L_DIR', 'disableLoadDefaultDecorators' => true, 'size' => 60, 'decorators' => array('Default'), ) ); } /** * Add Button "Test connection" * Add Button "Delete connection" * * @param int $index * @param string $buttonDelete * * @return void */ private function _addButtonsTestAndDelete($index, $buttonDelete) { if (!empty($buttonDelete)) { $buttonDecorator = 'LineStart'; } else { $buttonDecorator = 'Default'; } $this->addElement( 'button', 'ftpCheck' . $index, array( 'disableLoadDefaultDecorators' => true, 'content' => $this->getView()->getIcon('Connect', '', 16) . ' ' . $this->_lang->getTranslator()->_('L_TESTCONNECTION'), 'decorators' => array($buttonDecorator), 'escape' => false, 'label' => '', 'class' => 'Formbutton ftpToggle' . $index, 'onclick' => "alert('checkConnection(" . $index . ")');", ) ); $this->addElement( 'button', 'ftpDelete' . $index, array( 'disableLoadDefaultDecorators' => true, 'content' => $this->getView()->getIcon('delete') . ' ' . $this->_lang->getTranslator()->_('L_FTP_CONNECTION_DELETE'), 'decorators' => array('LineEnd'), 'escape' => false, 'label' => '', 'class' => 'Formbutton', 'onclick' => "deleteFtpConnection(" . $index . ");", ) ); } /** * Get valid values * * @param array $data * * @return array */ public function getValidValues($data) { $values = parent::getValidValues($data, true); while (false !== (list($key, $value) = each($values))) { if (substr($key, 0, 4) != 'ftp_') { continue; } list(, $ftpId, $ftpKey) = explode('_', $key); if (!isset($values[$ftpId])) { $values[$ftpId] = array(); } $values[$ftpId][$ftpKey] = $value; unset($values[$key]); } return $values; } /** * Set default values * * @param array $defaults * * @return Zend_Form */ public function setDefaults($defaults) { if (!empty($defaults['ftp'])) { $ftp = array(); while ( false !== (list($ftpId, $ftpData) = each($defaults['ftp'])) ) { foreach ($ftpData as $ftpKey => $ftpValue) { $ftp['ftp_' . $ftpId . '_' . $ftpKey] = $ftpValue; } } $defaults['ftp'] = $ftp; } return parent::setDefaults($defaults); } /** * Set input default value * * @param string $name * @param string $value */ public function setDefault($name, $value) { $name = 'ftp_'.str_replace('.', '_', $name); parent::setDefault($name, $value); } }