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);
}
}