Commit 982be2a82034d4c64335f8065a05a546f61747c5

Authored by alex
1 parent 01039920

Генерация мета тегов для отзывов, а так же изменен

common/components/MailerComponent.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\components;
  4 +
  5 +use yii\base\Component;
  6 +
  7 +
  8 +/**
  9 + * =====================================================================================================================
  10 + * Компонент, созданный для того, чтобы обьявлять аналогичные по логике запросы с 1 места
  11 + * =====================================================================================================================
  12 + */
  13 +class MailerComponent extends Component
  14 +{
  15 +
  16 + /**
  17 + * Отправляет письмо админу по backend\models\Mail если такая запись есть
  18 + * ***Если запись есть, но творится вакханалия с почтовым адресом, сервер начнёт валить Exception,
  19 + * а мы пишем нашему админу, что у них там почтовые настройки есть, но некорректы
  20 + *
  21 + * @param $mode 1|2|3|4
  22 + * 1|2|3 ==> используется для site/callback
  23 + * 4 ==> site/contact
  24 + */
  25 + public static function sendListToAdminAfterSubmit(int $mode)
  26 + {
  27 + $mail = Mail::findOne(1);
  28 + if ($mail != null) {
  29 + $time = Visit::getTimeTitles($mode);
  30 + # если у них всё же почтовые настройки есть, НО письмо не может отправится,
  31 + # прокидываю сообщение об этом нам обратно
  32 + try {
  33 + \Yii::$app->mailer
  34 + ->compose()
  35 + ->setTo($mail->user)
  36 + ->setSubject('Запись на прием: обратная связь')
  37 + ->setTextBody('Пациент с тел: :' . $model->phone . " <br> просил перезвонить ему на протяжении " . $time)
  38 + ->send();
  39 + } catch (\Exception $e) {
  40 + \Yii::error($mail->user . " - неполучается отправить письмо за указанным адресом", 'mail_error');
  41 + }
  42 +
  43 + }
  44 + }
  45 +
  46 +
  47 +}
0 48 \ No newline at end of file
... ...
common/models/Feedback.php
... ... @@ -25,10 +25,9 @@
25 25  
26 26 const SCENARIO_FEEDBACK = 'feedback';
27 27 const SCENARIO_CALLBACK = 'callback';
28   -
29   -
30   -
31   - public $returnUrl;
  28 +
  29 +
  30 + public $returnUrl;
32 31  
33 32  
34 33  
... ...
common/models/Visit.php
... ... @@ -43,6 +43,39 @@
43 43 {
44 44 return 'visit';
45 45 }
  46 +
  47 +
  48 + /**
  49 + * Метод, который нужен для универсальных тайтлов для временных меток
  50 + *
  51 + * @param int $inputMode
  52 + * @return string
  53 + */
  54 + public static function getTimeTitles(int $inputMode): string
  55 + {
  56 + $resultTimeMessage = '';
  57 + switch ($inputMode) {
  58 + case 1:
  59 + $resultTimeMessage = "В течение 30 минут";
  60 + break;
  61 + case 2:
  62 + $resultTimeMessage = 'с 9:00 до 12:00';
  63 + break;
  64 + case 3:
  65 + $resultTimeMessage = ' с 12:00 до 18:00';
  66 + break;
  67 + default:
  68 + $resultTimeMessage = ' Время не указано';
  69 +
  70 + }
  71 + return $resultTimeMessage;
  72 + }
  73 +
  74 +
  75 +
  76 +
  77 +
  78 +
46 79  
47 80 /**
48 81 * {@inheritdoc}
... ...
frontend/components/UrlManager.php
... ... @@ -103,8 +103,8 @@
103 103 ]
104 104 )
105 105 ->one();
106   -
107   - if ($alias !== null) {
  106 +
  107 + if ($alias !== null) {
108 108 $params = Json::decode($alias->route);
109 109  
110 110 $route = array_shift($params);
... ...
frontend/config/main.php
... ... @@ -2,6 +2,7 @@
2 2 use common\models\SlashRedirect;
3 3 use frontend\components\UrlManager;
4 4 use yii\helpers\Url;
  5 +
5 6  
6 7 $params = array_merge(
7 8 require( __DIR__ . '/../../common/config/params.php' ),
... ... @@ -117,7 +118,7 @@ use yii\helpers\Url;
117 118 'buttonTemplate' => '<div class="button-wr submit-close-wr-c-a">{button}</div>',
118 119 'buttonOptions' => [],
119 120 'buttonContent' => 'Send',
120   - 'sendEmail' => false,
  121 + 'sendEmail' => true,
121 122 'ajax' => true,
122 123 'formId' => 'contact-form',
123 124 'scenario' => 'callback',
... ... @@ -370,6 +371,31 @@ use yii\helpers\Url;
370 371 'warning',
371 372 ],
372 373 ],
  374 + [
  375 + 'class' => 'yii\log\EmailTarget',
  376 + 'categories' => ['mail_error'],
  377 + 'mailer' => [
  378 + 'class' => 'yii\swiftmailer\Mailer',
  379 + 'viewPath' => '@frontend/mail',
  380 + 'useFileTransport' => false,
  381 + 'transport' => [
  382 + 'class' => 'Swift_SmtpTransport',
  383 + 'host' => 'smtp.gmail.com',
  384 + # пока что стоят мои данные, потому что я пробивал свою почту
  385 + # для возможности отправки писем
  386 + 'username' => 'alkhonko@gmail.com',
  387 + 'password' => 'jakirothebest123',
  388 + 'port' => '587',
  389 + 'encryption' => 'tls',
  390 + ],
  391 + ],
  392 + 'logVars' => [],
  393 + 'message' => [
  394 + 'from' => ['admin@site.com' => 'ABClinic'],
  395 + 'to' => [\Yii::$app->params['adminEmail']],
  396 + 'subject' => 'Ошибка в почтовом адресе. Письма не доставляются после обработки одной из форм',
  397 + ],
  398 + ],
373 399 ],
374 400 ],
375 401 'errorHandler' => [
... ... @@ -388,53 +414,53 @@ use yii\helpers\Url;
388 414 SlashRedirect::className(),
389 415 ],
390 416 ],
391   - 'assetsAutoCompress' => [
392   - 'class' => '\skeeks\yii2\assetsAuto\AssetsAutoCompressComponent',
393   - 'enabled' => false,
394   -
395   - 'readFileTimeout' => 3,
396   - //Time in seconds for reading each asset file
397   -
398   - 'jsCompress' => true,
399   - //Enable minification js in html code
400   - 'jsCompressFlaggedComments' => true,
401   - //Cut comments during processing js
402   -
403   - 'cssCompress' => true,
404   - //Enable minification css in html code
405   -
406   - 'cssFileCompile' => true,
407   - //Turning association css files
408   - 'cssFileRemouteCompile' => false,
409   - //Trying to get css files to which the specified path as the remote file, skchat him to her.
410   - 'cssFileCompress' => true,
411   - //Enable compression and processing before being stored in the css file
412   - 'cssFileBottom' => false,
413   - //Moving down the page css files
414   - 'cssFileBottomLoadOnJs' => false,
415   - //Transfer css file down the page and uploading them using js
416   -
417   - 'jsFileCompile' => true,
418   - //Turning association js files
419   - 'jsFileRemouteCompile' => false,
420   - //Trying to get a js files to which the specified path as the remote file, skchat him to her.
421   - 'jsFileCompress' => true,
422   - //Enable compression and processing js before saving a file
423   - 'jsFileCompressFlaggedComments' => true,
424   - //Cut comments during processing js
425   -
426   - 'htmlCompress' => true,
427   - //Enable compression html
428   - 'noIncludeJsFilesOnPjax' => true,
429   - //Do not connect the js files when all pjax requests
430   - 'htmlCompressOptions' => //options for compressing output result
431   - [
432   - 'extra' => false,
433   - //use more compact algorithm
434   - 'no-comments' => true
435   - //cut all the html comments
436   - ],
437   - ],
  417 + 'assetsAutoCompress' => [
  418 + 'class' => '\skeeks\yii2\assetsAuto\AssetsAutoCompressComponent',
  419 + 'enabled' => false,
  420 +
  421 + 'readFileTimeout' => 3,
  422 + //Time in seconds for reading each asset file
  423 +
  424 + 'jsCompress' => true,
  425 + //Enable minification js in html code
  426 + 'jsCompressFlaggedComments' => true,
  427 + //Cut comments during processing js
  428 +
  429 + 'cssCompress' => true,
  430 + //Enable minification css in html code
  431 +
  432 + 'cssFileCompile' => true,
  433 + //Turning association css files
  434 + 'cssFileRemouteCompile' => false,
  435 + //Trying to get css files to which the specified path as the remote file, skchat him to her.
  436 + 'cssFileCompress' => true,
  437 + //Enable compression and processing before being stored in the css file
  438 + 'cssFileBottom' => false,
  439 + //Moving down the page css files
  440 + 'cssFileBottomLoadOnJs' => false,
  441 + //Transfer css file down the page and uploading them using js
  442 +
  443 + 'jsFileCompile' => true,
  444 + //Turning association js files
  445 + 'jsFileRemouteCompile' => false,
  446 + //Trying to get a js files to which the specified path as the remote file, skchat him to her.
  447 + 'jsFileCompress' => true,
  448 + //Enable compression and processing js before saving a file
  449 + 'jsFileCompressFlaggedComments' => true,
  450 + //Cut comments during processing js
  451 +
  452 + 'htmlCompress' => true,
  453 + //Enable compression html
  454 + 'noIncludeJsFilesOnPjax' => true,
  455 + //Do not connect the js files when all pjax requests
  456 + 'htmlCompressOptions' => //options for compressing output result
  457 + [
  458 + 'extra' => false,
  459 + //use more compact algorithm
  460 + 'no-comments' => true
  461 + //cut all the html comments
  462 + ],
  463 + ],
438 464 ],
439 465  
440 466 'params' => $params,
... ...
frontend/controllers/SiteController.php
... ... @@ -22,6 +22,7 @@
22 22 use yii\web\BadRequestHttpException;
23 23 use yii\web\Controller;
24 24 use yii\web\Response;
  25 + use common\components\MailerComponent;
25 26  
26 27 /**
27 28 * Site controller
... ... @@ -176,12 +177,16 @@
176 177 $response->headers->set('Content-Type', 'text/plain');
177 178 return $this->renderFile($meta[ 'uri' ]);
178 179 }
179   -
  180 +
180 181 public function actionCallback(){
181   - \Yii::$app->response->format = Response::FORMAT_JSON;
  182 +
  183 + \Yii::$app->response->format = Response::FORMAT_JSON;
182 184 $model = new Visit();
183 185 if ($model->load(\Yii::$app->request->post()) && $model->save()){
184   - return ['success' => true];
  186 + $mode = $model->time;
  187 + MailerComponent::sendListToAdminAfterSubmit($mode);
  188 +
  189 + return ['success' => true];
185 190 }else{
186 191 return ['success' => false, 'errors' => $model->errors];
187 192 }
... ... @@ -196,8 +201,8 @@
196 201 */
197 202 $mailer = \Yii::$app->get('smtpmailer');
198 203 $settings = Settings::getInstance();
199   -
200   - if (empty(Yii::$app->request->post())) {
  204 +
  205 + if (empty(Yii::$app->request->post())) {
201 206 throw new BadRequestHttpException();
202 207 } else {
203 208 $model = new Feedback();
... ...
frontend/views/layouts/main.php
... ... @@ -652,7 +652,7 @@
652 652 <div class="style title-callback">Записаться на прием</div>
653 653 <?php
654 654 $model = new Visit(['agree' => 1, 'time' => 1]);
655   - $form = ActiveForm::begin([ 'action' => 'site/callback', 'id' => 'callback-form' ]); ?>
  655 + $form = ActiveForm::begin(['action' => '/site/callback', 'id' => 'callback-form']); ?>
656 656 <div class="input-wr phones_mask required">
657 657 <?= $form->field($model, 'phone')
658 658 ->textInput([ 'placeholder' => '+38(0__)___-__-__' ])
... ...