CC-84: Smart Playlists

- created function that returns an array of block criteria
- fixed form so it displays modifier rows properly
This commit is contained in:
denise 2012-07-29 15:47:42 -04:00
parent c2aea7490f
commit e04273c335
3 changed files with 152 additions and 96 deletions

View file

@ -93,8 +93,6 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
"items" => "items" "items" => "items"
); );
$modRows = array();
// load type // load type
$out = CcBlockQuery::create()->findPk($p_blockId); $out = CcBlockQuery::create()->findPk($p_blockId);
if ($out->getDbType() == "static") { if ($out->getDbType() == "static") {
@ -113,112 +111,145 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
)) ))
->setValue($blockType); ->setValue($blockType);
$this->addElement($spType); $this->addElement($spType);
$storedCrit = Application_Model_Block::getCriteria($p_blockId);
// load criteria from db /* $modRoadMap stores the number of modifier rows each
$out = CcBlockcriteriaQuery::create()->orderByDbCriteria()->findByDbBlockId($p_blockId); * criteria row has. We need to know this so we index the
$storedCrit = array(); * the form elements properly
*/
/* Store the previous criteria value $modRowMap = array();
* We will use this to check if the current row has the same
* critieria value. If so, we know that this is a modifier row
$tempCrit = '';
$modrows = array();
$critRowNum = 0;
$modRowNum = 0;
$j = 0;
*/
foreach ($out as $crit) {
//$tempCrit = $crit->getDbCriteria();
$criteria = $crit->getDbCriteria();
$modifier = $crit->getDbModifier();
$value = $crit->getDbValue();
$extra = $crit->getDbExtra();
if($criteria == "limit"){
$storedCrit["limit"] = array("value"=>$value, "modifier"=>$modifier);
}else{
$storedCrit["crit"][] = array("criteria"=>$criteria, "value"=>$value, "modifier"=>$modifier, "extra"=>$extra);
}
/*
//check if row is a modifier row
if ($critRowNum > 0 && strcmp($tempCrit, $storedCrit["crit"][$critRowNum-1]["criteria"])==0) {
$modrows[$j][$] = $modRowNum;
$modRowNum++;
} else if ($critRowNum > 0) {
$modRowNum = 0;
$j++;
}
$critRowNum++;
*/
}
//Logging::log($modrows);
$openSmartBlockOption = false; $openSmartBlockOption = false;
if (!empty($storedCrit)) { if (!empty($storedCrit)) {
$openSmartBlockOption = true; $openSmartBlockOption = true;
} }
$criteriaKeys = array_keys($storedCrit["crit"]);
$numElements = count($criteriaOptions); $numElements = count($criteriaOptions);
for ($i = 0; $i < $numElements; $i++) { for ($i = 0; $i < $numElements; $i++) {
$criteriaType = ""; $criteriaType = "";
$criteria = new Zend_Form_Element_Select("sp_criteria_field_".$i); if (isset($criteriaKeys[$i])) {
$criteria->setAttrib('class', 'input_select sp_input_select') $critCount = count($storedCrit["crit"][$criteriaKeys[$i]]);
->setValue('Select criteria') } else {
->setDecorators(array('viewHelper')) $critCount = 1;
->setMultiOptions($criteriaOptions);
if ($i != 0 && !isset($storedCrit["crit"][$i])){
$criteria->setAttrib('disabled', 'disabled');
} }
if (isset($storedCrit["crit"][$i])) {
$criteriaType = $criteriaTypes[$storedCrit["crit"][$i]["criteria"]];
$criteria->setValue($storedCrit["crit"][$i]["criteria"]);
}
$this->addElement($criteria);
$criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$i); $modRowMap[$i] = $critCount-1;
$criteriaModifers->setValue('Select modifier')
->setAttrib('class', 'input_select sp_input_select') /* Loop through all criteria with the same field
->setDecorators(array('viewHelper')); * Ex: all criteria for 'Album'
if ($i != 0 && !isset($storedCrit["crit"][$i])){ */
$criteriaModifers->setAttrib('disabled', 'disabled'); for ($j = 0; $j < $critCount; $j++) {
} /****************** CRITERIA ***********/
if (isset($storedCrit["crit"][$i])) { if ($j < 1) {
if($criteriaType == "s"){ $criteria = new Zend_Form_Element_Select("sp_criteria_field_".$i);
$criteriaModifers->setMultiOptions($stringCriteriaOptions); $criteria->setAttrib('class', 'input_select sp_input_select')
}else{ ->setValue('Select criteria')
$criteriaModifers->setMultiOptions($numericCriteriaOptions); ->setDecorators(array('viewHelper'))
->setMultiOptions($criteriaOptions);
if ($i != 0 && !isset($criteriaKeys[$i])) {
$criteria->setAttrib('disabled', 'disabled');
}
if (isset($criteriaKeys[$i])) {
$criteriaType = $criteriaTypes[$storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]];
$criteria->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["criteria"]);
}
$this->addElement($criteria);
/****************** MODIFIER ***********/
$criteriaModifers = new Zend_Form_Element_Select("sp_criteria_modifier_".$i);
$criteriaModifers->setValue('Select modifier')
->setAttrib('class', 'input_select sp_input_select')
->setDecorators(array('viewHelper'));
if ($i != 0 && !isset($criteriaKeys[$i])) {
$criteriaModifers->setAttrib('disabled', 'disabled');
}
if (isset($criteriaKeys[$i])) {
if($criteriaType == "s"){
$criteriaModifers->setMultiOptions($stringCriteriaOptions);
}else{
$criteriaModifers->setMultiOptions($numericCriteriaOptions);
}
$criteriaModifers->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["modifier"]);
}else{
$criteriaModifers->setMultiOptions(array('0' => 'Select modifier'));
}
$this->addElement($criteriaModifers);
/****************** VALUE ***********/
$criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$i);
$criteriaValue->setAttrib('class', 'input_text sp_input_text')
->setDecorators(array('viewHelper'));
if ($i != 0 && !isset($criteriaKeys[$i])){
$criteriaValue->setAttrib('disabled', 'disabled');
}
if (isset($criteriaKeys[$i])) {
$criteriaValue->setValue($storedCrit["crit"][$criteriaKeys[$i]][$j]["value"]);
}
$this->addElement($criteriaValue);
/****************** EXTRA ***********/
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$i);
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
->setDecorators(array('viewHelper'));
if (isset($criteriaKeys[$i]) && 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);
/* 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')
->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);
} }
$criteriaModifers->setValue($storedCrit["crit"][$i]["modifier"]);
}else{ }//for
$criteriaModifers->setMultiOptions(array('0' => 'Select modifier'));
}
$this->addElement($criteriaModifers);
$criteriaValue = new Zend_Form_Element_Text("sp_criteria_value_".$i);
$criteriaValue->setAttrib('class', 'input_text sp_input_text')
->setDecorators(array('viewHelper'));
if ($i != 0 && !isset($storedCrit["crit"][$i])){
$criteriaValue->setAttrib('disabled', 'disabled');
}
if (isset($storedCrit["crit"][$i])) {
$criteriaValue->setValue($storedCrit["crit"][$i]["value"]);
}
$this->addElement($criteriaValue);
$criteriaExtra = new Zend_Form_Element_Text("sp_criteria_extra_".$i); }//for
$criteriaExtra->setAttrib('class', 'input_text sp_extra_input_text')
->setDecorators(array('viewHelper'));
if (isset($storedCrit["crit"][$i]["extra"])) {
$criteriaExtra->setValue($storedCrit["crit"][$i]["extra"]);
$criteriaValue->setAttrib('class', 'input_text sp_extra_input_text');
}else{
$criteriaExtra->setAttrib('disabled', 'disabled');
}
$this->addElement($criteriaExtra);
}
$limit = new Zend_Form_Element_Select('sp_limit_options'); $limit = new Zend_Form_Element_Select('sp_limit_options');
$limit->setAttrib('class', 'sp_input_select') $limit->setAttrib('class', 'sp_input_select')
@ -268,7 +299,7 @@ class Application_Form_SmartBlockCriteria extends Zend_Form_SubForm
$this->setDecorators(array( $this->setDecorators(array(
array('ViewScript', array('viewScript' => 'form/smart-block-criteria.phtml', "openOption"=> $openSmartBlockOption, array('ViewScript', array('viewScript' => 'form/smart-block-criteria.phtml', "openOption"=> $openSmartBlockOption,
'criteriasLength' => count($criteriaOptions), 'poolCount' => $files['count'], 'modRows' => $modRows)) 'criteriasLength' => count($criteriaOptions), 'poolCount' => $files['count'], 'modRowMap' => $modRowMap))
)); ));
} }

View file

@ -1095,6 +1095,29 @@ EOT;
} }
return $insertList; return $insertList;
} }
public static function getCriteria($p_blockId)
{
// Load criteria from db
$out = CcBlockcriteriaQuery::create()->orderByDbCriteria()->findByDbBlockId($p_blockId);
$storedCrit = array();
foreach ($out as $crit) {
$criteria = $crit->getDbCriteria();
$modifier = $crit->getDbModifier();
$value = $crit->getDbValue();
$extra = $crit->getDbExtra();
if ($criteria == "limit") {
$storedCrit["limit"] = array("value"=>$value, "modifier"=>$modifier);
} else {
$storedCrit["crit"][$criteria][] = array("criteria"=>$criteria, "value"=>$value, "modifier"=>$modifier, "extra"=>$extra);
}
}
return $storedCrit;
}
// this function return list of propel object // this function return list of propel object
public function getListofFilesMeetCriteria() public function getListofFilesMeetCriteria()

View file

@ -40,7 +40,8 @@
</a> </a>
<br /> <br />
</div> </div>
<?php if (isset($modRows[$i])) { for ($j = 0; $j < $this->modRows[$i]; $j++) {?>
<?php for ($j = 0; $j < $this->modRowMap[$i]; $j++) {?>
<div> <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' id='modifier_add_<?php echo $i ?>'> <a class='ui-button sp-ui-button-icon-only' id='modifier_add_<?php echo $i ?>'>
@ -54,7 +55,8 @@
</a> </a>
<br /> <br />
</div> </div>
<?php } }?> <?php } ?>
<?php } ?> <?php } ?>
<br /> <br />
</dd> </dd>