Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3639 | Rev 6849 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php
/**
 * 
 * Controlador: Mis Perfiles 
 * 
 */
declare(strict_types=1);

namespace LeadersLinked\Controller;

use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\ViewModel;
use Laminas\View\Model\JsonModel;

use LeadersLinked\Library\Functions;
use LeadersLinked\Hydrator\ObjectPropertyHydrator;

use LeadersLinked\Library\Image;
use LeadersLinked\Form\MyGroups\CreateForm;
use LeadersLinked\Model\Group;
use LeadersLinked\Mapper\GroupMapper;
use LeadersLinked\Form\MyGroup\AccessibilityForm;
use LeadersLinked\Form\MyGroup\CoverForm;
use LeadersLinked\Form\MyGroup\ExtendedForm;
use LeadersLinked\Form\MyGroup\GroupTypeForm;
use LeadersLinked\Form\MyGroup\ImageForm;
use LeadersLinked\Form\MyGroup\IndustryForm;
use LeadersLinked\Form\MyGroup\PrivacyForm;
use LeadersLinked\Form\MyGroup\WebsiteForm;
use LeadersLinked\Mapper\IndustryMapper;
use LeadersLinked\Mapper\GroupTypeMapper;
use LeadersLinked\Mapper\GroupMemberMapper;
use LeadersLinked\Mapper\QueryMapper;
use LeadersLinked\Model\GroupMember;

class MyGroupsController extends AbstractActionController
{
    /**
     *
     * @var AdapterInterface
     */
    private $adapter;
    
    
    /**
     *
     * @var AbstractAdapter
     */
    private $cache;
    
    /**
     *
     * @var  LoggerInterface
     */
    private $logger;

    
    /**
     *
     * @var array
     */
    private $config;
    
    /**
     *
     * @param AdapterInterface $adapter
     * @param AbstractAdapter $cache
     * @param LoggerInterface $logger
     * @param array $config
     */
    public function __construct($adapter, $cache , $logger,  $config)
    {
        $this->adapter      = $adapter;
        $this->cache        = $cache;
        $this->logger       = $logger;
        $this->config       = $config;

    }
    
    /**
     * 
     * Generación del listado de perfiles
     * {@inheritDoc}
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
     */
    public function indexAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $request = $this->getRequest();
        if($request->isGet()) {
            
            
            $headers  = $request->getHeaders();
            
            $isJson = false;
            if($headers->has('Accept')) {
                $accept = $headers->get('Accept');
                
                $prioritized = $accept->getPrioritized();
                
                foreach($prioritized as $key => $value) {
                    $raw = trim($value->getRaw());
                    
                    if(!$isJson) {
                        $isJson = strpos($raw, 'json');
                    }
                    
                }
            }
            
            if($isJson) {
                $search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
                
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
                $allowView = $acl->isAllowed($currentUser->usertype_id, 'group/view');
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'group/my-groups/edit');
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'group/my-groups/delete');
                
                
                $queryMapper = QueryMapper::getInstance($this->adapter);
                
                $select = $queryMapper->getSql()->select(GroupMapper::_TABLE);
                $select->columns(['id', 'uuid', 'name', 'privacy',  'image', 'status']);
                $select->where->equalTo('status', Group::STATUS_ACTIVE);
                $select->where->equalTo('network_id', $currentUser->network_id);
                
                if($search) {
                    $select->where->like('name', '%' . $search . '%');
                }
                $select->where->equalTo('user_id', $currentUser->id);
                $select->order('name ASC');
                
                $records = $queryMapper->fetchAll($select);
                
                
                $values = [
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
                ];

                
                $items = [];
                foreach($records as $record)
                {
                    
                    $item = [
                        'name' => $record['name'],
                        'privacy' => $values[$record['privacy']],
                        'image' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $record['uuid'], 'filename' => $record['image'] ]),
                        'link_view' => $allowView ? $this->url()->fromRoute('group/view', ['id' => $record['uuid'] ])  : '',
                        'link_edit' => $allowEdit ? $this->url()->fromRoute('group/my-groups/edit', ['id' => $record['uuid'] ])  : '',
                        'link_delete' => $allowDelete ? $this->url()->fromRoute('group/my-groups/delete', ['id' => $record['uuid'] ]) : '',
                        
                    ];
                    
                    array_push($items, $item);
                }

                
                
                $response = [
                    'success' => true,
                    'data' => $items
                ];
                
                return new JsonModel($response);
                
                
            } else {
                $industries = [];
                $industryMapper = IndustryMapper::getInstance($this->adapter);
                $records = $industryMapper->fetchAllActive();
                foreach($records as $record)
                {
                    $industries[$record->uuid] = $record->name;
                }
                
                $groupTypes = [];
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
                $records = $groupTypeMapper->fetchAllActive();
                foreach($records as $record)
                {
                    $groupTypes[$record->uuid] = $record->name;
                }
                
                $formAdd = new CreateForm($this->adapter);
                
                $this->layout()->setTemplate('layout/layout.phtml');
                $viewModel = new ViewModel();
                $viewModel->setTemplate('leaders-linked/my-groups/index.phtml');
                $viewModel->setVariables([
                    'industries' => $industries,
                    'types' => $groupTypes,
                    'formAdd' => $formAdd
                ]);
                return $viewModel ;
            }
            
        } else {
            return new JsonModel([
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ]);
        }
    }
    
    /**
     * 
     * Agregar un nuevo perfil
     * @return \Laminas\View\Model\JsonModel
     */
    public function addAction()
    {
        $request = $this->getRequest();
        
        
        if($request->isPost()) {
            $form = new  CreateForm($this->adapter);
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                
                
                $currentUserPlugin = $this->plugin('currentUserPlugin');
                $currentUser = $currentUserPlugin->getUser();
                
                $dataPost = (array) $form->getData();

                $industryMapper = IndustryMapper::getInstance($this->adapter);
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
                
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
                $groupType = $groupTypeMapper->fetchOneByUuid($dataPost['type_id']);
                
                
                $group = new Group();
                $group->network_id = $currentUser->network_id;
                $group->name = $dataPost['name'];
                $group->industry_id = $industry->id;
                $group->type_id = $groupType->id;
                $group->user_id = $currentUser->id;
                
                $groupMapper = GroupMapper::getInstance($this->adapter);
                $result = $groupMapper->insert($group );
                
                if($result) {
                    
                    $groupMember = new GroupMember();
                    $groupMember->group_id = $group->id;
                    $groupMember->user_id = $group->user_id;
                    $groupMember->status = GroupMember::STATUS_ACCEPTED;
                    
                    $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
                    $groupMemberMapper->insert($groupMember);
                    
                    
                    $this->logger->info('Se agrego el grupo : ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
                    
                    $data = [
                        'success'   => true,
                        'data'   => 'LABEL_RECORD_ADDED'
                    ];
                } else {
                    $data = [
                        'success'   => false,
                        'data'      => $group->getError()
                    ];
                    
                }
                
                return new JsonModel($data);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
        
        return new JsonModel($data);
    }
    
    /**
     * 
     * Borrar un perfil excepto el público
     * @return \Laminas\View\Model\JsonModel
     */
    public function deleteAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $request = $this->getRequest();
        $id = $this->params()->fromRoute('id');
        
        if(!$id) {
            $data = [
                'success'   => false,
                'data'   => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($data);
        }
        
        
        
        $groupMapper =GroupMapper::getInstance($this->adapter);
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
        if(!$group) {
            $data = [
                'success'   => false,
                'data'   => 'ERROR_RECORD_NOT_FOUND'
            ];
            
            return new JsonModel($data);
        }
        
       
        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }

        
        if($request->isPost()) {
            $result = $groupMapper->delete($group);
            if($result) {
                $this->logger->info('Se borro el grupo : ' .  $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
                
                $data = [
                    'success' => true,
                    'data' => 'LABEL_RECORD_DELETED'
                ];
            } else {
                
                $data = [
                    'success'   => false,
                    'data'      => $groupMapper->getError()
                ];
                
                return new JsonModel($data);
            }
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
        
        return new JsonModel($data);
    }
    
    /**
     * Presenta el perfil con las opciónes de edición de cada sección
     * @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
     */
    public function editAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $flashMessenger = $this->plugin('FlashMessenger');
        
        
        $request = $this->getRequest();
        $id = $this->params()->fromRoute('id');
        
        
        if(!$id) {
            $flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');
            return $this->redirect()->toRoute('dashboard');
        }
        
        
        
        $groupMapper =GroupMapper::getInstance($this->adapter);
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
        if(!$group) {
            $flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
            return $this->redirect()->toRoute('dashboard');
        }
        
    
        if($currentUser->id != $group->user_id) {
            $flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');
            return $this->redirect()->toRoute('dashboard');
        }
        
        
        if($request->isGet()) {
            
            $accessibilities = [
                Group::ACCESSIBILITY_AUTO_JOIN => 'LABEL_AUTO_JOIN',
                Group::ACCESSIBILITY_REQUEST_TO_JOIN => 'LABEL_REQUEST_TO_JOIN',
                Group::ACCESSIBILITY_ADMIN_WILL_ADD => 'LABEL_ADMIN_WILL_ADD',
            ];
            
            $accessibility = $accessibilities[$group->accessibility];
            
            $privacies = [
                Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
                Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
            ];
            
            $privacy = $privacies[$group->privacy];
            
            $industryMapper = IndustryMapper::getInstance($this->adapter);
            $record = $industryMapper->fetchOne($group->industry_id);
            
            $industry = $record->name;
            
            
            $industries = [];
            $records = $industryMapper->fetchAllActive();
            foreach($records as $record)
            {
                $industries[$record->uuid] = $record->name;
            }
            
            
            $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
            $record = $groupTypeMapper->fetchOne($group->type_id);
            
            $group_type = $record->name;
            
            $types = [];
            $records =  $groupTypeMapper->fetchAllActive();
            foreach($records as $record)
            {
                $types[$record->uuid] = $record->name;
            }
            

            
            $formExtended = new ExtendedForm();
            $formAccessibility = new AccessibilityForm();
            $formPrivacy = new PrivacyForm();
            $formType = new GroupTypeForm($this->adapter);
            $formIndustry = new IndustryForm($this->adapter);
            $formImage = new ImageForm($this->config);
            $formCover = new CoverForm($this->config);
            $formWebsite = new WebsiteForm();
            

            $groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
            $total_members = $groupMemberMapper->fetchTotalByGroupId($group->id);
            
            $image_size_cover = $this->config['leaderslinked.image_sizes.group_cover_upload'];
            $image_size_profile = $this->config['leaderslinked.image_sizes.group_image_upload'];
            

            
            $this->layout()->setTemplate('layout/layout.phtml');
            $viewModel = new ViewModel();
            $viewModel->setTemplate('leaders-linked/my-groups/edit.phtml');
            $viewModel->setVariables([
                'total_members'         => $total_members,
                'accessibility'         => $accessibility ,
                'privacy'               => $privacy,
                'industry'              => $industry,
                'group_id'              => $group->id,
                'group_type'            => $group_type,
                'group_uuid'            => $group->uuid,
                'name'                  => trim($group->name),
                'image'                 => $group->image,
                'cover'                 => $group->cover,
                'overview'              => $group->description,
                'website'               => $group->website,
                
                'formAccessibility'     => $formAccessibility,
                'formPrivacy'           => $formPrivacy,
                'formType'              => $formType,
                'formIndustry'          => $formIndustry,
                'formExtended'          => $formExtended,
                'formWebsite'           => $formWebsite,
                'formImage'             => $formImage,
                'formCover'             => $formCover,
                'image_size_cover'      => $image_size_cover,
                'image_size_profile'    => $image_size_profile,
                
                
                'industries'            => $industries,
                'types'                 => $types,
                'privacies'             => $privacies,
                'accessibilities'       => $accessibilities
            ]);
            return $viewModel ;
            
        } else {
            $data = [
                'success' => false,
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
            ];
            
            return new JsonModel($data);
        }
        
        return new JsonModel($data);
    }
    
    
    /**
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
     * @return \Laminas\View\Model\JsonModel
     */
    public function extendedAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $user_group_id = $this->params()->fromRoute('id');
        $groupMapper =GroupMapper::getInstance($this->adapter);
        
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
        if(!$group) {
            $response = [
                'success' => false,
                'data' => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($response);
            
        }
        

        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }
        
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            $data = [
                'success' => true,
                'data' => $group->description,
            ];
            
            return new JsonModel($data);
            
            
        } else if($request->isPost()) {
            
            
            $form = new ExtendedForm();
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                $hydrator = new ObjectPropertyHydrator();
                $hydrator->hydrate($dataPost, $group);
                
                $groupMapper->updateExtended($group);
                
                $this->logger->info('Se actualizo las descripción del grupo : '.  $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
                
                return new JsonModel([
                    'success'   => true,
                    'data' => $group->description,
                ]);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
        }
        
        
        $data = [
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ];
        
        
        return new JsonModel($data);
    }
    
    

    public function imageAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $user_group_id    = $this->params()->fromRoute('id');
        $operation          = $this->params()->fromRoute('operation');
        
        $groupMapper =GroupMapper::getInstance($this->adapter);
        
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
        if(!$group) {
            $response = [
                'success' => false,
                'data' => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($response);
            
        }
        
        
        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }
        
        
        
        $request = $this->getRequest();
        if($request->isPost()) {
            $target_path = $this->config['leaderslinked.fullpath.group'] . DIRECTORY_SEPARATOR . $group->uuid;

            
            if($operation == 'delete') {
                $this->logger->info('Se borro el image del grupo : ' .  $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
                if($group->image) {
                    if(!Image::delete($target_path, $group->image)) {
                        return new JsonModel([
                            'success'   => false,
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                        ]);
                    }
                }
                
                
                $group->image = '';
                if(!$groupMapper->updateImage($group)) {
                    return new JsonModel([
                        'success'   => false,
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                    ]);
                }
                
            } else {
                $form = new ImageForm($this->config);
                $data   = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
                
                $form->setData($data);
                
                if($form->isValid()) {
                    
                    $files = $request->getFiles()->toArray();
                    if(!empty($files['image']['error'])) {
                        
                        return new JsonModel([
                            'success'   => false,
                            'data'   =>  'ERROR_UPLOAD_FILE'
                        ]);
                        
                        
                    }
                    
                    if($group->image) {
                        if(!Image::delete($target_path, $group->image)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }

                    
                    list( $target_width, $target_height ) = explode('x', $this->config['leaderslinked.image_sizes.group_image_size']);
                    $source             = $files['image']['tmp_name'];
                    $target_filename    = 'group-image-' . uniqid() . '.png';
                    $crop_to_dimensions = true;
                    
                    if(!Image::uploadImage($source, $target_path, $target_filename, $target_width, $target_height, $crop_to_dimensions)) {
                        return new JsonModel([
                            'success'   => false,
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                        ]);
                    }
                    
                    $group->image = $target_filename;
                    if(!$groupMapper->updateImage($group)) {
                        return new JsonModel([
                            'success'   => false,
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                        ]);
                    }

                    $this->logger->info('Se actualizo el image del grupo : ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
                    
                } else {
                    $messages = [];
                    $form_messages = (array) $form->getMessages();
                    foreach($form_messages  as $fieldname => $field_messages)
                    {
                        $messages[$fieldname] = array_values($field_messages);
                    }
                    
                    return new JsonModel([
                        'success'   => false,
                        'data'   => $messages
                    ]);
                }
            }
            return new JsonModel([
                'success'   => true,
                'data' => $this->url()->fromRoute('storage', ['type' => 'group', 'code' => $group->uuid, 'filename' => $group->image])
                
            ]);
        }
        
        
        $data = [
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ];
        
        
        return new JsonModel($data);
    }
    

    public function coverAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $user_group_id  = $this->params()->fromRoute('id');
        $operation      = $this->params()->fromRoute('operation');
        
        $groupMapper = GroupMapper::getInstance($this->adapter);
        
        $group = $groupMapper->fetchOneByUuidAndNetworkId($user_group_id, $currentUser->network_id);
        if(!$group) {
            $response = [
                'success' => false,
                'data' => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($response);
            
        }
        

        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }
        
        
        
        $request = $this->getRequest();
        if($request->isPost()) {
            $target_path = $this->config['leaderslinked.fullpath.group'] . DIRECTORY_SEPARATOR . $group->uuid;
            
            
            if($operation == 'delete') {
                if($group->cover) {
                    if(!Image::delete($target_path, $group->cover)) {
                        return new JsonModel([
                            'success'   => false,
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                        ]);
                    }
                }
                
                $this->logger->info('Se borro el cover del grupo : ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
                
                $group->cover = '';
                if(!$groupMapper->updateCover($group)) {
                    return new JsonModel([
                        'success'   => false,
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                    ]);
                }
                
            } else {
                $form = new CoverForm($this->config);
                $data   = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
                
                $form->setData($data);
                
                if($form->isValid()) {
                    
                    $files = $request->getFiles()->toArray();
                    if(!empty($files['cover']['error'])) {
                        
                        return new JsonModel([
                            'success'   => false,
                            'data'   =>  'ERROR_UPLOAD_FILE'
                        ]);
                        
                        
                    }
                    
                    if($group->cover) {
                        if(!Image::delete($target_path, $group->cover)) {
                            return new JsonModel([
                                'success'   => false,
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                            ]);
                        }
                    }

                    list( $target_width, $target_height ) = explode('x', $this->config['leaderslinked.image_sizes.group_cover_size']);
                    $source             = $files['cover']['tmp_name'];
                    $target_filename    = 'group-cover-' . uniqid() . '.png';
                    $crop_to_dimensions = false;
                    
                    if(!Image::uploadImage($source, $target_path, $target_filename, $target_width, $target_height, $crop_to_dimensions)) {
                        return new JsonModel([
                            'success'   => false,
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                        ]);
                    }
                    
                    
                    
                    $group->cover = $target_filename;
                    if(!$groupMapper->updateCover($group)) {
                        return new JsonModel([
                            'success'   => false,
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
                        ]);
                    }
                    
                    $this->logger->info('Se actualizo el cover del grupo :  ' . $group->name, ['user_id' => $group->user_id, 'ip' => Functions::getUserIP()]);
                    
                } else {
                    $messages = [];
                    $form_messages = (array) $form->getMessages();
                    foreach($form_messages  as $fieldname => $field_messages)
                    {
                        $messages[$fieldname] = array_values($field_messages);
                    }
                    
                    return new JsonModel([
                        'success'   => false,
                        'data'   => $messages
                    ]);
                }
            }
            return new JsonModel([
                'success'   => true,
                'data' => $this->url()->fromRoute('storage', ['type' => 'group-cover', 'code' => $group->uuid, 'filename' => $group->cover])
                
            ]);
        }
        
        
        $data = [
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ];
        
        
        return new JsonModel($data);
    }
    
    public function industryAction()
    {
        
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $id = $this->params()->fromRoute('id');
        if(!$id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($response);
        }
        
        $groupMapper = GroupMapper::getInstance($this->adapter);
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
        if(!$group) {
            $response = [
                'success' => false,
                'data' => 'ERROR_RECORD_NOT_FOUND'
            ];
            
            return new JsonModel($response);
        }
        

        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }
        
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            $industryMapper = IndustryMapper::getInstance($this->adapter);
            $industry = $industryMapper->fetchOne($group->industry_id);
            
            
            
            $data = [
                'success' => true,
                'data' => $industry->uuid,
            ];
            
            return new JsonModel($data);
            
            
        } else if($request->isPost()) {
            
            
            $form = new IndustryForm($this->adapter);
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();

                $industryMapper = IndustryMapper::getInstance($this->adapter);
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
                
                $group->industry_id = $industry->id;
                $groupMapper->updateIndustry($group);
                
                $this->logger->info('Se actualizo la industria del grupo : ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                

                
                return new JsonModel([
                    'success'   => true,
                    'data' =>  $industry->name,
                    
                ]);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
        }
        
        
        $data = [
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ];
        
        
        return new JsonModel($data);
    }
    
    public function websiteAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $id = $this->params()->fromRoute('id');
        if(!$id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($response);
        }
        
        $groupMapper = GroupMapper::getInstance($this->adapter);
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
        if(!$group) {
            $response = [
                'success' => false,
                'data' => 'ERROR_RECORD_NOT_FOUND'
            ];
            
            return new JsonModel($response);
        }
        

        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            $data = [
                'success' => true,
                'data' => $group->website,
            ];
            
            return new JsonModel($data);
            
            
        } else if($request->isPost()) {
            
            
            $form = new WebsiteForm();
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                $hydrator = new ObjectPropertyHydrator();
                $hydrator->hydrate($dataPost, $group);
                
                $groupMapper->updateWebsite($group);
                
                $this->logger->info('Se actualizo el website de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                
                return new JsonModel([
                    'success'   => true,
                    'data' => $group->website,
                ]);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
        }
        
        
        $data = [
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ];
        
        
        return new JsonModel($data);
    }
    
    public function accessibilityAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $id = $this->params()->fromRoute('id');
        if(!$id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($response);
        }
        
        $groupMapper = GroupMapper::getInstance($this->adapter);
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
        if(!$group) {
            $response = [
                'success' => false,
                'data' => 'ERROR_RECORD_NOT_FOUND'
            ];
            
            return new JsonModel($response);
        }
        

        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            $data = [
                'success' => true,
                'data' => $group->accessibility,
            ];
            
            return new JsonModel($data);
            
            
        } else if($request->isPost()) {
            
            
            $form = new AccessibilityForm();
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();

                $hydrator = new ObjectPropertyHydrator();
                $hydrator->hydrate($dataPost, $group);
                
                $groupMapper->updateAccessibility($group);
                
                 $values = [
                    Group::ACCESSIBILITY_AUTO_JOIN => 'LABEL_AUTO_JOIN',
                    Group::ACCESSIBILITY_REQUEST_TO_JOIN => 'LABEL_REQUEST_TO_JOIN',
                    Group::ACCESSIBILITY_ADMIN_WILL_ADD => 'LABEL_ADMIN_WILL_ADD',
                ];
                
                $this->logger->info('Se actualizo el accesibilidad de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                
                return new JsonModel([
                    'success'   => true,
                    'data' => $values[$group->accessibility]
                 ]);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
        }
        
        
        $data = [
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ];
        
        
        return new JsonModel($data);
    }
    
    public function privacyAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $id = $this->params()->fromRoute('id');
        if(!$id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($response);
        }
        
        $groupMapper = GroupMapper::getInstance($this->adapter);
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
        if(!$group) {
            $response = [
                'success' => false,
                'data' => 'ERROR_RECORD_NOT_FOUND'
            ];
            
            return new JsonModel($response);
        }

        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            $data = [
                'success' => true,
                'data' => $group->privacy,
            ];
            
            return new JsonModel($data);
            
            
        } else if($request->isPost()) {
            
            
            $form = new PrivacyForm();
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                $hydrator = new ObjectPropertyHydrator();
                $hydrator->hydrate($dataPost, $group);
                
                $groupMapper->updatePrivacy($group);
                
                $values = [
                    Group::PRIVACY_IS_PRIVATE => 'LABEL_PRIVATE',
                    Group::PRIVACY_IS_PUBLIC => 'LABEL_PUBLIC'
                ];
                

                $this->logger->info('Se actualizo la privacidad de la empresa ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                
                return new JsonModel([
                    'success'   => true,
                    'data' => $values[$group->privacy]
                ]);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
        }
        
        
        $data = [
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ];
        
        
        return new JsonModel($data);
    }
    
    
    
    public function typeAction()
    {
        $currentUserPlugin = $this->plugin('currentUserPlugin');
        $currentUser = $currentUserPlugin->getUser();
        
        $id = $this->params()->fromRoute('id');
        if(!$id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_INVALID_PARAMETER'
            ];
            
            return new JsonModel($response);
        }
        
        $groupMapper = GroupMapper::getInstance($this->adapter);
        $group = $groupMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
        if(!$group) {
            $response = [
                'success' => false,
                'data' => 'ERROR_RECORD_NOT_FOUND'
            ];
            
            return new JsonModel($response);
        }
        

        if($currentUser->id != $group->user_id) {
            $response = [
                'success' => false,
                'data' => 'ERROR_UNAUTHORIZED'
            ];
            
            return new JsonModel($response);
        }
        
        
        
        $request = $this->getRequest();
        if($request->isGet()) {
            
            $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
            $groupType = $groupTypeMapper->fetchOne($group->type_id);
            
            $data = [
                'success' => true,
                'data' => $groupType->uuid,
            ];
            
            return new JsonModel($data);
            
            
        } else if($request->isPost()) {
            
            
            $form = new GroupTypeForm($this->adapter);
            $dataPost = $request->getPost()->toArray();
            
            $form->setData($dataPost);
            
            if($form->isValid()) {
                $dataPost = (array) $form->getData();
                
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
                $groupType = $groupTypeMapper->fetchOneByUuid($dataPost['type_id']);
                
                $group->type_id = $groupType->id;
                $groupMapper->updateGroupType($group);
                
                $this->logger->info('Se actualizo el tipo del grupo : ' . $group->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
                
                $groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
                $groupType = $groupTypeMapper->fetchOne($group->type_id);
                
                return new JsonModel([
                    'success'   => true,
                    'data' =>  $groupType->name,
                    
                ]);
                
            } else {
                $messages = [];
                $form_messages = (array) $form->getMessages();
                foreach($form_messages  as $fieldname => $field_messages)
                {
                    $messages[$fieldname] = array_values($field_messages);
                }
                
                return new JsonModel([
                    'success'   => false,
                    'data'   => $messages
                ]);
            }
        }
        
        
        $data = [
            'success' => false,
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
        ];
        
        
        return new JsonModel($data);
    }
    
    
    

    
    
    
}