Rev 4481 | AutorÃa | Ultima modificación | Ver Log |
<?php
declare(strict_types=1);
namespace LeadersLinked\Controller;
use Laminas\Authentication\AuthenticationService;
use Laminas\Authentication\Result as AuthResult;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\I18n\Translator;
use Laminas\Log\LoggerInterface;
use Laminas\View\Model\ViewModel;
use Laminas\View\Model\JsonModel;
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
use LeadersLinked\Library\Functions;
use LeadersLinked\Mapper\IndustryMapper;
use LeadersLinked\Mapper\GroupTypeMapper;
use LeadersLinked\Mapper\GroupMemberMapper;
use LeadersLinked\Mapper\QueryMapper;
use LeadersLinked\Mapper\GroupMapper;
use LeadersLinked\Model\GroupMember;
use LeadersLinked\Model\Group;
use LeadersLinked\Form\ExtendedForm;
use LeadersLinked\Form\Group\AccessibilityForm;
use LeadersLinked\Form\Group\CoverForm;
use LeadersLinked\Form\Group\GroupTypeForm;
use LeadersLinked\Form\Group\ImageForm;
use LeadersLinked\Form\Group\IndustryForm;
use LeadersLinked\Form\Group\PrivacyForm;
use LeadersLinked\Form\Group\WebsiteForm;
use LeadersLinked\Form\HighPerformanceTeamsMyGroupsForm;
class HighPerformanceTeamsMyGroupsController 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;
}
public function indexAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$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, 'high-performance-teams/my-groups/view');
$allowEdit = $acl->isAllowed($currentUser->usertype_id, 'high-performance-teams/my-groups/edit');
$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'high-performance-teams/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);
if($search) {
$select->where->like('name', '%' . $search . '%');
}
$select->where->equalTo('user_id', $currentUser->id)->equalTo('company_id', $currentCompany->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('high-performance-teams/my-groups/edit', ['id' => $record['uuid'] ]) : '',
'link_delete' => $allowDelete ? $this->url()->fromRoute('high-performance-teams/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->fetchAllActives();
foreach($records as $record)
{
$industries[$record->uuid] = $record->name;
}
$groupTypes = [];
$groupTypeMapper = GroupTypeMapper::getInstance($this->adapter);
$records = $groupTypeMapper->fetchAllActives();
foreach($records as $record)
{
$groupTypes[$record->uuid] = $record->name;
}
$formAdd = new HighPerformanceTeamsMyGroupsForm($this->adapter);
$this->layout()->setTemplate('layout/layout-backend');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/high-performance-teams-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'
]);
}
}
public function addAction()
{
$request = $this->getRequest();
if($request->isPost()) {
$form = new HighPerformanceTeamsMyGroupsForm($this->adapter);
$dataPost = $request->getPost()->toArray();
$form->setData($dataPost);
if($form->isValid()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$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->name = $dataPost['name'];
$group->industry_id = $industry->id;
$group->type_id = $groupType->id;
$group->user_id = $currentUser->id;
$group->company_id = $currentCompany->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()]);
return new JsonModel([
'success' => true,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
$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);
}
public function deleteAction()
{
$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->fetchOneByUuid($id);
if(!$group) {
$data = [
'success' => false,
'data' => 'ERROR_RECORD_NOT_FOUND'
];
return new JsonModel($data);
}
$currentUser = $this->plugin('currentUserPlugin');
if($currentUser->getUserId() != $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);
}
public function editAction()
{
$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->fetchOneByUuid($id);
if(!$group) {
$flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
return $this->redirect()->toRoute('dashboard');
}
$currentUser = $this->plugin('currentUserPlugin');
if($currentUser->getUserId() != $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->fetchAllActives();
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->fetchAllActives();
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/high-performance-teams-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);
}
}