* @author Gabriele Droege, Sybille Buers, Patricia Kelbert (BGBM, GGBN/DNA Bank Network) * @version 1.0 * @package Package * @var $model SearchForm * @var $selectionLists - created in the controller * @var $form CActiveForm * @var $htmlOpts Design facts * @copyright Copyright © 2011 DNA Bank Network http://www.dnabank-network.org *
The contents of this file are subject to the Mozilla Public License Version 1.1 * @filesource * @license http://www.mozilla.org/MPL/ MPL */ class CreateFormManager { // // create parameters for autosuggest widgets: public static function autosuggestOptions($model, $listTitle, $htmlOptions) { if (isset ( $htmlOptions )) { if (isset ( $htmlOptions ['value'] )) $model->$htmlOptions ['name'] = $htmlOptions ['value']; } $url = Yii::$app->getUrlManager ()->createUrl ( 'serverscripts/suggestion-list' ); if (! Yii::$app->params ['noBack']) { try { $template = ''; } catch ( Exception $e ) { try { $template = ''; } catch ( Exception $e ) { $template = ''; } } } else{ try { $template = ''; } catch ( Exception $e ) { try { $template = ''; } catch ( Exception $e ) { $template = ''; } } } // Yii::info("form template: ".$template); $formValues = [ ]; return [ 'options' => [ 'placeholder' => 'Filter as you type ...' ], 'pluginOptions' => [ 'highlight' => FALSE ], 'dataset' => [ [ 'remote' =>['url'=> $url . '?listTitle=' . $listTitle . '&term=%QUERY', 'wildcard' => '%QUERY',], 'display' => 'value', 'limit' => 10, 'templates' => [ 'empty' => '
Unable to find records for selected query.
', 'suggestion' => new JsExpression ( "Handlebars.compile('{$template}')" ) ] ] ] ]; } public static function createField($controller, $model, $form, $key, $param, $selectionLists, $htmlOpts, $selectedValue) { $currentType = "test"; foreach ( $param as $paramKey => $paramV ) if (strcmp ( $paramKey, "type" ) == 0) $currentType = $paramV; // Yii::info ( "currenttype : " . $currentType ); switch ($currentType) { case 'select' : // get the values either from the definition in the form model // or from the index if (isset ( $param ['valueList'] )) { $attributeList = $param ['valueList']; } else // get selection list from index { // actually the the field should never be not set! $attributeList = isset ( $selectionLists ) ? $selectionLists [$key] : array (); } $selectField = [ ]; foreach ( $attributeList as $kk => $vv ) { if ($key === "sampletype" && $vv != "---") { if (preg_match ( "/ \(\d* \/ \d*\)/", $vv )) $selectField [preg_replace ( "/ \(\d* \/ \d*\)/", "", $vv )] = "records with " . $vv; else $selectField [preg_replace ( "/ \(\d*\)/", "", $vv )] = "records with " . $vv; } else { if (preg_match ( "/ \(\d* \/ \d*\)/", $vv )) $selectField [preg_replace ( "/ \(\d* \/ \d*\)/", "", $vv )] = $vv; else $selectField [preg_replace ( "/ \(\d*\)/", "", $vv )] = $vv; } } // as the select tag we use here, uses the size attribute not for the length of the // field, we move the value to a style attribute if (isset ( $htmlOpts ['size'] )) { $size = $htmlOpts ['size']; unset ( $htmlOpts ['size'] ); } else { $size = $model->getFieldSize () * 8; } // Rukeia 16-03-2015: $onlyFieldName contains the $selectionLists values without record counts in brackets behind, e.g., "Algeria" instead of "Algeria (49)" $onlyFieldName = array (); foreach ( $selectionLists [$key] as $value ) { if (preg_match ( "/ \(\d* \/ \d*\)/", $value )) $value = preg_replace ( "/ \(\d* \/ \d*\)/", "", $value ); else $value = preg_replace ( "/ \(\d*\)/", "", $value ); array_push ( $onlyFieldName, $value ); } // Rukeia 16-03-2015: $listPos is the position of the selected value in $selectionLists $listPos = array_search ( $selectedValue, $onlyFieldName ); $model->$key = $selectedValue; // if((strpos($key,"indexHerbarorium"))!==false) // echo $form->field ( $model, $key )->dropdownList ( $selectField, [ // '$key','disabled'=>true // ] ); // else echo $form->field ( $model, $key )->dropdownList ( $selectField, [ '$key' ] ); break; case 'suggest' : $options = CreateFormManager::autosuggestOptions ( $model, $key, $htmlOpts ); echo $form->field ( $model, $key )->widget ( Typeahead::classname (), $options ); break; case 'number' : echo $form->numberField ( $model, $key, $htmlOpts ); break; // TODO do we need range bars? case 'range' : // foreach ( $htmlOpts as $ht => $hv ) // Yii::info ( $ht . " ==> " . $hv ); echo FieldRange::widget ( [ // 'form' => $form, // 'model' => $model, 'label' => $key, // 'attribute1' => $htmlOpts["attribute1"], // 'attribute2' => $htmlOpts["attribute2"], 'name1' => $htmlOpts ["attribute1"], 'options1' => [ "placeholder" => $htmlOpts ["attribute1value"] ], 'name2' => $htmlOpts ["attribute2"], 'type' => $htmlOpts ["type"], 'label' => $htmlOpts ["name"], 'options2' => [ "placeholder" => $htmlOpts ["attribute2value"] ] ] ); if (isset ( $htmlOpts ["attribute3"] )) { echo FieldRange::widget ( [ // 'form' => $form, // 'model' => $model, // 'attribute1' => $htmlOpts["attribute1"], // 'attribute2' => $htmlOpts["attribute2"], 'name1' => $htmlOpts ["attribute3"], 'options1' => [ "placeholder" => $htmlOpts ["attribute3value"] ], 'name2' => $htmlOpts ["attribute4"], 'options2' => [ "placeholder" => $htmlOpts ["attribute4value"] ], 'type' => $htmlOpts ["type"] ] ); } break; case 'checkbox' : $model->$key=$selectedValue; echo $form->field($model, $key)->widget(CheckboxX::classname(), [ 'autoLabel'=>true, 'name'=>$htmlOpts ["name"],'pluginOptions'=>['threeState'=>false], 'class'=>'control-label' ])->label(false); // echo $form->checkBox ( $model, $key, $htmlOpts ); break; case 'radio' : if($key==='cites') echo $form->field ( $model, $key )->radioList ( [ 'exclude' => 'Exclude listed species', 'include' => 'Include listed species', 'citesOnly' => 'Only listed species' ] ); if($key==='sampleavailability') echo $form->field ( $model, $key )->radioList ( [ 'only' => 'only available samples', 'all' => 'all samples' ] ); echo "
"; break; case 'text' : echo $form->field ( $model, $key )->textInput ( $htmlOpts ); break; case 'hidden' : echo $form->field ( $model, $key )->hiddenInput ()->label ( '' ); break; default : // echo $form->textField ( $model, $key, $htmlOpts ); echo $form->field ( $model, $key )->textInput ( $htmlOpts ); break; } //End switch } } ?>