diff --git a/airtime_mvc/application/forms/SoundcloudPreferences.php b/airtime_mvc/application/forms/SoundcloudPreferences.php index 1597bbe19..8fe460c15 100644 --- a/airtime_mvc/application/forms/SoundcloudPreferences.php +++ b/airtime_mvc/application/forms/SoundcloudPreferences.php @@ -1,4 +1,5 @@ addElement('text', 'SoundCloudUser', array( 'class' => 'input_text', 'label' => 'SoundCloud Email', - 'required' => true, 'filters' => array('StringTrim'), 'autocomplete' => 'off', 'value' => Application_Model_Preference::GetSoundCloudUser(), 'decorators' => array( 'ViewHelper' + ), + + // By default, 'allowEmpty' is true. This means that our custom + // validators are going to be skipped if this field is empty, + // which is something we don't want + 'allowEmpty' => false, + 'validators' => array( + new ConditionalNotEmpty(array('UploadToSoundcloudOption'=>'1')) ) )); @@ -56,12 +64,19 @@ class Application_Form_SoundcloudPreferences extends Zend_Form_SubForm $this->addElement('password', 'SoundCloudPassword', array( 'class' => 'input_text', 'label' => 'SoundCloud Password', - 'required' => true, 'filters' => array('StringTrim'), 'autocomplete' => 'off', 'value' => Application_Model_Preference::GetSoundCloudPassword(), 'decorators' => array( 'ViewHelper' + ), + + // By default, 'allowEmpty' is true. This means that our custom + // validators are going to be skipped if this field is empty, + // which is something we don't want + 'allowEmpty' => false, + 'validators' => array( + new ConditionalNotEmpty(array('UploadToSoundcloudOption'=>'1')) ) )); diff --git a/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php b/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php new file mode 100644 index 000000000..2f89fe667 --- /dev/null +++ b/airtime_mvc/application/forms/customvalidators/ConditionalNotEmpty.php @@ -0,0 +1,62 @@ + 'Value is required and can\'t be empty' + ); + + protected $_fieldValues; + + /** + * Constructs a new ConditionalNotEmpty validator. + * + * @param array $fieldValues - the names and expected values of the fields we're depending on; + * E.g., if we have a field that should only be validated when two other + * fields PARENT_1 and PARENT_2 have values of '1' and '0' respectively, then + * $fieldValues should contain ('PARENT_1'=>'1', 'PARENT_2'=>'0') + */ + public function __construct($fieldValues) + { + $this->_fieldValues = $fieldValues; + } + + /** + * Implements Zend_Validate_Abstract. + * Given names and expected values of the fields we're depending on ($_fieldValues), + * this function returns true if the expected values doesn't match the actual user input, + * or if $value is not empty. Returns false otherwise. + * + * @param String $value - this field's value + * @param array $context - names and values of the rest of the fields in this form + * @return boolean - true if valid; false otherwise + */ + public function isValid($value, $context = null) + { + if ($value != "") { + return true; + } + + if (is_array($context)) { + foreach($this->_fieldValues as $fieldName=>$fieldValue) { + if (!isset($context[$fieldName]) || $context[$fieldName] != $fieldValue) { + return true; + } + } + } elseif (is_string($context)) { + if (!isset($context) || $context != $fieldValue) { + return true; + } + } + + $this->_error(self::KEY_IS_EMPTY); + return false; + } +} + +?> diff --git a/airtime_mvc/public/.htaccess b/airtime_mvc/public/.htaccess index 3dfbebfef..48c40b1dd 100644 --- a/airtime_mvc/public/.htaccess +++ b/airtime_mvc/public/.htaccess @@ -11,5 +11,3 @@ RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] RewriteBase / - -SetEnv APPLICATION_ENV development