BitMaskWidget.php 1.76 KB
<?php
    
    namespace artbox\core\widgets;

    use artbox\core\behaviors\BitMaskBehavior;
    use yii\base\Widget;
    use yii\db\ActiveRecord;
    use yii\helpers\Html;
    use yii\widgets\ActiveForm;

    /**
     * Class BitMaskWidget
     *
     * @property ActiveForm      $form
     * @property BitMaskBehavior $model
     * @package artbox\core\widgets
     */
    class BitMaskWidget extends Widget
    {
        /**
         * @var ActiveRecord
         */
        private $model;
    
        /**
         * @var ActiveForm
         */
        private $form;
    
        /**
         * @inheritdoc
         */
        public function run()
        {
            foreach ($this->model->fields as $id => $field) {
                $value = boolval($this->model->getMaskInt() & 2 ** $field);
                echo Html::beginTag('div', [ 'class' => 'form-group' ]);
                echo Html::checkbox(
                    $this->model->getModelName() . '[masks][' . $id . ']',
                    $value,
                    [ 'class' => 'flat' ]
                );
                echo Html::label(
                    $id,
                    null,
                    [
                        'class' => 'control-label',
                    ]
                );
                echo Html::endTag('div');
            }
        }
    
        /**
         * Only for Active records
         *
         * @param \yii\db\ActiveRecord $model
         */
        public function setModel(ActiveRecord $model)
        {
            $this->model = $model;
        }
    
        /**
         * Form must be active form
         *
         * @param \yii\widgets\ActiveForm $form
         */
        public function setForm(ActiveForm $form)
        {
            $this->form = $form;
        }
    }