federico
9/22/2016 - 4:54 PM

Embedded Multiple Input

Embedded Multiple Input

// MODEL

<?php

namespace app\models\set;

use Yii;
use yii\web\Response;
use app\models\db\Group;
use app\models\db\GroupSubject;


class WizGroupSubject extends \yii\base\Model
{

    public $wgs = [];


    public static function ValidateWGS ($wgs) {
        $result = true;
        $error = [];
        $names = [];
        if (isset($wgs)) {
            foreach ($wgs as $i=>$list) {
                foreach ($list as $ii=>$row) {
                    $numerr = 0;
                    $msg = [];
                    // check if name is empty
                    if ($row['name']=='') {
                        $msg[$numerr] = Yii::t('stz', 'could not be empty');
                        $numerr++;
                    }
                    // check if name is unique
                    if (in_array(strtoupper($row['name']),$names)) {
                        $msg[$numerr] = Yii::t('stz', 'name must be unique');
                        $numerr++;
                    } else {
                        $names[] = strtoupper($row['name']);
                    }
                    $error["wizgroupsubject-".$i."-".$ii."-name"] = $msg;

                    foreach ($row['subject'] as $s=>$subject) {
                        $unique = array();
                        foreach ($subject as $ss=>$array) {
                            $numerr = 0;
                            $msg = [];
                            if (! in_array($array,$unique)) {
                                $unique[] = $array;
                            } else {
                                //id_subject double
                                $msg[$numerr] = Yii::t('stz', 'duplicate value');
                                $error["wizgroupsubject-".$i."-".$ii."-subject-id_subject-".$ss] = $msg; //wizgroupsubject-wgs-0-subject-id_subject-2
                            }
                        }

                    }
                }
            }

            $error = array_filter($error);
            if (empty($error)) {
                return true;
            } else {
                return \yii\helpers\Json::encode($error);
            }


        }
        return "general error";

    }

    public static function PopulateWGS($id_calendar)
    {
        $wgs = new WizGroupSubject();
        $calc= 0;
        $groups = Group::find()->where(['id_calendar'=>$id_calendar])->all();

        foreach ($groups as $group) {
            $wgs->wgs[$calc]['id_group'] = $group->id;
            $wgs->wgs[$calc]['name'] = $group->name;
            $groupsubjects = GroupSubject::find()->where(['id_group'=>$group->id])->all();
            $calc2 = 0;
            foreach ($groupsubjects as $gs) {
                $wgs->wgs[$calc]['subject']['id_subject'][$calc2] = $gs->id_subject;
                $calc2++;
            }
            $calc++;
        }
        return $wgs;
    }

}

// CONTROLLER
//...
    public function actionWiz_cal_group($id_calendar)
    {
        $subject_items = ArrayHelper::map(CalendarSubject::find()->where(['id_calendar' => $id_calendar])->orderBy('name')->all(),'id_subject','name');

        $wizmodel = WizGroupSubject::PopulateWGS($id_calendar);
        //return \yii\helpers\Json::encode($wizmodel);
        //return print_r($wizmodel);

        $this->CheckStatus($calendar, $season);

        $request = Yii::$app->getRequest();
        // ajax validation
        if ($request->isPost && $request->post('ajax') !== null) {
            $wgs = $_POST['WizGroupSubject'];
            //return \yii\helpers\Json::encode($wgs);
            return WizGroupSubject::ValidateWGS($wgs);
        }

        // insert/update
        if ($request->isPost && $request->post('ajax') == null) {
            $wgs = $_POST['WizGroupSubject'];
            //TODO: function for insert/update

            $wizmodel = WizGroupSubject::PopulateWGS($id_calendar); // ONLY FOR TEST
        }



        return $this->render('wiz_cal_group', [
            'subject_items' => $subject_items,
            'wizmodel' => $wizmodel,
        ]);


    }



// VIEW wiz_cal_group

<?php

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use unclead\widgets\MultipleInput;
use unclead\widgets\MultipleInputColumn;


$commonAttributeOptions = [
    'enableAjaxValidation'   => true,
    'enableClientValidation' => false,
    'validateOnChange'       => false,
    'validateOnSubmit'       => true,
    'validateOnBlur'         => false,
];
?>

<?php $form = ActiveForm::begin([
    'id'    => 'multi-group',
    'layout' => 'horizontal',
    'enableAjaxValidation'      => true,
    'enableClientValidation'    => false,
    'validateOnChange'          => false,
    'validateOnSubmit'          => true,
    'validateOnBlur'            => false,
]); ?>

<div class="panel panel-default">
    <div class="panel-heading">
        <h6> <?= \app\models\db\SportElement::se($calendar->id_sport,'group',2,true,true)  ?></h6>
    </div>
    <div class="panel-body">
        <?= \unclead\widgets\MultipleInput::widget([
            'model' => $wizmodel,
            'attribute' => 'wgs',
            'attributeOptions' => $commonAttributeOptions,
            'columns' => [
                [
                    'name' => 'id_group',
                    'type' => \unclead\widgets\MultipleInputColumn::TYPE_HIDDEN_INPUT
                ],

                [
                    'name' => 'name',
                    'title' => Yii::t('stz', 'Name') .' '. \app\models\db\SportElement::se($calendar->id_sport,'group',1,true,true),
                    'enableError' => true,
                ],
                [
                    'name' => 'subject',
                    'type' => MultipleInput::class,
                    'options' => [
                        'attributeOptions' => $commonAttributeOptions,
                        'model' => $wizmodel,
                        'attribute' => 'wgs',
                        'columns' => [
                            [
                                'name'  => 'id_subject',
                                'type'  => MultipleInputColumn::TYPE_DROPDOWN,
                                'title' => \app\models\db\SportElement::se($calendar->id_sport,'subject',2,true,true),
                                'enableError' => true,
                                'items' =>  $subject_items,
                                'options' => [
                                    //'prompt'=>Yii::t('stz', 'Select') .' '. \app\models\db\SportElement::se($calendar->id_sport,'subject',1,true,true).' ...',
                                ],
                            ]
                        ]
                    ]
                ]
            ],
        ]); ?>
    </div>
</div>

    <div class="form-group">
        <?= Html::submitButton(Yii::t('stz', 'Next'), ['class' => 'btn btn-success']) ?>
    </div>

<?php ActiveForm::end(); ?>