<?php
// src/Controller/Member.php
namespace App\Controller\Members;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Lib\Encryption;
use App\Repository\ModelMember;
use App\Lib\Tools;
use App\Lib\Apifon;
use App\Lib\Bitly;
class Member extends AbstractController
{
public function __construct(RouterInterface $router, $default_Locale, TranslatorInterface $translator,
$barcodes_dir, $barcodes_public_dir, $frontassets,ManagerRegistry $entityManager)
{
$this->router = $router;
$this->encryption = new Encryption($entityManager);
$this->locale = $default_Locale;
$this->translator = $translator;
$this->islogged = 0;
$this->barcodes_dir = $barcodes_dir;
$this->barcodes_public_dir = $barcodes_public_dir;
$this->assets = $frontassets;
$this->shop = 0;
$this->error = '';
}
public function __destruct()
{
unset($this->encryption);
unset($this->router);
unset($this->locale);
unset($this->translator);
unset($this->islogged);
unset($this->barcodes_dir);
unset($this->barcodes_public_dir);
unset($this->assets);
unset($this->shop);
unset($this->error);
}
/**
* @Route({
"gr": "/eggrafi-melous","en": "/member-registration"}, name="RegisterView")
*/
public function RegisterView(Request $request)
{
return $this->getForm($request);
}
protected function getForm($request)
{
if ($request->getSession()->get('member_id') !== null) {
$this->islogged = true;
}
if ($request->getSession()->get('lang') !== null || $request->getSession()->get('lang') != '') {
$this->locale = $request->getSession()->get('lang');
}
$this->translator->setLocale($this->locale);
if ($request->query->get('shop') != null) {
$this->shop = $request->query->get('shop');
}
$birthdate = date("d/m/Y");
if ($request->request->get('birthdate') !== null) {
$birthdate = $request->request->get('birthdate');
}
$gender = 0;
if ($request->request->get('gender') !== null) {
$gender = $request->request->get('gender');
}
return $this->render('common/register.twig', array(
'lbl_mobile' => $this->translator->trans('registration.mobile'),
'lbl_lname' => $this->translator->trans('registration.lname'),
'lbl_fname' => $this->translator->trans('registration.fname'),
'lbl_terms' => $this->translator->trans('registration.terms'),
'lbl_email' => $this->translator->trans('registration.email'),
'lbl_register' => $this->translator->trans('common.register'),
'form_title' => $this->translator->trans('registration.form_title'),
'shop' => $this->shop,
'registration_url' => $this->router->generate('actionRegisterMember', array('_locale' => $this->locale)),
'error' => $this->error,
'mobile' => $request->request->get('mobile'),
'lname' => $request->request->get('lname'),
'fname' => $request->request->get('fname'),
'terms' => $request->request->get('terms'),
'birthdate' => $birthdate,
'gender' => $gender,
'newsletter' => $request->request->get('newsletter'),
'email' => $request->request->get('email'),
'assets' => '../' . $this->assets,
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => 0,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => '../' . $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
}
/**
* @Route("/action-register", name="actionRegisterMember")
*/
public function actionRegisterMember(\Swift_Mailer $mailer, Request $request)
{
$memberinfo = array();
$db = $this->getDoctrine()->getManager();
if ($this->validate($request)) {
$memberinfo['email'] = $this->encryption->encrypt(trim($request->request->get('email')));
$memberinfo['lname'] = trim($request->request->get('lname'));
$memberinfo['fname'] = trim($request->request->get('fname'));
$memberinfo['mobile'] = $this->encryption->encrypt(trim($request->request->get('mobile')));
$memberinfo['ip'] = $request->getClientIp();
$memberinfo['gender'] = $request->request->get('gender');
$memberinfo['city'] = $request->request->get('city');
$memberinfo['password'] = $this->encryption->encrypt(trim($request->request->get('password')));
$memberinfo['street'] = $request->request->get('street');
$date = explode('/', trim($request->request->get('birthdate')));
$day = $date[0];
$month = $date[1];
$year = $date[2];
$memberinfo['birtdate'] = $year . '-' . $month . '-' . $day;
$memberinfo['terms'] = 0;
if ($request->request->get('terms') == 'on') {
$memberinfo['terms'] = 1;
}
$memberinfo['newsletter'] = 0;
if ($request->request->get('newsletter') == 'on') {
$memberinfo['newsletter'] = 1;
}
$memberinfo['shop'] = 0;
if ($request->request->get('shop') !== null) {
$memberinfo['shop'] = $request->request->get('shop');
}
$memberinfo['isonline'] = 0;
//call api and check eshop if member exists
//$url = '';
//$tools = new Tools();
//$response = $tools->sendApiRequest($db,$url,$postData,$request);
//unset($tools);
//$memberinfo['isonline'] = $response;
if ($memberinfo !== null && !empty($memberinfo)) {
$info = array();
$member = new ModelMember($db, $request);
$result = $member->register($memberinfo);
if ($result['success'] == true) {
//vcode production
$tools = new Tools();
$vcode = $tools->generateRandomNumber(4);
unset($tools);
//save vcode to database
$info['memberid'] = $result['memberid'];
$info['vcode'] = $vcode;
if ($member->saveVcode($info)) {
//αν ειναι από το eshop τότε δημιουργεί ένα link με παραμετρους και και το στέλνει με sms και με email
if ($memberinfo['isonline'] == 1) {
//short url production (bitly)
$host = 'https://' . $request->getHost();
$bitly = new Bitly($db);
$info['url'] = $host . $this->router->generate('ActivationView', array('mob' => $memberinfo['mobile'], 'vcode' => $vcode, 'on' => 1));
$link = $bitly->createLink($info);
unset($bitly);
//send sms
$info['mobile'] = $request->request->get('mobile');
$info['lname'] = $memberinfo['lname'];
$info['fname'] = $memberinfo['fname'];
$info['text'] = sprintf($this->translator->trans('sms.simple_sms_registration'), $link);
$apifon = new Apifon($db);
$apifon->sendMsg($info);
unset($apifon);
unset($member);
//send email
$message = (new \Swift_Message($this->translator->trans('mail.registration_subject')))
->setFrom(array('info@concise.gr' => 'Afternet Loyalty Point System'))
->setTo(array($request->request->get('email') => $request->request->get('lname') . ' ' . $request->request->get('fname')))
->setBody(
$this->renderView(
'mail/registration.html.twig',
array(
'registration_content' => sprintf($this->translator->trans('mail.registration_content'), $request->request->get('lname'), $request->request->get('fname'), $link),
)),
'text/html'
);
if ($mailer->send($message)) {
$info['success'] = true;
unset($message);
}
return $this->render('common/success.twig', array(
'isactivation' => '1',
'redirect_url' => '',
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
} else {
//αν ειναι απο το site τότε πάει στην οθόνη του success και μετά με redirect στην οθόνη του activation
$redirect_url = $this->router->generate('ActivationView', array('_locale' => $this->locale, 'vcode' => $vcode, 'on' => 0, 'mob' => $memberinfo['mobile']));
$host = 'http://' . $request->getHost();
return $this->render('common/success.twig', array(
'isactivation' => '0',
'redirect_url' => $host . $redirect_url,
'lbl_activation_info' => sprintf($this->translator->trans('common.lbl_activation_info'), $host . $redirect_url),
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
}
}
}
} else {
return $this->getForm($request);
}
} else {
return $this->getForm($request);
}
}
protected function validate($request)
{
$isvalid = true;
$email_exists = false;
$mobile_exists = false;
$email_blacklisted = false;
$db = $this->getDoctrine()->getManager();
$member = new ModelMember($db, $request);
//check email
$email = $this->encryption->encrypt(trim($request->request->get('email')));
$email_exists = $member->checkEmailExists($email);
//check mobile
$mobile = $this->encryption->encrypt(trim($request->request->get('mobile')));
$mobile_exists = $member->checkMobileExists($mobile);
//check blacklist
$email = $request->request->get('email');
$email_blacklisted = $member->checkBlacklist($email);
unset($member);
if ($email_blacklisted) {
$this->error['email'] = $this->translator->trans('error.blacklist');
$isvalid = false;
}
if ($email_exists) {
$this->error['email'] = $this->translator->trans('error.unique_mail');
$isvalid = false;
}
if ($mobile_exists) {
$this->error['mobile'] = $this->translator->trans('error.unique_mobile');
$isvalid = false;
}
if ($request->request->get('mobile') == '') {
$this->error['mobile'] = $this->translator->trans('error.mobile');
$isvalid = false;
}
if ($request->request->get('gender') == null) {
$this->error['gender'] = $this->translator->trans('error.gender');
$isvalid = false;
}
if ($request->request->get('lname') == '') {
$this->error['lname'] = $this->translator->trans('error.lname');
$isvalid = false;
}
if ($request->request->get('fname') == '') {
$this->error['fname'] = $this->translator->trans('error.fname');
$isvalid = false;
}
if ($request->request->get('terms') == '') {
$this->error['terms'] = $this->translator->trans('error.terms');
$isvalid = false;
}
if ($request->request->get('email') == '') {
$this->error['email'] = $this->translator->trans('error.email');
$isvalid = false;
}
$tools = new Tools();
if (!$tools->validate_email($request->request->get('email'))) {
$this->error['email'] = $this->translator->trans('error.email_format');
$isvalid = false;
}
unset($tools);
return $isvalid;
}
/**
* @Route({
* "gr": "/energopoiisi-logariasmou",
* "en": "/activate-account"
* }, name="ActivationView")
*/
public function ActivationView(Request $request, \Swift_Mailer $mailer)
{
$memberinfo = array();
$info = array();
$data = array();
if ($request->query->get('mob') != null) {
$db = $this->getDoctrine()->getManager();
$memberinfo['vcode'] = $request->query->get('vcode');
$memberinfo['mobile'] = $request->query->get('mob');
//get member data from db
$member = new ModelMember($db, $request);
$data = $member->getMemberByMobile($request->query->get('mob'));
unset($member);
if (empty($data)) {
return $this->redirectToRoute('notFound');
}
if ($request->query->get('on') == 1) { //einai apo eshop
$memberinfo['lname'] = $data[0]['lname'];
$memberinfo['fname'] = $data[0]['fname'];
$memberinfo['email'] = $this->encryption->decrypt($data[0]['email']);
if ($this->actionActivate($memberinfo, $mailer, $request)) {
return $this->render('common/success.twig', array(
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => '../' . $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
} else {
return $this->render('common/failure.twig', array(
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => '../' . $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
}
} else { //einai apo tablet / site klp.
if (!empty($data)) {
//send sms
$info['mobile'] = $this->encryption->decrypt($request->query->get('mob'));
$info['lname'] = $data[0]['lname'];
$info['fname'] = $data[0]['fname'];
$info['text'] = sprintf($this->translator->trans('sms.not_online_vcode'), $request->query->get('vcode'));
$apifon = new Apifon($db);
$apifon->sendMsg($info);
unset($apifon);
return $this->render('common/activation.twig', array(
'activation_form_title' => $this->translator->trans('common.activation_form_title'),
'lbl_vcode' => $this->translator->trans('common.lbl_vcode'),
'lbl_send' => $this->translator->trans('common.send'),
'mobile' => $request->query->get('mob'),
'activation_url' => $this->router->generate('actionActivateMember', array('_locale' => $this->locale)),
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => '../' . $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
} else {
return $this->redirectToRoute('notFound');
}
}
} else {
return $this->redirectToRoute('notFound');
}
}
/**
* @Route({
* "gr": "/actionActivateMember",
* "en": "/actionActivateMember"
* }, name="actionActivateMember")
*/
public function actionActivateMember(Request $request, \Swift_Mailer $mailer)
{
$memberinfo = array();
if ($request->request->get('mobile') !== null) {
$db = $this->getDoctrine()->getManager();
$member = new ModelMember($db, $request);
$data = $member->getMemberByMobile($request->request->get('mobile'));
unset($member);
if (empty($data)) {
return $this->redirectToRoute('notFound');
}
$memberinfo['lname'] = $data[0]['lname'];
$memberinfo['fname'] = $data[0]['fname'];
$memberinfo['email'] = $this->encryption->decrypt($data[0]['email']);
$memberinfo['vcode'] = $request->request->get('vcode');
$memberinfo['mobile'] = $request->request->get('mobile');
if ($this->actionActivate($memberinfo, $mailer, $request)) {
//send member info to erp
$postData = array();
$postData['lname'] = $memberinfo['lname'];
$postData['fname'] = $memberinfo['fname'];
$postData['email'] = $memberinfo['email'];
$postData['mobile'] = $request->request->get('mobile');
$url = ''; //anamoni gia url gia klisi
$tools = new Tools();
$tools->sendApiRequest($db,$url,$postData,$request);
unset($tools);
return $this->render('common/success.twig', array(
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
} else {
return $this->render('common/failure.twig', array(
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
}
}
}
protected function actionActivate($memberinfo, $mailer, $request)
{
if ($memberinfo !== null && !empty($memberinfo)) {
$db = $this->getDoctrine()->getManager();
$member = new ModelMember($db, $request);
if ($member->activate($memberinfo)) {
//card number production
$tools = new Tools();
$memberinfo['cardnumber'] = $tools->generateRandomNumber(13);
//check if cardnumber exists else recreate
if ($member->checkCardNumberExists($memberinfo['cardnumber'])) {
$memberinfo['cardnumber'] = $tools->generateRandomNumber(13);
}
unset($tools);
$barcode = new \Picqer\Barcode\BarcodeGeneratorPNG();
file_put_contents($this->barcodes_dir . $memberinfo['cardnumber'] . ".png", $barcode->getBarcode($memberinfo['cardnumber'], $barcode::TYPE_CODE_128));
unset($barcode);
//save to database
$member->saveCardNumber($memberinfo);
unset($member);
$host = 'https://' . $request->getHost();
$barcode_img_url = $host . $this->barcodes_public_dir . $memberinfo['cardnumber'] . ".png";
//send email
$message = (new \Swift_Message($this->translator->trans('mail.activation_subject')))
->setFrom(array('info@concise.gr' => 'Loyalty'))
->setTo(array($memberinfo['email'] => $memberinfo['lname'] . ' ' . $memberinfo['fname']))
->setBody(
$this->renderView(
'mail/activation.html.twig',
array(
'activation_content' => sprintf($this->translator->trans('mail.activation_content'), $memberinfo['lname'], $memberinfo['fname'], $memberinfo['cardnumber'], $barcode_img_url),
)),
'text/html'
);
if ($mailer->send($message)) {
$info['success'] = true;
unset($message);
}
return true;
} else {
return false;
}
}
}
/**
* @Route({
* "gr": "/getVcodeWithSms",
* "en": "/getVcodeWithSms"
* }, name="getVcodeWithSms")
*/
public function getVcodeWithSms(Request $request)
{
$vcode_exists = false;
$result['success'] = false;
$result['code_exists'] = false;
$result['mobile_exists'] = true;
$db = $this->getDoctrine()->getManager();
$member = new ModelMember($db, $request);
//check if mobile exists
if ($member->checkMobileExists($this->encryption->encrypt($request->request->get('mobile')))) {
//check if exists other enabled vcode
$vcode_exists = $member->checkVcode($this->encryption->encrypt($request->request->get('mobile')));
if ($vcode_exists) {
$result['code_exists'] = true;
return new Response(json_encode($result));
}
//vcode production
$tools = new Tools();
$vcode = $tools->generateRandomNumber(4);
unset($tools);
//get member data from db
$data = $member->getMemberByMobile($this->encryption->encrypt($request->request->get('mobile')));
$info['memberid'] = $data[0]['member_id'];
$info['vcode'] = $vcode;
//save vcode to database
if ($member->saveVcode($info)) {
unset($member);
//send sms
$info['mobile'] = $request->request->get('mobile');
$info['lname'] = $data[0]['lname'];
$info['fname'] = $data[0]['fname'];
$info['text'] = sprintf($this->translator->trans('sms.code_request'), $vcode);
$apifon = new Apifon($db);
$apifon->sendMsg($info);
unset($apifon);
$result['success'] = true;
}
}
else {
$result['mobile_exists'] = false;
}
return new Response(json_encode($result));
}
/**
* @Route({
* "gr": "/eisodos-melous",
* "en": "/login-member"
* }, name="LoginView")
*/
public function LoginView(Request $request)
{
echo $this->encryption->encrypt('111111111');
//echo $this->encryption->encrypt('v.niakaros@afternet.gr');
if ($request->query->get('shop') != null) {
$this->shop = $request->query->get('shop');
}
if ($request->getSession()->get('member_id') !== null) {
$this->islogged = true;
}
if ($request->getSession()->get('lang') !== null || $request->getSession()->get('lang') != '') {
$this->locale = $this->locale = $request->getSession()->get('lang');
}
$this->translator->setLocale($this->locale);
return $this->render('common/login.twig', array(
'activation_form_title' => $this->translator->trans('common.form_title'),
'lbl_mobile' => $this->translator->trans('registration.mobile'),
'lbl_login' => $this->translator->trans('common.login'),
'form_title' => $this->translator->trans('common.form_title'),
'shop' => $this->shop,
'error' => $this->error,
'mobile' => $request->request->get('mobile'),
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => '../' . $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
}
/**
* @Route({"/action-login"}, name="actionLoginMember")
*/
public function actionLoginMember(Request $request)
{
if ($request->request->get('mobile_vcode') !== null && $request->request->get('vcode') !== null) {
$db = $this->getDoctrine()->getManager();
$info['mobile'] = $this->encryption->encrypt($request->request->get('mobile_vcode'));
$info['vcode'] = $request->request->get('vcode');
$member = new ModelMember($db, $request);
if ($member->login($info)) {
$session = $request->getSession();
unset($member);
return $this->redirectToRoute('memberHomeView', array('token' => $session->get('token')));
} else {
unset($member);
return $this->redirectToRoute('LoginView');
}
} else {
return $this->redirectToRoute('LoginView');
}
}
/**
* @Route({
* "gr": "/home",
* "en": "/home"
* }, name="memberHomeView")
*/
public function memberHomeView(Request $request) {
$session = $request->getSession();
if ($session->get('member_id') !== null) {
$this->islogged = true;
unset($session);
return $this->render('common/dashboard.twig', array(
'points_url' => $this->router->generate('memberPointsView', array('_locale' => $this->locale)),
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
} else {
unset($session);
return $this->redirectToRoute('LoginView');
}
}
/**
* @Route({
* "gr": "/mypoints",
* "en": "/mypoints"
* }, name="memberPointsView")
*/
public function memberPointsView(Request $request)
{
$session = $request->getSession();
if ($session->get('member_id') !== null) {
$this->islogged = true;
unset($session);
return $this->render('common/points.twig', array(
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
} else {
unset($session);
return $this->redirectToRoute('LoginView');
}
}
/**
* @Route({"en": "/delete-member-account", "gr": "/delete-member-account"}, name="DeleteMemberAccount")
*/
public function DeleteMemberAccount(Request $request)
{
$info['success'] = false;
if ($request->request->get('accept_delete') == '1') {
$db = $this->getDoctrine()->getManager();
$member = new ModelMember($db, $request);
if ($member->DeleteMember($member->getid())) {
$member->logout();
$info['success'] = true;
}
unset($member);
}
return new Response(json_encode($info));
}
/**
* @Route({"en": "/MemberLogout", "gr": "/MemberLogout"}, name="MemberLogout")
*/
public function MemberLogout(Request $request)
{
$db = $this->getDoctrine()->getManager();
$member = new ModelMember($db, $request);
if ($member->logout()) {
unset($member);
return $this->render('common/logout.twig', array(
'lbl_session_end' => $this->translator->trans('common.lbl_session_end'),
'lbl_login' => $this->translator->trans('common.login'),
'login_url' => $this->router->generate('LoginView', array('_locale' => $this->locale)),
'header' => $this->get('twig')->render('common/header.html.twig', array(
'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr', 'route' => $request->get('_route'))),
'en_lang_url' => $this->router->generate('language', array('lang' => 'en', 'route' => $request->get('_route'))),
'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
'islogged' => false,
'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
'vcode_exists' => $this->translator->trans('error.vcode_exists'),
'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
'assets' => $this->assets,
)),
'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
));
}
}
/**
* @Route({"en": "/actionSearchMembers", "gr": "/actionSearchMembers"}, name="actionSearchMembers")
*/
public function actionSearchMembers() {
}
/**
* @Route({"en": "/actionUpdateComments", "gr": "/actionUpdateComments"}, name="actionUpdateComments")
*/
public function actionUpdateComments(Request $request) {
$db = $this->getDoctrine()->getManager();
$info = array();
$result['exists'] = false;
if ($request->request->get('comments') != null) {
$info['comments'] = $request->request->get('comments');
$info['memberid'] = $request->request->get('memberid');
$member = new ModelMember($db, $request);
if ($member->updateMemberComments($info)) {
$result['exists'] = true;
}
unset($member);
}
return new Response(json_encode($result));
}
/**
* @Route({"en": "/checkMobile", "gr": "/checkMobile"}, name="checkMobile")
*/
public function checkMobile(Request $request)
{
$result['exists'] = false;
if ($request->request->get('mobile') !== null) {
$db = $this->getDoctrine()->getManager();
$member = new ModelMember($db, $request);
$exists = $member->checkMobileExists($this->encryption->encrypt($request->request->get('mobile')));
if ($exists) {
$result['exists'] = true;
}
return new Response(json_encode($result));
}
}
/**
* @Route({"en": "/getAllMembers", "gr": "/getAllMembers"}, name="getAllMembers")
*/
public function getAllMembers(Request $request)
{
$members = array();
$db = $this->getDoctrine()->getManager();
$session = $request->getSession();
$token = $session->get('token');
unset($session);
$member = new ModelMember($db, $request);
$members['data'] = $member->getListMembers();
foreach ($members['data'] as &$m) {
$m['url'] = $this->router->generate('AdminMemberProfileView', array('_locale' => $this->locale,'token' => $token,'mid' => $m['member_id']));
$m['email'] = $this->encryption->decrypt($m['email']);
$m['mobile'] = $this->encryption->decrypt($m['mobile']);
}
unset($member);
$members['meta'] = array("page" => 1,
"pages"=> 1,
"perpage"=> -1,
"total"=> count($members['data']),
"sort"=> "asc",
"field"=> "member_id"
);
return new Response(json_encode($members));
}
/**
* @Route({"en": "/getMembersWithCriteria", "gr": "/getMembersWithCriteria"}, name="getMembersWithCriteria")
*/
public function getMembersWithCriteria(Request $request)
{
$members = array();
$filter =array();
$db = $this->getDoctrine()->getManager();
if ($request->request->get('lname') != null && !empty($request->request->get('lname'))) {
$filter['lname'] = trim($request->request->get('lname'));
}
if ($request->request->get('fname') != null && !empty($request->request->get('fname'))) {
$filter['fname'] = trim($request->request->get('fname'));
}
if ($request->request->get('mobile') != null && !empty($request->request->get('mobile'))) {
$filter['mobile'] = $this->encryption->encrypt(trim($request->request->get('mobile')));
}
if ($request->request->get('email') != null && !empty($request->request->get('email'))) {
$filter['email'] = $this->encryption->encrypt(trim($request->request->get('email')));
}
if ($request->request->get('shops') != null && !empty($request->request->get('shops')) && $request->request->get('shops') != '0') {
$filter['shops'] = trim($request->request->get('shops'));
}
if ($request->request->get('sorting') != null && !empty($request->request->get('sorting'))) {
$filter['sorting'] = $request->request->get('sorting');
}
if ($request->request->get('ordering') != null && !empty($request->request->get('ordering'))) {
$filter['ordering'] = $request->request->get('ordering');
}
if ($request->request->get('datefrom') != null && !empty($request->request->get('datefrom'))) {
$date = explode('/',trim($request->request->get('datefrom')));
$day = $date[0];
$month = $date[1];
$year = $date[2];
$datefrom = $year . '-' . $month . '-' . $day;
$filter['datefrom'] = $datefrom;
}
if ($request->request->get('dateto') != null && !empty($request->request->get('dateto'))) {
$date = explode('/',trim($request->request->get('dateto')));
$day = $date[0];
$month = $date[1];
$year = $date[2];
$dateto = $year . '-' . $month . '-' . $day;
$filter['dateto'] = $dateto;
}
$member = new ModelMember($db, $request);
$members = $member->getListMembers($filter);
unset($member);
$session = $request->getSession();
$token = $session->get('token');
unset($session);
foreach ($members as &$m) {
$m['url'] = $this->router->generate('AdminMemberProfileView', array('_locale' => $this->locale,'token' => $token,'mid' => $m['member_id']));
$m['email'] = $this->encryption->decrypt($m['email']);
$m['mobile'] = $this->encryption->decrypt($m['mobile']);
}
return new Response(json_encode($members));
}
/**
* @Route({
"gr": "/loyadmin/members-summαry",
* "en": "/loyadmin/members-summary"
* }, name="MembersDashboardView")
*/
public function MembersDashboardView(Request $request)
{
return $this->render('admin/members_dashboard.html.twig', array(
'assets' => $this->assets,
));
}
}
?>