src/Controller/Members/Member.php line 719

Open in your IDE?
  1. <?php
  2. // src/Controller/Member.php
  3. namespace App\Controller\Members;
  4. use Doctrine\Persistence\ManagerRegistry;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Component\Routing\RouterInterface;
  10. use Symfony\Contracts\Translation\TranslatorInterface;
  11. use App\Lib\Encryption;
  12. use App\Repository\ModelMember;
  13. use App\Lib\Tools;
  14. use App\Lib\Apifon;
  15. use App\Lib\Bitly;
  16. class Member extends AbstractController
  17. {
  18.     public function __construct(RouterInterface $router$default_LocaleTranslatorInterface $translator,
  19.                                 $barcodes_dir$barcodes_public_dir$frontassets,ManagerRegistry $entityManager)
  20.     {
  21.         $this->router $router;
  22.         $this->encryption = new Encryption($entityManager);
  23.         $this->locale $default_Locale;
  24.         $this->translator $translator;
  25.         $this->islogged 0;
  26.         $this->barcodes_dir $barcodes_dir;
  27.         $this->barcodes_public_dir $barcodes_public_dir;
  28.         $this->assets $frontassets;
  29.         $this->shop 0;
  30.         $this->error '';
  31.     }
  32.     public function __destruct()
  33.     {
  34.         unset($this->encryption);
  35.         unset($this->router);
  36.         unset($this->locale);
  37.         unset($this->translator);
  38.         unset($this->islogged);
  39.         unset($this->barcodes_dir);
  40.         unset($this->barcodes_public_dir);
  41.         unset($this->assets);
  42.         unset($this->shop);
  43.         unset($this->error);
  44.     }
  45.     /**
  46.      * @Route({
  47.         "gr": "/eggrafi-melous","en": "/member-registration"}, name="RegisterView")
  48.      */
  49.     public function RegisterView(Request $request)
  50.     {
  51.         return $this->getForm($request);
  52.     }
  53.     protected function getForm($request)
  54.     {
  55.         if ($request->getSession()->get('member_id') !== null) {
  56.             $this->islogged true;
  57.         }
  58.         if ($request->getSession()->get('lang') !== null || $request->getSession()->get('lang') != '') {
  59.             $this->locale $request->getSession()->get('lang');
  60.         }
  61.         $this->translator->setLocale($this->locale);
  62.         if ($request->query->get('shop') != null) {
  63.             $this->shop $request->query->get('shop');
  64.         }
  65.         $birthdate  date("d/m/Y");
  66.         if ($request->request->get('birthdate') !== null) {
  67.             $birthdate $request->request->get('birthdate');
  68.         }
  69.         $gender 0;
  70.         if ($request->request->get('gender') !== null) {
  71.             $gender $request->request->get('gender');
  72.         }
  73.         return $this->render('common/register.twig', array(
  74.             'lbl_mobile' => $this->translator->trans('registration.mobile'),
  75.             'lbl_lname' => $this->translator->trans('registration.lname'),
  76.             'lbl_fname' => $this->translator->trans('registration.fname'),
  77.             'lbl_terms' => $this->translator->trans('registration.terms'),
  78.             'lbl_email' => $this->translator->trans('registration.email'),
  79.             'lbl_register' => $this->translator->trans('common.register'),
  80.             'form_title' => $this->translator->trans('registration.form_title'),
  81.             'shop' => $this->shop,
  82.             'registration_url' => $this->router->generate('actionRegisterMember', array('_locale' => $this->locale)),
  83.             'error' => $this->error,
  84.             'mobile' => $request->request->get('mobile'),
  85.             'lname' => $request->request->get('lname'),
  86.             'fname' => $request->request->get('fname'),
  87.             'terms' => $request->request->get('terms'),
  88.             'birthdate' => $birthdate,
  89.             'gender' => $gender,
  90.             'newsletter' => $request->request->get('newsletter'),
  91.             'email' => $request->request->get('email'),
  92.             'assets' => '../' $this->assets,
  93.             'header' => $this->get('twig')->render('common/header.html.twig', array(
  94.                 'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  95.                 'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  96.                 'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  97.                 'islogged' => 0,
  98.                 'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  99.                 'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  100.                 'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  101.                 'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  102.                 'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  103.                 'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  104.                 'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  105.                 'assets' => '../' $this->assets,
  106.             )),
  107.             'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  108.         ));
  109.     }
  110.     /**
  111.      * @Route("/action-register", name="actionRegisterMember")
  112.      */
  113.     public function actionRegisterMember(\Swift_Mailer $mailerRequest $request)
  114.     {
  115.         $memberinfo = array();
  116.         $db $this->getDoctrine()->getManager();
  117.         if ($this->validate($request)) {
  118.             $memberinfo['email'] = $this->encryption->encrypt(trim($request->request->get('email')));
  119.             $memberinfo['lname'] = trim($request->request->get('lname'));
  120.             $memberinfo['fname'] = trim($request->request->get('fname'));
  121.             $memberinfo['mobile'] = $this->encryption->encrypt(trim($request->request->get('mobile')));
  122.             $memberinfo['ip'] = $request->getClientIp();
  123.             $memberinfo['gender'] = $request->request->get('gender');
  124.             $memberinfo['city'] = $request->request->get('city');
  125.             $memberinfo['password'] = $this->encryption->encrypt(trim($request->request->get('password')));
  126.             $memberinfo['street'] = $request->request->get('street');
  127.             $date explode('/'trim($request->request->get('birthdate')));
  128.             $day  $date[0];
  129.             $month $date[1];
  130.             $year $date[2];
  131.             $memberinfo['birtdate'] = $year '-' $month '-' $day;
  132.             $memberinfo['terms'] = 0;
  133.             if ($request->request->get('terms') == 'on') {
  134.                 $memberinfo['terms'] = 1;
  135.             }
  136.             $memberinfo['newsletter'] = 0;
  137.             if ($request->request->get('newsletter') == 'on') {
  138.                 $memberinfo['newsletter'] = 1;
  139.             }
  140.             $memberinfo['shop'] = 0;
  141.             if ($request->request->get('shop') !== null) {
  142.                 $memberinfo['shop'] = $request->request->get('shop');
  143.             }
  144.             $memberinfo['isonline'] = 0;
  145.             //call api and check eshop if member exists
  146.             //$url = '';
  147.             //$tools = new Tools();
  148.             //$response = $tools->sendApiRequest($db,$url,$postData,$request);
  149.             //unset($tools);
  150.             //$memberinfo['isonline'] = $response;
  151.             if ($memberinfo !== null && !empty($memberinfo)) {
  152.                 $info = array();
  153.                 $member = new ModelMember($db$request);
  154.                 $result $member->register($memberinfo);
  155.                 if ($result['success'] == true) {
  156.                     //vcode production
  157.                     $tools = new Tools();
  158.                     $vcode $tools->generateRandomNumber(4);
  159.                     unset($tools);
  160.                     //save vcode to database
  161.                     $info['memberid'] = $result['memberid'];
  162.                     $info['vcode'] = $vcode;
  163.                     if ($member->saveVcode($info)) {
  164.                         //αν ειναι από το eshop τότε δημιουργεί ένα link με παραμετρους και και το στέλνει με sms και με email
  165.                         if ($memberinfo['isonline'] == 1) {
  166.                             //short url production (bitly)
  167.                             $host 'https://' $request->getHost();
  168.                             $bitly = new Bitly($db);
  169.                             $info['url'] = $host $this->router->generate('ActivationView', array('mob' => $memberinfo['mobile'], 'vcode' => $vcode'on' => 1));
  170.                             $link $bitly->createLink($info);
  171.                             unset($bitly);
  172.                             //send sms
  173.                             $info['mobile'] = $request->request->get('mobile');
  174.                             $info['lname'] = $memberinfo['lname'];
  175.                             $info['fname'] = $memberinfo['fname'];
  176.                             $info['text'] = sprintf($this->translator->trans('sms.simple_sms_registration'), $link);
  177.                             $apifon = new Apifon($db);
  178.                             $apifon->sendMsg($info);
  179.                             unset($apifon);
  180.                             unset($member);
  181.                             //send email
  182.                             $message = (new \Swift_Message($this->translator->trans('mail.registration_subject')))
  183.                                 ->setFrom(array('info@concise.gr' => 'Afternet Loyalty Point System'))
  184.                                 ->setTo(array($request->request->get('email') => $request->request->get('lname') . ' ' $request->request->get('fname')))
  185.                                 ->setBody(
  186.                                     $this->renderView(
  187.                                         'mail/registration.html.twig',
  188.                                         array(
  189.                                             'registration_content' => sprintf($this->translator->trans('mail.registration_content'), $request->request->get('lname'), $request->request->get('fname'), $link),
  190.                                         )),
  191.                                     'text/html'
  192.                                 );
  193.                             if ($mailer->send($message)) {
  194.                                 $info['success'] = true;
  195.                                 unset($message);
  196.                             }
  197.                             return $this->render('common/success.twig', array(
  198.                                 'isactivation' => '1',
  199.                                 'redirect_url' => '',
  200.                                 'header' => $this->get('twig')->render('common/header.html.twig', array(
  201.                                     'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  202.                                     'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  203.                                     'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  204.                                     'islogged' => false,
  205.                                     'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  206.                                     'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  207.                                     'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  208.                                     'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  209.                                     'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  210.                                     'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  211.                                     'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  212.                                     'assets' => $this->assets,
  213.                                 )),
  214.                                 'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  215.                             ));
  216.                         } else {
  217.                             //αν ειναι απο το site τότε πάει στην οθόνη του success και μετά με redirect στην οθόνη του activation
  218.                             $redirect_url $this->router->generate('ActivationView', array('_locale' => $this->locale'vcode' => $vcode'on' => 0'mob' => $memberinfo['mobile']));
  219.                             $host 'http://' $request->getHost();
  220.                             return $this->render('common/success.twig', array(
  221.                                 'isactivation' => '0',
  222.                                 'redirect_url' => $host $redirect_url,
  223.                                 'lbl_activation_info' => sprintf($this->translator->trans('common.lbl_activation_info'), $host $redirect_url),
  224.                                 'header' => $this->get('twig')->render('common/header.html.twig', array(
  225.                                     'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  226.                                     'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  227.                                     'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  228.                                     'islogged' => false,
  229.                                     'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  230.                                     'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  231.                                     'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  232.                                     'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  233.                                     'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  234.                                     'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  235.                                     'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  236.                                     'assets' => $this->assets,
  237.                                 )),
  238.                                 'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  239.                             ));
  240.                         }
  241.                     }
  242.                 }
  243.             } else {
  244.                 return $this->getForm($request);
  245.             }
  246.         } else {
  247.             return $this->getForm($request);
  248.         }
  249.     }
  250.     protected function validate($request)
  251.     {
  252.         $isvalid true;
  253.         $email_exists false;
  254.         $mobile_exists false;
  255.         $email_blacklisted false;
  256.         $db $this->getDoctrine()->getManager();
  257.         $member = new ModelMember($db$request);
  258.         //check email
  259.         $email $this->encryption->encrypt(trim($request->request->get('email')));
  260.         $email_exists $member->checkEmailExists($email);
  261.         //check mobile
  262.         $mobile $this->encryption->encrypt(trim($request->request->get('mobile')));
  263.         $mobile_exists $member->checkMobileExists($mobile);
  264.         //check blacklist
  265.         $email $request->request->get('email');
  266.         $email_blacklisted $member->checkBlacklist($email);
  267.         unset($member);
  268.         if ($email_blacklisted) {
  269.             $this->error['email'] = $this->translator->trans('error.blacklist');
  270.             $isvalid false;
  271.         }
  272.         if ($email_exists) {
  273.             $this->error['email'] = $this->translator->trans('error.unique_mail');
  274.             $isvalid false;
  275.         }
  276.         if ($mobile_exists) {
  277.             $this->error['mobile'] = $this->translator->trans('error.unique_mobile');
  278.             $isvalid false;
  279.         }
  280.         if ($request->request->get('mobile') == '') {
  281.             $this->error['mobile'] = $this->translator->trans('error.mobile');
  282.             $isvalid false;
  283.         }
  284.         if ($request->request->get('gender') == null) {
  285.             $this->error['gender'] = $this->translator->trans('error.gender');
  286.             $isvalid false;
  287.         }
  288.         if ($request->request->get('lname') == '') {
  289.             $this->error['lname'] = $this->translator->trans('error.lname');
  290.             $isvalid false;
  291.         }
  292.         if ($request->request->get('fname') == '') {
  293.             $this->error['fname'] = $this->translator->trans('error.fname');
  294.             $isvalid false;
  295.         }
  296.         if ($request->request->get('terms') == '') {
  297.             $this->error['terms'] = $this->translator->trans('error.terms');
  298.             $isvalid false;
  299.         }
  300.         if ($request->request->get('email') == '') {
  301.             $this->error['email'] = $this->translator->trans('error.email');
  302.             $isvalid false;
  303.         }
  304.         $tools = new Tools();
  305.         if (!$tools->validate_email($request->request->get('email'))) {
  306.             $this->error['email'] = $this->translator->trans('error.email_format');
  307.             $isvalid false;
  308.         }
  309.         unset($tools);
  310.         return $isvalid;
  311.     }
  312.     /**
  313.      * @Route({
  314.      *  "gr": "/energopoiisi-logariasmou",
  315.      *  "en": "/activate-account"
  316.      * }, name="ActivationView")
  317.      */
  318.     public function ActivationView(Request $request\Swift_Mailer $mailer)
  319.     {
  320.         $memberinfo = array();
  321.         $info = array();
  322.         $data = array();
  323.         if ($request->query->get('mob') != null) {
  324.             $db $this->getDoctrine()->getManager();
  325.             $memberinfo['vcode'] = $request->query->get('vcode');
  326.             $memberinfo['mobile'] = $request->query->get('mob');
  327.             //get member data from db
  328.             $member = new ModelMember($db$request);
  329.             $data $member->getMemberByMobile($request->query->get('mob'));
  330.             unset($member);
  331.             if (empty($data)) {
  332.                 return $this->redirectToRoute('notFound');
  333.             }
  334.             if ($request->query->get('on') == 1) { //einai apo eshop
  335.                 $memberinfo['lname'] = $data[0]['lname'];
  336.                 $memberinfo['fname'] = $data[0]['fname'];
  337.                 $memberinfo['email'] = $this->encryption->decrypt($data[0]['email']);
  338.                 if ($this->actionActivate($memberinfo$mailer$request)) {
  339.                     return $this->render('common/success.twig', array(
  340.                         'header' => $this->get('twig')->render('common/header.html.twig', array(
  341.                             'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  342.                             'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  343.                             'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  344.                             'islogged' => false,
  345.                             'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  346.                             'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  347.                             'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  348.                             'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  349.                             'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  350.                             'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  351.                             'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  352.                             'assets' => '../' $this->assets,
  353.                         )),
  354.                         'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  355.                     ));
  356.                 } else {
  357.                     return $this->render('common/failure.twig', array(
  358.                         'header' => $this->get('twig')->render('common/header.html.twig', array(
  359.                             'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  360.                             'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  361.                             'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  362.                             'islogged' => false,
  363.                             'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  364.                             'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  365.                             'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  366.                             'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  367.                             'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  368.                             'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  369.                             'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  370.                             'assets' => '../' $this->assets,
  371.                         )),
  372.                         'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  373.                     ));
  374.                 }
  375.             } else { //einai apo tablet / site klp.
  376.                 if (!empty($data)) {
  377.                     //send sms
  378.                     $info['mobile'] = $this->encryption->decrypt($request->query->get('mob'));
  379.                     $info['lname'] = $data[0]['lname'];
  380.                     $info['fname'] = $data[0]['fname'];
  381.                     $info['text'] = sprintf($this->translator->trans('sms.not_online_vcode'), $request->query->get('vcode'));
  382.                     $apifon = new Apifon($db);
  383.                     $apifon->sendMsg($info);
  384.                     unset($apifon);
  385.                     return $this->render('common/activation.twig', array(
  386.                         'activation_form_title' => $this->translator->trans('common.activation_form_title'),
  387.                         'lbl_vcode' => $this->translator->trans('common.lbl_vcode'),
  388.                         'lbl_send' => $this->translator->trans('common.send'),
  389.                         'mobile' => $request->query->get('mob'),
  390.                         'activation_url' => $this->router->generate('actionActivateMember', array('_locale' => $this->locale)),
  391.                         'header' => $this->get('twig')->render('common/header.html.twig', array(
  392.                             'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  393.                             'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  394.                             'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  395.                             'islogged' => false,
  396.                             'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  397.                             'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  398.                             'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  399.                             'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  400.                             'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  401.                             'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  402.                             'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  403.                             'assets' => '../' $this->assets,
  404.                         )),
  405.                         'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  406.                     ));
  407.                 } else {
  408.                     return $this->redirectToRoute('notFound');
  409.                 }
  410.             }
  411.         } else {
  412.             return $this->redirectToRoute('notFound');
  413.         }
  414.     }
  415.     /**
  416.      * @Route({
  417.      *  "gr": "/actionActivateMember",
  418.      *  "en": "/actionActivateMember"
  419.      * }, name="actionActivateMember")
  420.      */
  421.     public function actionActivateMember(Request $request\Swift_Mailer $mailer)
  422.     {
  423.         $memberinfo = array();
  424.         if ($request->request->get('mobile') !== null) {
  425.             $db $this->getDoctrine()->getManager();
  426.             $member = new ModelMember($db$request);
  427.             $data $member->getMemberByMobile($request->request->get('mobile'));
  428.             unset($member);
  429.             if (empty($data)) {
  430.                 return $this->redirectToRoute('notFound');
  431.             }
  432.             $memberinfo['lname'] = $data[0]['lname'];
  433.             $memberinfo['fname'] = $data[0]['fname'];
  434.             $memberinfo['email'] = $this->encryption->decrypt($data[0]['email']);
  435.             $memberinfo['vcode'] = $request->request->get('vcode');
  436.             $memberinfo['mobile'] = $request->request->get('mobile');
  437.             if ($this->actionActivate($memberinfo$mailer$request)) {
  438.                 //send member info to erp
  439.                 $postData = array();
  440.                 $postData['lname'] = $memberinfo['lname'];
  441.                 $postData['fname'] = $memberinfo['fname'];
  442.                 $postData['email'] = $memberinfo['email'];
  443.                 $postData['mobile'] = $request->request->get('mobile');
  444.                 $url ''//anamoni gia url gia klisi
  445.                 $tools = new Tools();
  446.                 $tools->sendApiRequest($db,$url,$postData,$request);
  447.                 unset($tools);
  448.                 return $this->render('common/success.twig', array(
  449.                     'header' => $this->get('twig')->render('common/header.html.twig', array(
  450.                         'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  451.                         'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  452.                         'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  453.                         'islogged' => false,
  454.                         'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  455.                         'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  456.                         'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  457.                         'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  458.                         'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  459.                         'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  460.                         'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  461.                         'assets' => $this->assets,
  462.                     )),
  463.                     'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  464.                 ));
  465.             } else {
  466.                 return $this->render('common/failure.twig', array(
  467.                     'header' => $this->get('twig')->render('common/header.html.twig', array(
  468.                         'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  469.                         'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  470.                         'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  471.                         'islogged' => false,
  472.                         'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  473.                         'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  474.                         'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  475.                         'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  476.                         'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  477.                         'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  478.                         'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  479.                         'assets' => $this->assets,
  480.                     )),
  481.                     'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  482.                 ));
  483.             }
  484.         }
  485.     }
  486.     protected function actionActivate($memberinfo$mailer$request)
  487.     {
  488.         if ($memberinfo !== null && !empty($memberinfo)) {
  489.             $db $this->getDoctrine()->getManager();
  490.             $member = new ModelMember($db$request);
  491.             if ($member->activate($memberinfo)) {
  492.                 //card number production
  493.                 $tools = new Tools();
  494.                 $memberinfo['cardnumber'] = $tools->generateRandomNumber(13);
  495.                 //check if cardnumber exists else recreate
  496.                 if ($member->checkCardNumberExists($memberinfo['cardnumber'])) {
  497.                     $memberinfo['cardnumber'] = $tools->generateRandomNumber(13);
  498.                 }
  499.                 unset($tools);
  500.                 $barcode = new \Picqer\Barcode\BarcodeGeneratorPNG();
  501.                 file_put_contents($this->barcodes_dir $memberinfo['cardnumber'] . ".png"$barcode->getBarcode($memberinfo['cardnumber'], $barcode::TYPE_CODE_128));
  502.                 unset($barcode);
  503.                 //save to database
  504.                 $member->saveCardNumber($memberinfo);
  505.                 unset($member);
  506.                 $host 'https://' $request->getHost();
  507.                 $barcode_img_url $host $this->barcodes_public_dir $memberinfo['cardnumber'] . ".png";
  508.                 //send email
  509.                 $message = (new \Swift_Message($this->translator->trans('mail.activation_subject')))
  510.                     ->setFrom(array('info@concise.gr' => 'Loyalty'))
  511.                     ->setTo(array($memberinfo['email'] => $memberinfo['lname'] . ' ' $memberinfo['fname']))
  512.                     ->setBody(
  513.                         $this->renderView(
  514.                             'mail/activation.html.twig',
  515.                             array(
  516.                                 'activation_content' => sprintf($this->translator->trans('mail.activation_content'), $memberinfo['lname'], $memberinfo['fname'], $memberinfo['cardnumber'], $barcode_img_url),
  517.                             )),
  518.                         'text/html'
  519.                     );
  520.                 if ($mailer->send($message)) {
  521.                     $info['success'] = true;
  522.                     unset($message);
  523.                 }
  524.                 return true;
  525.             } else {
  526.                 return false;
  527.             }
  528.         }
  529.     }
  530.     /**
  531.      * @Route({
  532.      *  "gr": "/getVcodeWithSms",
  533.      *  "en": "/getVcodeWithSms"
  534.      * }, name="getVcodeWithSms")
  535.      */
  536.     public function getVcodeWithSms(Request $request)
  537.     {
  538.         $vcode_exists false;
  539.         $result['success'] = false;
  540.         $result['code_exists'] = false;
  541.         $result['mobile_exists'] = true;
  542.         $db $this->getDoctrine()->getManager();
  543.         $member = new ModelMember($db$request);
  544.         //check if mobile exists
  545.         if ($member->checkMobileExists($this->encryption->encrypt($request->request->get('mobile')))) {
  546.             //check if exists other enabled vcode
  547.             $vcode_exists $member->checkVcode($this->encryption->encrypt($request->request->get('mobile')));
  548.             if ($vcode_exists) {
  549.                 $result['code_exists'] = true;
  550.                 return new Response(json_encode($result));
  551.             }
  552.             //vcode production
  553.             $tools = new Tools();
  554.             $vcode $tools->generateRandomNumber(4);
  555.             unset($tools);
  556.             //get member data from db
  557.             $data $member->getMemberByMobile($this->encryption->encrypt($request->request->get('mobile')));
  558.             $info['memberid'] = $data[0]['member_id'];
  559.             $info['vcode'] = $vcode;
  560.             //save vcode to database
  561.             if ($member->saveVcode($info)) {
  562.                 unset($member);
  563.                 //send sms
  564.                 $info['mobile'] = $request->request->get('mobile');
  565.                 $info['lname'] = $data[0]['lname'];
  566.                 $info['fname'] = $data[0]['fname'];
  567.                 $info['text'] = sprintf($this->translator->trans('sms.code_request'), $vcode);
  568.                 $apifon = new Apifon($db);
  569.                 $apifon->sendMsg($info);
  570.                 unset($apifon);
  571.                 $result['success'] = true;
  572.             }
  573.         }
  574.         else {
  575.             $result['mobile_exists'] = false;
  576.         }
  577.         return new Response(json_encode($result));
  578.     }
  579.     /**
  580.      * @Route({
  581.      *  "gr": "/eisodos-melous",
  582.      *  "en": "/login-member"
  583.      * }, name="LoginView")
  584.      */
  585.     public function LoginView(Request $request)
  586.     {
  587. echo $this->encryption->encrypt('111111111');
  588. //echo $this->encryption->encrypt('v.niakaros@afternet.gr');
  589.         if ($request->query->get('shop') != null) {
  590.             $this->shop $request->query->get('shop');
  591.         }
  592.         if ($request->getSession()->get('member_id') !== null) {
  593.             $this->islogged true;
  594.         }
  595.         if ($request->getSession()->get('lang') !== null || $request->getSession()->get('lang') != '') {
  596.             $this->locale $this->locale $request->getSession()->get('lang');
  597.         }
  598.         $this->translator->setLocale($this->locale);
  599.         return $this->render('common/login.twig', array(
  600.             'activation_form_title' => $this->translator->trans('common.form_title'),
  601.             'lbl_mobile' => $this->translator->trans('registration.mobile'),
  602.             'lbl_login' => $this->translator->trans('common.login'),
  603.             'form_title' => $this->translator->trans('common.form_title'),
  604.             'shop' => $this->shop,
  605.             'error' => $this->error,
  606.             'mobile' => $request->request->get('mobile'),
  607.             'header' => $this->get('twig')->render('common/header.html.twig', array(
  608.                 'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  609.                 'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  610.                 'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  611.                 'islogged' => false,
  612.                 'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  613.                 'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  614.                 'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  615.                 'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  616.                 'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  617.                 'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  618.                 'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  619.                 'assets' => '../' $this->assets,
  620.             )),
  621.             'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  622.         ));
  623.     }
  624.     /**
  625.      * @Route({"/action-login"}, name="actionLoginMember")
  626.      */
  627.     public function actionLoginMember(Request $request)
  628.     {
  629.         if ($request->request->get('mobile_vcode') !== null && $request->request->get('vcode') !== null) {
  630.             $db $this->getDoctrine()->getManager();
  631.             $info['mobile'] = $this->encryption->encrypt($request->request->get('mobile_vcode'));
  632.             $info['vcode'] = $request->request->get('vcode');
  633.             $member = new ModelMember($db$request);
  634.             if ($member->login($info)) {
  635.                 $session $request->getSession();
  636.                 unset($member);
  637.                 return $this->redirectToRoute('memberHomeView', array('token' => $session->get('token')));
  638.             } else {
  639.                 unset($member);
  640.                 return $this->redirectToRoute('LoginView');
  641.             }
  642.         } else {
  643.             return $this->redirectToRoute('LoginView');
  644.         }
  645.     }
  646.     /**
  647.      * @Route({
  648.      *  "gr": "/home",
  649.      *  "en": "/home"
  650.      * }, name="memberHomeView")
  651.      */
  652.     public function memberHomeView(Request $request) {
  653.         $session $request->getSession();
  654.         if ($session->get('member_id') !== null) {
  655.             $this->islogged true;
  656.             unset($session);
  657.             return $this->render('common/dashboard.twig', array(
  658.                 'points_url' => $this->router->generate('memberPointsView', array('_locale' => $this->locale)),
  659.                 'header' => $this->get('twig')->render('common/header.html.twig', array(
  660.                     'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  661.                     'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  662.                     'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  663.                     'islogged' => false,
  664.                     'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  665.                     'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  666.                     'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  667.                     'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  668.                     'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  669.                     'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  670.                     'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  671.                     'assets' => $this->assets,
  672.                 )),
  673.                 'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  674.             ));
  675.         } else {
  676.             unset($session);
  677.             return $this->redirectToRoute('LoginView');
  678.         }
  679.     }
  680.     /**
  681.      * @Route({
  682.      *  "gr": "/mypoints",
  683.      *  "en": "/mypoints"
  684.      * }, name="memberPointsView")
  685.      */
  686.     public function memberPointsView(Request $request)
  687.     {
  688.         $session $request->getSession();
  689.         if ($session->get('member_id') !== null) {
  690.             $this->islogged true;
  691.             unset($session);
  692.             return $this->render('common/points.twig', array(
  693.                 'header' => $this->get('twig')->render('common/header.html.twig', array(
  694.                     'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  695.                     'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  696.                     'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  697.                     'islogged' => false,
  698.                     'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  699.                     'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  700.                     'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  701.                     'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  702.                     'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  703.                     'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  704.                     'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  705.                     'assets' => $this->assets,
  706.                 )),
  707.                 'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  708.             ));
  709.         } else {
  710.             unset($session);
  711.             return $this->redirectToRoute('LoginView');
  712.         }
  713.     }
  714.     /**
  715.      * @Route({"en": "/delete-member-account", "gr": "/delete-member-account"}, name="DeleteMemberAccount")
  716.      */
  717.     public function DeleteMemberAccount(Request $request)
  718.     {
  719.         $info['success'] = false;
  720.         if ($request->request->get('accept_delete') == '1') {
  721.             $db $this->getDoctrine()->getManager();
  722.             $member = new ModelMember($db$request);
  723.             if ($member->DeleteMember($member->getid())) {
  724.                 $member->logout();
  725.                 $info['success'] = true;
  726.             }
  727.             unset($member);
  728.         }
  729.         return new Response(json_encode($info));
  730.     }
  731.     /**
  732.      * @Route({"en": "/MemberLogout", "gr": "/MemberLogout"}, name="MemberLogout")
  733.      */
  734.     public function MemberLogout(Request $request)
  735.     {
  736.         $db $this->getDoctrine()->getManager();
  737.         $member = new ModelMember($db$request);
  738.         if ($member->logout()) {
  739.             unset($member);
  740.             return $this->render('common/logout.twig', array(
  741.                 'lbl_session_end' => $this->translator->trans('common.lbl_session_end'),
  742.                 'lbl_login' => $this->translator->trans('common.login'),
  743.                 'login_url' => $this->router->generate('LoginView', array('_locale' => $this->locale)),
  744.                 'header' => $this->get('twig')->render('common/header.html.twig', array(
  745.                     'gr_lang_url' => $this->router->generate('language', array('lang' => 'gr''route' => $request->get('_route'))),
  746.                     'en_lang_url' => $this->router->generate('language', array('lang' => 'en''route' => $request->get('_route'))),
  747.                     'logout_url' => $this->router->generate('MemberLogout', array('_locale' => $this->locale)),
  748.                     'islogged' => false,
  749.                     'login_url' => $this->router->generate('actionLoginMember', array('_locale' => $this->locale)),
  750.                     'request_sms_url' => $this->router->generate('getVcodeWithSms', array('_locale' => $this->locale)),
  751.                     'checkmobile_url' => $this->router->generate('checkMobile', array('_locale' => $this->locale)),
  752.                     'error_mobile_number' => $this->translator->trans('error.error_mobile_number'),
  753.                     'vcode_exists' => $this->translator->trans('error.vcode_exists'),
  754.                     'lbl_popup_vcode_title' => $this->translator->trans('common.lbl_popup_vcode_title'),
  755.                     'lbl_popup_vcode_info' => $this->translator->trans('common.lbl_popup_vcode_info'),
  756.                     'assets' => $this->assets,
  757.                 )),
  758.                 'footer' => $this->get('twig')->render('common/footer.html.twig', array()),
  759.             ));
  760.         }
  761.     }
  762.     /**
  763.      * @Route({"en": "/actionSearchMembers", "gr": "/actionSearchMembers"}, name="actionSearchMembers")
  764.      */
  765.     public function actionSearchMembers() {
  766.     }
  767.     /**
  768.      * @Route({"en": "/actionUpdateComments", "gr": "/actionUpdateComments"}, name="actionUpdateComments")
  769.      */
  770.     public function actionUpdateComments(Request $request) {
  771.         $db $this->getDoctrine()->getManager();
  772.         $info = array();
  773.         $result['exists'] = false;
  774.         if ($request->request->get('comments') != null) {
  775.             $info['comments'] = $request->request->get('comments');
  776.             $info['memberid'] = $request->request->get('memberid');
  777.             $member = new ModelMember($db$request);
  778.             if ($member->updateMemberComments($info)) {
  779.                 $result['exists'] = true;
  780.             }
  781.             unset($member);
  782.         }
  783.         return new Response(json_encode($result));
  784.     }
  785.     /**
  786.      * @Route({"en": "/checkMobile", "gr": "/checkMobile"}, name="checkMobile")
  787.      */
  788.     public function checkMobile(Request $request)
  789.     {
  790.         $result['exists'] = false;
  791.         if ($request->request->get('mobile') !== null) {
  792.             $db $this->getDoctrine()->getManager();
  793.             $member = new ModelMember($db$request);
  794.             $exists $member->checkMobileExists($this->encryption->encrypt($request->request->get('mobile')));
  795.             if ($exists) {
  796.                 $result['exists'] = true;
  797.             }
  798.             return new Response(json_encode($result));
  799.         }
  800.     }
  801.     /**
  802.      * @Route({"en": "/getAllMembers", "gr": "/getAllMembers"}, name="getAllMembers")
  803.      */
  804.     public function getAllMembers(Request $request)
  805.     {
  806.         $members = array();
  807.         $db $this->getDoctrine()->getManager();
  808.         $session $request->getSession();
  809.         $token $session->get('token');
  810.         unset($session);
  811.         $member = new ModelMember($db$request);
  812.         $members['data'] = $member->getListMembers();
  813.         foreach ($members['data'] as &$m) {
  814.             $m['url'] = $this->router->generate('AdminMemberProfileView', array('_locale' => $this->locale,'token' => $token,'mid' => $m['member_id']));
  815.             $m['email'] = $this->encryption->decrypt($m['email']);
  816.             $m['mobile'] = $this->encryption->decrypt($m['mobile']);
  817.         }
  818.         unset($member);
  819.         $members['meta'] = array("page" => 1,
  820.                         "pages"=> 1,
  821.                         "perpage"=> -1,
  822.                         "total"=> count($members['data']),
  823.                         "sort"=> "asc",
  824.                         "field"=> "member_id"
  825.                         );
  826.         return new Response(json_encode($members));
  827.     }
  828.     /**
  829.      * @Route({"en": "/getMembersWithCriteria", "gr": "/getMembersWithCriteria"}, name="getMembersWithCriteria")
  830.      */
  831.     public function getMembersWithCriteria(Request $request)
  832.     {
  833.         $members = array();
  834.         $filter  =array();
  835.         $db $this->getDoctrine()->getManager();
  836.         if ($request->request->get('lname') != null && !empty($request->request->get('lname'))) {
  837.             $filter['lname'] = trim($request->request->get('lname'));
  838.         }
  839.         if ($request->request->get('fname') != null && !empty($request->request->get('fname'))) {
  840.             $filter['fname'] = trim($request->request->get('fname'));
  841.         }
  842.         if ($request->request->get('mobile') != null && !empty($request->request->get('mobile'))) {
  843.             $filter['mobile'] = $this->encryption->encrypt(trim($request->request->get('mobile')));
  844.         }
  845.         if ($request->request->get('email') != null && !empty($request->request->get('email'))) {
  846.             $filter['email'] = $this->encryption->encrypt(trim($request->request->get('email')));
  847.         }
  848.         if ($request->request->get('shops') != null && !empty($request->request->get('shops')) && $request->request->get('shops') != '0') {
  849.             $filter['shops'] = trim($request->request->get('shops'));
  850.         }
  851.         if ($request->request->get('sorting') != null && !empty($request->request->get('sorting'))) {
  852.             $filter['sorting'] = $request->request->get('sorting');
  853.         }
  854.         if ($request->request->get('ordering') != null && !empty($request->request->get('ordering'))) {
  855.             $filter['ordering'] = $request->request->get('ordering');
  856.         }
  857.         if ($request->request->get('datefrom') != null && !empty($request->request->get('datefrom'))) {
  858.             $date explode('/',trim($request->request->get('datefrom')));
  859.             $day $date[0];
  860.             $month $date[1];
  861.             $year $date[2];
  862.             $datefrom $year '-'  $month '-' $day;
  863.             $filter['datefrom'] = $datefrom;
  864.         }
  865.         if ($request->request->get('dateto') != null && !empty($request->request->get('dateto'))) {
  866.             $date explode('/',trim($request->request->get('dateto')));
  867.             $day $date[0];
  868.             $month $date[1];
  869.             $year $date[2];
  870.             $dateto $year '-'  $month '-' $day;
  871.             $filter['dateto'] = $dateto;
  872.         }
  873.         $member = new ModelMember($db$request);
  874.         $members $member->getListMembers($filter);
  875.         unset($member);
  876.         $session $request->getSession();
  877.         $token $session->get('token');
  878.         unset($session);
  879.         foreach ($members as &$m) {
  880.             $m['url'] = $this->router->generate('AdminMemberProfileView', array('_locale' => $this->locale,'token' => $token,'mid' => $m['member_id']));
  881.             $m['email'] = $this->encryption->decrypt($m['email']);
  882.             $m['mobile'] = $this->encryption->decrypt($m['mobile']);
  883.         }
  884.         return new Response(json_encode($members));
  885.     }
  886.     /**
  887.      * @Route({
  888.     "gr": "/loyadmin/members-summαry",
  889.      *  "en": "/loyadmin/members-summary"
  890.      * }, name="MembersDashboardView")
  891.      */
  892.     public function MembersDashboardView(Request $request)
  893.     {
  894.         return $this->render('admin/members_dashboard.html.twig', array(
  895.             'assets' => $this->assets,
  896.         ));
  897.     }
  898. }
  899. ?>