Merge branch 'cc-5709-airtime-analyzer' of github.com:sourcefabric/Airtime into cc-5709-airtime-analyzer

This commit is contained in:
Albert Santoni 2014-05-26 19:07:27 -04:00
commit 7caa42cf69
2 changed files with 124 additions and 76 deletions

View File

@ -15,39 +15,62 @@ class Application_Form_EditAudioMD extends Zend_Form
'value' => $p_id 'value' => $p_id
)); ));
// Add title field // Add title field
$this->addElement('text', 'track_title', array( /*$this->addElement('text', 'track_title', array(
'label' => _('Title:'), 'label' => _('Title:'),
'class' => 'input_text', 'class' => 'input_text',
'filters' => array('StringTrim'), 'filters' => array('StringTrim'),
)); ));*/
$track_title = new Zend_Form_Element_Text('track_title');
$track_title->class = 'input_text';
$track_title->setLabel(_('Title:'))
->setFilters(array('StringTrim'))
->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($track_title);
// Add artist field // Add artist field
$this->addElement('text', 'artist_name', array( /*$this->addElement('text', 'artist_name', array(
'label' => _('Creator:'), 'label' => _('Creator:'),
'class' => 'input_text', 'class' => 'input_text',
'filters' => array('StringTrim'), 'filters' => array('StringTrim'),
)); ));*/
$artist_name = new Zend_Form_Element_Text('artist_name');
$artist_name->class = 'input_text';
$artist_name->setLabel(_('Creator:'))
->setFilters(array('StringTrim'))
->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($artist_name);
// Add album field // Add album field
$this->addElement('text', 'album_title', array( $album_title = new Zend_Form_Element_Text('album_title');
'label' => _('Album:'), $album_title->class = 'input_text';
'class' => 'input_text', $album_title->setLabel(_('Album:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));;
$this->addElement($album_title);
// Add track number field // Add track number field
$this->addElement('text', 'track_number', array( $track_number = new Zend_Form_Element('track_number');
'label' => _('Track:'), $track_number->class = 'input_text';
'class' => 'input_text', $track_number->setLabel('Track Number:')
'filters' => array('StringTrim'), ->setFilters(array('StringTrim'))
)); ->setValidators(array(new Zend_Validate_Digits()));
$this->addElement($track_number);
// Add genre field // Add genre field
$this->addElement('text', 'genre', array( $genre = new Zend_Form_Element('genre');
'label' => _('Genre:'), $genre->class = 'input_text';
'class' => 'input_text', $genre->setLabel(_('Genre:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 64))
));
$this->addElement($genre);
// Add year field // Add year field
$year = new Zend_Form_Element_Text('year'); $year = new Zend_Form_Element_Text('year');
@ -63,32 +86,44 @@ class Application_Form_EditAudioMD extends Zend_Form
$this->addElement($year); $this->addElement($year);
// Add label field // Add label field
$this->addElement('text', 'label', array( $label = new Zend_Form_Element('label');
'label' => _('Label:'), $label->class = 'input_text';
'class' => 'input_text', $label->setLabel(_('Label:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($label);
// Add composer field // Add composer field
$this->addElement('text', 'composer', array( $composer = new Zend_Form_Element('composer');
'label' => _('Composer:'), $composer->class = 'input_text';
'class' => 'input_text', $composer->setLabel(_('Composer:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($composer);
// Add conductor field // Add conductor field
$this->addElement('text', 'conductor', array( $conductor = new Zend_Form_Element('conductor');
'label' => _('Conductor:'), $conductor->class = 'input_text';
'class' => 'input_text', $conductor->setLabel(_('Conductor:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($conductor);
// Add mood field // Add mood field
$this->addElement('text', 'mood', array( $mood = new Zend_Form_Element('mood');
'label' => _('Mood:'), $mood->class = 'input_text';
'class' => 'input_text', $mood->setLabel(_('Mood:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 64))
));
$this->addElement($mood);
// Add bmp field // Add bmp field
$bpm = new Zend_Form_Element_Text('bpm'); $bpm = new Zend_Form_Element_Text('bpm');
@ -101,32 +136,44 @@ class Application_Form_EditAudioMD extends Zend_Form
$this->addElement($bpm); $this->addElement($bpm);
// Add copyright field // Add copyright field
$this->addElement('text', 'copyright', array( $copyright = new Zend_Form_Element('copyright');
'label' => _('Copyright:'), $copyright->class = 'input_text';
'class' => 'input_text', $copyright->setLabel(_('Copyright:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($copyright);
// Add isrc number field // Add isrc number field
$this->addElement('text', 'isrc_number', array( $isrc_number = new Zend_Form_Element('isrc_number');
'label' => _('ISRC Number:'), $isrc_number->class = 'input_text';
'class' => 'input_text', $isrc_number->setLabel(_('ISRC Number:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($isrc_number);
// Add website field // Add website field
$this->addElement('text', 'info_url', array( $info_url = new Zend_Form_Element('info_url');
'label' => _('Website:'), $info_url->class = 'input_text';
'class' => 'input_text', $info_url->setLabel(_('Website:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($info_url);
// Add language field // Add language field
$this->addElement('text', 'language', array( $language = new Zend_Form_Element('language');
'label' => _('Language:'), $language->class = 'input_text';
'class' => 'input_text', $language->setLabel(_('Language:'))
'filters' => array('StringTrim') ->setFilters(array('StringTrim'))
)); ->setValidators(array(
new Zend_Validate_StringLength(array('max' => 512))
));
$this->addElement($language);
// Add the submit button // Add the submit button
$this->addElement('button', 'editmdsave', array( $this->addElement('button', 'editmdsave', array(

View File

@ -222,7 +222,6 @@ class Rest_MediaController extends Zend_Rest_Controller
$requestData = json_decode($this->getRequest()->getRawBody(), true); $requestData = json_decode($this->getRequest()->getRawBody(), true);
$whiteList = $this->removeBlacklistedFieldsFromRequestData($requestData); $whiteList = $this->removeBlacklistedFieldsFromRequestData($requestData);
$whiteList = $this->stripTimeStampFromYearTag($whiteList); $whiteList = $this->stripTimeStampFromYearTag($whiteList);
$whiteList = $this->truncateGenreTag($whiteList);
if (!$this->validateRequestData($file, $whiteList)) { if (!$this->validateRequestData($file, $whiteList)) {
$file->save(); $file->save();
@ -382,12 +381,29 @@ class Rest_MediaController extends Zend_Rest_Controller
$resp->appendBody("ERROR: Invalid data"); $resp->appendBody("ERROR: Invalid data");
} }
private function validateRequestData($file, $whiteList) private function validateRequestData($file, &$whiteList)
{ {
// EditAudioMD form is used here for validation // EditAudioMD form is used here for validation
$fileForm = new Application_Form_EditAudioMD(); $fileForm = new Application_Form_EditAudioMD();
$fileForm->startForm($file->getDbId()); $fileForm->startForm($file->getDbId());
$fileForm->populate($whiteList); $fileForm->populate($whiteList);
/*
* Here we are truncating metadata of any characters greater than the
* max string length set in the database. In the rare case a track's
* genre is more than 64 chars, for example, we don't want to reject
* tracks for that reason
*/
foreach($whiteList as $tag => &$value) {
if ($fileForm->getElement($tag)) {
$stringLengthValidator = $fileForm->getElement($tag)->getValidator('StringLength');
//$stringLengthValidator will be false if the StringLength validator doesn't exist on the current element
//in which case we don't have to truncate the extra characters
if ($stringLengthValidator) {
$value = substr($value, 0, $stringLengthValidator->getMax());
}
}
}
if (!$fileForm->isValidPartial($whiteList)) { if (!$fileForm->isValidPartial($whiteList)) {
$file->setDbImportStatus(2); $file->setDbImportStatus(2);
@ -510,20 +526,5 @@ class Rest_MediaController extends Zend_Rest_Controller
} }
return $metadata; return $metadata;
} }
/** The genre tag in our cc_files schema is currently a varchar(64). It's possible for MP3 genre tags
* to be longer than that, so we have to truncate longer genres. (We've seen ridiculously long genre tags.)
* @param string array $metadata
*/
private function truncateGenreTag($metadata)
{
if (isset($metadata["genre"]))
{
if (strlen($metadata["genre"]) >= 64) {
$metadata["genre"] = substr($metadata["genre"], 0, 64);
}
}
return $metadata;
}
} }