<?php | |||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.net | |||||
Ce logiciel est un programme informatique servant à aider les producteurs | |||||
à distribuer leur production en circuits courts. | |||||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||||
sur le site "http://www.cecill.info". | |||||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||||
de modification et de redistribution accordés par cette licence, il n'est | |||||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||||
titulaire des droits patrimoniaux et les concédants successifs. | |||||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||||
associés au chargement, à l'utilisation, à la modification et/ou au | |||||
développement et à la reproduction du logiciel par l'utilisateur étant | |||||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||||
avertis possédant des connaissances informatiques approfondies. Les | |||||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||||
termes. | |||||
*/ | |||||
namespace backend\controllers; | |||||
use backend\models\MailForm ; | |||||
use yii\web\NotFoundHttpException ; | |||||
use common\models\User ; | |||||
/** | |||||
* UserController implements the CRUD actions for User model. | |||||
*/ | |||||
class CommunicateAdminController extends BackendController | |||||
{ | |||||
public function behaviors() | |||||
{ | |||||
return [ | |||||
'verbs' => [ | |||||
'class' => VerbFilter::className(), | |||||
'actions' => [ | |||||
'delete' => ['post'], | |||||
], | |||||
], | |||||
'access' => [ | |||||
'class' => AccessControl::className(), | |||||
'rules' => [ | |||||
[ | |||||
'allow' => true, | |||||
'roles' => ['@'], | |||||
'matchCallback' => function ($rule, $action) { | |||||
return User::getCurrentStatus() == USER::STATUS_ADMIN; | |||||
} | |||||
] | |||||
], | |||||
], | |||||
]; | |||||
} | |||||
/** | |||||
* | |||||
* | |||||
* @return mixed | |||||
*/ | |||||
public function actionIndex($section = 'producers') | |||||
{ | |||||
if($section == 'producers') { | |||||
$producers = Producer::find()->with(['contact'])->all() ; | |||||
$usersArray = []; | |||||
$users = [] ; | |||||
foreach ($producers as $producer) { | |||||
if (isset($producer->contact) && is_array($producer->contact)) { | |||||
foreach($producer->contact as $contact) { | |||||
$usersArray[] = $contact->email ; | |||||
$users[] = [ | |||||
'email' => $contact->email, | |||||
'name' => $contact->name, | |||||
'lastname' => $contact->lastname, | |||||
] ; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
elseif($section == 'users') { | |||||
$users = User::find() | |||||
->where([ | |||||
'user.status' => User::STATUS_ACTIVE | |||||
]) | |||||
->all() ; | |||||
$usersArray = []; | |||||
foreach ($users as $user) { | |||||
if (isset($user['email']) && strlen($user['email'])) { | |||||
$usersArray[] = $user['email']; | |||||
} | |||||
} | |||||
} | |||||
else { | |||||
throw new NotFoundHttpException('Requête incorrecte.'); | |||||
} | |||||
$mailForm = new MailForm() ; | |||||
if ($mailForm->load(Yii::$app->request->post()) && $mailForm->validate()) { | |||||
$resultSendEmail = $mailForm->sendEmail($users, false) ; | |||||
if($resultSendEmail) { | |||||
Yii::$app->getSession()->setFlash('success', 'Votre email a bien été envoyé.'); | |||||
} | |||||
else { | |||||
Yii::$app->getSession()->setFlash('error', 'Un problème est survenu lors de l\'envoi de votre email.'); | |||||
} | |||||
$mailForm->subject = '' ; | |||||
$mailForm->message = '' ; | |||||
} | |||||
return $this->render('index', [ | |||||
'section' => $section, | |||||
'usersArray' => $usersArray, | |||||
'mailForm' => $mailForm, | |||||
]); | |||||
} | |||||
} |
} | } | ||||
/** | /** | ||||
* Envoie un email aux utilisateurs d'un point de vente ou à tous les | |||||
* utilisateurs d'un producteur. | |||||
* Envoie un email aux utilisateurs définis en paramètre. | |||||
* | * | ||||
* @param integer $idPointSale ID du point de vente | |||||
* @param array $usersArray | |||||
* @param boolean $fromProducer | |||||
*/ | */ | ||||
public function sendEmail($usersArray) | |||||
public function sendEmail($usersArray, $fromProducer = true) | |||||
{ | { | ||||
$producer = Producer::getCurrent() ; | |||||
$mj = new \Mailjet\Client( | $mj = new \Mailjet\Client( | ||||
$producer->getApiKeyMailjet('public'), | |||||
$producer->getApiKeyMailjet('private'), | |||||
Mailjet::getApiKey('public'), | |||||
Mailjet::getApiKey('private'), | |||||
true, | true, | ||||
['version' => 'v3.1'] | ['version' => 'v3.1'] | ||||
); | ); | ||||
} | } | ||||
} | } | ||||
if($fromProducer) { | |||||
$producer = Producer::getCurrent() ; | |||||
$fromEmail = $producer->slug.'@opendistrib.net' ; | |||||
$fromName = $producer->name ; | |||||
} | |||||
else { | |||||
$fromEmail = 'contact@opendistrib.net' ; | |||||
$fromName = 'Opendistrib' ; | |||||
} | |||||
foreach($usersArray as $user) { | foreach($usersArray as $user) { | ||||
$body['Messages'][] = [ | $body['Messages'][] = [ | ||||
'From' => [ | 'From' => [ | ||||
'Email' => $producer->slug.'@opendistrib.net', | |||||
'Name' => $producer->name | |||||
'Email' => $fromEmail, | |||||
'Name' => $fromName | |||||
], | ], | ||||
'To' => [ | 'To' => [ | ||||
[ | [ |
<?php | |||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.net | |||||
Ce logiciel est un programme informatique servant à aider les producteurs | |||||
à distribuer leur production en circuits courts. | |||||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||||
sur le site "http://www.cecill.info". | |||||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||||
de modification et de redistribution accordés par cette licence, il n'est | |||||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||||
titulaire des droits patrimoniaux et les concédants successifs. | |||||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||||
associés au chargement, à l'utilisation, à la modification et/ou au | |||||
développement et à la reproduction du logiciel par l'utilisateur étant | |||||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||||
avertis possédant des connaissances informatiques approfondies. Les | |||||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||||
termes. | |||||
*/ | |||||
use yii\helpers\Html ; | |||||
use yii\widgets\ActiveForm; | |||||
$this->setTitle('Envoyer un email') ; | |||||
$this->addBreadcrumb(['label' => 'Communiquer', 'url' => ['user/index']]) ; | |||||
$this->addBreadcrumb($this->getTitle()) ; | |||||
?> | |||||
<div class="submenu"> | |||||
<a class="btn <?php if($section == 'producers'): ?>btn-primary<?php else: ?>btn-default<?php endif; ?>" href="<?= Yii::$app->urlManager->createUrl(['communicate-admin/index', 'section' => 'producers']); ?>"> | |||||
<span class="glyphicon glyphicon-grain"></span> Producteurs <span class="glyphicon glyphicon-triangle-bottom"></span> | |||||
</a> | |||||
<a class="btn <?php if($section == 'users'): ?>btn-primary<?php else: ?>btn-default<?php endif; ?>" href="<?= Yii::$app->urlManager->createUrl(['communicate-admin/index', 'section' => 'users']); ?>"> | |||||
<span class="glyphicon glyphicon-user"></span> Utilisateurs <span class="glyphicon glyphicon-triangle-bottom"></span> | |||||
</a> | |||||
</div> | |||||
<div id=""> | |||||
<div class="col-md-6"> | |||||
<div class="panel panel-default"> | |||||
<div class="panel-heading"> | |||||
<h3 class="panel-title">Envoyer un email</h3> | |||||
</div> | |||||
<div class="panel-body"> | |||||
<?php $form = ActiveForm::begin(); ?> | |||||
<?= $form->field($mailForm, 'subject')->textInput() ; ?> | |||||
<?= $form->field($mailForm, 'message')->textarea(['rows' => '15']) ; ?> | |||||
<div class="form-group"> | |||||
<?= Html::submitButton( 'Envoyer', ['class' => 'btn btn-primary']) ?> | |||||
</div> | |||||
<?php ActiveForm::end(); ?> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="col-md-6"> | |||||
<div class="panel panel-default"> | |||||
<div class="panel-heading"> | |||||
<h3 class="panel-title">Liste des emails <span class="label label-default"><?= count($usersArray); ?></span></h3> | |||||
</div> | |||||
<div class="panel-body"> | |||||
<?= implode(', ', $usersArray); ?> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<div class="clr"></div> | |||||
</div> |
['label' => 'Administration', 'options' => ['class' => 'header'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Administration', 'options' => ['class' => 'header'], 'visible' => User::isCurrentAdmin()], | ||||
['label' => 'Producteurs','icon' => 'th-list','url' => ['/producer-admin/index'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Producteurs','icon' => 'th-list','url' => ['/producer-admin/index'], 'visible' => User::isCurrentAdmin()], | ||||
['label' => 'Communiquer','icon' => 'bullhorn','url' => ['/communicate-admin/index'], 'visible' => User::isCurrentAdmin()], | |||||
['label' => 'Outils', 'options' => ['class' => 'header'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Outils', 'options' => ['class' => 'header'], 'visible' => User::isCurrentAdmin()], | ||||
['label' => 'Gii', 'icon' => 'file-code-o', 'url' => ['/gii'], 'visible' => User::isCurrentAdmin()], | ['label' => 'Gii', 'icon' => 'file-code-o', 'url' => ['/gii'], 'visible' => User::isCurrentAdmin()], |
body.skin-black .content-wrapper .pagination > li > a:hover, body.skin-black .content-wrapper .pagination > li > span:hover { | body.skin-black .content-wrapper .pagination > li > a:hover, body.skin-black .content-wrapper .pagination > li > span:hover { | ||||
color: #cc6600; | color: #cc6600; | ||||
} | } | ||||
/* line 183, ../sass/_adminlte.scss */ | |||||
/* line 181, ../sass/_adminlte.scss */ | |||||
body.skin-black .content-wrapper .submenu { | |||||
margin-bottom: 25px; | |||||
} | |||||
/* line 187, ../sass/_adminlte.scss */ | |||||
body.skin-black .main-footer a { | body.skin-black .main-footer a { | ||||
color: #FF7F00; | color: #FF7F00; | ||||
} | } | ||||
/* line 189, ../sass/_adminlte.scss */ | |||||
/* line 193, ../sass/_adminlte.scss */ | |||||
body.login-page { | body.login-page { | ||||
background: none; | background: none; | ||||
background-color: white; | background-color: white; | ||||
} | } | ||||
/* line 193, ../sass/_adminlte.scss */ | |||||
/* line 197, ../sass/_adminlte.scss */ | |||||
body.login-page .login-box .login-logo { | body.login-page .login-box .login-logo { | ||||
text-align: center; | text-align: center; | ||||
font-family: "comfortaalight"; | font-family: "comfortaalight"; | ||||
} | } | ||||
/* line 196, ../sass/_adminlte.scss */ | |||||
/* line 200, ../sass/_adminlte.scss */ | |||||
body.login-page .login-box .login-logo img { | body.login-page .login-box .login-logo img { | ||||
width: 50px; | width: 50px; | ||||
} | } | ||||
/* line 201, ../sass/_adminlte.scss */ | |||||
/* line 205, ../sass/_adminlte.scss */ | |||||
body.login-page .login-box .login-box-body .btn-primary { | body.login-page .login-box .login-box-body .btn-primary { | ||||
background-color: #FF7F00; | background-color: #FF7F00; | ||||
border-color: #FF7F00; | border-color: #FF7F00; | ||||
padding: 5px 10px; | padding: 5px 10px; | ||||
} | } | ||||
/* line 206, ../sass/_adminlte.scss */ | |||||
/* line 210, ../sass/_adminlte.scss */ | |||||
body.login-page .login-box .login-box-body .btn-primary:active { | body.login-page .login-box .login-box-body .btn-primary:active { | ||||
background-color: #ff8c1a; | background-color: #ff8c1a; | ||||
border-color: #FF7F00; | border-color: #FF7F00; | ||||
} | } | ||||
/* line 212, ../sass/_adminlte.scss */ | |||||
/* line 216, ../sass/_adminlte.scss */ | |||||
body.login-page .login-box .login-box-body a { | body.login-page .login-box .login-box-body a { | ||||
color: #FF7F00; | color: #FF7F00; | ||||
} | } | ||||
/* line 214, ../sass/_adminlte.scss */ | |||||
/* line 218, ../sass/_adminlte.scss */ | |||||
body.login-page .login-box .login-box-body a:hover { | body.login-page .login-box .login-box-body a:hover { | ||||
color: #ff8c1a; | color: #ff8c1a; | ||||
} | } |
color: darken($color1, 10) ; | color: darken($color1, 10) ; | ||||
} | } | ||||
} | } | ||||
.submenu { | |||||
margin-bottom: 25px ; | |||||
} | |||||
} | } | ||||
.main-footer { | .main-footer { |
<?php | |||||
/** | |||||
Copyright distrib (2018) | |||||
contact@opendistrib.net | |||||
Ce logiciel est un programme informatique servant à aider les producteurs | |||||
à distribuer leur production en circuits courts. | |||||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||||
sur le site "http://www.cecill.info". | |||||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||||
de modification et de redistribution accordés par cette licence, il n'est | |||||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||||
titulaire des droits patrimoniaux et les concédants successifs. | |||||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||||
associés au chargement, à l'utilisation, à la modification et/ou au | |||||
développement et à la reproduction du logiciel par l'utilisateur étant | |||||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||||
avertis possédant des connaissances informatiques approfondies. Les | |||||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||||
termes. | |||||
*/ | |||||
namespace common\helpers; | |||||
class Mailjet | |||||
{ | |||||
public static function getApiKey($type = 'private') | |||||
{ | |||||
$filename = '../../common/config/mailjet/api.key' ; | |||||
if(file_exists($filename)) { | |||||
$handle = fopen($filename, "r") ; | |||||
$filesize = filesize($filename) ; | |||||
if($handle && $filesize) { | |||||
$apiKeys = fread($handle, $filesize); | |||||
fclose($handle); | |||||
$apiKeysArray = explode(':', $apiKeys) ; | |||||
if(count($apiKeysArray) == 2) { | |||||
if($type == 'private') { | |||||
$key = $apiKeysArray[1] ; | |||||
} | |||||
else { | |||||
$key = $apiKeysArray[0] ; | |||||
} | |||||
return trim($key) ; | |||||
} | |||||
} | |||||
} | |||||
return '' ; | |||||
} | |||||
} |
return '' ; | return '' ; | ||||
} | } | ||||
public function getApiKeyMailjet($type = 'private') | |||||
{ | |||||
$filename = '../../common/config/mailjet/api.key' ; | |||||
if(file_exists($filename)) { | |||||
$handle = fopen($filename, "r") ; | |||||
$filesize = filesize($filename) ; | |||||
if($handle && $filesize) { | |||||
$apiKeys = fread($handle, $filesize); | |||||
fclose($handle); | |||||
$apiKeysArray = explode(':', $apiKeys) ; | |||||
if(count($apiKeysArray) == 2) { | |||||
if($type == 'private') { | |||||
$key = $apiKeysArray[1] ; | |||||
} | |||||
else { | |||||
$key = $apiKeysArray[0] ; | |||||
} | |||||
return trim($key) ; | |||||
} | |||||
} | |||||
} | |||||
return '' ; | |||||
} | |||||
} | } | ||||
*/ | */ | ||||
public static function findBy($params = []) | public static function findBy($params = []) | ||||
{ | { | ||||
if (!isset($params['id_producer'])) { | if (!isset($params['id_producer'])) { | ||||
$params['id_producer'] = Producer::getId() ; | $params['id_producer'] = Producer::getId() ; | ||||
} | } |