_config = Msd_Configuration::getInstance(); $this->_lang = Msd_Language::getInstance(); $this->setDisableLoadDefaultDecorators(true); $this->setDecorators(array('SubForm')); $this->addDisplayGroupPrefixPath( 'Msd_Form_Decorator', 'Msd/Form/Decorator/' ); $this->setDisplayGroupDecorators(array('DisplayGroup')); $this->_addActivateButton(); $this->_addSender(); $this->_addRecipient(); $this->_addButtonAddRecipientCc(); // add Recipients CC $ccElements = $this->_setRecipientCc( $this->_config->get('config.email.RecipientCc') ); $this->_addAttachement(); $this->_addEmailProgram(); // create and add display group $elements = array( 'sendEmail', 'SenderAddress', 'SenderName', 'RecipientAddress', 'RecipientName', 'AddCc'); // add cc-recipients if (count($ccElements)>0) { $elements = array_merge( $elements, $ccElements ); } $elements = array_merge( $elements, array( 'attachBackup', 'Maxsize', 'MaxsizeUnit', 'Program' ) ); $this->addDisplayGroup( $elements, 'email', array( 'disableLoadDefaultDecorators' => true, 'decorators' => array('DisplayGroup'), 'legend' => $this->_lang->getTranslator()->_('L_CONFIG_EMAIL') ) ); $elements = array( 'SendmailCall' ); $this->addDisplayGroup( $elements, 'sendmailConfig', array( 'disableLoadDefaultDecorators' => true, 'decorators' => array('DisplayGroup'), 'legend' => $this->_lang->getTranslator()->_('L_SENDMAIL'), 'class' => 'sendmailConfig', ) ); $elements = array( 'SMTPHost', 'SMTPPort', 'SMTPUserAuth', 'SMTPUser', 'SMTPPassword', 'SMTPUseSSL', ); $this->addDisplayGroup( $elements, 'smtpConfig', array( 'disableLoadDefaultDecorators' => true, 'decorators' => array('DisplayGroup'), 'legend' => $this->_lang->getTranslator()->_('L_SMTP'), 'class' => 'smtpConfig', ) ); } /** * Add e-mail activate button to form * * @return void */ private function _addActivateButton() { //Button send email $this->addElement( 'radio', 'sendEmail', array( 'class' => 'radio toggler', 'label' => 'L_SEND_MAIL_FORM', 'onclick' => "myToggle(this, 'y', 'emailToggle');", 'listsep' => ' ', 'disableLoadDefaultDecorators' => true, 'multiOptions' => array( 'y' => 'L_YES', 'n' => 'L_NO', ), 'decorators' => array('Default'), ) ); } /** * Add Cc-Recipients * * @param array $configRecipientCc All Cc-Recipients * * @return array Element names to add to display group */ private function _setRecipientCc($recipientsCc) { if ($recipientsCc === null) { return; } if (count($recipientsCc) == 0) { return; } $elements = array(); //$i = 0; foreach ($recipientsCc as $i => $recipient) { //Recipient CC email $this->addElement( 'text', 'RecipientCc_'.$i.'_Address', array( 'class' => 'text emailToggle', 'label' => 'L_EMAIL_CC', 'listsep' => ' ', 'size' => 30, 'disableLoadDefaultDecorators' => true, 'decorators' => array('LineStart'), 'validators' => array('EmailAddress'), ) ); //CC name $this->addElement( 'text', 'RecipientCc_'.$i.'_Name', array( 'class' => 'text emailToggle', 'label' => 'L_NAME', 'listsep' => ' ', 'size' => 30, 'disableLoadDefaultDecorators' => true, 'decorators' => array('LineMiddle'), ) ); //button delete recipient $confirmDelete = sprintf( $this->_lang->getTranslator()->_('L_CONFIRM_RECIPIENT_DELETE'), $recipient['Name'] ); $confirmDelete = Msd_Html::getJsQuote($confirmDelete, true); $this->addElement( 'button', 'DeleteCc_'.$i, array( 'disableLoadDefaultDecorators' => true, 'content' => $this->getView()->getIcon('delete') . ' ' . $this->_lang->getTranslator()->_('L_DELETE'), 'decorators' => array('LineEnd'), 'escape' => false, 'label' => '', 'class' => 'Formbutton emailToggle', 'onclick' => 'if (!confirm(\'Ha\')) return false;' .' deleteEmailReciptientCc(\'' . $i .'\');', ) ); $elements = array_merge( $elements, array( 'RecipientCc_'.$i.'_Address', 'RecipientCc_'.$i.'_Name', 'DeleteCc_'.$i, ) ); $i++; } return $elements; } /** * Adds line with sender inputs * * @return void */ private function _addSender() { //Sender email $this->addElement( 'text', 'SenderAddress', array( 'class' => 'text emailToggle', 'label' => 'L_EMAIL_SENDER', 'size' => 30, 'listsep' => ' ', 'disableLoadDefaultDecorators' => true, 'decorators' => array('LineStart'), 'validators' => array( new Zend_Validate_NotEmpty(Zend_Validate_NotEmpty::STRING), 'EmailAddress' ), ) ); //Sender name $this->addElement( 'text', 'SenderName', array( 'class' => 'text emailToggle', 'label' => 'L_NAME', 'size' => 30, 'listsep' => ' ', 'disableLoadDefaultDecorators' => true, 'decorators' => array('LineEnd'), 'validators' => array('NotEmpty'), ) ); } /** * Add button to add a cc-recipient * * @return void */ private function _addButtonAddRecipientCc() { $this->addElement( 'button', 'AddCc', array( 'disableLoadDefaultDecorators' => true, 'content' => $this->getView()->getIcon('plus') . ' ' . $this->_lang->getTranslator()->_('L_ADD_RECIPIENT'), 'decorators' => array('Default'), 'escape' => false, 'label' => '', 'class' => 'Formbutton emailToggle', 'onclick' => "addEmailReciptientCc();", ) ); } /** * Add line with recipient name and e-mail * * @return void */ private function _addRecipient() { //Recipient email $this->addElement( 'text', 'RecipientAddress', array( 'class' => 'text emailToggle', 'label' => 'L_EMAIL_RECIPIENT', 'size' => 30, 'listsep' => ' ', 'disableLoadDefaultDecorators' => true, 'decorators' => array('LineStart'), 'validators' => array('EmailAddress'), ) ); //Recipient name $this->addElement( 'text', 'RecipientName', array( 'class' => 'text emailToggle', 'label' => 'L_NAME', 'size' => 30, 'listsep' => ' ', 'disableLoadDefaultDecorators' => true, 'decorators' => array('LineEnd'), ) ); } /** * Add line attachement and -size to form * * @return void */ private function _addAttachement() { //Attach backup $this->addElement( 'radio', 'attachBackup', array( 'class' => 'radio emailToggle toggler', 'label' => 'L_ATTACH_BACKUP', 'onclick' => "myToggle(this, 'y', 'attachToggle');", 'listsep' => ' ', 'disableLoadDefaultDecorators' => true, 'multiOptions' => array( 'y' => 'L_YES', 'n' => 'L_NO', ), 'decorators' => array('Default'), ) ); //Max filesize $this->addElement( 'text', 'Maxsize', array( 'class' => 'text right emailToggle attachToggle', 'size' => 6, 'maxlength' => 6, 'label' => 'L_EMAIL_MAXSIZE', 'listsep' => ' ', 'disableLoadDefaultDecorators' => true, 'decorators' => array('LineStart'), 'validators' => array('Digits'), ) ); //Max filesize unit $this->addElement( 'select', 'MaxsizeUnit', array( 'class' => 'select emailToggle attachToggle', 'listsep' => ' ', 'multiOptions' => array( 'kb' => 'L_UNIT_KB', 'mb' => 'L_UNIT_MB', ), 'disableLoadDefaultDecorators' => true, 'decorators' => array('LineEnd'), ) ); } /** * Add select for e-mail program * * @return void */ private function _addEmailProgram() { //Mail program $this->addElement( 'select', 'Program', array( 'class' => 'select emailToggle', 'label' => 'L_MAILPROGRAM', 'id' => 'toggleEmailSettings', 'listsep' => ' ', 'multiOptions' => array( 'php' => 'L_PHPMAIL', 'sendmail' => 'L_SENDMAIL', 'smtp' => 'L_SMTP' ), 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), 'onchange' => 'toggleEmailProgram();', ) ); $this->addElement( 'text', 'SendmailCall', array( 'class' => 'text', 'label' => $this->_lang->getTranslator()->_('L_CALL'), 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), ) ); $this->addElement( 'text', 'SMTPHost', array( 'class' => 'text', 'label' => $this->_lang->getTranslator()->_('L_SMTP_HOST'), 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), ) ); $this->addElement( 'text', 'SMTPPort', array( 'class' => 'text', 'label' => $this->_lang->getTranslator()->_('L_SMTP_PORT'), 'validators' => array('Digits'), 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), ) ); $this->addElement( 'radio', 'SMTPUserAuth', array( 'class' => 'radio toggler', 'label' => $this->_lang->getTranslator()->_('L_AUTHORIZE'), 'listsep' => ' ', 'multiOptions' => array( 'y' => 'L_YES', 'n' => 'L_NO', ), 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), 'onclick' => "myToggle(this, 'y', 'SMTPAuthToggle');", ) ); $this->addElement( 'text', 'SMTPUser', array( 'class' => 'text SMTPAuthToggle', 'label' => $this->_lang->getTranslator()->_('L_USERNAME'), 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), 'rowclass' => 'SMTPAuth', ) ); $this->addElement( 'text', 'SMTPPassword', array( 'class' => 'text SMTPAuthToggle', 'label' => $this->_lang->getTranslator()->_('L_PASSWORD'), 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), 'rowclass' => 'SMTPAuth', ) ); $this->addElement( 'radio', 'SMTPUseSSL', array( 'class' => 'radio', 'label' => $this->_lang->getTranslator()->_('L_USE_SSL'), 'listsep' => ' ', 'multiOptions' => array( 'y' => 'L_YES', 'n' => 'L_NO', ), 'disableLoadDefaultDecorators' => true, 'decorators' => array('Default'), ) ); } /** * Extracts an multi array from flat element names and values * * @param array $data The values to extract index and values from * * @return array The converted array */ public function getValidValues($data) { $values = parent::getValidValues($data, true); $newArray = array(); while (false !== (list($key, $value) = each($values))) { if (substr($key, 0, 18) != 'email_RecipientCc_') { continue; } list($prefix, $index, $fieldKey) = explode('_', $key); if (!isset($values['email_Recipient'])) { $values[$prefix] = array(); } if (!isset($newArray[$index])) { $newArray[$index] = array(); } $newArray[$index][$fieldKey] = $value; unset($values[$key]); } $values['email_RecipientCc'] = array_values($newArray); return $values; } /** * Set default values * * @param $defaults * * @return Zend_Form */ public function setDefaults($defaults) { if (isset($defaults['email']['RecipientCc'])) { $recipientCc = array(); while (false !== (list($recipientCcId, $recipientCcData) = each($defaults['email']['RecipientCc']))) { foreach ($recipientCcData as $key => $value) { $recipientCc['RecipientCc_' . $recipientCcId . '_' . $key] = $value; } } unset($defaults['email']['RecipientCc']); $defaults['email'] = array_merge( $defaults['email'], $recipientCc ); } return parent::setDefaults($defaults); } /** * Set input default value * * @param string $name * @param string $value * * @return void */ public function setDefault($name, $value) { $name = str_replace('.', '_', $name); parent::setDefault($name, $value); } }