%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /var/www/html/bbw/farmaci/kritik-portale/module/Backend/src/Backend/Controller/
Upload File :
Create Path :
Current File : /var/www/html/bbw/farmaci/kritik-portale/module/Backend/src/Backend/Controller/UserController.php

<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
 * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */

namespace Backend\Controller;

use Basis\Model\User\UserFactory;
use ReviewPharmacy\Model\PharmacyFactory;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\JsonModel;
use Zend\View\Model\ViewModel;
use ZfcRbac\Service\AuthorizationService;


class UserController extends AbstractBackendController
{
    /**
     *
     * @var AuthorizationService
     */
    protected $authorizationService;
    
    protected $pharmacyFactory;

    /**
     *
     * @param AuthorizationService $authorizationService
     */
    public function __construct(AuthorizationService $authorizationService, PharmacyFactory $pharmacyFactory)
    {
        $this->authorizationService = $authorizationService;
        $this->pharmacyFactory = $pharmacyFactory;
    }

    public function indexAction()
    {
        $model = new ViewModel();
        $model->setTerminal(true);
        return $model;
    }

    public function adduserAction()
    {
        $form = $this->getServiceLocator()->get('FormElementManager')
            ->get('Backend\Form\User');
        
        //new users created from backend should be active right from the start
        $form->get('active')->setValue(1);
        $model = new ViewModel(array("form" => $form, "type" => "anlegen"));
        $model->setTerminal('true');
        return $model;
    }

    public function edituserAction()
    {
        $request = $this->getRequest()->getPost();

        $factory = new \Basis\Model\User\UserFactory($this->getServiceLocator(), $this->getServiceLocator()->get("eventBus"));
        $user = $factory->getUser($request['userid']);

        $form = new \Backend\Form\User();
        $form->setDefaultsByUser($user);
        $form->remove("password");
        $form->remove("passwordVerify");
        $model = new ViewModel(array("form" => $form, "type" => "bearbeiten"));
        $model->setTemplate("backend/user/adduser");
        $model->setTerminal('true');
        return $model;
    }

    public function removeuserAction() {

        $request = $this->getRequest()->getPost();

        $factory = new \Basis\Model\User\UserFactory($this->getServiceLocator(), $this->getServiceLocator()->get("eventBus"));
        $result = $factory->delete($request['userid']);

        $this->flashMessenger()->addSuccessMessage("Benutzer wurde gelöscht!");

        $view = new JsonModel();
        return $view;
    }

    public function formAction()
    {
        $view = new ViewModel();
        $view->setTerminal(true);

        $userId = $this->params("user", null);
        $factory = new \Basis\Model\User\UserFactory($this->getServiceLocator(), $this->getServiceLocator()->get("eventBus"));
        $user = $factory->getUser($userId);
        $pharmacies = [];
        $form = $this->getServiceLocator()->get('FormElementManager')
            ->get('Backend\Form\User');

        if(!is_null($userId)) {
            $form->remove("password");
            $form->remove("passwordVerify");
            $form->getInputFilter()->remove('password');
            $form->getInputFilter()->remove('passwordVerify');
            $form->setDefaultsByUser($user);
            
            //retrieve all pharmacies currently managed by user
            $pharmacies = $this->pharmacyFactory->getRateableObjectsOwnedByUser($userId);

        }

        $view->setVariable("form", $form);
        $view->setVariable("user", $user);
        $view->setVariable("pharmacies", $pharmacies);
        $view->setTemplate("backend/user/adduser");
        return $view;
    }

    public function saveAction()
    {
        $json = new JsonModel();
        $view = new ViewModel();
        $view->setTemplate("backend/user/adduser");
        $viewRender = $this->getServiceLocator()->get('ViewRenderer');
        $sm = $this->getServiceLocator();
        $factory = new \Basis\Model\User\UserFactory($sm, $this->getServiceLocator()->get("eventBus"));
        $viewAdapter = $sm->get('viewsDB');
        $request = $this->getRequest();
        $error = false;
        $pharmacies = [];

        if (!$request->isPost()) {
            $this->redirect()->toUrlRoute('backend');
        }

        $form = $this->getServiceLocator()->get('FormElementManager')
            ->get('Backend\Form\User');

        //remove password fields & validator for editing users
        if($request->getPost('id') !== ""){
            $form->remove("password");
            $form->remove("passwordVerify");
            $form->getInputFilter()->remove('password');
            $form->getInputFilter()->remove('passwordVerify');
            
            //retrieve all pharmacies currently managed by user
            $pharmacies = $this->pharmacyFactory->getRateableObjectsOwnedByUser($request->getPost('id'));
        }

        $user = $factory->getUser($request->getPost('id'));


        $form->setData($request->getPost());
        $view->setVariable("form", $form);
        $view->setVariable("pharmacies", $pharmacies);
        $view->setVariable("user", $user);
        
        //check if email already exists
        $resultSet = new ResultSet(ResultSet::TYPE_ARRAYOBJECT, new \Basis\Entity\UserEntity());
        $userTable = new TableGateway('user', $viewAdapter, null, $resultSet);
        $result = $userTable->select(array("email" => $request->getPost('email')));
        $email = $result->current();

        if($email !== false && $request->getPost('id') !== $email->entityid)
        {
            $elem = $form->get('email');
            $elem->setMessages(array(0 => 'E-Mail Adresse ist bereits vergeben!'));
            $error = true;
        }
        
        //check if username already exists
//        if($factory->newUsernameExists($request->getPost("username"), $request->getPost("id")))
//        {
//            $elem = $form->get("username");
//            $elem->setMessages([0 => "Dieser Benutzername ist bereits vergeben."]);
//            $error = true;
//        }

        //return invalid form
        if (!$form->isValid() || $error) {
            $view->setTerminal('true');
            $view->setVariable("form", $form);
            $this->flashMessenger()->addErrorMessage("Benutzer konnte nicht gespeichert werden!");
            $html = $viewRender->render($view);
            $json->setVariable("html", $html);
            $json->setVariable("error", true);
            return $json;
        }

        try {

            $data = $request->getPost();

            if($request->getPost('id') === ""){
                $user = $factory->createUserFromForm($data);
            } else {
                $user = $factory->editUserFromForm($data);
            }

            if ($user->getVerifyMail() != $user->getEmail() && $user->getVerifyMail() == $data['email'])
            {
                $this->flashMessenger()->addWarningMessage("Sie erhalten in Kürze eine E-Mail von uns an " . $user->getVerifyMail() . " " .
                    "Bitte klicken Sie in der E-Mail auf den Aktivierungs-Link, um " .
                    "Ihre Registrierung abzuschließen und alle Funktionen nutzen zu können. " .
                    "Diese Bestätigung ist notwendig um sicherzustellen, dass die " .
                    "Registrierung von Ihnen stammt und die E-Mail-Adresse korrekt ist.");

                //show old Email as long as the new one is not confirmed
                $elem = $form->get("email");
                $elem->setValue($user->getEmail());
                $view->setVariable("user", $user);
            }


            $this->flashMessenger()->addSuccessMessage("Benutzer erfolgreich gespeichert!");
            $view->setTemplate("backend/user/adduser");
            $view->setVariable('form', $form);
            $html = $viewRender->render($view);
            $json->setVariable("html", $html);
            $json->setVariable("error", false);
            return $json;

        } catch (\Exception $e) {
            //var_dump($e->getMessage()); die;
            $json->setVariable("error", $e->getMessage());
            return $json;
        }
    }

    public function usertableAction()
    {
        //check if email already exists
        $sm = $this->getServiceLocator();
        $resultSet = new ResultSet(ResultSet::TYPE_ARRAYOBJECT, new \Basis\Entity\UserEntity());
        $userTable = new TableGateway('user', $sm->get('viewsDB'), null, $resultSet);

        $model = new ViewModel(array("usertable" => $userTable->select()));
        if ($this->getRequest()->isXmlHttpRequest()) {
            $model->setTerminal(true);
        }
        return $model;
    }

    public function serverProcessingAction()
    {
        // Table
        $table = 'user';

        // Table's primary key
        $primaryKey = 'id';

        // Array of database columns which should be read and sent back to DataTables.
        // The `db` parameter represents the column name in the database, while the `dt`
        // parameter represents the DataTables column identifier - in this case object
        // parameter names
        $columns = array(
            array(
                'db' => 'id',
                'dt' => 'DT_RowId',
                'formatter' => function( $d, $row ) {
                        // Technically a DOM id cannot start with an integer, so we prefix
                        // a string. This can also be useful if you have multiple tables
                        // to ensure that the id is unique with a different prefix
                        return 'user_row_'.$d;
                    },
            ),
            array(
                'db' => 'id',
                'dt' => 'DT_RowClass',
                'formatter' => function( $d, $row ) {
                        return 'edit';
                    },
            ),
            array(
                'db' => 'entityid',
                'dt' => 'DT_RowData',
                'formatter' => function( $d, $row ) {
                        return array("data-entityid" => $d);
                        //return "data-entityid=".$d;
                    },
            ),
            array( 'db' => 'id', 'dt' => 'id', 'formatter' => function( $d, $row ) { return utf8_encode($d);} ),
            array( 'db' => 'name', 'dt' => 'name', 'formatter' => function( $d, $row ) { return utf8_encode($d);} ),
            array( 'db' => 'surname',  'dt' => 'surname', 'formatter' => function( $d, $row ) { return utf8_encode($d);} ),
//            array( 'db' => 'username',  'dt' => 'username', 'formatter' => function( $d, $row ) { return utf8_encode($d);} ),
            array( 'db' => 'email',   'dt' => 'email', 'formatter' => function( $d, $row ) { return utf8_encode($d);} ),
            array( 'db' => 'role',     'dt' => 'role', 'formatter' => 
                function( $d, $row ) {
                    switch($d){
                        case "admin": $value = "Administrator";
                            break;
                        case "owner": $value = "Apotheker";
                            break;
                        case "user": $value = "Nutzer";
                            break;
                        default: $value = '';
                        break;
                    }
                    return utf8_encode($value);
                }),
            array( 'db' => 'phone',     'dt' => 'phone', 'formatter' => function( $d, $row ) { return utf8_encode($d);}),
            array( 'db' => 'title',     'dt' => 'title', 'formatter' => function( $d, $row ) { return utf8_encode($d);}),
            array( 'db' => 'salutation',     'dt' => 'salutation', 'formatter' => function( $d, $row ) { return utf8_encode($d);}),
            array( 'db' => 'newsletter',     'dt' => 'newsletter', 'formatter' => function( $d, $row ) {
                $value = (!is_null($d) && $d > 0) ? "ja" : "nein";
                return utf8_encode($value);
            }),
            array( 'db' => 'active',     'dt' => 'active', 'formatter' => function( $d, $row ) {
                $value = (!is_null($d) && $d > 0) ? "ja" : "nein";
                return utf8_encode($value);
            }));

        $sm = $this->getServiceLocator();
        /* @var $viewAdapter \Zend\Db\Adapter\Adapter */
        $viewAdapter = $sm->get('viewsDB');
        $config = $sm->get('config');

        $dsn = explode(";", $config['db']['adapters']['viewsDB']['dsn']);

        foreach($dsn as $item){
            if(preg_match("/host=/", $item))
            {
                $host = explode("=", $dsn[1]);
            }
        }

        $sql_details = array(
            'user' => $config['db']['adapters']['viewsDB']['username'],
            'pass' => $config['db']['adapters']['viewsDB']['password'],
            'db'   => $viewAdapter->getCurrentSchema(),
            'host' => $host[1]
        );

        /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         * If you just want to use the basic configuration for DataTables with PHP
         * server-side, there is no need to edit below this line.
         */

        require_once './module/datatables/serverside/ssp.class.php';

    //    $old_error = error_reporting();
    //    error_reporting(0);

        $request = $_POST;

        $request['search']['value'] = utf8_decode($request['search']['value']);

        $json = \SSP::simple( $request, $sql_details, $table, $primaryKey, $columns );

        return new JsonModel($json);
    }
}

Zerion Mini Shell 1.0