Merge branch 'devel' of dev.sourcefabric.org:airtime into devel

This commit is contained in:
Daniel James 2012-08-14 17:20:15 +01:00
commit dc31525d4c
4 changed files with 114 additions and 249 deletions

View file

@ -113,9 +113,9 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$bl = new Application_Model_Block($p_blockId); $bl = new Application_Model_Block($p_blockId);
$storedCrit = $bl->getCriteria(); $storedCrit = $bl->getCriteria();
/* $modRoadMap stores the number of modifier rows each /* $modRoadMap stores the number of same criteria
* criteria row has. We need to know this so we display the * Ex: 3 Album titles, and 2 Track titles
* the form elements properly * We need to know this so we display the form elements properly
*/ */
$modRowMap = array(); $modRowMap = array();
@ -138,16 +138,21 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$critCount = 1; $critCount = 1;
} }
$modRowMap[$i] = $critCount-1; $modRowMap[$i] = $critCount;
/* Loop through all criteria with the same field /* Loop through all criteria with the same field
* Ex: all criteria for 'Album' * Ex: all criteria for 'Album'
*/ */
for ($j = 0; $j < $critCount; $j++) { for ($j = 0; $j < $critCount; $j++) {
/****************** CRITERIA ***********/ /****************** CRITERIA ***********/
if ($j < 1) { if ($j > 0) {
$criteria = new Zend_Form_Element_Select("sp_criteria_field_".$i); $invisible = ' sp-invisible';
$criteria->setAttrib('class', 'input_select sp_input_select') } else {
$invisible = '';
}
$criteria = new Zend_Form_Element_Select("sp_criteria_field_".$i."_".$j);
$criteria->setAttrib('class', 'input_select sp_input_select'.$invisible)
->setValue('Select criteria') ->setValue('Select criteria')
->setDecorators(array('viewHelper')) ->setDecorators(array('viewHelper'))
->setMultiOptions($criteriaOptions); ->setMultiOptions($criteriaOptions);
@ -162,7 +167,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$this->addElement($criteria); $this->addElement($criteria);
/****************** MODIFIER ***********/ /****************** MODIFIER ***********/
$criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$i); $criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$i."_".$j);
$criteriaModifers->setValue('Select modifier') $criteriaModifers->setValue('Select modifier')
->setAttrib('class', 'input_select sp_input_select') ->setAttrib('class', 'input_select sp_input_select')
->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'));
@ -182,7 +187,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$this->addElement($criteriaModifers); $this->addElement($criteriaModifers);
/****************** VALUE ***********/ /****************** VALUE ***********/
$criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$i); $criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$i."_".$j);
$criteriaValue->setAttrib('class', 'input_text sp_input_text') $criteriaValue->setAttrib('class', 'input_text sp_input_text')
->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'));
if ($i != 0 && !isset($criteriaKeys[$i])){ if ($i != 0 && !isset($criteriaKeys[$i])){
@ -194,7 +199,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$this->addElement($criteriaValue); $this->addElement($criteriaValue);
/****************** EXTRA ***********/ /****************** EXTRA ***********/
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$i); $criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$i."_".$j);
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text') $criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
->setDecorators(array('viewHelper')); ->setDecorators(array('viewHelper'));
if (isset($criteriaKeys[$i]) && isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"])) { if (isset($criteriaKeys[$i]) && isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"])) {
@ -205,50 +210,6 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
} }
$this->addElement($criteriaExtra); $this->addElement($criteriaExtra);
/* This is where the additional modifier rows get defined
* The additional row count starts at 0 and gets appended
* to the parent field name
*/
} else if (count($storedCrit["crit"][$criteriaKeys[$i]]) > 1) {
$n = $j - 1;
$criteria = new Zend_Form_Element_Select("sp_criteria_field_".$i."_".$n);
$criteria->setAttrib('class', 'input_select sp_input_select sp-invisible')
->setValue('Select criteria')
->setDecorators(array('viewHelper'))
->setMultiOptions($criteriaOptions)
->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]);
$this->addElement($criteria);
$criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$i."_".$n);
$criteriaModifers->setValue('Select modifier')
->setAttrib('class', 'input_select sp_input_select')
->setDecorators(array('viewHelper'));
if($criteriaType == "s"){
$criteriaModifers->setMultiOptions($stringCriteriaOptions);
}else{
$criteriaModifers->setMultiOptions($numericCriteriaOptions);
}
$criteriaModifers->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"]);
$this->addElement($criteriaModifers);
$criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$i."_".$n);
$criteriaValue->setAttrib('class', 'input_text sp_input_text')
->setDecorators(array('viewHelper'))
->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["value"]);
$this->addElement($criteriaValue);
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$i."_".$n);
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
->setDecorators(array('viewHelper'));
if (isset($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"])) {
$criteriaExtra->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["extra"]);
$criteriaValue->setAttrib('class', 'input_text sp_extra_input_text');
}else{
$criteriaExtra->setAttrib('disabled', 'disabled');
}
$this->addElement($criteriaExtra);
}
}//for }//for
}//for }//for

View file

@ -935,6 +935,7 @@ EOT;
public function saveSmartBlockCriteria($p_criteria) public function saveSmartBlockCriteria($p_criteria)
{ {
$data = $this->organizeSmartPlyalistCriteria($p_criteria); $data = $this->organizeSmartPlyalistCriteria($p_criteria);
// things we need to check // things we need to check
// 1. limit value shouldn't be empty and has upperbound of 24 hrs // 1. limit value shouldn't be empty and has upperbound of 24 hrs
// 2. sp_criteria or sp_criteria_modifier shouldn't be 0 // 2. sp_criteria or sp_criteria_modifier shouldn't be 0
@ -976,70 +977,11 @@ EOT;
} }
$criteriaFieldsUsed = array(); $criteriaFieldsUsed = array();
foreach ($data['criteria'] as $key=>$d){
$error = array();
// check for not selected select box
if ($d['sp_criteria_field'] == "0" || $d['sp_criteria_modifier'] == "0"){
$error[] = "You must select Criteria and Modifier";
} else if (in_array($d['sp_criteria_field'], $criteriaFieldsUsed)) {
$error[] = "Criteria fields can only be used once";
} else {
array_push($criteriaFieldsUsed, $d['sp_criteria_field']);
$column = CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$d['sp_criteria_field']]);
// validation on type of column
if ($d['sp_criteria_field'] == 'length') {
if (!preg_match("/^(\d{2}):(\d{2}):(\d{2})$/", $d['sp_criteria_value'])) {
$error[] = "'Length' should be in '00:00:00' format";
}
} else if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_value'])) {
$error[] = "The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00";
} else {
$result = Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_value']);
if (!$result["success"]) {
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
$error[] = $result["errMsg"];
}
}
if (isset($d['sp_criteria_extra'])) { if (isset($data['criteria'])) {
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_extra'])) { $critKeys = array_keys($data['criteria']);
$error[] = "The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00"; for ($i = 0; $i < count($critKeys); $i++) {
} else { foreach ($data['criteria'][$critKeys[$i]] as $key=>$d){
$result = Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_extra']);
if (!$result["success"]) {
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
$error[] = $result["errMsg"];
}
}
}
} else if ($column->getType() == PropelColumnTypes::INTEGER) {
if (!is_numeric($d['sp_criteria_value'])) {
$error[] = "The value has to be numeric";
}
// length check
if (intval($d['sp_criteria_value']) >= pow(2,31)) {
$error[] = "The value should be less then 2147483648";
}
} else if ($column->getType() == PropelColumnTypes::VARCHAR) {
if (strlen($d['sp_criteria_value']) > $column->getSize()) {
$error[] = "The value should be less ".$column->getSize()." characters";
}
}
}
if ($d['sp_criteria_value'] == "") {
$error[] = "Value cannot be empty";
}
if(count($error) > 0){
$errors[] = array("element"=>"sp_criteria_field_".$key, "msg"=>$error);
}
}// foreach
if (isset($data['modrow'])) {
$modKeys = array_keys($data['modrow']);
for ($i = 0; $i < count($modKeys); $i++) {
foreach ($data['modrow'][$modKeys[$i]] as $key=>$d){
$error = array(); $error = array();
// check for not selected select box // check for not selected select box
if ($d['sp_criteria_field'] == "0" || $d['sp_criteria_modifier'] == "0"){ if ($d['sp_criteria_field'] == "0" || $d['sp_criteria_modifier'] == "0"){
@ -1092,9 +1034,9 @@ EOT;
$error[] = "Value cannot be empty"; $error[] = "Value cannot be empty";
} }
if(count($error) > 0){ if(count($error) > 0){
$errors[] = array("element"=>"sp_criteria_field_".$modKeys[$i]."_".$key, "msg"=>$error); $errors[] = array("element"=>"sp_criteria_field_".$critKeys[$i]."_".$key, "msg"=>$error);
} }
}//end mod foreach }//end foreach
}//for loop }//for loop
}//if }//if
@ -1141,24 +1083,11 @@ EOT;
// delete criteria under $p_blockId // delete criteria under $p_blockId
CcBlockcriteriaQuery::create()->findByDbBlockId($this->id)->delete(); CcBlockcriteriaQuery::create()->findByDbBlockId($this->id)->delete();
foreach( $p_criteriaData['criteria'] as $d){
$qry = new CcBlockcriteria();
$qry->setDbCriteria($d['sp_criteria_field'])
->setDbModifier($d['sp_criteria_modifier'])
->setDbValue($d['sp_criteria_value'])
->setDbBlockId($this->id);
if (isset($d['sp_criteria_extra'])) {
$qry->setDbExtra($d['sp_criteria_extra']);
}
$qry->save();
}
//insert modifier rows //insert modifier rows
if (isset($p_criteriaData['modrow'])) { if (isset($p_criteriaData['criteria'])) {
$modKeys = array_keys($p_criteriaData['modrow']); $critKeys = array_keys($p_criteriaData['criteria']);
for ($i = 0; $i < count($modKeys); $i++) { for ($i = 0; $i < count($critKeys); $i++) {
foreach( $p_criteriaData['modrow'][$modKeys[$i]] as $d){ foreach( $p_criteriaData['criteria'][$critKeys[$i]] as $d){
$qry = new CcBlockcriteria(); $qry = new CcBlockcriteria();
$qry->setDbCriteria($d['sp_criteria_field']) $qry->setDbCriteria($d['sp_criteria_field'])
->setDbModifier($d['sp_criteria_modifier']) ->setDbModifier($d['sp_criteria_modifier'])
@ -1379,40 +1308,39 @@ EOT;
$index = strrpos($ele['name'], '_'); $index = strrpos($ele['name'], '_');
/* Get criteria row index. /* Strip field name of modifier index
* We only need this if there is a modifier row * Ex: sp_criteria_field_0_0 -> sp_criteria_field_0
*/ */
$fieldName = substr($ele['name'], 0, $index);
// Get criteria row index.
$tempName = $ele['name']; $tempName = $ele['name'];
// Get the last digit in the field name
preg_match('/^\D*(?=\d)/', $tempName, $r); preg_match('/^\D*(?=\d)/', $tempName, $r);
if (isset($r[0])) { if (isset($r[0])) {
$critIndexPos = strlen($r[0]); $critIndexPos = strlen($r[0]);
$critIndex = $tempName[$critIndexPos]; $critIndex = $tempName[$critIndexPos];
} }
$lastChar = substr($ele['name'], -1);
$fieldName = substr($ele['name'], 0, $index); // If lastChar is an integer we should strip it off
if (!preg_match("/^[a-zA-Z]$/", $lastChar)) {
/* Determine if this is a modifier row /* Strip field name of criteria index
* We will know if $fieldName's last character is an integer * Ex: sp_criteria_field_0 -> sp_criteria_field
* We do this to check if the field name is a criteria
* or the block type
*/ */
$modRow = $fieldName[strlen($fieldName)-1]; $n = strrpos($fieldName, '_');
if (!preg_match("/^[a-zA-Z]$/", $modRow)) { $fieldName = substr($fieldName, 0, $n);
$modIndex = strrpos($fieldName, '_');
$fieldName = substr($fieldName, 0, $modIndex);
if (in_array($fieldName, $fieldNames)) {
$rowNum = intval($tempName[strlen($tempName)-1]);
$output['modrow'][$critIndex][$rowNum][$fieldName] = trim($ele['value']);
}else{
$output['etc'][$ele['name']] = $ele['value'];
} }
} else {
if (in_array($fieldName, $fieldNames)) { if (in_array($fieldName, $fieldNames)) {
$rowNum = intval(substr($ele['name'], $index+1)); $rowNum = intval(substr($ele['name'], $index+1));
$output['criteria'][$rowNum][$fieldName] = trim($ele['value']); $output['criteria'][$critIndex][$lastChar][$fieldName] = trim($ele['value']);
}else{ }else{
$output['etc'][$ele['name']] = $ele['value']; $output['etc'][$ele['name']] = $ele['value'];
} }
} }
}
return $output; return $output;
} }

View file

@ -24,24 +24,10 @@
<dd id='sp_criteria-element'> <dd id='sp_criteria-element'>
<?php for ($i = 0; $i < $this->criteriasLength; $i++) {?> <?php for ($i = 0; $i < $this->criteriasLength; $i++) {?>
<div <?php if (($i > 0) && ($this->element->getElement("sp_criteria_field_".$i)->getAttrib('disabled') == 'disabled')) { <?php for ($j = 0; $j < $this->modRowMap[$i]; $j++) {?>
<div <?php if (($i > 0) && ($this->element->getElement("sp_criteria_field_".$i."_".$j)->getAttrib('disabled') == 'disabled')) {
echo 'style=display:none'; echo 'style=display:none';
} ?>> } ?>>
<?php echo $this->element->getElement("sp_criteria_field_".$i) ?>
<a class='ui-button sp-ui-button-icon-only sp_no_margins' id='modifier_add_<?php echo $i ?>'>
<span class='ui-icon ui-icon-plusthick'></span>
</a>
<?php echo $this->element->getElement("sp_criteria_modifier_".$i) ?>
<?php echo $this->element->getElement("sp_criteria_value_".$i) ?>
<span class='sp_text_font' id="extra_criteria" <?php echo $this->element->getElement("sp_criteria_extra_".$i)->getAttrib("disabled") == "disabled"?'style="display:none;"':""?>> to <?php echo $this->element->getElement('sp_criteria_extra_'.$i) ?></span>
<a class='ui-button sp-ui-button-icon-only' id='criteria_remove_<?php echo $i ?>'>
<span class='ui-icon ui-icon-closethick'></span>
</a>
<br />
</div>
<?php for ($j = 0; $j < $this->modRowMap[$i]; $j++) {?>
<div>
<?php echo $this->element->getElement("sp_criteria_field_".$i."_".$j) ?> <?php echo $this->element->getElement("sp_criteria_field_".$i."_".$j) ?>
<a class='ui-button sp-ui-button-icon-only sp_no_margins' id='modifier_add_<?php echo $i ?>'> <a class='ui-button sp-ui-button-icon-only sp_no_margins' id='modifier_add_<?php echo $i ?>'>
<span class='ui-icon ui-icon-plusthick'></span> <span class='ui-icon ui-icon-plusthick'></span>

View file

@ -317,6 +317,11 @@ function reindexElements() {
* a modifier row * a modifier row
*/ */
if ($(div).find('select[name^="sp_criteria_field"]').hasClass('sp-invisible')) { if ($(div).find('select[name^="sp_criteria_field"]').hasClass('sp-invisible')) {
modIndex++;
} else {
index++;
modIndex = 0;
}
$(div).find('select[name^="sp_criteria_field"]').attr('name', 'sp_criteria_field_'+index+'_'+modIndex); $(div).find('select[name^="sp_criteria_field"]').attr('name', 'sp_criteria_field_'+index+'_'+modIndex);
$(div).find('select[name^="sp_criteria_field"]').attr('id', 'sp_criteria_field_'+index+'_'+modIndex); $(div).find('select[name^="sp_criteria_field"]').attr('id', 'sp_criteria_field_'+index+'_'+modIndex);
@ -328,21 +333,6 @@ function reindexElements() {
$(div).find('input[name^="sp_criteria_extra"]').attr('id', 'sp_criteria_extra_'+index+'_'+modIndex); $(div).find('input[name^="sp_criteria_extra"]').attr('id', 'sp_criteria_extra_'+index+'_'+modIndex);
$(div).find('a[name^="modifier_add"]').attr('id', 'modifier_add_'+index); $(div).find('a[name^="modifier_add"]').attr('id', 'modifier_add_'+index);
$(div).find('a[id^="criteria_remove"]').attr('id', 'criteria_remove_'+index+'_'+modIndex); $(div).find('a[id^="criteria_remove"]').attr('id', 'criteria_remove_'+index+'_'+modIndex);
modIndex++;
} else {
index++;
$(div).find('select[name^="sp_criteria_field"]').attr('name', 'sp_criteria_field_'+index);
$(div).find('select[name^="sp_criteria_field"]').attr('id', 'sp_criteria_field_'+index);
$(div).find('select[name^="sp_criteria_modifier"]').attr('name', 'sp_criteria_modifier_'+index);
$(div).find('select[name^="sp_criteria_modifier"]').attr('id', 'sp_criteria_modifier_'+index);
$(div).find('input[name^="sp_criteria_value"]').attr('name', 'sp_criteria_value_'+index);
$(div).find('input[name^="sp_criteria_value"]').attr('id', 'sp_criteria_value_'+index);
$(div).find('input[name^="sp_criteria_extra"]').attr('name', 'sp_criteria_extra_'+index);
$(div).find('input[name^="sp_criteria_extra"]').attr('id', 'sp_criteria_extra_'+index);
$(div).find('a[name^="modifier_add"]').attr('id', 'modifier_add_'+index);
$(div).find('a[id^="criteria_remove"]').attr('id', 'criteria_remove_'+index);
modIndex = 0;
}
} else if (i > 0) { } else if (i > 0) {
$(div).remove(); $(div).remove();
} }