protected function renderDynamicAdvancedSearchRows($panel, $maxCellsPerRow, $form)
 {
     assert('$form != null');
     $content = $form->errorSummary($this->model);
     $content .= $this->renderDynamicClausesValidationHelperContent($form);
     $rowCount = 0;
     $suffix = $this->getSearchFormId();
     $viewClassName = get_class($this);
     $modelClassName = get_class($this->model->getModel());
     $formModelClassName = get_class($this->model);
     if ($this->model->dynamicClauses != null) {
         foreach ($this->model->dynamicClauses as $dynamicClause) {
             $attributeIndexOrDerivedType = ArrayUtil::getArrayValue($dynamicClause, 'attributeIndexOrDerivedType');
             if ($attributeIndexOrDerivedType != null) {
                 $searchAttributes = self::resolveSearchAttributeValuesForDynamicRow($dynamicClause, $attributeIndexOrDerivedType);
                 $inputContent = DynamicSearchUtil::renderDynamicSearchAttributeInput($viewClassName, $modelClassName, $formModelClassName, (int) $rowCount, $attributeIndexOrDerivedType, $searchAttributes, $suffix);
                 $content .= DynamicSearchUtil::renderDynamicSearchRowContent($viewClassName, $modelClassName, $formModelClassName, $rowCount, $attributeIndexOrDerivedType, $inputContent, $suffix);
                 $rowCount++;
             }
         }
     }
     $content .= $this->renderAddExtraRowContent($rowCount);
     $content .= $this->renderAfterAddExtraRowContent($form);
     $content .= $this->renderDynamicSearchStructureContent($form);
     return $content;
 }
 public function actionDynamicSearchAddExtraRow($viewClassName, $modelClassName, $formModelClassName, $rowNumber, $suffix = null)
 {
     echo DynamicSearchUtil::renderDynamicSearchRowContent($viewClassName, $modelClassName, $formModelClassName, (int) $rowNumber, null, null, $suffix, true);
 }