瀏覽代碼

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

feature/souke
Guillaume Bourgeois 1 年之前
父節點
當前提交
cf6e943e76
共有 18 個文件被更改,包括 355 次插入81 次删除
  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 查看文件

@@ -73,7 +73,7 @@ class CommunicateController extends BackendController
}

/**
* 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.
*/
public function actionIndex()

+ 9
- 3
backend/controllers/UserController.php 查看文件

@@ -157,6 +157,7 @@ class UserController extends BackendController
$useProducer->id_producer = GlobalParam::getCurrentProducerId();
$useProducer->credit = 0;
$useProducer->active = 1;
$useProducer->newsletter = $model->newsletter;
$useProducer->save();

$userManager->sendMailWelcome($model, $password);
@@ -178,16 +179,14 @@ class UserController extends BackendController
public function actionUpdate($id)
{
$userManager = $this->getUserManager();
$producerManager = $this->getProducerManager();
$pointSaleManager = $this->getPointSaleManager();

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

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

// on envoie le mail de bienvenue si le mail vient d'être défini
@@ -201,6 +200,13 @@ class UserController extends BackendController
$this->processLinkUserGroup($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é.');

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

+ 11
- 1
backend/models/MailForm.php 查看文件

@@ -163,11 +163,21 @@ Produits disponibles :
}
}
}
if($fromProducer) {
$producer = GlobalParam::getCurrentProducer() ;
$fromEmail = $producerManager->getEmailOpendistrib($producer) ;
$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 {
$fromEmail = 'contact@opendistrib.net' ;

+ 1
- 0
backend/views/user/_form.php 查看文件

@@ -63,6 +63,7 @@ $producerManager = $this->getProducerManager();
<?= $form->field($model, 'name')->textInput() ?>
<?= $form->field($model, 'phone')->textInput() ?>
<?= $form->field($model, 'email')->textInput() ?>
<?= $form->field($model, 'newsletter')->checkbox() ?>
<?= $form->field($model, 'address')->textarea() ?>

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

+ 16
- 0
backend/views/user/index.php 查看文件

@@ -109,6 +109,22 @@ $this->render('_menu', [
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',
'header' => 'Commandes',

+ 4
- 2
common/logic/User/User/Model/User.php 查看文件

@@ -70,6 +70,7 @@ class User extends ActiveRecordCommon implements IdentityInterface
var $user_groups = [];
var $one_name;
var $product_price_percent;
var $newsletter;

/**
* @inheritdoc
@@ -95,7 +96,7 @@ class User extends ActiveRecordCommon implements IdentityInterface
public function rules()
{
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', 'verifyOneName', 'skipOnError' => false, 'skipOnEmpty' => false],
['email', 'email', 'message' => 'Cette adresse email n\'est pas valide'],
@@ -137,7 +138,8 @@ class User extends ActiveRecordCommon implements IdentityInterface
'is_main_contact' => 'Contact principal',
'product_price_percent' => 'Prix produits : pourcentage',
'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 查看文件

@@ -91,7 +91,7 @@ class UserRepository extends AbstractRepository
->from('user');

$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']) {
$point_sale = PointSale::findOne(['id' => $params['id_point_sale']]);

+ 47
- 0
common/logic/User/User/Service/NewsletterUtils.php 查看文件

@@ -0,0 +1,47 @@
<?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 查看文件

@@ -5,6 +5,7 @@ namespace common\logic\User\User\Wrapper;
use common\logic\AbstractContainer;
use common\logic\User\User\Repository\UserRepository;
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\UserDefinition;
use common\logic\User\User\Service\UsersCreditCsvGenerator;
@@ -23,6 +24,7 @@ class UserContainer extends AbstractContainer
UserBuilder::class,
UsersCreditCsvGenerator::class,
UserUtils::class,
NewsletterUtils::class,
];
}


+ 2
- 0
common/logic/User/User/Wrapper/UserManager.php 查看文件

@@ -4,6 +4,7 @@ namespace common\logic\User\User\Wrapper;

use common\logic\AbstractManager;
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\UserDefinition;
use common\logic\User\User\Service\UsersCreditCsvGenerator;
@@ -17,6 +18,7 @@ use common\logic\User\User\Service\UserUtils;
* @mixin UserBuilder
* @mixin UserUtils
* @mixin UsersCreditCsvGenerator
* @mixin NewsletterUtils
*/
class UserManager extends AbstractManager
{

+ 1
- 1
common/logic/User/UserProducer/Model/UserProducer.php 查看文件

@@ -64,7 +64,7 @@ class UserProducer extends ActiveRecordCommon
return [
[['id_user', 'id_producer'], 'required'],
[['id_user', 'id_producer', 'product_price_percent'], 'integer'],
[['active', 'bookmark', 'credit_active'], 'boolean'],
[['active', 'bookmark', 'credit_active', 'newsletter'], 'boolean'],
[['credit', 'product_price_percent'], 'double'],
];
}

+ 6
- 0
common/logic/User/UserProducer/Service/UserProducerBuilder.php 查看文件

@@ -176,4 +176,10 @@ class UserProducerBuilder extends AbstractBuilder
$userProducer->bookmark = 0;
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 查看文件

@@ -0,0 +1,27 @@
<?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 查看文件

@@ -0,0 +1,75 @@
<?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 查看文件

@@ -128,6 +128,7 @@ if (!Yii::$app->user->isGuest) {
->count();
$labelOrders = $countOrders > 0 ? 'success' : 'default';

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

echo Nav::widget([
'encodeLabels' => false,
@@ -168,17 +169,16 @@ if (!Yii::$app->user->isGuest) {
'visible' => !Yii::$app->user->isGuest && $producer->credit,
'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',
'url' => $this->getUrlManagerProducer()->createUrl(['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 查看文件

@@ -0,0 +1,71 @@
<?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 查看文件

@@ -148,79 +148,84 @@ body {
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 {
z-index: 10;
}

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

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

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

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

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

/* line 119, ../sass/_layout.scss */
/* line 123, ../sass/_layout.scss */
ul.pagination li.active a {
background-color: #F39C12;
border: solid 1px #F39C12;
}
/* line 123, ../sass/_layout.scss */
/* line 127, ../sass/_layout.scss */
ul.pagination li.active a:hover {
background-color: white;
border: solid 1px white;
color: #F39C12;
}
/* line 130, ../sass/_layout.scss */
/* line 134, ../sass/_layout.scss */
ul.pagination li a {
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 {
background-color: white;
border: solid 1px white;
color: #F39C12;
}

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

/* line 173, ../sass/_layout.scss */
/* line 177, ../sass/_layout.scss */
#left {
background-color: #FFF8DC;
text-align: center;
@@ -257,12 +262,12 @@ ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active {
padding: 0px;
position: relative;
}
/* line 180, ../sass/_layout.scss */
/* line 184, ../sass/_layout.scss */
#left .fixed {
position: fixed;
display: none;
}
/* line 186, ../sass/_layout.scss */
/* line 190, ../sass/_layout.scss */
#left #logo {
position: relative;
background-color: white;
@@ -277,7 +282,7 @@ ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active {
text-align: center;
overflow: hidden;
}
/* line 198, ../sass/_layout.scss */
/* line 202, ../sass/_layout.scss */
#left #logo img {
position: absolute;
top: 50%;
@@ -286,11 +291,11 @@ ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active {
max-width: 90px;
max-height: 90px;
}
/* line 208, ../sass/_layout.scss */
/* line 212, ../sass/_layout.scss */
#left h1, #left h2, #left #infos, #left #infos a {
color: #323232;
}
/* line 212, ../sass/_layout.scss */
/* line 216, ../sass/_layout.scss */
#left h1 {
text-transform: uppercase;
font-family: "highvoltageregular";
@@ -301,37 +306,37 @@ ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active {
text-align: center;
font-weight: normal;
}
/* line 223, ../sass/_layout.scss */
/* line 227, ../sass/_layout.scss */
#left h2 {
font-family: "capsuularegular";
font-size: 15px;
font-weight: normal;
text-align: center;
}
/* line 229, ../sass/_layout.scss */
/* line 233, ../sass/_layout.scss */
#left h2 .favorite {
padding-left: 0px;
}
/* line 232, ../sass/_layout.scss */
/* line 236, ../sass/_layout.scss */
#left h2 .favorite .glyphicon {
font-size: 14px;
}
/* line 237, ../sass/_layout.scss */
/* line 241, ../sass/_layout.scss */
#left h2 a {
color: #323232;
}
/* line 243, ../sass/_layout.scss */
/* line 247, ../sass/_layout.scss */
#left nav#main-nav {
background-color: white;
border: solid 1px #e0e0e0;
border-bottom: 0px none;
margin-top: 20px;
}
/* line 250, ../sass/_layout.scss */
/* line 254, ../sass/_layout.scss */
#left nav#main-nav ul li {
display: block;
}
/* line 253, ../sass/_layout.scss */
/* line 257, ../sass/_layout.scss */
#left nav#main-nav ul li a {
color: #323232;
color: black;
@@ -341,23 +346,23 @@ ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active {
display: block;
text-align: left;
}
/* line 262, ../sass/_layout.scss */
/* line 266, ../sass/_layout.scss */
#left nav#main-nav ul li a .glyphicon {
font-size: 15px;
margin-right: 3px;
}
/* line 267, ../sass/_layout.scss */
/* line 271, ../sass/_layout.scss */
#left nav#main-nav ul li a span.label {
padding-bottom: 3px;
font-family: "Arial";
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 {
background-color: #e08e0b;
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 {
background: #F39C12;
color: white;
@@ -365,22 +370,22 @@ ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active {
-webkit-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 {
color: #F39C12;
}
/* line 293, ../sass/_layout.scss */
/* line 297, ../sass/_layout.scss */
#left nav#main-nav ul li#btn-administration a:hover {
color: white;
}
/* line 301, ../sass/_layout.scss */
/* line 305, ../sass/_layout.scss */
#left nav#main-nav #user {
color: #F39C12;
float: right;
padding: 10px;
}

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

/* line 434, ../sass/_layout.scss */
/* line 438, ../sass/_layout.scss */
#footer-producer {
text-align: center;
position: absolute;
@@ -508,28 +513,28 @@ ul.pagination li a:hover, ul.pagination li a:focus, ul.pagination li a:active {
left: 0px;
width: 100%;
}
/* line 441, ../sass/_layout.scss */
/* line 445, ../sass/_layout.scss */
#footer-producer a {
color: #F39C12;
}
/* line 443, ../sass/_layout.scss */
/* line 447, ../sass/_layout.scss */
#footer-producer a:active {
text-decoration: underline;
}

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

+ 4
- 0
producer/web/sass/_layout.scss 查看文件

@@ -59,6 +59,10 @@ body {
a {
//color: $color1;
}

strong {
font-weight: bold;
}
}

.modal-backdrop.in {

Loading…
取消
儲存