Rev 669 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php
declare(strict_types=1);
namespace LeadersLinked\Controller;
use Laminas\Db\Adapter\AdapterInterface;
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\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;
use LeadersLinked\Library\Storage;
class MyGroupsController extends AbstractActionController
{
/**
*
* @var \Laminas\Db\Adapter\AdapterInterface
*/
private $adapter;
/**
*
* @var \LeadersLinked\Cache\CacheInterface
*/
private $cache;
/**
*
* @var \Laminas\Log\LoggerInterface
*/
private $logger;
/**
*
* @var array
*/
private $config;
/**
*
* @var \Laminas\Mvc\I18n\Translator
*/
private $translator;
/**
*
* @param \Laminas\Db\Adapter\AdapterInterface $adapter
* @param \LeadersLinked\Cache\CacheInterface $cache
* @param \Laminas\Log\LoggerInterface LoggerInterface $logger
* @param array $config
* @param \Laminas\Mvc\I18n\Translator $translator
*/
public function __construct($adapter, $cache, $logger, $config, $translator)
{
$this->adapter = $adapter;
$this->cache = $cache;
$this->logger = $logger;
$this->config = $config;
$this->translator = $translator;
}
/**
*
* 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()) {
$search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
$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', 'cover']);
$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'
];
$storage = Storage::getInstance($this->config, $this->adapter);
$items = [];
foreach ($records as $record) {
$item = [
'name' => $record['name'],
'privacy' => $values[$record['privacy']],
'image' => $storage->getGroupImageForCodeAndFilename($record['uuid'], $record['image']),
'cover' => $storage->getGroupImageForCodeAndFilename($record['uuid'], $record['cover']),
'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 {
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);
$recordUuid = $record->uuid;
$group_type = $record->name;
$types = [];
$records = $groupTypeMapper->fetchAllActive();
foreach ($records as $record) {
$types[$record->uuid] = $record->name;
}
$groupMemberMapper = GroupMemberMapper::getInstance($this->adapter);
$total_ = $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'];
$storage = Storage::getInstance($this->config, $this->adapter);
return new JsonModel([
'total_' => $total_,
'accessibility' => $accessibility,
'privacy' => $privacy,
'industry' => $industry,
'group_id' => $group->id,
'group_type' => $group_type,
'group_uuid' => $group->uuid,
'name' => trim($group->name),
'image' => $storage->getGroupImage($group),
'cover' => $storage->getGroupCover($group),
'overview' => $group->description,
'website' => $group->website,
'image_size_cover' => $image_size_cover,
'image_size_profile' => $image_size_profile,
'industries' => $industries,
'types' => $types,
'privacies' => $privacies,
'accessibilities' => $accessibilities,
/* 'link_members' => $this->url()->fromRoute('group/my-groups/members', ['id' => $record['uuid']]),
'link_extended' => $this->url()->fromRoute('group/my-groups/extended', ['id' => $recordUuid]),
'link_image' => $this->url()->fromRoute('group/my-groups/image', ['id' => $recordUuid]),
'link_cover' => $this->url()->fromRoute('group/my-groups/cover', ['id' => $recordUuid]),
'link_privacy' => $this->url()->fromRoute('group/my-groups/privacy', ['id' => $recordUuid]),
'link_website' => $this->url()->fromRoute('group/my-groups/website', ['id' => $recordUuid]),
'link_industry' => $this->url()->fromRoute('group/my-groups/industry', ['id' => $recordUuid]),
'link_accessibility' => $this->url()->fromRoute('group/my-groups/accessibility', ['id' => $recordUuid]),
'link_type' => $this->url()->fromRoute('group/my-groups/type', ['id' => $recordUuid]),
'link_status' => $this->url()->fromRoute('group/my-groups/status', ['id' => $recordUuid]), */
]);
} 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');
$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);
}
$storage = Storage::getInstance($this->config, $this->adapter);
$request = $this->getRequest();
if ($request->isPost()) {
$operation = $this->params()->fromRoute('operation');
$target_path = $storage->getPathGroup();
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 (!$storage->deleteFile($target_path, $group->uuid, $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()) {
list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.group_image_size']);
$storage->setFiles($request->getFiles()->toArray());
if (!$storage->setCurrentFilename('image')) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UPLOAD_FILE'
]);
}
$source_filename = $storage->getTmpFilename();
$filename = 'group-image-' . uniqid() . '.png';
$target_filename = $storage->composePathToFilename(Storage::TYPE_GROUP, $group->uuid, $filename);
if ($storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
if ($group->image) {
$target_path = $storage->getPathGroup();
$storage->deleteFile($target_path, $group->uuid, $group->image);
}
$group->image = $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' => $storage->getGroupImage($group),
]);
}
$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');
$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()) {
$operation = $this->params()->fromRoute('operation');
$storage = Storage::getInstance($this->config, $this->adapter);
$target_path = $storage->getPathGroup();
if ($operation == 'delete') {
if ($group->cover) {
if (!$storage->deleteFile($target_path, $group->uuid, $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()) {
$storage->setFiles($request->getFiles()->toArray());
if (!$storage->setCurrentFilename('cover')) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UPLOAD_FILE'
]);
}
list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.group_cover_size']);
$source_filename = $storage->getTmpFilename();
$filename = 'group-cover-' . uniqid() . '.png';
$target_filename = $storage->composePathToFilename(Storage::TYPE_GROUP, $group->uuid, $filename);
if ($storage->uploadImageCrop($source_filename, $target_filename, $target_width, $target_height)) {
if ($group->cover) {
if (!$storage->deleteFile($target_path, $group->uuid, $group->cover)) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_THERE_WAS_AN_ERROR'
]);
}
}
$group->cover = $filename;
if (!$groupMapper->updateCover($group)) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_THERE_WAS_AN_ERROR'
]);
}
} else {
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
]);
}
}
$storage = Storage::getInstance($this->config, $this->adapter);
return new JsonModel([
'success' => true,
'data' => $storage->getGroupCover($group),
]);
}
$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);
}
}