ソースを参照

Backend : pouvoir créer des utilisateurs

Ajouter pour le boulanger la possibilité de créer des utilisateurs.
Envoi d'un email à l'utilisateur pour le prévenir en lui indiquant ses identifiants.
Ajout d'un helper pour générer des mots de passe de la longueur de notre choix.
master
keun 7年前
コミット
47d6f712c8
9個のファイルの変更103行の追加26行の削除
  1. +32
    -3
      backend/controllers/UserController.php
  2. +3
    -6
      backend/views/user/_form.php
  3. +3
    -3
      backend/views/user/create.php
  4. +5
    -1
      backend/views/user/index.php
  5. +4
    -4
      backend/views/user/update.php
  6. +22
    -0
      common/helpers/Password.php
  7. +19
    -0
      common/mail/createUserAdmin-html.php
  8. +13
    -0
      common/mail/createUserAdmin-text.php
  9. +2
    -9
      frontend/models/SignupForm.php

+ 32
- 3
backend/controllers/UserController.php ファイルの表示

@@ -11,6 +11,9 @@ use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\helpers\Upload ;
use common\helpers\Password ;
use common\models\UserEtablissement ;
use common\models\Etablissement ;

/**
* UserController implements the CRUD actions for User model.
@@ -33,7 +36,8 @@ class UserController extends BackendController
'allow' => true,
'roles' => ['@'],
'matchCallback' => function ($rule, $action) {
if($action->actionMethod == 'actionIndex')
if($action->actionMethod == 'actionIndex' ||
$action->actionMethod == 'actionCreate')
{
return Yii::$app->user->identity->status == USER::STATUS_ADMIN
|| Yii::$app->user->identity->status == USER::STATUS_BOULANGER ;
@@ -89,8 +93,33 @@ class UserController extends BackendController
{
$model = new User();

if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// save use
$password = Password::generate() ;
$model->setPassword($password);
$model->generateAuthKey();
$model->username = $model->email ;
$model->save() ;
// liaison etablissement / user
$user_etablissement = new UserEtablissement() ;
$user_etablissement->id_user = $model->id ;
$user_etablissement->id_etablissement = Yii::$app->user->identity->id_etablissement ;
$user_etablissement->save() ;
// send mail
$etablissement = Etablissement::findOne(Yii::$app->user->identity->id_etablissement) ;
Yii::$app->mailer->compose() ;
$mail = Yii::$app->mailer->compose(
['html' => 'createUserAdmin-html', 'text' => 'createUserAdmin-text'],
['user' => $model, 'etablissement' => $etablissement, 'password' => $password])
->setTo($model->email)
->setFrom(['contact@laboiteapain.net' => 'La boîte à pain'])
->setSubject('[La boîte à pain] Inscription')
->send() ;
return $this->redirect(['index']);
} else {
return $this->render('create', [
'model' => $model,

+ 3
- 6
backend/views/user/_form.php ファイルの表示

@@ -11,18 +11,15 @@ use yii\widgets\ActiveForm;
<div class="user-form">

<?php $form = ActiveForm::begin(); ?>

<p>Si cette option n'est pas cochée, l'utilisateur ne pourra commander que 3 pains à la fois.</p>
<?= $form->field($model, 'confiance')->checkbox() ?>
<?= $form->field($model, 'nom')->textInput() ?>
<?= $form->field($model, 'prenom')->textInput() ?>
<?= $form->field($model, 'telephone')->textInput() ?>
<?= $form->field($model, 'email')->textInput() ?>
<?= $form->field($model, 'status')->textInput() ?>
<?= $form->field($model, 'adresse')->textarea() ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
<?= Html::submitButton($model->isNewRecord ? 'Ajouter' : 'Modifier', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

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

+ 3
- 3
backend/views/user/create.php ファイルの表示

@@ -6,9 +6,9 @@ use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\models\User */

$this->title = 'Create User';
$this->params['breadcrumbs'][] = ['label' => 'Users', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
$this->title = 'Ajouter un utilisateur';
$this->params['breadcrumbs'][] = ['label' => 'Utilisateurs', 'url' => ['index']];
$this->params['breadcrumbs'][] = 'Ajouter' ;
?>
<div class="user-create">


+ 5
- 1
backend/views/user/index.php ファイルの表示

@@ -11,7 +11,11 @@ $this->params['breadcrumbs'][] = $this->title;
?>
<div class="user-index">

<h1><?= Html::encode($this->title) ?> <?= Html::a('<span class="glyphicon glyphicon-envelope"></span> Liste des emails', ['mail'], ['class' => 'btn btn-default']) ?></h1>
<h1>
<?= Html::encode($this->title) ?>
<?= Html::a('Ajouter', ['create'], ['class' => 'btn btn-primary']) ?>
<?= Html::a('<span class="glyphicon glyphicon-envelope"></span> Liste des emails', ['mail'], ['class' => 'btn btn-default']) ?>
</h1>

<?= GridView::widget([
'dataProvider' => $dataProvider,

+ 4
- 4
backend/views/user/update.php ファイルの表示

@@ -5,10 +5,10 @@ use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\models\User */

$this->title = 'Update User: ' . ' ' . $model->id;
$this->params['breadcrumbs'][] = ['label' => 'Users', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model->id, 'url' => ['view', 'id' => $model->id]];
$this->params['breadcrumbs'][] = 'Update';
$this->title = 'Modifier un utilisateur' ;
$this->params['breadcrumbs'][] = ['label' => 'Utilisateurs', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => Html::encode($model->nom.' '.$model->prenom)];
$this->params['breadcrumbs'][] = 'Modifier';
?>
<div class="user-update">


+ 22
- 0
common/helpers/Password.php ファイルの表示

@@ -0,0 +1,22 @@
<?php

namespace common\helpers;

class Password {
public static function generate($length = 6)
{
$chaine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789' ;
$nb = strlen($chaine) - 1;
$code = '';
for($i=0; $i < $length; $i++)
{
$pos = mt_rand(0, $nb);
$car = $chaine[$pos];
$code .= $car;
}
return $code ;
}
}

+ 19
- 0
common/mail/createUserAdmin-html.php ファイルの表示

@@ -0,0 +1,19 @@
<?php

use yii\helpers\Html;

?>

<p>Bonjour <?= Html::encode($user->prenom); ?>,</p>

<p>Votre boulangerie <strong><?= Html::encode($etablissement->nom); ?></strong> vient
de créer un compte pour vous sur le site <a href="http://www.laboiteapain.net/">La boîte à pain</a>.</p>

<p><strong>Ce compte vous permet de passer vos commandes dans cette boulangerie.</strong></p>

<p>Voci vos identifiants de connexion :<br />
Identifiant : <strong><?= Html::encode($user->email); ?></strong><br />
Mot de passe : <strong><?= $password ?></strong></p>

<p>Cordialement,<br />
<em>La boîte à pain</em></p>

+ 13
- 0
common/mail/createUserAdmin-text.php ファイルの表示

@@ -0,0 +1,13 @@
Bonjour <?= $user->prenom ?>,

Votre boulangerie "<?= $etablissement->nom ?>" vient
de créer un compte pour vous sur le site http://www.laboiteapain.net/.

Ce compte vous permet de passer vos commandes dans cette boulangerie.

Voci vos identifiants de connexion :
Identifiant : <?= $user->email; ?>
Mot de passe : <?= $password ?>

Cordialement,
La boîte à pain

+ 2
- 9
frontend/models/SignupForm.php ファイルの表示

@@ -6,6 +6,7 @@ use common\models\User;
use common\models\Etablissement;
use yii\base\Model;
use common\models\UserEtablissement ;
use common\helpers\Password ;

/**
* Signup form
@@ -186,15 +187,7 @@ class SignupForm extends Model
// génération d'un code
do {
$chaine = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789' ;
$nb = strlen($chaine) - 1;
$code = '';
for($i=0; $i < 6; $i++)
{
$pos = mt_rand(0, $nb);
$car = $chaine[$pos];
$code .= $car;
}
$code = Password::generate() ;
$etablissement->code = $code ;
} while(Etablissement::findOne(['code' => $code]));

読み込み中…
キャンセル
保存