Browse Source

[Administration et espace producteur] Newsletter : gestion inscription / désinscription #158

feature/souke
Guillaume Bourgeois 1 year ago
parent
commit
cf6e943e76
18 changed files with 355 additions and 81 deletions
  1. +1
    -1
      backend/controllers/CommunicateController.php
  2. +9
    -3
      backend/controllers/UserController.php
  3. +11
    -1
      backend/models/MailForm.php
  4. +1
    -0
      backend/views/user/_form.php
  5. +16
    -0
      backend/views/user/index.php
  6. +4
    -2
      common/logic/User/User/Model/User.php
  7. +1
    -1
      common/logic/User/User/Repository/UserRepository.php
  8. +47
    -0
      common/logic/User/User/Service/NewsletterUtils.php
  9. +2
    -0
      common/logic/User/User/Wrapper/UserContainer.php
  10. +2
    -0
      common/logic/User/User/Wrapper/UserManager.php
  11. +1
    -1
      common/logic/User/UserProducer/Model/UserProducer.php
  12. +6
    -0
      common/logic/User/UserProducer/Service/UserProducerBuilder.php
  13. +27
    -0
      console/migrations/m230904_064216_add_column_user_producer_newsletter.php
  14. +75
    -0
      producer/controllers/NewsletterController.php
  15. +6
    -6
      producer/views/layouts/main.php
  16. +71
    -0
      producer/views/newsletter/index.php
  17. +71
    -66
      producer/web/css/screen.css
  18. +4
    -0
      producer/web/sass/_layout.scss

+ 1
- 1
backend/controllers/CommunicateController.php View File

} }


/** /**
* Affiche la page d'accueil de la section avec un aperçu du mpde d'emploi
* Affiche la page d'accueil de la section avec un aperçu du mode d'emploi
* à imprimer. * à imprimer.
*/ */
public function actionIndex() public function actionIndex()

+ 9
- 3
backend/controllers/UserController.php View File

$useProducer->id_producer = GlobalParam::getCurrentProducerId(); $useProducer->id_producer = GlobalParam::getCurrentProducerId();
$useProducer->credit = 0; $useProducer->credit = 0;
$useProducer->active = 1; $useProducer->active = 1;
$useProducer->newsletter = $model->newsletter;
$useProducer->save(); $useProducer->save();


$userManager->sendMailWelcome($model, $password); $userManager->sendMailWelcome($model, $password);
public function actionUpdate($id) public function actionUpdate($id)
{ {
$userManager = $this->getUserManager(); $userManager = $this->getUserManager();
$producerManager = $this->getProducerManager();
$pointSaleManager = $this->getPointSaleManager(); $pointSaleManager = $this->getPointSaleManager();


$model = $this->findModel($id); $model = $this->findModel($id);

// Moodification du profil
$previousMail = $model->email; $previousMail = $model->email;
$user = User::find()->with('userProducer')->where(['id' => $model['id']])->one(); $user = User::find()->with('userProducer')->where(['id' => $model['id']])->one();
$userBelongToProducer = UserProducer::findOne(['id_user' => $id, 'id_producer' => GlobalParam::getCurrentProducerId()]); $userBelongToProducer = UserProducer::findOne(['id_user' => $id, 'id_producer' => GlobalParam::getCurrentProducerId()]);
if ($userBelongToProducer) { if ($userBelongToProducer) {
$model->newsletter = $userBelongToProducer->newsletter;
if ($model->load(\Yii::$app->request->post()) && $model->save()) { if ($model->load(\Yii::$app->request->post()) && $model->save()) {


// on envoie le mail de bienvenue si le mail vient d'être défini // on envoie le mail de bienvenue si le mail vient d'être défini
$this->processLinkUserGroup($model); $this->processLinkUserGroup($model);
$this->processProductPricePercent($model); $this->processProductPricePercent($model);


if($model->newsletter) {
$userManager->subscribeUserNewsletter($model);
}
else {
$userManager->unsubscribeUserNewsletter($model);
}

$this->setFlash('success', 'Utilisateur <strong>'.Html::encode($userManager->getUsername($model)).'</strong> modifié.'); $this->setFlash('success', 'Utilisateur <strong>'.Html::encode($userManager->getUsername($model)).'</strong> modifié.');


return $this->redirect(['index']); return $this->redirect(['index']);

+ 11
- 1
backend/models/MailForm.php View File

} }
} }
} }
if($fromProducer) { if($fromProducer) {
$producer = GlobalParam::getCurrentProducer() ; $producer = GlobalParam::getCurrentProducer() ;
$fromEmail = $producerManager->getEmailOpendistrib($producer) ; $fromEmail = $producerManager->getEmailOpendistrib($producer) ;
$fromName = $producer->name ; $fromName = $producer->name ;

// Message inscription newsletter
$messageAutoText .= "

--

Me désinscrire de ce bulletin d'information :
".Yii::$app->urlManagerProducer->createAbsoluteUrl(['newsletter/index', 'slug_producer' => $producer->slug]);

$messageAutoHtml .= "<br /><br />--<br /><br /><a href=\"".Yii::$app->urlManagerProducer->createAbsoluteUrl(['newsletter/unsubscribe', 'slug_producer' => $producer->slug])."\">Me désinscrire</a> de ce bulletin d'information";
} }
else { else {
$fromEmail = 'contact@opendistrib.net' ; $fromEmail = 'contact@opendistrib.net' ;

+ 1
- 0
backend/views/user/_form.php View File

<?= $form->field($model, 'name')->textInput() ?> <?= $form->field($model, 'name')->textInput() ?>
<?= $form->field($model, 'phone')->textInput() ?> <?= $form->field($model, 'phone')->textInput() ?>
<?= $form->field($model, 'email')->textInput() ?> <?= $form->field($model, 'email')->textInput() ?>
<?= $form->field($model, 'newsletter')->checkbox() ?>
<?= $form->field($model, 'address')->textarea() ?> <?= $form->field($model, 'address')->textarea() ?>


<?php if ($producerManager->getConfig('option_export_evoliz')): ?> <?php if ($producerManager->getConfig('option_export_evoliz')): ?>

+ 16
- 0
backend/views/user/index.php View File

return $html; return $html;
} }
], ],
[
'attribute' => 'newsletter',
'header' => "Inscrit au bulletin<br/>d'information",
'format' => 'raw',
'headerOptions' => ['class' => 'column-hide-on-mobile'],
'filterOptions' => ['class' => 'column-hide-on-mobile'],
'contentOptions' => ['class' => 'column-hide-on-mobile'],
'value' => function ($model) {
$userManager = UserManager::getInstance();
if($userManager->isUserSubscribedNewsletter($model)) {
return '<span class="label label-success">Oui</span>';
}

return '<span class="label label-danger">Non</span>';
}
],
[ [
'class' => 'yii\grid\ActionColumn', 'class' => 'yii\grid\ActionColumn',
'header' => 'Commandes', 'header' => 'Commandes',

+ 4
- 2
common/logic/User/User/Model/User.php View File

var $user_groups = []; var $user_groups = [];
var $one_name; var $one_name;
var $product_price_percent; var $product_price_percent;
var $newsletter;


/** /**
* @inheritdoc * @inheritdoc
public function rules() public function rules()
{ {
return [ return [
[['no_mail', 'mail_distribution_monday', 'mail_distribution_tuesday', 'mail_distribution_wednesday', 'mail_distribution_thursday', 'mail_distribution_friday', 'mail_distribution_saturday', 'mail_distribution_sunday', 'is_main_contact'], 'boolean'],
[['no_mail', 'mail_distribution_monday', 'mail_distribution_tuesday', 'mail_distribution_wednesday', 'mail_distribution_thursday', 'mail_distribution_friday', 'mail_distribution_saturday', 'mail_distribution_sunday', 'is_main_contact', 'newsletter'], 'boolean'],
[['lastname', 'name', 'phone', 'address', 'type', 'name_legal_person', 'evoliz_code'], 'string'], [['lastname', 'name', 'phone', 'address', 'type', 'name_legal_person', 'evoliz_code'], 'string'],
['lastname', 'verifyOneName', 'skipOnError' => false, 'skipOnEmpty' => false], ['lastname', 'verifyOneName', 'skipOnError' => false, 'skipOnEmpty' => false],
['email', 'email', 'message' => 'Cette adresse email n\'est pas valide'], ['email', 'email', 'message' => 'Cette adresse email n\'est pas valide'],
'is_main_contact' => 'Contact principal', 'is_main_contact' => 'Contact principal',
'product_price_percent' => 'Prix produits : pourcentage', 'product_price_percent' => 'Prix produits : pourcentage',
'user_groups' => "Groupes d'utilisateurs", 'user_groups' => "Groupes d'utilisateurs",
'evoliz_code' => 'Code client Evoliz'
'evoliz_code' => 'Code client Evoliz',
'newsletter' => "Inscrit au bulletin d'information"
]; ];
} }



+ 1
- 1
common/logic/User/User/Repository/UserRepository.php View File

->from('user'); ->from('user');


$active = (isset($params['inactive']) && $params['inactive']) ? 0 : 1; $active = (isset($params['inactive']) && $params['inactive']) ? 0 : 1;
$query->innerJoin('user_producer', 'user.id = user_producer.id_user AND user_producer.active = ' . $active . ' AND user_producer.id_producer = :id_producer', [':id_producer' => $params['id_producer']]);
$query->innerJoin('user_producer', 'user.id = user_producer.id_user AND user_producer.active = ' . $active . ' AND user_producer.newsletter = 1 AND user_producer.id_producer = :id_producer', [':id_producer' => $params['id_producer']]);


if (isset($params['id_point_sale']) && $params['id_point_sale']) { if (isset($params['id_point_sale']) && $params['id_point_sale']) {
$point_sale = PointSale::findOne(['id' => $params['id_point_sale']]); $point_sale = PointSale::findOne(['id' => $params['id_point_sale']]);

+ 47
- 0
common/logic/User/User/Service/NewsletterUtils.php View File

<?php

namespace common\logic\User\User\Service;

use common\logic\AbstractService;
use common\logic\User\User\Model\User;
use common\logic\User\UserProducer\Repository\UserProducerRepository;
use common\logic\User\UserProducer\Service\UserProducerBuilder;
use common\logic\UtilsInterface;

class NewsletterUtils extends AbstractService implements UtilsInterface
{
protected UserProducerRepository $userProducerRepository;
protected UserProducerBuilder $userProducerBuilder;

public function loadDependencies(): void
{
$this->userProducerRepository = $this->loadService(UserProducerRepository::class);
$this->userProducerBuilder = $this->loadService(UserProducerBuilder::class);
}

public function isUserSubscribedNewsletter(User $user): bool
{
$userProducer = $this->userProducerRepository->findOneUserProducer($user);
if($userProducer && $userProducer->newsletter) {
return true;
}

return false;
}

public function subscribeUserNewsletter(User $user): bool
{
$userProducer = $this->userProducerBuilder->createUserProducerIfNotExist($user, $this->getProducerContext());
return $this->userProducerBuilder->updateUserProducerNewsletter($userProducer, true);
}

public function unsubscribeUserNewsletter(User $user): bool
{
$userProducer = $this->userProducerRepository->findOneUserProducer($user);
if($userProducer) {
return $this->userProducerBuilder->updateUserProducerNewsletter($userProducer, false);
}

return false;
}
}

+ 2
- 0
common/logic/User/User/Wrapper/UserContainer.php View File

use common\logic\AbstractContainer; use common\logic\AbstractContainer;
use common\logic\User\User\Repository\UserRepository; use common\logic\User\User\Repository\UserRepository;
use common\logic\User\User\Repository\UserRepositoryQuery; use common\logic\User\User\Repository\UserRepositoryQuery;
use common\logic\User\User\Service\NewsletterUtils;
use common\logic\User\User\Service\UserBuilder; use common\logic\User\User\Service\UserBuilder;
use common\logic\User\User\Service\UserDefinition; use common\logic\User\User\Service\UserDefinition;
use common\logic\User\User\Service\UsersCreditCsvGenerator; use common\logic\User\User\Service\UsersCreditCsvGenerator;
UserBuilder::class, UserBuilder::class,
UsersCreditCsvGenerator::class, UsersCreditCsvGenerator::class,
UserUtils::class, UserUtils::class,
NewsletterUtils::class,
]; ];
} }



+ 2
- 0
common/logic/User/User/Wrapper/UserManager.php View File



use common\logic\AbstractManager; use common\logic\AbstractManager;
use common\logic\User\User\Repository\UserRepository; use common\logic\User\User\Repository\UserRepository;
use common\logic\User\User\Service\NewsletterUtils;
use common\logic\User\User\Service\UserBuilder; use common\logic\User\User\Service\UserBuilder;
use common\logic\User\User\Service\UserDefinition; use common\logic\User\User\Service\UserDefinition;
use common\logic\User\User\Service\UsersCreditCsvGenerator; use common\logic\User\User\Service\UsersCreditCsvGenerator;
* @mixin UserBuilder * @mixin UserBuilder
* @mixin UserUtils * @mixin UserUtils
* @mixin UsersCreditCsvGenerator * @mixin UsersCreditCsvGenerator
* @mixin NewsletterUtils
*/ */
class UserManager extends AbstractManager class UserManager extends AbstractManager
{ {

+ 1
- 1
common/logic/User/UserProducer/Model/UserProducer.php View File

return [ return [
[['id_user', 'id_producer'], 'required'], [['id_user', 'id_producer'], 'required'],
[['id_user', 'id_producer', 'product_price_percent'], 'integer'], [['id_user', 'id_producer', 'product_price_percent'], 'integer'],
[['active', 'bookmark', 'credit_active'], 'boolean'],
[['active', 'bookmark', 'credit_active', 'newsletter'], 'boolean'],
[['credit', 'product_price_percent'], 'double'], [['credit', 'product_price_percent'], 'double'],
]; ];
} }

+ 6
- 0
common/logic/User/UserProducer/Service/UserProducerBuilder.php View File

$userProducer->bookmark = 0; $userProducer->bookmark = 0;
return $this->update($userProducer); return $this->update($userProducer);
} }

public function updateUserProducerNewsletter(UserProducer $userProducer, bool $newsletter)
{
$userProducer->newsletter = $newsletter;
return $this->update($userProducer);
}
} }

+ 27
- 0
console/migrations/m230904_064216_add_column_user_producer_newsletter.php View File

<?php

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

/**
* Class m230904_064216_add_column_user_producer_newsletter
*/
class m230904_064216_add_column_user_producer_newsletter extends Migration
{
/**
* {@inheritdoc}
*/
public function safeUp()
{
$this->addColumn('user_producer', 'newsletter', Schema::TYPE_BOOLEAN);
$this->execute('UPDATE user_producer SET newsletter = 1;');
}

/**
* {@inheritdoc}
*/
public function safeDown()
{
$this->dropColumn('user_producer', 'newsletter');
}
}

+ 75
- 0
producer/controllers/NewsletterController.php View File

<?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 producer\controllers;

class NewsletterController extends ProducerBaseController
{
public function behaviors()
{
return [];
}

public function actionIndex()
{
return $this->render('index', [
'user' => $this->getUserCurrent(),
'producer' => $this->getProducerCurrent()
]);
}

public function actionSubscribe()
{
$userManager = $this->getUserManager();
$userCurrent = $this->getUserCurrent();
$userManager->subscribeUserNewsletter($userCurrent);
$this->setFlash('success', "Votre inscription au bulletin d'information a bien été prise en compte.");
return $this->redirect('index');
}

public function actionUnsubscribe()
{
$userManager = $this->getUserManager();
$userCurrent = $this->getUserCurrent();
$userManager->unsubscribeUserNewsletter($userCurrent);
$this->setFlash('success', "À partir de maintenant, vous ne recevrez plus d'email de la part de ce producteur.");
return $this->redirect('index');
}
}

?>

+ 6
- 6
producer/views/layouts/main.php View File

->count(); ->count();
$labelOrders = $countOrders > 0 ? 'success' : 'default'; $labelOrders = $countOrders > 0 ? 'success' : 'default';


$isUserSubscribedNewsletter = $userManager->isUserSubscribedNewsletter($userCurrent);


echo Nav::widget([ echo Nav::widget([
'encodeLabels' => false, 'encodeLabels' => false,
'visible' => !Yii::$app->user->isGuest && $producer->credit, 'visible' => !Yii::$app->user->isGuest && $producer->credit,
'active' => $this->getControllerAction() == 'credit/history', 'active' => $this->getControllerAction() == 'credit/history',
], ],
[
'label' => '<span class="glyphicon glyphicon-bullhorn"></span> Bulletin d\'information <span class="label label-'.($isUserSubscribedNewsletter ? 'success' : 'danger').'">'.($isUserSubscribedNewsletter ? 'Oui' : 'Non').'</span>',
'url' => $this->getUrlManagerProducer()->createUrl(['newsletter/index']),
'active' => $this->getControllerAction() == 'newsletter/index',
],
[ [
'label' => '<span class="glyphicon glyphicon-envelope"></span> Contact', 'label' => '<span class="glyphicon glyphicon-envelope"></span> Contact',
'url' => $this->getUrlManagerProducer()->createUrl(['site/contact']), 'url' => $this->getUrlManagerProducer()->createUrl(['site/contact']),
'active' => $this->getControllerAction() == 'site/contact', 'active' => $this->getControllerAction() == 'site/contact',
], ],
/*[
'label' => '<span class="glyphicon glyphicon-cog"></span> Administration',
'url' => $this->getUrlManagerBackend()->createAbsoluteUrl(['site/index']),
'visible' => isset(Yii::$app->user->identity) && $this->getUserManager()->isProducer(\Yii::$app->user->identity),
'options' => ['id' => 'btn-administration']
],*/
], ],
]); ]);
?> ?>

+ 71
- 0
producer/views/newsletter/index.php View File

<?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 common\logic\User\User\Wrapper\UserManager;
use yii\helpers\Html;

$userManager = UserManager::getInstance();

$this->setTitle("Bulletin d'information");

?>
<div class="newsletter-index">
<?php if($userManager->isUserSubscribedNewsletter($user)): ?>
<div class="panel panel-default">
<div class="panel-body">
Vous êtes inscrit au bulletin d'information <strong><?= Html::encode($producer->name) ?></strong>.
</div>
</div>
<p>
<a class="btn btn-danger" href="<?= $this->getUrlManagerProducer()->createUrl(['newsletter/unsubscribe']) ?>">
Me désinscrire
</a>
</p>
<?php else: ?>
<div class="panel panel-default">
<div class="panel-body">
Vous n'êtes pas inscrit au bulletin d'information <strong><?= Html::encode($producer->name) ?></strong>.
</div>
</div>
<p>
<a class="btn btn-success" href="<?= $this->getUrlManagerProducer()->createUrl(['newsletter/subscribe']) ?>">
M'inscrire
</a>
</p>
<?php endif; ?>
</div>

+ 71
- 66
producer/web/css/screen.css View File

clear: both; clear: both;
} }


/* line 64, ../sass/_layout.scss */
/* line 63, ../sass/_layout.scss */
.panel strong {
font-weight: bold;
}

/* line 68, ../sass/_layout.scss */
.modal-backdrop.in { .modal-backdrop.in {
z-index: 10; z-index: 10;
} }


/* line 69, ../sass/_layout.scss */
/* line 73, ../sass/_layout.scss */
#section-user-top .navbar-default { #section-user-top .navbar-default {
background-color: white; background-color: white;
} }


/* line 74, ../sass/_layout.scss */
/* line 78, ../sass/_layout.scss */
#main { #main {
position: relative; position: relative;
} }
/* line 76, ../sass/_layout.scss */
/* line 80, ../sass/_layout.scss */
#main .btn-primary { #main .btn-primary {
background-color: #F39C12; background-color: #F39C12;
border: solid 1px #F39C12; border: solid 1px #F39C12;
color: white; color: white;
} }
/* line 81, ../sass/_layout.scss */
/* line 85, ../sass/_layout.scss */
#main .btn-primary:hover, #main .btn-primary:active, #main .btn-primary:focus { #main .btn-primary:hover, #main .btn-primary:active, #main .btn-primary:focus {
background-color: #e08e0b; background-color: #e08e0b;
border: solid 1px #F39C12; border: solid 1px #F39C12;
color: white; color: white;
} }


/* line 90, ../sass/_layout.scss */
/* line 94, ../sass/_layout.scss */
.btn { .btn {
background-image: none; background-image: none;
} }


/* line 94, ../sass/_layout.scss */
/* line 98, ../sass/_layout.scss */
#main .alert { #main .alert {
background-image: none; background-image: none;
background-color: white; background-color: white;
border-bottom-width: 3px; border-bottom-width: 3px;
} }


/* line 102, ../sass/_layout.scss */
/* line 106, ../sass/_layout.scss */
.alert.alert-warning a { .alert.alert-warning a {
color: #8a6d3b; color: #8a6d3b;
text-decoration: underline; text-decoration: underline;
} }
/* line 109, ../sass/_layout.scss */
/* line 113, ../sass/_layout.scss */
.alert.alert-danger a { .alert.alert-danger a {
color: #a94442; color: #a94442;
text-decoration: underline; text-decoration: underline;
} }


/* line 119, ../sass/_layout.scss */
/* line 123, ../sass/_layout.scss */
ul.pagination li.active a { ul.pagination li.active a {
background-color: #F39C12; background-color: #F39C12;
border: solid 1px #F39C12; border: solid 1px #F39C12;
} }
/* line 123, ../sass/_layout.scss */
/* line 127, ../sass/_layout.scss */
ul.pagination li.active a:hover { ul.pagination li.active a:hover {
background-color: white; background-color: white;
border: solid 1px white; border: solid 1px white;
color: #F39C12; color: #F39C12;
} }
/* line 130, ../sass/_layout.scss */
/* line 134, ../sass/_layout.scss */
ul.pagination li a { ul.pagination li a {
color: #F39C12; color: #F39C12;
} }
/* line 133, ../sass/_layout.scss */
/* line 137, ../sass/_layout.scss */
ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active { ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active {
background-color: white; background-color: white;
border: solid 1px white; border: solid 1px white;
color: #F39C12; color: #F39C12;
} }


/* line 143, ../sass/_layout.scss */
/* line 147, ../sass/_layout.scss */
.product-name-description-block .name { .product-name-description-block .name {
font-family: "capsuularegular"; font-family: "capsuularegular";
color: black; color: black;
line-height: 25px; line-height: 25px;
font-weight: bold; font-weight: bold;
} }
/* line 151, ../sass/_layout.scss */
/* line 155, ../sass/_layout.scss */
.product-name-description-block .other { .product-name-description-block .other {
font-family: "capsuularegular"; font-family: "capsuularegular";
color: black; color: black;
font-weight: bold; font-weight: bold;
font-size: 17px; font-size: 17px;
} }
/* line 158, ../sass/_layout.scss */
/* line 162, ../sass/_layout.scss */
.product-name-description-block .description, .product-name-description-block .description,
.product-name-description-block .description-long { .product-name-description-block .description-long {
color: gray; color: gray;
} }
/* line 164, ../sass/_layout.scss */
/* line 168, ../sass/_layout.scss */
.product-name-description-block .description-long a { .product-name-description-block .description-long a {
color: #F39C12; color: #F39C12;
} }
/* line 167, ../sass/_layout.scss */
/* line 171, ../sass/_layout.scss */
.product-name-description-block .description-long .content { .product-name-description-block .description-long .content {
display: none; display: none;
} }


/* line 173, ../sass/_layout.scss */
/* line 177, ../sass/_layout.scss */
#left { #left {
background-color: #FFF8DC; background-color: #FFF8DC;
text-align: center; text-align: center;
padding: 0px; padding: 0px;
position: relative; position: relative;
} }
/* line 180, ../sass/_layout.scss */
/* line 184, ../sass/_layout.scss */
#left .fixed { #left .fixed {
position: fixed; position: fixed;
display: none; display: none;
} }
/* line 186, ../sass/_layout.scss */
/* line 190, ../sass/_layout.scss */
#left #logo { #left #logo {
position: relative; position: relative;
background-color: white; background-color: white;
text-align: center; text-align: center;
overflow: hidden; overflow: hidden;
} }
/* line 198, ../sass/_layout.scss */
/* line 202, ../sass/_layout.scss */
#left #logo img { #left #logo img {
position: absolute; position: absolute;
top: 50%; top: 50%;
max-width: 90px; max-width: 90px;
max-height: 90px; max-height: 90px;
} }
/* line 208, ../sass/_layout.scss */
/* line 212, ../sass/_layout.scss */
#left h1, #left h2, #left #infos, #left #infos a { #left h1, #left h2, #left #infos, #left #infos a {
color: #323232; color: #323232;
} }
/* line 212, ../sass/_layout.scss */
/* line 216, ../sass/_layout.scss */
#left h1 { #left h1 {
text-transform: uppercase; text-transform: uppercase;
font-family: "highvoltageregular"; font-family: "highvoltageregular";
text-align: center; text-align: center;
font-weight: normal; font-weight: normal;
} }
/* line 223, ../sass/_layout.scss */
/* line 227, ../sass/_layout.scss */
#left h2 { #left h2 {
font-family: "capsuularegular"; font-family: "capsuularegular";
font-size: 15px; font-size: 15px;
font-weight: normal; font-weight: normal;
text-align: center; text-align: center;
} }
/* line 229, ../sass/_layout.scss */
/* line 233, ../sass/_layout.scss */
#left h2 .favorite { #left h2 .favorite {
padding-left: 0px; padding-left: 0px;
} }
/* line 232, ../sass/_layout.scss */
/* line 236, ../sass/_layout.scss */
#left h2 .favorite .glyphicon { #left h2 .favorite .glyphicon {
font-size: 14px; font-size: 14px;
} }
/* line 237, ../sass/_layout.scss */
/* line 241, ../sass/_layout.scss */
#left h2 a { #left h2 a {
color: #323232; color: #323232;
} }
/* line 243, ../sass/_layout.scss */
/* line 247, ../sass/_layout.scss */
#left nav#main-nav { #left nav#main-nav {
background-color: white; background-color: white;
border: solid 1px #e0e0e0; border: solid 1px #e0e0e0;
border-bottom: 0px none; border-bottom: 0px none;
margin-top: 20px; margin-top: 20px;
} }
/* line 250, ../sass/_layout.scss */
/* line 254, ../sass/_layout.scss */
#left nav#main-nav ul li { #left nav#main-nav ul li {
display: block; display: block;
} }
/* line 253, ../sass/_layout.scss */
/* line 257, ../sass/_layout.scss */
#left nav#main-nav ul li a { #left nav#main-nav ul li a {
color: #323232; color: #323232;
color: black; color: black;
display: block; display: block;
text-align: left; text-align: left;
} }
/* line 262, ../sass/_layout.scss */
/* line 266, ../sass/_layout.scss */
#left nav#main-nav ul li a .glyphicon { #left nav#main-nav ul li a .glyphicon {
font-size: 15px; font-size: 15px;
margin-right: 3px; margin-right: 3px;
} }
/* line 267, ../sass/_layout.scss */
/* line 271, ../sass/_layout.scss */
#left nav#main-nav ul li a span.label { #left nav#main-nav ul li a span.label {
padding-bottom: 3px; padding-bottom: 3px;
font-family: "Arial"; font-family: "Arial";
float: right; float: right;
} }
/* line 275, ../sass/_layout.scss */
/* line 279, ../sass/_layout.scss */
#left nav#main-nav ul li.active span.label, #left nav#main-nav ul li a:hover span.label { #left nav#main-nav ul li.active span.label, #left nav#main-nav ul li a:hover span.label {
background-color: #e08e0b; background-color: #e08e0b;
color: white; color: white;
} }
/* line 281, ../sass/_layout.scss */
/* line 285, ../sass/_layout.scss */
#left nav#main-nav ul li a:hover, #left nav#main-nav ul li.active a { #left nav#main-nav ul li a:hover, #left nav#main-nav ul li.active a {
background: #F39C12; background: #F39C12;
color: white; color: white;
-webkit-border-radius: 0px; -webkit-border-radius: 0px;
border-radius: 0px; border-radius: 0px;
} }
/* line 290, ../sass/_layout.scss */
/* line 294, ../sass/_layout.scss */
#left nav#main-nav ul li#btn-administration a { #left nav#main-nav ul li#btn-administration a {
color: #F39C12; color: #F39C12;
} }
/* line 293, ../sass/_layout.scss */
/* line 297, ../sass/_layout.scss */
#left nav#main-nav ul li#btn-administration a:hover { #left nav#main-nav ul li#btn-administration a:hover {
color: white; color: white;
} }
/* line 301, ../sass/_layout.scss */
/* line 305, ../sass/_layout.scss */
#left nav#main-nav #user { #left nav#main-nav #user {
color: #F39C12; color: #F39C12;
float: right; float: right;
padding: 10px; padding: 10px;
} }


/* line 309, ../sass/_layout.scss */
/* line 313, ../sass/_layout.scss */
#main { #main {
background-color: #FFF8DC; background-color: #FFF8DC;
border: solid 1px #e0e0e0; border: solid 1px #e0e0e0;
padding: 0px; padding: 0px;
background-color: white; background-color: white;
} }
/* line 316, ../sass/_layout.scss */
/* line 320, ../sass/_layout.scss */
#main #img-big { #main #img-big {
height: 130px; height: 130px;
overflow: hidden; overflow: hidden;
position: relative; position: relative;
} }
/* line 321, ../sass/_layout.scss */
/* line 325, ../sass/_layout.scss */
#main #img-big img.img-photo { #main #img-big img.img-photo {
width: 100%; width: 100%;
position: absolute; position: absolute;
left: 50%; left: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
/* line 331, ../sass/_layout.scss */
/* line 335, ../sass/_layout.scss */
#main #infos-producer { #main #infos-producer {
padding: 5px 10px; padding: 5px 10px;
margin-bottom: 0px; margin-bottom: 0px;
border-bottom: solid 1px #e0e0e0; border-bottom: solid 1px #e0e0e0;
color: gray; color: gray;
} }
/* line 340, ../sass/_layout.scss */
/* line 344, ../sass/_layout.scss */
#main #infos-producer strong { #main #infos-producer strong {
font-weight: bold; font-weight: bold;
} }
/* line 344, ../sass/_layout.scss */
/* line 348, ../sass/_layout.scss */
#main #infos-producer .favorite { #main #infos-producer .favorite {
float: right; float: right;
color: gray; color: gray;
} }
/* line 347, ../sass/_layout.scss */
/* line 351, ../sass/_layout.scss */
#main #infos-producer .favorite a { #main #infos-producer .favorite a {
color: black; color: black;
} }
/* line 353, ../sass/_layout.scss */
/* line 357, ../sass/_layout.scss */
#main h2#page-title { #main h2#page-title {
padding-left: 15px; padding-left: 15px;
padding-right: 15px; padding-right: 15px;
top: -10px; top: -10px;
text-align: left; text-align: left;
} }
/* line 367, ../sass/_layout.scss */
/* line 371, ../sass/_layout.scss */
#main h2#page-title #buttons { #main h2#page-title #buttons {
margin-bottom: 15px; margin-bottom: 15px;
font-family: "Arial"; font-family: "Arial";
} }
/* line 374, ../sass/_layout.scss */
/* line 378, ../sass/_layout.scss */
#main #content { #main #content {
padding: 0px 20px 20px 20px; padding: 0px 20px 20px 20px;
padding-bottom: 40px; padding-bottom: 40px;
min-height: 300px; min-height: 300px;
} }
/* line 379, ../sass/_layout.scss */
/* line 383, ../sass/_layout.scss */
#main #content h1, #main #content h2, #main #content h3, #main #content h4, #main #content h5, #main #content h6 { #main #content h1, #main #content h2, #main #content h3, #main #content h4, #main #content h5, #main #content h6 {
font-family: "highvoltageregular"; font-family: "highvoltageregular";
margin-top: 30px; margin-top: 30px;
margin-bottom: 20px; margin-bottom: 20px;
} }
/* line 384, ../sass/_layout.scss */
/* line 388, ../sass/_layout.scss */
#main #content h1.first, #main #content h2.first, #main #content h3.first, #main #content h4.first, #main #content h5.first, #main #content h6.first { #main #content h1.first, #main #content h2.first, #main #content h3.first, #main #content h4.first, #main #content h5.first, #main #content h6.first {
margin-top: 0px; margin-top: 0px;
} }
/* line 389, ../sass/_layout.scss */
/* line 393, ../sass/_layout.scss */
#main #content h1 { #main #content h1 {
font-size: 30px; font-size: 30px;
} }
/* line 393, ../sass/_layout.scss */
/* line 397, ../sass/_layout.scss */
#main #content h2 { #main #content h2 {
font-size: 25px; font-size: 25px;
} }
/* line 398, ../sass/_layout.scss */
/* line 402, ../sass/_layout.scss */
#main #content h3 { #main #content h3 {
font-family: "capsuularegular"; font-family: "capsuularegular";
text-transform: uppercase; text-transform: uppercase;
margin-bottom: 30px; margin-bottom: 30px;
margin-top: 45px; margin-top: 45px;
} }
/* line 406, ../sass/_layout.scss */
/* line 410, ../sass/_layout.scss */
#main #content h3 span { #main #content h3 span {
padding-top: 14px; padding-top: 14px;
color: #323232; color: #323232;
} }
/* line 412, ../sass/_layout.scss */
/* line 416, ../sass/_layout.scss */
#main #content h4 { #main #content h4 {
font-size: 20px; font-size: 20px;
} }
/* line 416, ../sass/_layout.scss */
/* line 420, ../sass/_layout.scss */
#main #content h5 { #main #content h5 {
font-size: 18px; font-size: 18px;
} }
/* line 420, ../sass/_layout.scss */
/* line 424, ../sass/_layout.scss */
#main #content h6 { #main #content h6 {
font-size: 16px; font-size: 16px;
} }
/* line 426, ../sass/_layout.scss */
/* line 430, ../sass/_layout.scss */
#main #content form .form-group .hint-block { #main #content form .form-group .hint-block {
color: gray; color: gray;
} }


/* line 434, ../sass/_layout.scss */
/* line 438, ../sass/_layout.scss */
#footer-producer { #footer-producer {
text-align: center; text-align: center;
position: absolute; position: absolute;
left: 0px; left: 0px;
width: 100%; width: 100%;
} }
/* line 441, ../sass/_layout.scss */
/* line 445, ../sass/_layout.scss */
#footer-producer a { #footer-producer a {
color: #F39C12; color: #F39C12;
} }
/* line 443, ../sass/_layout.scss */
/* line 447, ../sass/_layout.scss */
#footer-producer a:active { #footer-producer a:active {
text-decoration: underline; text-decoration: underline;
} }


/* line 449, ../sass/_layout.scss */
/* line 453, ../sass/_layout.scss */
#footer { #footer {
background-color: #FFF8DC; background-color: #FFF8DC;
height: 100px; height: 100px;
float: right; float: right;
text-align: center; text-align: center;
} }
/* line 455, ../sass/_layout.scss */
/* line 459, ../sass/_layout.scss */
#footer .content { #footer .content {
padding-top: 20px; padding-top: 20px;
color: black; color: black;
} }
/* line 459, ../sass/_layout.scss */
/* line 463, ../sass/_layout.scss */
#footer .content a { #footer .content a {
color: black; color: black;
font-family: "capsuularegular"; font-family: "capsuularegular";
padding-left: 10px; padding-left: 10px;
padding-right: 10px; padding-right: 10px;
} }
/* line 466, ../sass/_layout.scss */
/* line 470, ../sass/_layout.scss */
#footer .content a:hover { #footer .content a:hover {
text-decoration: underline; text-decoration: underline;
} }
/* line 473, ../sass/_layout.scss */
/* line 477, ../sass/_layout.scss */
#footer #code-source img { #footer #code-source img {
height: 20px; height: 20px;
} }

+ 4
- 0
producer/web/sass/_layout.scss View File

a { a {
//color: $color1; //color: $color1;
} }

strong {
font-weight: bold;
}
} }


.modal-backdrop.in { .modal-backdrop.in {

Loading…
Cancel
Save