Rev 15623 | 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\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\Model\DiscoveryContact;
use LeadersLinked\Mapper\DiscoveryContactMapper;
use LeadersLinked\Form\DiscoveryContact\ContactForm;
use LeadersLinked\Model\DiscoveryContactLog;
use LeadersLinked\Mapper\DiscoveryContactLogMapper;
use LeadersLinked\Form\DiscoveryContact\InteractionForm;
class DiscoveryContactController 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 = $this->params()->fromQuery('search');
$search = empty($search) ? '' : filter_var($search, FILTER_SANITIZE_STRING);
$page = intval($this->params()->fromQuery('start', 1), 10);
$records_x_page = intval($this->params()->fromQuery('length', 10), 10);
$order = $this->params()->fromQuery('order', []);
$order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
$order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
$fields = ['first_name', 'last_name', 'corporate_email'];
$order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
if(!in_array($order_direction, ['ASC', 'DESC'])) {
$order_direction = 'ASC';
}
$discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);
$paginator = $discoveryContactMapper->fetchAllDataTableForCompanyId($search, $currentCompany->id, $page, $records_x_page, $order_field, $order_direction);
$items = [];
$records = $paginator->getCurrentItems();
foreach($records as $record)
{
$item = [
'first_name' => $record->first_name,
'last_name' => $record->last_name,
'corporate_email' => $record->corporate_email,
'actions' => [
'link_edit' => $this->url()->fromRoute('discovery-contacts/edit', ['id' => $record->uuid ]),
'link_delete' => $this->url()->fromRoute('discovery-contacts/delete', ['id' => $record->uuid ]),
'link_view' => $this->url()->fromRoute('discovery-contacts/view', ['id' => $record->uuid ]),
],
];
array_push($items, $item);
}
return new JsonModel([
'success' => true,
'data' => [
'items' => $items,
'total' => $paginator->getTotalItemCount(),
]
]);
} else {
$exclude_id = 0;
$form = new ContactForm($this->adapter, $currentCompany->id, $exclude_id);
$formInteraction = new InteractionForm($this->adapter, $currentCompany->id);
$this->layout()->setTemplate('layout/layout-backend');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/discovery-contacts/index.phtml');
$viewModel->setVariables([
'form' => $form,
'formInteraction' => $formInteraction
]);
return $viewModel ;
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);;
}
}
public function addAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$request = $this->getRequest();
if($request->isPost()) {
$exclude_id = 0;
$form = new ContactForm($this->adapter, $currentCompany->id, $exclude_id);
$dataPost = $request->getPost()->toArray();
$form->setData($dataPost);
if($form->isValid()) {
$dataPost = (array) $form->getData();
$hydrator = new ObjectPropertyHydrator();
$discoveryContact = new DiscoveryContact();
$hydrator->hydrate($dataPost, $discoveryContact);
$discoveryContact->company_id = $currentCompany->id;
$discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);
$result = $discoveryContactMapper->insert($discoveryContact);
if($result) {
$this->logger->info('Se agrego el Contacto : ' . $discoveryContact->first_name . ' ' . $discoveryContact->last_name , ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
$discoveryContactLog = new DiscoveryContactLog();
$discoveryContactLog->company_id = $currentCompany->id;
$discoveryContactLog->contact_id = $discoveryContact->id;
$discoveryContactLog->user_id = $currentUser->id;
$discoveryContactLog->activity = 'LABEL_RECORD_CONTACT_ADDED';
$discoveryContactLog->details = 'LABEL_FIRST_NAME : ' . $discoveryContact->first_name . PHP_EOL.
'LABEL_LAST_NAME : ' . $discoveryContact->last_name . PHP_EOL.
'LABEL_CORPORATE_EMAIL : ' . $discoveryContact->corporate_email . PHP_EOL.
'LABEL_COMPANY : ' . $discoveryContact->company . PHP_EOL.
'LABEL_POSITION : ' . $discoveryContact->position . PHP_EOL.
'LABEL_COUNTRY : ' . $discoveryContact->country . PHP_EOL;
if($discoveryContact->state) {
$discoveryContactLog->details .= 'LABEL_STATE : ' . $discoveryContact->state . PHP_EOL;
}
if($discoveryContact->city) {
$discoveryContactLog->details .= 'LABEL_CITY : ' . $discoveryContact->city . PHP_EOL;
}
if($discoveryContact->phone) {
$discoveryContactLog->details .= 'LABEL_PHONE : ' . $discoveryContact->phone . PHP_EOL;
}
if($discoveryContact->phone_extension) {
$discoveryContactLog->details .= 'LABEL_PHONE_EXTENSION : ' . $discoveryContact->phone_extension . PHP_EOL;
}
if($discoveryContact->personal_email) {
$discoveryContactLog->details .= 'LABEL_PERSONAL_EMAIL : ' . $discoveryContact->personal_email . PHP_EOL;
}
if($discoveryContact->celular) {
$discoveryContactLog->details .= 'LABEL_CELULAR : ' . $discoveryContact->celular . PHP_EOL;
}
if($discoveryContact->whatsapp) {
$discoveryContactLog->details .= 'LABEL_WHATSAPP : ' . $discoveryContact->whatsapp . PHP_EOL;
}
if($discoveryContact->linkedin) {
$discoveryContactLog->details .= 'LABEL_LINKEDIN : ' . $discoveryContact->linkedin . PHP_EOL;
}
$discoveryContactLogMapper = DiscoveryContactLogMapper::getInstance($this->adapter);
$discoveryContactLogMapper->insert($discoveryContactLog);
$data = [
'success' => true,
'data' => 'LABEL_RECORD_ADDED'
];
} else {
$data = [
'success' => false,
'data' => $discoveryContactMapper->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 editAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$request = $this->getRequest();
$uuid = $this->params()->fromRoute('id');
if(!$uuid) {
$data = [
'success' => false,
'data' => 'ERROR_INVALID_PARAMETER'
];
return new JsonModel($data);
}
$discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);
$discoveryContact = $discoveryContactMapper->fetchOneByUuid($uuid);
if(!$discoveryContact) {
$data = [
'success' => false,
'data' => 'ERROR_RECORD_NOT_FOUND'
];
return new JsonModel($data);
}
$discoveryContactOld = clone $discoveryContact;
if($request->isPost()) {
$form = new ContactForm($this->adapter, $currentCompany->id, $discoveryContact->id);
$dataPost = $request->getPost()->toArray();
$form->setData($dataPost);
if($form->isValid()) {
$dataPost = (array) $form->getData();
$hydrator = new ObjectPropertyHydrator();
$hydrator->hydrate($dataPost, $discoveryContact);
$result = $discoveryContactMapper->update($discoveryContact);
if($result) {
$this->logger->info('Se actualizo el Contacto ' . $discoveryContact->first_name . ' ' . $discoveryContact->last_name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
$discoveryContactLog = new DiscoveryContactLog();
$discoveryContactLog->company_id = $currentCompany->id;
$discoveryContactLog->contact_id = $discoveryContact->id;
$discoveryContactLog->user_id = $currentUser->id;
$discoveryContactLog->activity = 'LABEL_RECORD_CONTACT_UPDATED';
$discoveryContactLog->details = '';
if($discoveryContactOld->first_name != $discoveryContact->first_name) {
$discoveryContactLog->details .= 'LABEL_FIRST_NAME : ' . $discoveryContactOld->first_name . ' / ' . $discoveryContact->first_name . PHP_EOL;
}
if($discoveryContactOld->last_name != $discoveryContact->last_name ) {
$discoveryContactLog->details .= 'LABEL_LAST_NAME : ' . $discoveryContactOld->last_name . ' / ' . $discoveryContact->last_name . PHP_EOL;
}
if($discoveryContactOld->corporate_email != $discoveryContact->corporate_email) {
$discoveryContactLog->details .= 'LABEL_CORPORATE_EMAIL : ' . $discoveryContactOld->corporate_email . ' / ' . $discoveryContact->corporate_email . PHP_EOL ;
}
if($discoveryContactOld->company != $discoveryContact->company) {
$discoveryContactLog->details .= 'LABEL_COMPANY : ' . $discoveryContactOld->company . ' / ' . $discoveryContact->company . PHP_EOL ;
}
if($discoveryContactOld->position != $discoveryContact->position) {
$discoveryContactLog->details .= 'LABEL_POSITION : ' . $discoveryContactOld->position . ' / ' . $discoveryContact->position . PHP_EOL;
}
if($discoveryContactOld->country != $discoveryContact->country) {
$discoveryContactLog->details .= 'LABEL_COUNTRY : ' . $discoveryContactOld->country . ' / ' . $discoveryContact->country . PHP_EOL;
}
if($discoveryContactOld->state != $discoveryContact->state) {
$discoveryContactLog->details .= 'LABEL_STATE : ' . $discoveryContactOld->state . ' / ' . $discoveryContact->state . PHP_EOL;
}
if($discoveryContactOld->city != $discoveryContact->city) {
$discoveryContactLog->details .= 'LABEL_CITY : ' . $discoveryContactOld->city . ' / ' . $discoveryContact->city . PHP_EOL;
}
if($discoveryContactOld->phone != $discoveryContact->phone) {
$discoveryContactLog->details .= 'LABEL_PHONE : ' . $discoveryContactOld->phone . ' / ' . $discoveryContact->phone . PHP_EOL;
}
if($discoveryContactOld->phone_extension != $discoveryContact->phone_extension ) {
$discoveryContactLog->details .= 'LABEL_PHONE_EXTENSION : ' . $discoveryContactOld->phone_extension . ' / ' . $discoveryContact->phone_extension . PHP_EOL;
}
if($discoveryContactOld->personal_email != $discoveryContact->personal_email ) {
$discoveryContactLog->details .= 'LABEL_PERSONAL_EMAIL : ' . $discoveryContactOld->personal_email . ' / ' . $discoveryContact->personal_email . PHP_EOL;
}
if($discoveryContactOld->celular != $discoveryContact->celular) {
$discoveryContactLog->details .= 'LABEL_CELULAR : ' . $discoveryContactOld->celular . ' / ' . $discoveryContact->celular . PHP_EOL;
}
if($discoveryContactOld->whatsapp != $discoveryContact->whatsapp ) {
$discoveryContactLog->details .= 'LABEL_WHATSAPP : ' . $discoveryContactOld->whatsapp . ' / ' . $discoveryContact->whatsapp . PHP_EOL;
}
if($discoveryContactOld->linkedin != $discoveryContact->linkedin) {
$discoveryContactLog->details .= 'LABEL_LINKEDIN : ' . $discoveryContactOld->linkedin . ' / ' . $discoveryContact->linkedin . PHP_EOL;
}
$discoveryContactLogMapper = DiscoveryContactLogMapper::getInstance($this->adapter);
$discoveryContactLogMapper->insert($discoveryContactLog);
$data = [
'success' => true,
'data' => 'LABEL_RECORD_UPDATED'
];
} else {
$data = [
'success' => false,
'data' => $discoveryContactMapper->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 if ($request->isGet()) {
$hydrator = new ObjectPropertyHydrator();
$data = $hydrator->extract($discoveryContact);
$data['first_name'] = $data['first_name'] ? trim($data['first_name']) : '';
$data['last_name'] = $data['last_name'] ? trim($data['last_name']) : '';
$data['corporate_email'] = $data['corporate_email'] ? trim($data['corporate_email']) : '';
$data['company'] = $data['company'] ? trim($data['company']) : '';
$data['position'] = $data['position'] ? trim($data['position']) : '';
$data['country'] = $data['country'] ? trim($data['country']) : '';
$data['state'] = $data['state'] ? trim($data['state']) : '';
$data['city'] = $data['city'] ? trim($data['city']) : '';
$data['phone'] = $data['phone'] ? trim($data['phone']) : '';
$data['phone_extension'] = $data['phone_extension'] ? trim($data['phone_extension']) : '';
$data['personal_email'] = $data['personal_email'] ? trim($data['personal_email']) : '';
$data['celular'] = $data['celular'] ? trim($data['celular']) : '';
$data['whatsapp'] = $data['whatsapp'] ? trim($data['whatsapp']) : '';
$data['linkedin'] = $data['linkedin'] ? trim($data['linkedin']) : '';
$result = [
'success' => true,
'data' => $data
];
return new JsonModel($result);
} else {
$data = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
return new JsonModel($data);
}
return new JsonModel($data);
}
public function deleteAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$request = $this->getRequest();
$uuid = $this->params()->fromRoute('id');
if(!$uuid) {
$data = [
'success' => false,
'data' => 'ERROR_INVALID_PARAMETER'
];
return new JsonModel($data);
}
$discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);
$discoveryContact = $discoveryContactMapper->fetchOneByUuid($uuid);
if(!$discoveryContact) {
$data = [
'success' => false,
'data' => 'ERROR_RECORD_NOT_FOUND'
];
return new JsonModel($data);
}
if($request->isPost()) {
$result = $discoveryContactMapper->delete($discoveryContact);
if($result) {
$this->logger->info('Se borro el Contacto : ' . $discoveryContact->first_name . ' ' . $discoveryContact->last_name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
$data = [
'success' => true,
'data' => 'LABEL_RECORD_DELETED'
];
} else {
$data = [
'success' => false,
'data' => $discoveryContactMapper->getError()
];
return new JsonModel($data);
}
} else {
$data = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
return new JsonModel($data);
}
return new JsonModel($data);
}
public function viewAction()
{
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$request = $this->getRequest();
$uuid = $this->params()->fromRoute('id');
if(!$uuid) {
$data = [
'success' => false,
'data' => 'ERROR_INVALID_PARAMETER'
];
return new JsonModel($data);
}
$discoveryContactMapper = DiscoveryContactMapper::getInstance($this->adapter);
$discoveryContact = $discoveryContactMapper->fetchOneByUuid($uuid);
if(!$discoveryContact) {
$data = [
'success' => false,
'data' => 'ERROR_RECORD_NOT_FOUND'
];
return new JsonModel($data);
}
if ($request->isGet()) {
$hydrator = new ObjectPropertyHydrator();
$data = $hydrator->extract($discoveryContact);
$data['first_name'] = $data['first_name'] ? trim($data['first_name']) : '';
$data['last_name'] = $data['last_name'] ? trim($data['last_name']) : '';
$data['corporate_email'] = $data['corporate_email'] ? trim($data['corporate_email']) : '';
$data['company'] = $data['company'] ? trim($data['company']) : '';
$data['position'] = $data['position'] ? trim($data['position']) : '';
$data['country'] = $data['country'] ? trim($data['country']) : '';
$data['state'] = $data['state'] ? trim($data['state']) : '';
$data['city'] = $data['city'] ? trim($data['city']) : '';
$data['phone'] = $data['phone'] ? trim($data['phone']) : '';
$data['phone_extension'] = $data['phone_extension'] ? trim($data['phone_extension']) : '';
$data['personal_email'] = $data['personal_email'] ? trim($data['personal_email']) : '';
$data['celular'] = $data['celular'] ? trim($data['celular']) : '';
$data['whatsapp'] = $data['whatsapp'] ? trim($data['whatsapp']) : '';
$data['linkedin'] = $data['linkedin'] ? trim($data['linkedin']) : '';
$data['link_interactions'] = $this->url()->fromRoute('discovery-contacts/interactions', ['id' => $discoveryContact->uuid]);
$data['link_interactions_add'] = $this->url()->fromRoute('discovery-contacts/interactions/add', ['id' => $discoveryContact->uuid]);
$data['link_logs'] = $this->url()->fromRoute('discovery-contacts/logs', ['id' => $discoveryContact->uuid]);
$result = [
'success' => true,
'data' => $data
];
return new JsonModel($result);
} else {
$data = [
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
];
return new JsonModel($data);
}
return new JsonModel($data);
}
}