Rev 6388 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Controller;use Laminas\Db\Adapter\AdapterInterface;use LeadersLinked\Cache\CacheInterface;use Laminas\Mvc\Controller\AbstractActionController;use Laminas\Log\LoggerInterface;use Laminas\View\Model\ViewModel;use Laminas\View\Model\JsonModel;use LeadersLinked\Mapper\NotificationMapper;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Mapper\UserProfileMapper;use LeadersLinked\Library\Functions;use LeadersLinked\Mapper\ConnectionMapper;use LeadersLinked\Mapper\LocationMapper;use LeadersLinked\Mapper\ProfileVisitMapper;class NotificationController extends AbstractActionController{/**** @var AdapterInterface*/private $adapter;/**** @var CacheInterface*/private $cache;/**** @var LoggerInterface*/private $logger;/**** @var array*/private $config;/**** @param AdapterInterface $adapter* @param CacheInterface $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(){$request = $this->getRequest();if ($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$userMapper = UserMapper::getInstance($this->adapter);$user = $userMapper->fetchOne($currentUser->id);$userProfileMapper = UserProfileMapper::getInstance($this->adapter);$userProfile = $userProfileMapper->fetchOnePublicByUserId($currentUser->id);$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) {$notificationMapper = NotificationMapper::getInstance($this->adapter);$now = $notificationMapper->getDatebaseNow();$records = $notificationMapper->fetchAllByUserId($currentUser->id);$items = [];foreach ($records as $record) {/*if($record->read == Notification::NO) {$notificationMapper->markAsReadById($record->id);}*/array_push($items, ['message' => $record->message,'link' => $record->url,'link_delete' => $this->url()->fromRoute('notifications/delete', ['id' => $record->uuid]),'time_elapsed' => Functions::timeAgo($record->added_on, $now),'time' => $record->added_on]);}usort($items, function ($a, $b) {if ($a['time'] == $b['time']) {return 0;} else {return $a['time'] < $b['time'] ? -1 : 1;}});$response = ['success' => true,'data' => $items];} else {if ($user->location_id) {$locationMapper = LocationMapper::getInstance($this->adapter);$location = $locationMapper->fetchOne($user->location_id);$country = $location->country;} else {$country = '';}$profileVisitMapper = ProfileVisitMapper::getInstance($this->adapter);$visits = $profileVisitMapper->getTotalByVisitedId($currentUser->id);$connectionMapper = ConnectionMapper::getInstance($this->adapter);$connections = $connectionMapper->fetchTotalConnectionByUser($currentUser->id);$this->layout()->setTemplate('layout/layout.phtml');$viewModel = new ViewModel();$viewModel->setVariables(['image' => $this->url()->fromRoute('storage', ['type' => 'user', 'code' => $user->uuid, 'filename' => $user->image]),'fullname' => trim($user->first_name . ' ' . $user->last_name),'description' => empty($userProfile->description) ? '' : trim($userProfile->description),'country' => $country,'visits' => $visits,'connections' => $connections,'uuid' => $user->uuid,]);$viewModel->setTemplate('leaders-linked/notifications/index.phtml');return $viewModel;}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}public function unreadsAction(){$request = $this->getRequest();if ($request->isGet()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$notificationMapper = NotificationMapper::getInstance($this->adapter);$now = $notificationMapper->getDatebaseNow();$records = $notificationMapper->fetchAllsUnreadByUserId($currentUser->id);$items = [];foreach ($records as $record) {array_push($items, ['message' => $record->message,'link' => $record->url,'link_mark_read' => $this->url()->fromRoute('notifications/mark-read', ['id' => $record->uuid]),'link_delete' => $this->url()->fromRoute('notifications/delete', ['id' => $record->uuid]),'time_elapsed' => Functions::timeAgo($record->added_on, $now),'time' => $record->added_on]);}usort($items, function ($a, $b) {if ($a['time'] == $b['time']) {return 0;} else {return $a['time'] < $b['time'] ? -1 : 1;}});$total = $notificationMapper->fetchUnreadNotificationsCount($currentUser->id);$response = ['success' => true,'data' => ['notifications' => $items,'total' => $total,],];} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}public function markAllReadAction(){$request = $this->getRequest();if ($request->isPost()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$notificationMapper = NotificationMapper::getInstance($this->adapter);$result = $notificationMapper->markAllAsReadByUserId($currentUser->id);if ($result) {$this->logger->info('Se marco como leidas todas las notificaciones de usuario: ' . $currentUser->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$response = ['success' => true,'data' => 'LABEL_RECORD_UPDATED'];} else {$response = ['success' => false,'data' => $notificationMapper->getError()];}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}public function markReadAction(){$request = $this->getRequest();if ($request->isPost()) {$uuid = $this->params()->fromRoute('id');$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$notificationMapper = NotificationMapper::getInstance($this->adapter);$notification = $notificationMapper->fetchOneByUuid($uuid);if (!$notification) {$response = ['success' => false,'data' => 'ERROR_NOTIFICATION_NOT_FOUND'];return new JsonModel($response);}if ($currentUser->id != $notification->user_id) {$response = ['success' => false,'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_NOTIFICATION'];return new JsonModel($response);}$result = $notificationMapper->markAsReadById($notification->id);if ($result) {$this->logger->info('Se marco una notificación del usuario: ' . $currentUser->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$response = ['success' => true,'data' => 'LABEL_RECORD_UPDATED'];} else {$response = ['success' => false,'data' => $notificationMapper->getError()];}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}public function deleteAction(){$request = $this->getRequest();if ($request->isPost()) {$uuid = $this->params()->fromRoute('id');$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$notificationMapper = NotificationMapper::getInstance($this->adapter);$notification = $notificationMapper->fetchOneByUuid($uuid);if (!$notification) {$response = ['success' => false,'data' => 'ERROR_NOTIFICATION_NOT_FOUND'];return new JsonModel($response);}if ($currentUser->id != $notification->user_id) {$response = ['success' => false,'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS_TO_THIS_NOTIFICATION'];return new JsonModel($response);}$result = $notificationMapper->deleteById($notification->id);if ($result) {$this->logger->info('Se borro una notificación del usuario: ' . $currentUser->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$response = ['success' => true,'data' => 'LABEL_RECORD_DELETED'];} else {$response = ['success' => false,'data' => $notificationMapper->getError()];}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}public function clearAction(){$request = $this->getRequest();if ($request->isPost()) {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$notificationMapper = NotificationMapper::getInstance($this->adapter);$result = $notificationMapper->deleteAllByUserId($currentUser->id);if ($result) {$this->logger->info('Se borraron todas las notificaciones del usuario: ' . $currentUser->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$response = ['success' => true,'data' => 'LABEL_RECORD_DELETED'];} else {$response = ['success' => false,'data' => $notificationMapper->getError()];}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}}