/** * @param MeritTemplate $meritTemplate * @throws Exception */ public function update(MeritTemplate $meritTemplate) { $meritLog = new MeritLog(); $user = \Yii::$app->user->identity; $transaction = \Yii::$app->db->beginTransaction(); try { /** @var Merit $userMerit */ $userMerit = Merit::findOne(['user_id' => $user->getId(), 'type' => $meritTemplate->type]); // is sub 判断是否是减法 $actionSub = $meritTemplate->action_type == MeritTemplate::ACTIVE_TYPE_SUB; if ($userMerit) { $merit = call_user_func($actionSub ? 'bcsub' : 'bcadd', $userMerit->merit, $meritTemplate->increment); $userMerit->setAttributes(['merit' => (int) $merit]); } else { $userMerit = new Merit(); $userMerit->setAttributes(['merit' => ($actionSub ? '-' : '') . $meritTemplate->increment, 'user_id' => $user->getId(), 'username' => $user->username, 'type' => $meritTemplate->type]); } if (!$userMerit->save()) { Yii::error('Merit 操作失败' . json_encode(array_values($userMerit->getFirstErrors())), 'error'); throw new Exception(array_values($userMerit->getFirstErrors())[0]); } $description = $meritTemplate->title . ': ' . MeritTemplate::getActionTypes()[$meritTemplate->action_type] . $meritTemplate->increment . MeritTemplate::getTypes()[$meritTemplate->type]; $meritLog->setAttributes(['user_id' => $user->getId(), 'username' => $user->username, 'merit_template_id' => $meritTemplate->id, 'type' => $meritTemplate->type, 'description' => $description, 'action_type' => $meritTemplate->action_type, 'increment' => $meritTemplate->increment, 'created_at' => time()]); if (!$meritLog->save()) { throw new Exception(array_values($meritLog->getFirstErrors())[0]); } $transaction->commit(); } catch (Exception $e) { $transaction->rollBack(); } }
use yii\helpers\Html; use yii\widgets\DetailView; use yiier\merit\models\MeritTemplate; /* @var $this yii\web\View */ /* @var $model yiier\merit\models\MeritTemplate */ $this->title = $model->title; $this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Merit Templates'), 'url' => ['index']]; $this->params['breadcrumbs'][] = $this->title; ?> <div class="merit-template-view"> <h1><?php echo Html::encode($this->title); ?> </h1> <p> <?php echo Html::a(Yii::t('app', 'Update'), ['update', 'id' => $model->id], ['class' => 'btn btn-primary']); ?> <?php echo Html::a(Yii::t('app', 'Delete'), ['delete', 'id' => $model->id], ['class' => 'btn btn-danger', 'data' => ['confirm' => Yii::t('app', 'Are you sure you want to delete this item?'), 'method' => 'post']]); ?> </p> <?php echo DetailView::widget(['model' => $model, 'attributes' => ['id', 'title', ['attribute' => 'type', 'value' => MeritTemplate::getTypes()[$model->type]], 'unique_id', ['attribute' => 'method', 'value' => MeritTemplate::getMethods()[$model->method]], ['attribute' => 'action_type', 'value' => MeritTemplate::getActionTypes()[$model->action_type]], 'increment', ['attribute' => 'rule_key', 'value' => MeritTemplate::getRuleKeys()[$model->rule_key]], 'rule_value', ['attribute' => 'status', 'value' => MeritTemplate::getStatuses()[$model->status]], 'created_at:datetime', 'updated_at:datetime']]); ?> </div>
<?php use yii\helpers\Html; use yii\grid\GridView; use yiier\merit\models\MeritTemplate; /* @var $this yii\web\View */ /* @var $searchModel yiier\merit\models\MeritLogSearch */ /* @var $dataProvider yii\data\ActiveDataProvider */ $this->title = Yii::t('app', 'Merit Logs'); $this->params['breadcrumbs'][] = $this->title; ?> <div class="merit-log-index"> <h1><?php echo Html::encode($this->title); ?> </h1> <?php // echo $this->render('_search', ['model' => $searchModel]); ?> <?php echo GridView::widget(['dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => ['user_id', 'username', 'merit_template_id', ['attribute' => 'type', 'value' => function ($data) { return MeritTemplate::getTypes()[$data->type]; }], 'description', ['attribute' => 'action_type', 'value' => function ($data) { return MeritTemplate::getActionTypes()[$data->action_type]; }], 'increment', 'created_at:datetime', ['class' => 'yii\\grid\\ActionColumn', 'template' => '{view} {delete}']]]); ?> </div>
use yii\helpers\Html; use yii\widgets\ActiveForm; use yiier\merit\models\MeritTemplate; /* @var $this yii\web\View */ /* @var $model yiier\merit\models\MeritTemplate */ /* @var $form yii\widgets\ActiveForm */ ?> <div class="merit-template-form"> <?php $form = ActiveForm::begin(); ?> <?php echo $form->field($model, 'type')->dropDownList(MeritTemplate::getTypes()); ?> <?php echo $form->field($model, 'title')->textInput(['maxlength' => true]); ?> <?php echo $form->field($model, 'unique_id')->textInput(['maxlength' => true]); ?> <?php echo $form->field($model, 'method')->dropDownList(MeritTemplate::getMethods()); ?> <?php