public function testResolveMetadata()
 {
     $selector = new ListAttributesSelector('AListView', 'TestModule');
     $selectedData = $selector->getSelectedListAttributesNamesAndLabelsAndAll();
     $compareSelectedData = array('name' => 'Name');
     $this->assertEquals($compareSelectedData, $selectedData);
     $metadata = $selector->getResolvedMetadata();
     $compareMetadata = array('panels' => array(array('rows' => array(array('cells' => array(array('elements' => array(array('attributeName' => 'name', 'type' => 'Text', 'isLink' => true)))))))));
     $this->assertEquals($compareMetadata, $metadata['global']);
     $selector->setSelected(array('name', 'a'));
     $metadata = $selector->getResolvedMetadata();
     $compareMetadata = array('panels' => array(array('rows' => array(array('cells' => array(array('elements' => array(array('attributeName' => 'name', 'type' => 'Text', 'isLink' => true))))), array('cells' => array(array('elements' => array(array('attributeName' => 'a', 'type' => 'CheckBox')))))))));
     $this->assertEquals($compareMetadata, $metadata['global']);
 }
 public function actionValidateDynamicSearch($viewClassName, $modelClassName, $formModelClassName)
 {
     if (isset($_POST['ajax']) && $_POST['ajax'] === 'search-form' && isset($_POST[$formModelClassName])) {
         $model = new $modelClassName(false);
         $model->setScenario('searchModel');
         $searchForm = new $formModelClassName($model);
         $sourceData = $_POST;
         if (isset($_POST[$formModelClassName][SearchForm::ANY_MIXED_ATTRIBUTES_SCOPE_NAME])) {
             $searchForm->setAnyMixedAttributesScope($_POST[$formModelClassName][SearchForm::ANY_MIXED_ATTRIBUTES_SCOPE_NAME]);
             unset($_POST[$formModelClassName][SearchForm::ANY_MIXED_ATTRIBUTES_SCOPE_NAME]);
         }
         if (isset($_POST[$formModelClassName][SearchForm::SELECTED_LIST_ATTRIBUTES])) {
             $listAttributesSelector = new ListAttributesSelector($viewClassName, $model->getModuleClassName(), $modelClassName);
             $listAttributesSelector->setSelected($_POST[$formModelClassName][SearchForm::SELECTED_LIST_ATTRIBUTES]);
             $searchForm->setListAttributesSelector($listAttributesSelector);
             unset($_POST[$formModelClassName][SearchForm::SELECTED_LIST_ATTRIBUTES]);
         }
         if (isset($_POST[$formModelClassName]['filterByStarred'])) {
             $searchForm->filterByStarred = $_POST[$formModelClassName]['filterByStarred'];
             unset($_POST[$formModelClassName]['filterByStarred']);
         }
         if (isset($_POST[$formModelClassName][KanbanBoard::GROUP_BY_ATTRIBUTE_VISIBLE_VALUES])) {
             unset($_POST[$formModelClassName][KanbanBoard::GROUP_BY_ATTRIBUTE_VISIBLE_VALUES]);
         }
         if (isset($_POST[$formModelClassName][KanbanBoard::SELECTED_THEME])) {
             unset($_POST[$formModelClassName][KanbanBoard::SELECTED_THEME]);
         }
         if (isset($_POST[$formModelClassName]['filteredBy'])) {
             $searchForm->filterByStarred = $_POST[$formModelClassName]['filteredBy'];
             unset($_POST[$formModelClassName]['filteredBy']);
         }
         $sanitizedSearchData = $this->resolveAndSanitizeDynamicSearchAttributesByPostData($_POST[$formModelClassName], $searchForm);
         $searchForm->setAttributes($sanitizedSearchData);
         if (isset($_POST['save']) && $_POST['save'] == 'saveSearch') {
             $searchForm->setScenario('validateSaveSearch');
             if ($searchForm->validate()) {
                 $savedSearch = $this->processSaveSearch($searchForm, $viewClassName);
                 echo CJSON::encode(array('id' => $savedSearch->id, 'name' => $savedSearch->name, 'sortAttribute' => $this->getSortAttributeFromSavedSearchData($savedSearch), 'sortDescending' => $this->getSortDescendingFromSavedSearchData($savedSearch)));
                 Yii::app()->end(0, false);
             }
         } else {
             $searchForm->setScenario('validateDynamic');
         }
         if (!$searchForm->validate()) {
             $errorData = array();
             foreach ($searchForm->getErrors() as $attribute => $errors) {
                 $errorData[ZurmoHtml::activeId($searchForm, $attribute)] = $errors;
             }
             echo CJSON::encode($errorData);
             Yii::app()->end(0, false);
         }
         $this->setStickyData($searchForm, $viewClassName, true, $sourceData);
     }
 }