Finish add_mail

This commit is contained in:
Roland Schneider 2016-05-23 08:17:09 +02:00
commit c8632adade
32 changed files with 1244 additions and 20 deletions

View File

@ -146,6 +146,20 @@ class AdminMenuStructure{
'items' => $items 'items' => $items
]; ];
/////////////////////////////
// Hírlevelek
/////////////////////////////
$items = [];
$items[] = ['label' => 'Hírlevelek', 'url' => ['/newsletter/index' , 'NewsletterSearch[start]' =>$todayDatetime,'NewsletterSearch[end]' => $tomorrowDatetime ] ];
// $items[] = ['label' => 'Részletek aktiválása', 'url' => ['/ugiro/parts' ] ];
// $items[] = ['label' => 'Bevétel', 'url' => ['/transfer/summary' , 'TransferSummarySearch[start]' =>$today,'TransferSummarySearch[end]' => $tomorrow ] ];
// $items[] = ['label' => 'Napi bevételek', 'url' => ['/transfer/list', 'TransferListSearch[start]' =>$todayDatetime,'TransferListSearch[end]' => $tomorrowDatetime ] ];
// $items[] = ['label' => 'Kassza müveletek', 'url' => ['/account-state/index'] ];
$this->menuItems[] = ['label' => 'Hírlevél', 'url' => $this->emptyUrl,
'items' => $items
];
} }
} }

View File

@ -11,6 +11,9 @@ use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter; use yii\filters\VerbFilter;
use yii\base\Object; use yii\base\Object;
use backend\models\CustomerUpdate; use backend\models\CustomerUpdate;
use backend\models\CustomerNewsLetterModel;
use yii\db\Query;
use yii\data\ActiveDataProvider;
/** /**
* CustomerController implements the CRUD actions for Customer model. * CustomerController implements the CRUD actions for Customer model.
@ -18,6 +21,27 @@ use backend\models\CustomerUpdate;
class CustomerController extends \backend\controllers\BackendController class CustomerController extends \backend\controllers\BackendController
{ {
public function behaviors()
{
return [
'access' => [
'class' => \yii\filters\AccessControl::className(),
'rules' => [
// allow authenticated users
[
'actions' => ['create','index','view','update','mail'],
'allow' => true,
'roles' => ['admin','employee','reception'],
],
// everything else is denied
],
],
];
}
/** /**
* Lists all Customer models. * Lists all Customer models.
* @return mixed * @return mixed
@ -119,4 +143,36 @@ class CustomerController extends \backend\controllers\BackendController
throw new NotFoundHttpException('The requested page does not exist.'); throw new NotFoundHttpException('The requested page does not exist.');
} }
} }
public function actionMail(){
$model = new CustomerNewsLetterModel();
$query = new Query();
$query->distinct();
$query->select([ 'email']);
$query->from("customer");
$query->andWhere(['newsletter' => 1]);
$query->andWhere(['status' => Customer::STATUS_ACTIVE]);
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$message = \Yii::$app->mailer->compose ( );
$message
->setFrom ( "noreply@fitnessadmin.hu" )
->setBcc(['rocho02@gmail.com',"rocho02@freemail.hu"])
//->setTo(['rocho02@gmail.com'])
->setHtmlBody($model->text )
->setSubject ( $model->subject )
->send ();
return $this->redirect(['customer/mail']);
}
return $this->render('mail', [ 'model' => $model ]);
}
} }

View File

@ -0,0 +1,160 @@
<?php
namespace backend\controllers;
use Yii;
use common\models\Newsletter;
use backend\models\NewsletterSearch;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use common\models\Customer;
use backend\models\NewsletterTestForm;
use common\components\Helper;
/**
* NewsletterController implements the CRUD actions for Newsletter model.
*/
class NewsletterController extends \backend\controllers\BackendController
{
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
'access' => [
'class' => \yii\filters\AccessControl::className(),
'rules' => [
// allow authenticated users
[
'actions' => ['create','index','view','update','delete'],
'allow' => true,
'roles' => ['admin','employee','reception'],
],
// everything else is denied
],
],
];
}
/**
* Lists all Newsletter models.
* @return mixed
*/
public function actionIndex()
{
$searchModel = new NewsletterSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
/**
* Displays a single Newsletter model.
* @param integer $id
* @return mixed
*/
public function actionView($id)
{
$model = $this->findModel($id);
$testModel = new NewsletterTestForm(
[
'newsletter' => $model
]
);
if ($testModel->load(Yii::$app->request->post()) && $testModel->validate()) {
$testModel->sendEmail();
Helper::flash("success", "Teszt e-mail elküldve");
return $this->redirect(['view', 'id' => $model->id_newsletter]);
}
return $this->render('view', [
'model' => $model,
'testModel' => $testModel
]);
}
/**
* Creates a new Newsletter model.
* If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed
*/
public function actionCreate()
{
$model = new Newsletter();
$model->status = Newsletter::$STATUS_ACTIVE;
$model->sent = Newsletter::$SENT_NOT;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id_newsletter]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
/**
* Updates an existing Newsletter model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id
* @return mixed
*/
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id_newsletter]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
/**
* Deletes an existing Newsletter model.
* If deletion is successful, the browser will be redirected to the 'index' page.
* @param integer $id
* @return mixed
*/
public function actionDelete($id)
{
$model = $this->findModel($id);
$model->status = Newsletter::$STATUS_DELETED;
$model->save(false);
return $this->redirect(['index']);
}
/**
* Finds the Newsletter model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return Newsletter the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findModel($id)
{
if (($model = Newsletter::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace backend\models;
use Yii;
use yii\base\Model;
use yii\web\UploadedFile;
/**
* ContactForm is the model behind the contact form.
* @property \Yii\web\UploadedFile $file
*/
class CustomerNewsLetterModel extends Model{
public $text;
public $subject;
public $allCustomer;
public function rules(){
return [
[['text','subject'],'required'],
['text','string'],
['subject','string'],
];
}
}

View File

@ -0,0 +1,75 @@
<?php
namespace backend\models;
use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use common\models\Newsletter;
/**
* NewsletterSearch represents the model behind the search form about `common\models\Newsletter`.
*/
class NewsletterSearch extends Newsletter
{
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id_newsletter', 'status', 'sent'], 'integer'],
[['subject', 'body', 'sent_at', 'created_at', 'updated_at'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
}
/**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = Newsletter::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' =>[
'defaultOrder' =>[ 'created_at' => SORT_DESC ]
]
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere([
'id_newsletter' => $this->id_newsletter,
'status' => $this->status,
'sent' => $this->sent,
'sent_at' => $this->sent_at,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
]);
$query->andFilterWhere(['like', 'subject', $this->subject])
->andFilterWhere(['like', 'body', $this->body]);
return $dataProvider;
}
}

View File

@ -0,0 +1,75 @@
<?php
namespace backend\models;
use Yii;
use yii\base\Model;
use common\models\Card;
use common\models\Customer;
use common\models\Ticket;
use common\models\Account;
use yii\web\UploadedFile;
use common\components\Helper;
/**
* ContactForm is the model behind the contact form.
* @property \Yii\web\UploadedFile $file
*/
class NewsletterTestForm extends Model{
public $customer_name;
public $email;
public $newsletter;//init param
private $_customer;
public function rules(){
return [
[['customer_name','email'], 'required'],
[['email'], 'email'],
[['customer_name'], 'string'],
[['customer_name'], 'validateCustomer'],
];
}
public function attributeLabels(){
return [
'email' => "E-mail",
'customer_name' => "Vendég neve"
];
}
public function validateCustomer( $attribute, $params ) {
$customer = Customer::find()->andWhere(['like','name',$this->customer_name])->one();
if ( !isset($customer)){
$this->addError($attribute,"Vendég nem található");
}else{
$this->_customer = $customer;
}
}
public function sendEmail(){
$newsletter = $this->newsletter;
$message = \Yii::$app->mailer->compose ( );
$replacePairs = [
'{vendeg_neve}' => $this->_customer->name
];
$mailBody = $newsletter->body;
$mailBody = strtr($mailBody, $replacePairs );
$mailSubject = $newsletter->subject;
$mailSubject = strtr($mailSubject, $replacePairs );
$message
->setFrom ( [ \Yii::$app->params['newsletter_from'] => Helper::getCompanyName() ])
->setTo ( [
$this->email ])
->setHtmlBody( $mailBody )
->setSubject ( $mailSubject )
->send ();
}
}

View File

@ -0,0 +1,63 @@
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use common\models\Customer;
use common\components\CityNameTypeahead;
use common\components\CityZipTypeahead;
use common\components\CardNumberTypeahead;
use kartik\widgets\DatePicker;
use dosamigos\tinymce\TinyMce;
use yii\grid\GridView;
use yii\base\Widget;
/* @var $this yii\web\View */
/* @var $model common\models\Customer */
/* @var $form yii\widgets\ActiveForm */
?>
<h1>Hírlevél küldése</h1>
<p>
Hírlevél küldése minden vendégnek, aki
</p>
<ul>
<li>
Nincs törölve
</li>
<li>
be van állítva a kér hírlevelet jelölőnégyzet a vendég adatlapján
</li>
</ul>
<div class="customer-form">
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($model,'subject')?>
<?= $form->field($model, 'text')->widget(TinyMce::className(), [
'options' => ['rows' => 12],
// 'language' => 'en',
'clientOptions' => [
'plugins' => [
"advlist autolink lists link charmap print preview anchor",
"searchreplace visualblocks code fullscreen",
"insertdatetime media table contextmenu paste"
],
'toolbar' => "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
]
]);?>
<?php // echo $form->field($model, 'address')->textInput(['maxlength' => true]) ?>
<div class="form-group">
<?= Html::submitButton( Yii::t('common/customer', 'Küldés') , ['class' => 'btn btn-success' ]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>

View File

@ -0,0 +1,39 @@
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use dosamigos\tinymce\TinyMce;
/* @var $this yii\web\View */
/* @var $model common\models\Newsletter */
/* @var $form yii\widgets\ActiveForm */
?>
<p>
Az új hirlevelek következő nap hajnal 3-kor kerülnek kiküldésre
</p>
<div class="newsletter-form">
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($model,'subject')?>
<?= $form->field($model, 'body')->widget(TinyMce::className(), [
'options' => ['rows' => 12],
// 'language' => 'en',
'clientOptions' => [
'plugins' => [
"advlist autolink lists link charmap print preview anchor",
"searchreplace visualblocks code fullscreen",
"insertdatetime media table contextmenu paste"
],
'toolbar' => "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
]
]);?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('common/newsletter', 'Mentés') : Yii::t('common/newsletter', 'Módosítás'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>

View File

@ -0,0 +1,41 @@
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model backend\models\NewsletterSearch */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="newsletter-search">
<?php $form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
]); ?>
<?= $form->field($model, 'id_newsletter') ?>
<?= $form->field($model, 'subject') ?>
<?= $form->field($model, 'body') ?>
<?= $form->field($model, 'status') ?>
<?= $form->field($model, 'sent') ?>
<?php // echo $form->field($model, 'sent_at') ?>
<?php // echo $form->field($model, 'created_at') ?>
<?php // echo $form->field($model, 'updated_at') ?>
<div class="form-group">
<?= Html::submitButton(Yii::t('common/newsletter', 'Search'), ['class' => 'btn btn-primary']) ?>
<?= Html::resetButton(Yii::t('common/newsletter', 'Reset'), ['class' => 'btn btn-default']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>

View File

@ -0,0 +1,21 @@
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\models\Newsletter */
$this->title = Yii::t('common/newsletter', 'Új hírlevél');
$this->params['breadcrumbs'][] = ['label' => Yii::t('common/newsletter', 'Hírlevelek'), 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="newsletter-create">
<h1><?= Html::encode($this->title) ?></h1>
<?= $this->render('_form', [
'model' => $model,
]) ?>
</div>

View File

@ -0,0 +1,59 @@
<?php
use yii\helpers\Html;
use yii\grid\GridView;
use common\models\Newsletter;
/* @var $this yii\web\View */
/* @var $searchModel backend\models\NewsletterSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */
$this->title = Yii::t('common/newsletter', 'Hírlevelek');
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="newsletter-index">
<h1><?= Html::encode($this->title) ?></h1>
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>
<p>
<?= Html::a(Yii::t('common/newsletter', 'Új hírlevél'), ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
'id_newsletter',
'subject',
[
'attribute' => 'status',
'value' => 'statusName'
],
[
'attribute' => 'sent',
'value' => 'sentName'
],
'sent_at:datetime',
'created_at:datetime',
// 'updated_at',
['class' => 'yii\grid\ActionColumn',
'buttons' =>[
'update' => function ($url, $model, $key) {
return $model->sent === Newsletter::$SENT_NOT
? Html::a('Módosít', $url,['class' => 'btn btn-xs btn-success']) : '';
},
'view' => function ($url, $model, $key) {
return Html::a('Részletek', $url,['class' => 'btn btn-xs btn-success']) ;
},
'delete' => function ($url, $model, $key) {
return $model->sent === Newsletter::$SENT_NOT ? Html::a('Törlés', $url,['class' => 'btn btn-xs btn-success']) : '';
},
],
],
],
]); ?>
</div>

View File

@ -0,0 +1,21 @@
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model common\models\Newsletter */
$this->title = Yii::t('common/newsletter', 'Hírlevél módosítása');
$this->params['breadcrumbs'][] = ['label' => Yii::t('common/newsletter', 'Hírlevelek'), 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model->id_newsletter, 'url' => ['view', 'id' => $model->id_newsletter]];
$this->params['breadcrumbs'][] = Yii::t('common/newsletter', 'Update');
?>
<div class="newsletter-update">
<h1><?= Html::encode($this->title) ?></h1>
<?= $this->render('_form', [
'model' => $model,
]) ?>
</div>

View File

@ -0,0 +1,95 @@
<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
use common\models\Newsletter;
use yii\widgets\ActiveForm;
use yii\helpers\Url;
/* @var $this yii\web\View */
/* @var $model common\models\Newsletter */
$this->title = $model->id_newsletter;
$this->params['breadcrumbs'][] = ['label' => Yii::t('common/newsletter', 'Hírlevelek'), 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="newsletter-view">
<h1>Hírlevél részletei</h1>
<?php if ( $model->sent != Newsletter::$SENT_TRUE){?>
<p>
<?= Html::a("Módosítás", ['update', 'id' => $model->id_newsletter], ['class' => 'btn btn-primary']) ?>
<?= Html::a("Törlés", ['delete', 'id' => $model->id_newsletter], [
'class' => 'btn btn-danger',
'data' => [
'confirm' => Yii::t('common/log', 'Are you sure you want to delete this item?'),
'method' => 'post',
],
]) ?>
</p>
<?php }?>
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id_newsletter',
[
'attribute' => 'status',
'value' => $model->statusName
],
[
'attribute' => 'sent',
'value' => $model->sent == Newsletter::$SENT_NOT ? "Küldésre vár" : "Elküldve"
],
'sent_at:datetime',
'created_at:datetime',
'updated_at:datetime',
],
]) ?>
</div>
<p><b>Tárgy:</b></p>
<div style='border: 1px solid #000; padding: 6px; background-color: #fff;'>
<p>
<?php echo $model->subject?>
</p>
</div>
<p><b >Üzenet</b></p>
<div style='border: 1px solid #000; padding: 6px; background-color: #fff;'>
<?php echo $model->body ?>
</div>
<h3>
Teszt üzenet küldése
</h3>
<p>
A küldés gombra kattintva úgy küldünk ki egy darab e-mailt,
<ul>
<li>
mintha a megadott vendég lenne a fogadó
</li>
<li>
viszont a vendég e-mail címe helyett a megadott e-mail címre küldjük
</li>
</ul>
</p>
<div class="newsletter-form">
<?php $form = ActiveForm::begin(
['action' => Url::current()]
); ?>
<?= $form->field($testModel, 'customer_name') ?>
<?= $form->field($testModel, 'email') ?>
<div class="form-group">
<?= Html::submitButton( 'Teszt email küldése' , ['class' => [ 'btn btn-primary' ]]) ?>
</div>
<?php ActiveForm::end(); ?>
</div>

View File

@ -47,5 +47,6 @@ return [
'day' => 5, 'day' => 5,
] ]
], ],
'newsletter_from' => 'noreply@fitnessadmin.hu'
]; ];

View File

@ -1,6 +1,6 @@
<h1 style="font-size: 12px;">Kedves <?php echo $model->customerName?>!</h1> <h1 style="font-size: 12px;">Kedves <?php echo $model->customerName?>!</h1>
<p style="font-size: 12px;"> <p style="font-size: 12px;">
Az alábbi bérleted <?php echo $model->day?> nap múlva lejár: Tájékoztatjuk, hogy az alábbi bérlete <?php echo $model->day?> nap múlva lejár:
</p> </p>
<ul style="font-size: 12px;"> <ul style="font-size: 12px;">
<li> <li>
@ -8,20 +8,20 @@
</li> </li>
</ul> </ul>
<p style="font-size: 12px;"> <p style="font-size: 12px;">
Ha ismét egy ilyen bérletet szeretnél vásárolni, akkor legközelebb ne felejts el magaddal vinni <?php echo $model->ticketTypePriceBrutto?> Ft-ot amikor edzésre mész! Üdvözlettel:
</p>
<p style="font-size: 12px;">
Üdvözlettel:
</p> </p>
<p style="font-size: 12px;"> <p style="font-size: 12px;">
<?php echo $model->company ?> <?php echo $model->company ?>
</p> </p>
<p>
Ez egy automatikus e-mail üzenet, amelyre nem tud válaszolni.
</p>
<p style="font-size: 10px;"> <p style="font-size: 10px;">
Tájékoztatunk, hogy ezen levél a tagsági kártyádat Ezen levél a tagsági kártyáját
kezelő <?php echo $model->company ?> nyivlántartó rendszerének értesítő üzenete, kezelő <?php echo $model->company ?> nyivlántartó rendszerének értesítő üzenete,
így nem minősül hírlevélnek, e-mail címedet a <?php echo $model->company ?> nyilvántartó rendszerének így nem minősül hírlevélnek, e-mail címét a <?php echo $model->company ?> nyilvántartó rendszerének
adatbázisából a <?php echo $model->company ?> engedélyével értük el. adatbázisából a <?php echo $model->company ?> engedélyével értük el.
A megadott adatadat az adatvédelmi törvénynek (1992. évi LXIII. törvény) és a reklámtörvénynek (2008. évi XLVIII. törvény) megfelelően kezeljük. A megadott adatait az adatvédelmi törvénynek (1992. évi LXIII. törvény) és a reklámtörvénynek (2008. évi XLVIII. törvény) megfelelően kezeljük.
</p> </p>
<?php <?php
?> ?>

View File

@ -6,6 +6,7 @@ use Yii;
use yii\helpers\Url; use yii\helpers\Url;
use yii\helpers\VarDumper; use yii\helpers\VarDumper;
use common\models\BaseFitnessActiveRecord; use common\models\BaseFitnessActiveRecord;
use yii\helpers\Console;
/** /**
* This is the model class for table "log". * This is the model class for table "log".
@ -92,6 +93,15 @@ class Log extends BaseFitnessActiveRecord
public static function info($message ){ public static function info($message ){
self::log(['type' =>self::$TYPE_INFO, 'message' => $message]); self::log(['type' =>self::$TYPE_INFO, 'message' => $message]);
} }
/**
* example
* Log::log([
'type' =>Log::$TYPE_LOGIN,
'message' => $message
]);
* @param unknown $config
*/
public static function log( $config ){ public static function log( $config ){
$model = new Log($config); $model = new Log($config);
$model->app = \Yii::$app->name; $model->app = \Yii::$app->name;

View File

@ -0,0 +1,86 @@
<?php
namespace common\models;
use Yii;
use common\components\Helper;
/**
* This is the model class for table "newsletter".
*
* @property integer $id_newsletter
* @property string $subject
* @property string $body
* @property integer $status
* @property integer $sent
* @property string $sent_at
* @property string $created_at
* @property string $updated_at
*/
class Newsletter extends \common\models\BaseFitnessActiveRecord
{
public static $STATUS_DELETED = 0;
public static $STATUS_ACTIVE = 10;
public static $SENT_NOT = 0;
public static $SENT_TRUE = 10;
/**
* @inheritdoc
*/
public static function tableName()
{
return 'newsletter';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['body'], 'string'],
[['subject'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id_newsletter' => Yii::t('common/newsletter', 'Hírlevél azonosító'),
'subject' => Yii::t('common/newsletter', 'Tárgy'),
'body' => Yii::t('common/newsletter', 'Szöveg'),
'status' => Yii::t('common/newsletter', 'Státusz'),
'sent' => Yii::t('common/newsletter', 'Elküldve'),
'sent_at' => Yii::t('common/newsletter', 'Küldés ideje'),
'created_at' => Yii::t('common/newsletter', 'Létrehozva'),
'updated_at' => Yii::t('common/newsletter', 'Módosítva'),
];
}
public static function statuses( ) {
return [
self::$STATUS_ACTIVE => 'Aktív',
self::$STATUS_DELETED=> 'Törölve',
];
}
public function getStatusName(){
return Helper::getArrayValue(self::statuses(), $this->status, "");
}
public function getSentName(){
if ( $this->sent == self::$SENT_NOT){
return "Nincs elküldve";
}else if ( $this->sent == self::$SENT_TRUE){
return "Elküldve";
}else{
return "";
}
}
}

View File

@ -29,7 +29,8 @@
"bower-asset/webcamjs": "^1.0", "bower-asset/webcamjs": "^1.0",
"mpdf/mpdf": "^6.0", "mpdf/mpdf": "^6.0",
"os/php-excel": "^2.1", "os/php-excel": "^2.1",
"phpoffice/phpexcel": "^1.8" "phpoffice/phpexcel": "^1.8",
"2amigos/yii2-tinymce-widget": "~1.1"
}, },
"require-dev": { "require-dev": {
"yiisoft/yii2-codeception": "*", "yiisoft/yii2-codeception": "*",

110
composer.lock generated
View File

@ -4,9 +4,69 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"hash": "c484600811777b0032034033ae4414b9", "hash": "f8904c887de6d8934d7e32a613a802b4",
"content-hash": "f44617094989091a2f19c2feb2257d3a", "content-hash": "b1809c8690ea12eaadb899a9549ef697",
"packages": [ "packages": [
{
"name": "2amigos/yii2-tinymce-widget",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/2amigos/yii2-tinymce-widget.git",
"reference": "d58bad3ede450f86acd475fb4ecda982b980132b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/2amigos/yii2-tinymce-widget/zipball/d58bad3ede450f86acd475fb4ecda982b980132b",
"reference": "d58bad3ede450f86acd475fb4ecda982b980132b",
"shasum": ""
},
"require": {
"tinymce/tinymce": ">=4",
"yiisoft/yii2": "~2.0.0"
},
"require-dev": {
"phpunit/phpunit": "4.*"
},
"type": "yii2-extension",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
},
"asset-installer-paths": {
"bower-asset-library": "vendor/bower"
}
},
"autoload": {
"psr-4": {
"dosamigos\\tinymce\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "2amigOS! Consulting Group",
"email": "hola@2amigos.us",
"homepage": "http://2amigos.us",
"role": "Developer"
}
],
"description": "TinyMCE widget for Yii2.",
"homepage": "http://yiiwheels.com/extension/tinymce-widget",
"keywords": [
"2amigos",
"extension",
"tinymce",
"widget",
"yii",
"yii 2",
"yii2"
],
"time": "2015-03-28 21:53:43"
},
{ {
"name": "almasaeed2010/adminlte", "name": "almasaeed2010/adminlte",
"version": "v2.3.2", "version": "v2.3.2",
@ -2044,6 +2104,52 @@
], ],
"time": "2015-06-06 14:19:39" "time": "2015-06-06 14:19:39"
}, },
{
"name": "tinymce/tinymce",
"version": "4.3.12",
"source": {
"type": "git",
"url": "https://github.com/tinymce/tinymce-dist.git",
"reference": "dfa88d1f6868aa80081f35f3bb0b8257181b6fdf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/dfa88d1f6868aa80081f35f3bb0b8257181b6fdf",
"reference": "dfa88d1f6868aa80081f35f3bb0b8257181b6fdf",
"shasum": ""
},
"type": "component",
"extra": {
"component": {
"scripts": [
"tinymce.js",
"plugins/*/plugin.js",
"themes/*/theme.js"
],
"files": [
"tinymce.min.js",
"plugins/*/plugin.min.js",
"themes/*/theme.min.js",
"skins/**"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1"
],
"description": "Web based JavaScript HTML WYSIWYG editor control.",
"homepage": "http://www.tinymce.com",
"keywords": [
"editor",
"html",
"javascript",
"richtext",
"tinymce",
"wysiwyg"
],
"time": "2016-05-10 11:15:05"
},
{ {
"name": "yiisoft/yii2", "name": "yiisoft/yii2",
"version": "2.0.6", "version": "2.0.6",

View File

@ -37,7 +37,7 @@ class DoorlogController extends Controller{
$log->id_card = 9719; $log->id_card = 9719;
$log->id_customer = 5559; $log->id_customer = 5559;
$log->id_ticket_current = $ticket; $log->id_ticket_current = $ticket;
$log->direction = 7; $log->direction = 3;
$log->id_key = 1; $log->id_key = 1;
$log->type = 0; $log->type = 0;
$log->source_app = DoorLog::$SOURCE_APP_FITNESS_ADMIN; $log->source_app = DoorLog::$SOURCE_APP_FITNESS_ADMIN;
@ -58,7 +58,7 @@ class DoorlogController extends Controller{
$log->id_card = 9719; $log->id_card = 9719;
$log->id_customer = 5559; $log->id_customer = 5559;
$log->id_ticket_current = $ticket; $log->id_ticket_current = $ticket;
$log->direction = 5; $log->direction = 1;
$log->id_key = null; $log->id_key = null;
$log->type = 0; $log->type = 0;
$log->source_app = DoorLog::$SOURCE_APP_FITNESS_ADMIN; $log->source_app = DoorLog::$SOURCE_APP_FITNESS_ADMIN;

View File

@ -3,7 +3,6 @@
namespace console\controllers; namespace console\controllers;
use Yii; use Yii;
use common\models;
use yii\console\Controller; use yii\console\Controller;
use common\models\Ticket; use common\models\Ticket;
use common\models\Customer; use common\models\Customer;
@ -11,6 +10,8 @@ use yii\db\Query;
use yii\db\Expression; use yii\db\Expression;
use common\components\WarnMailModel; use common\components\WarnMailModel;
use common\components\Helper; use common\components\Helper;
use common\models\Newsletter;
use common\models\Log;
class TicketController extends Controller { class TicketController extends Controller {
public function actionIndex() { public function actionIndex() {
@ -64,6 +65,10 @@ class TicketController extends Controller {
'ticket.end' => new Expression ( 'DATE_ADD(CURDATE(),INTERVAL ' . $dayCount . ' DAY)' ) 'ticket.end' => new Expression ( 'DATE_ADD(CURDATE(),INTERVAL ' . $dayCount . ' DAY)' )
] ); ] );
$query->andWhere([
['<','ticket.usage_count' ,'ticket.max_usage_count']
]);
$recepients = $query->all (); $recepients = $query->all ();
\Yii::info ( "Bérlet lejár figyelmeztetés küldése: " . $dayCount . " nap múlva " \Yii::info ( "Bérlet lejár figyelmeztetés küldése: " . $dayCount . " nap múlva "
@ -97,4 +102,93 @@ class TicketController extends Controller {
} }
} }
} }
public function actionDaily(){
set_time_limit(0);
$this->actionWarnExpire();
}
public function actionWeekly(){
set_time_limit(0);
$this->actionNewsletter();
}
public function actionNewsletter(){
set_time_limit(0);
$q1 = Newsletter::find();
$q1->andWhere(['sent' => Newsletter::$SENT_NOT]);
$q1->andWhere(['status' => Newsletter::$STATUS_ACTIVE]);
$newsletters = $q1->all();
if ( count($newsletters) == 0 ){
\Yii::info("Nincs elküldendő hírlevél");
}
$q2 = new Query();
$q2->distinct();
$q2->select(['customer.email as customer_email','customer.name as customer_name']);
$q2->from("customer");
$q2->innerJoin("ticket","ticket.id_card = customer.id_customer_card");
// $q2->andWhere(['status' => Customer::STATUS_ACTIVE ]);
$q2->andWhere(['newsletter' => Customer::$ENABLED ]);
$q2->andWhere(['>=' ,'ticket.end',new Expression('DATE( DATE_ADD(NOW(),INTERVAL -3 MONTH) )')]);
$customers = $q2->all();
\Yii::info("Hírlevél küldése " .count($customers) . " vendégnek!" );
$i = 0;
foreach ($newsletters as $newsletter ){
$i = 0;
foreach ($customers as $customer ){
try{
$log = "Sending Newsletter";
$log .="[id_newsletter=".$newsletter->id_newsletter ."]";
$log .="[customer_email=" . $customer['customer_email'] . "]";
\Yii::info($log);
$message = \Yii::$app->mailer->compose ( );
$replacePairs = [
'{vendeg_neve}' => $customer['customer_name']
];
$mailBody = $newsletter->body;
$mailBody = strtr($mailBody, $replacePairs );
$mailSubject = $newsletter->subject;
$mailSubject = strtr($mailSubject, $replacePairs );
$message
->setFrom ( [ \Yii::$app->params['newsletter_from'] => Helper::getCompanyName() ])
->setTo ( [
$customer['customer_email']
])
->setHtmlBody( $mailBody )
->setSubject ( $mailSubject )
->send ();
}catch (\Exception $ex){
\Yii::error("Nem sikerült hírlevelet kikülden: Hírlevél azonosító=" .$newsletter->id_newsletter. ";Vendég azonosító ". $customer['customer_name'] ) ;
}
$i++;
}
$newsletter->sent = Newsletter::$SENT_TRUE;
$newsletter->sent_at = Helper::getDateTimeString();
$newsletter->save(false);
// Log::log([
// 'type' =>Log::$TYPE_LOGIN,
// 'message' => $message
// ]);
}
}
} }

View File

@ -0,0 +1,30 @@
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160516_114454_add__customer_newsletter extends Migration
{
public function up()
{
$this->addColumn("customer", "newsletter", "int default 1");
}
public function down()
{
echo "m160516_114454_add__customer_newsletter cannot be reverted.\n";
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}

View File

@ -0,0 +1,45 @@
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160516_122708_add_newsletter extends Migration
{
public function up()
{
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
// http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}
$this->createTable('{{%newsletter}}', [
'id_newsletter' => $this->primaryKey(),
'subject' => $this->string(),
'body' => $this->text(),
'status' => $this->integer(11),
'sent' => $this->integer(),
'sent_at' => $this->dateTime( ),
'created_at' => $this->dateTime()->notNull(),
'updated_at' => $this->dateTime()->notNull(),
], $tableOptions);
}
public function down()
{
echo "m160516_122708_add_newsletter cannot be reverted.\n";
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}

View File

@ -0,0 +1,30 @@
<?php
use yii\db\Schema;
use yii\db\Migration;
class m160523_053901_alter_customer_set_default_newsletter_false extends Migration
{
public function up()
{
$this->execute("update customer set newsletter = 0");
}
public function down()
{
echo "m160523_053901_alter_customer_set_default_newsletter_false cannot be reverted.\n";
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}

View File

@ -0,0 +1,39 @@
<?php
use yii\db\Schema;
use yii\db\Migration;
use common\models\Customer;
class m160523_055217_add_customer_newsletter_token extends Migration
{
public function up()
{
$this->addColumn("customer", "newsletter_token", "string" );
$customers = Customer::find()->all();
foreach ($customers as $customer ){
$customer->newsletter_token = Yii::$app->security->generateRandomString() . '_' . time();
$customer->save();
}
}
public function down()
{
echo "m160523_055217_add_customer_newsletter_token cannot be reverted.\n";
return false;
}
/*
// Use safeUp/safeDown to run migration code within a transaction
public function safeUp()
{
}
public function safeDown()
{
}
*/
}

View File

@ -114,6 +114,7 @@ class CustomerController extends Controller
$model->country = "Magyarország"; $model->country = "Magyarország";
$model->id_user = Yii::$app->user->id; $model->id_user = Yii::$app->user->id;
$model->warn_mail_ticket_expire_enabled = 1; $model->warn_mail_ticket_expire_enabled = 1;
$model->newsletter = 1;
$receptionForm = new ReceptionForm(); $receptionForm = new ReceptionForm();
$receptionForm->number = $number; $receptionForm->number = $number;
@ -217,10 +218,6 @@ class CustomerController extends Controller
// s // s
/** /**

View File

@ -15,6 +15,8 @@ use yii\filters\AccessControl;
use common\models\User; use common\models\User;
use common\components\Helper; use common\components\Helper;
use common\models\Log; use common\models\Log;
use common\models\Customer;
use yii\web\NotFoundHttpException;
/** /**
* Site controller * Site controller
@ -176,6 +178,26 @@ class SiteController extends Controller
{ {
return $this->render('about'); return $this->render('about');
} }
public function actionNewsletterUnsubscribe($id,$token)
{
$customer = Customer::find()
->andWhere(['id_customer' => $id ])
->andWhere(['newsletter_token' => $token])
->one();
if ( !isset($customer)){
throw new NotFoundHttpException("Az oldal nem található");
}
$customer->newsletter = 0;
$customer->newsletter_token = Yii::$app->security->generateRandomString() . '_' . time();
$customer->save();
return $this->render("unsubscribe");
}
/** /**
* Signs user up. * Signs user up.

View File

@ -33,6 +33,7 @@ use common\components\Helper;
* @property string $updated_at * @property string $updated_at
* @property string $cardNumber * @property string $cardNumber
* @property integer $warn_mail_ticket_expire_enabled * @property integer $warn_mail_ticket_expire_enabled
* @property integer $newsletter
*/ */
class CustomerCreate extends \common\models\Customer class CustomerCreate extends \common\models\Customer
{ {
@ -109,7 +110,7 @@ class CustomerCreate extends \common\models\Customer
[['photo_data'] ,'safe'], [['photo_data'] ,'safe'],
[['birth_place'] ,'safe'], [['birth_place'] ,'safe'],
[['mother_name'] ,'safe'], [['mother_name'] ,'safe'],
[['warn_mail_ticket_expire_enabled'],'integer'] [['warn_mail_ticket_expire_enabled','newsletter'],'integer']
// [['email','phone'], 'validateEmailOrPhoneRequired' ], // [['email','phone'], 'validateEmailOrPhoneRequired' ],
]; ];
} }

View File

@ -118,7 +118,7 @@ class CustomerUpdate extends \common\models\Customer
[['photo_data'] ,'safe'], [['photo_data'] ,'safe'],
[['birth_place'] ,'safe'], [['birth_place'] ,'safe'],
[['mother_name'] ,'safe'], [['mother_name'] ,'safe'],
[['warn_mail_ticket_expire_enabled'],'integer'] [['warn_mail_ticket_expire_enabled','newsletter'],'integer']
]; ];
} }

View File

@ -148,6 +148,11 @@ use kartik\widgets\DatePicker;
<?= $form->field($model, 'warn_mail_ticket_expire_enabled')->checkbox([ 'label'=> "Kér értesítést bérlet lejáratáról"]) ?> <?= $form->field($model, 'warn_mail_ticket_expire_enabled')->checkbox([ 'label'=> "Kér értesítést bérlet lejáratáról"]) ?>
</div> </div>
</div> </div>
<div class='row'>
<div class='col-md-6'>
<?= $form->field($model, 'newsletter')->checkbox([ 'label'=> "Kér hírlevelet"]) ?>
</div>
</div>
<div class="form-group"> <div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('common/customer', 'Create') : Yii::t('common/customer', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> <?= Html::submitButton($model->isNewRecord ? Yii::t('common/customer', 'Create') : Yii::t('common/customer', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>

View File

@ -144,6 +144,11 @@ use yii\base\Widget;
</div> </div>
</div> </div>
<div class='row'>
<div class='col-md-6'>
<?= $form->field($model, 'newsletter')->checkbox([ 'label'=> "Kér hírlevelet"]) ?>
</div>
</div>
<div class="form-group"> <div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('common/customer', 'Create') : Yii::t('common/customer', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> <?= Html::submitButton($model->isNewRecord ? Yii::t('common/customer', 'Create') : Yii::t('common/customer', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>

View File

@ -0,0 +1 @@
Ön sikeresen leiratkozott a hírlevelünkről!