Bläddra i källkod

Création et intégration des champs "online_payment" et "secret_key_payplug"

refactoring
Guillaume Bourgeois 5 år sedan
förälder
incheckning
9b9cf054d7
8 ändrade filer med 190 tillägg och 88 borttagningar
  1. +6
    -1
      backend/controllers/ProducerController.php
  2. +112
    -80
      backend/views/producer/update.php
  3. +2
    -0
      common/config/.gitignore
  4. +0
    -5
      common/config/main.php
  5. +2
    -0
      common/config/payplug/.htaccess
  6. +47
    -2
      common/models/Producer.php
  7. +16
    -0
      console/migrations/m190118_084149_add_field_online_payment.php
  8. +5
    -0
      producer/config/main.php

+ 6
- 1
backend/controllers/ProducerController.php Visa fil

@@ -91,6 +91,8 @@ class ProducerController extends BackendController
{
$request = Yii::$app->request;
$model = $this->findModel(Producer::getId());
$model->secret_key_payplug = $model->getSecretKeyPayplug() ;
$logoFilenameOld = $model->logo;
$photoFilenameOld = $model->photo;

@@ -109,7 +111,10 @@ class ProducerController extends BackendController
$model->photo = '';
$model->save();
}

$model->saveSecretKeyPayplug() ;
Yii::$app->getSession()->setFlash('success', 'Paramètres mis à jour.');
return $this->redirect(['update', 'id' => $model->id, 'edit_ok' => true]);
} else {
return $this->render('update', [

+ 112
- 80
backend/views/producer/update.php Visa fil

@@ -49,89 +49,121 @@ $this->addBreadcrumb($this->getTitle()) ;
<div class="user-form">
<?php $form = ActiveForm::begin(); ?>
<div class="">
<?= $form->field($model, 'active')
->dropDownList([
0 => 'Non',
1 => 'Oui'
], [])
->label('Activer le producteur')
->hint('Activez cette option pour rendre votre établissement visible à vos clients.') ; ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'type') ?>
<?= $form->field($model, 'description')
->textarea(['rows' => 6])
->hint('Affiché sur la page d\'accueil') ?>
<?= $form->field($model, 'postcode') ?>
<?= $form->field($model, 'city') ?>
<?= $form->field($model, 'code')->hint("Saisissez ce champs si vous souhaitez protéger l'accès à votre boutique par un code, sinon laissez-le vide.<br />"
. "Ce code est à communiquer à vos client pour qu'ils puissent ajouter votre établissement à leur tableau de bord.<br />"
. "<a href=\"".Yii::$app->urlManager->createUrl(['communicate/index'])."\">Cliquez ici</a> pour télécharger un mode d'emploi comprenant ce code à distribuer à vos clients.") ?>

<?= $form->field($model, 'order_delay')
->dropDownList([
1 => '1 jour',
2 => '2 jours',
3 => '3 jours',
4 => '4 jours',
5 => '5 jours',
6 => '6 jours',
7 => '7 jours',
], [])
->hint('Si <strong>1 jour</strong> est sélectionné, le client pourra commander jusqu\'à la veille de la production.<br />'
. 'Si <strong>2 jours</strong> est sélectionné, le client pourra commander jusqu\'à l\'avant-veille de la production, etc.') ; ?>
<?= $form->field($model, 'order_deadline')
->dropDownList([
24 => 'Minuit',
23 => '23h',
22 => '22h',
21 => '21h',
20 => '20h',
19 => '19h',
18 => '18h',
17 => '17h',
16 => '16h',
15 => '15h',
14 => '14h',
13 => '13h',
12 => '12h',
11 => '11h',
10 => '10h',
9 => '9h',
8 => '8h',
], [])
->hint('Heure limite jusqu\'à laquelle les clients peuvent commander pour satisfaire le délai de commande.<br />'
. 'Par exemple, si <strong>2 jours</strong> est sélectionné dans le délai de commande, le client devra commander l\'avant-veille de la production avant l\'heure précisée ici.') ; ?>
<?= $form->field($model, 'credit')
->dropDownList([
0 => 'Non',
1 => 'Oui',
], [])
->label('Activer le système de Crédit')
->hint('Le système de Crédit permet à vos clients d\'avoir un compte prépayé sur le site <em>La boîte à pain</em>.<br />'
. 'Ils créditent leur compte en vous donnant la somme de leur choix et c\'est ensuite à vous de '.Html::a('mettre à jour', ['user/index']).' leur Crédit en ligne.<br />'
. 'Ceci fait, les clients paient leur commande directement via leur Crédit.') ; ?>
<?= $form->field($model, 'credit_limit_reminder',[
'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}',
])
->hint("Une relance est envoyé au client dès que ce seuil est dépassé.") ; ?>
<?= $form->field($model, 'photo')->fileInput() ?>
<?php
if (strlen($model->photo)) {
$base_url = Yii::$app->urlManagerProducer->baseUrl ;
echo '<img src="'.$base_url.'/uploads/' . $model->photo . '" width="400px" /><br />';
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />';
}
?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Général</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'active')
->dropDownList([
0 => 'Non',
1 => 'Oui'
], [])
->label('En ligne')
->hint('Activez cette option pour rendre votre établissement visible à vos clients.') ; ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'type') ?>
<?= $form->field($model, 'description')
->textarea(['rows' => 6])
->hint('Affiché sur la page d\'accueil') ?>
<?= $form->field($model, 'postcode') ?>
<?= $form->field($model, 'city') ?>

<?= $form->field($model, 'code')->hint("Saisissez ce champs si vous souhaitez protéger l'accès à votre boutique par un code, sinon laissez-le vide.<br />"
. "Ce code est à communiquer à vos client pour qu'ils puissent ajouter votre établissement à leur tableau de bord.<br />"
. "<a href=\"".Yii::$app->urlManager->createUrl(['communicate/index'])."\">Cliquez ici</a> pour télécharger un mode d'emploi comprenant ce code à distribuer à vos clients.") ?>
<?= $form->field($model, 'photo')->fileInput() ?>
<?php
if (strlen($model->photo)) {
$base_url = Yii::$app->urlManagerProducer->baseUrl ;
echo '<img src="'.$base_url.'/uploads/' . $model->photo . '" width="400px" /><br />';
echo '<input type="checkbox" name="delete_photo" id="delete_photo" /> <label for="delete_photo">Supprimer la photo</label><br /><br />';
}
?>
</div>
</div>
<?= $form->field($model, 'order_infos')
->textarea(['rows' => 6])
->hint('Affichées au client lors de sa commande')?>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Prise de commande</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'order_delay')
->dropDownList([
1 => '1 jour',
2 => '2 jours',
3 => '3 jours',
4 => '4 jours',
5 => '5 jours',
6 => '6 jours',
7 => '7 jours',
], [])
->hint('Si <strong>1 jour</strong> est sélectionné, le client pourra commander jusqu\'à la veille de la production.<br />'
. 'Si <strong>2 jours</strong> est sélectionné, le client pourra commander jusqu\'à l\'avant-veille de la production, etc.') ; ?>
<?= $form->field($model, 'order_deadline')
->dropDownList([
24 => 'Minuit',
23 => '23h',
22 => '22h',
21 => '21h',
20 => '20h',
19 => '19h',
18 => '18h',
17 => '17h',
16 => '16h',
15 => '15h',
14 => '14h',
13 => '13h',
12 => '12h',
11 => '11h',
10 => '10h',
9 => '9h',
8 => '8h',
], [])
->hint('Heure limite jusqu\'à laquelle les clients peuvent commander pour satisfaire le délai de commande.<br />'
. 'Par exemple, si <strong>2 jours</strong> est sélectionné dans le délai de commande, le client devra commander l\'avant-veille de la production avant l\'heure précisée ici.') ; ?>
<?= $form->field($model, 'order_infos')
->textarea(['rows' => 6])
->hint('Affichées au client lors de sa commande')?>
</div>
</div>

<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">Crédit / paiement en ligne</h3>
</div>
<div class="panel-body">
<?= $form->field($model, 'credit')
->dropDownList([
0 => 'Non',
1 => 'Oui',
], [])
->label('Activer le système de Crédit')
->hint('Le système de Crédit permet à vos clients d\'avoir un compte prépayé sur le site <em>La boîte à pain</em>.<br />'
. 'Ils créditent leur compte en vous donnant la somme de leur choix et c\'est ensuite à vous de '.Html::a('mettre à jour', ['user/index']).' leur Crédit en ligne.<br />'
. 'Ceci fait, les clients paient leur commande directement via leur Crédit.') ; ?>

<?= $form->field($model, 'credit_limit_reminder',[
'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}',
])
->hint("Une relance est envoyé au client dès que ce seuil est dépassé.") ; ?>

<?= $form->field($model, 'online_payment')
->dropDownList([
0 => 'Non',
1 => 'Oui',
], [])
->label('Activer le paiement en ligne')
->hint('Le paiement en ligne permet à vos utilisateurs de recharger leur Crédit'
. ' via leur carte bancaire.') ; ?>
<?= $form->field($model, 'secret_key_payplug') ?>
</div>
</div>
<div class="form-group">
<?= Html::submitButton('Mettre à jour', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

+ 2
- 0
common/config/.gitignore Visa fil

@@ -1,2 +1,4 @@
main-local.php
params-local.php

payplug/*.key

+ 0
- 5
common/config/main.php Visa fil

@@ -59,11 +59,6 @@ return [
'httpOnly' => true,
],
],
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
'cache' => [
'class' => 'yii\caching\FileCache',
],

+ 2
- 0
common/config/payplug/.htaccess Visa fil

@@ -0,0 +1,2 @@
Order deny, allow
Deny from all

+ 47
- 2
common/models/Producer.php Visa fil

@@ -55,9 +55,12 @@ use yii\helpers\Html;
* @property string $postcode
* @property string $city
* @property float credit_limit_reminder
* @property boolean online_payment
*/
class Producer extends ActiveRecordCommon
{
var $secret_key_payplug ;
/**
* @inheritdoc
*/
@@ -83,8 +86,8 @@ class Producer extends ActiveRecordCommon
$this->addError($attribute, 'Ce code est déjà utilisé par un autre producteur.');
}
}],
[['description', 'order_infos','slug'], 'string'],
[['negative_balance', 'credit', 'active'], 'boolean'],
[['description', 'order_infos','slug','secret_key_payplug'], 'string'],
[['negative_balance', 'credit', 'active','online_payment'], 'boolean'],
[['name', 'siret', 'logo', 'photo', 'postcode', 'city', 'code','type'], 'string', 'max' => 255],
[['free_price', 'credit_limit_reminder'], 'double'],
['free_price', 'compare', 'compareValue' => 0, 'operator' => '>=', 'type' => 'number', 'message' => 'Prix libre doit être supérieur ou égal à 0'],
@@ -116,6 +119,8 @@ class Producer extends ActiveRecordCommon
'slug' => 'Slug',
'type' => 'Type de producteur',
'credit_limit_reminder' => 'Seuil de crédit limite avant relance',
'online_payment' => 'Activer le paiement en ligne',
'secret_key_payplug' => 'Clé secrète Payplug'
];
}

@@ -400,6 +405,46 @@ class Producer extends ActiveRecordCommon
return $earliestDateOrder ;
}
/**
* Retourne le chemin vers le fichier contenant la clé secrète d'API de Payplug
*
* @return string
*/
public function getFilenameSecretKeyPayplug()
{
return '../../common/config/payplug/'.$this->id.'.key' ;
}
/**
* Enregistre la clé secrète d'API de Payplug dans un fichier
*/
public function saveSecretKeyPayplug()
{
if($this->online_payment) {
$handle = fopen($this->getFilenameSecretKeyPayplug(),"w");
fwrite($handle,$this->secret_key_payplug);
fclose($handle);
}
}
/**
* Retourne la clé secrète d'API de Payplug.
*
* @return string
*/
public function getSecretKeyPayplug()
{
$handle = fopen($this->getFilenameSecretKeyPayplug(), "r") ;
$filesize = filesize($this->getFilenameSecretKeyPayplug()) ;
if($handle && $filesize) {
$secretKey = fread($handle, $filesize);
fclose($handle);
return $secretKey ;
}
return '' ;
}

}

+ 16
- 0
console/migrations/m190118_084149_add_field_online_payment.php Visa fil

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

use yii\db\Migration;
use yii\db\Schema;

class m190118_084149_add_field_online_payment extends Migration {

public function up() {
$this->addColumn('producer', 'online_payment', Schema::TYPE_BOOLEAN) ;
}

public function down() {
$this->dropColumn('producer', 'online_payment') ;
}
}

+ 5
- 0
producer/config/main.php Visa fil

@@ -77,6 +77,11 @@ return [
'class' => 'producer\components\ProducerView',
],
'urlManager' => $common_config_main['components']['urlManagerProducer'],
'request' => [
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
],
'params' => $params,
];

Laddar…
Avbryt
Spara