Rev 6749 | 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\Mapper\QueryMapper;
use LeadersLinked\Mapper\CompanyMapper;
use LeadersLinked\Mapper\CompanyMicrolearningTopicMapper;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
use LeadersLinked\Model\CompanyMicrolearningCapsule;
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
use LeadersLinked\Model\CompanyMicrolearningUser;
class MarketPlaceController 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()
{
$request = $this->getRequest();
if($request->isGet()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$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) {
$companyMicrolearningCapsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$search = trim(filter_var($this->params()->fromQuery('search', ''), FILTER_SANITIZE_STRING));
$queryMapper = QueryMapper::getInstance($this->adapter);
$select = $queryMapper->getSql()->select();
$select->columns(['id', 'uuid', 'name', 'status', 'image', 'order', 'privacy', 'type', 'marketplace']);
$select->from(['c' => CompanyMicrolearningCapsuleMapper::_TABLE]);
$select->join(['t' => CompanyMicrolearningTopicMapper::_TABLE], ' c.topic_id = t.id ', ['topic_uuid' => 'uuid']);
$select->join(['o' => CompanyMapper::_TABLE], ' c.company_id = o.id ', ['company_uuid' => 'uuid']);
$select->where->equalTo('c.privacy', CompanyMicrolearningCapsule::PRIVACY_PUBLIC);
$select->where->equalTo('c.type', CompanyMicrolearningCapsule::TYPE_FREE);
$select->where->equalTo('c.status', CompanyMicrolearningCapsule::STATUS_ACTIVE);
if($search) {
$select->where->like('c.name', '%' . $search . '%');
}
$select->order(['name ASC']);
//echo $select->getSqlString($this->adapter->platform); exit;
$records = $queryMapper->fetchAll($select);
$items = [];
foreach($records as $record)
{
$capsuleUser = $companyMicrolearningCapsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $record['id']);
$params = [
'company_id' => $record['company_uuid'],
'topic_id' => $record['topic_uuid'],
'capsule_id' => $record['uuid']
];
$item = [
'name' => $record['name'],
'image' => $this->url()->fromRoute('storage', ['type' => 'microlearning-capsule', 'code' => $record['uuid'], 'filename' => $record['marketplace']]),
'status' => $capsuleUser ? 'LABEL_ENROLLED' : 'LABEL_AVAILABLE',
'link_enroll' => $capsuleUser ? '' : $this->url()->fromRoute('marketplace/enroll', $params),
];
array_push($items, $item);
}
$response = [
'success' => true,
'data' => $items
];
return new JsonModel($response);
} else {
$this->layout()->setTemplate('layout/layout.phtml');
$viewModel = new ViewModel();
$viewModel->setTemplate('leaders-linked/marketplace/index.phtml');
return $viewModel ;
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}
public function enrollAction()
{
$request = $this->getRequest();
if($request->isPost()) {
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$company_id = $this->params()->fromRoute('company_id');
$topic_id = $this->params()->fromRoute('topic_id');
$capsule_id = $this->params()->fromRoute('capsule_id');
$companyMapper = CompanyMapper::getInstance($this->adapter);
$company = $companyMapper->fetchOneByUuid($company_id);
if(!$company) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_COMPANY_NOT_FOUND'
]);
}
$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
$topic = $topicMapper->fetchOneByUuid($topic_id);
if(!$topic) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_TOPIC_NOT_FOUND'
]);
}
if($topic->company_id != $company->id) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
$capsule = $capsuleMapper->fetchOneByUuid($capsule_id);
if(!$capsule) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_CAPSULE_NOT_FOUND'
]);
}
if($capsule->topic_id != $topic->id) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
if($capsule->status != CompanyMicrolearningCapsule::STATUS_ACTIVE
|| $capsule->privacy != CompanyMicrolearningCapsule::PRIVACY_PUBLIC
|| $capsule->type != CompanyMicrolearningCapsule::TYPE_FREE) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($currentUser->id, $capsule->id);
if($capsuleUser) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
$capsuleUser = new CompanyMicrolearningCapsuleUser();
$capsuleUser->company_id = $company->id;
$capsuleUser->topic_id = $topic->id;
$capsuleUser->capsule_id = $capsule->id;
$capsuleUser->user_id = $currentUser->id;
$capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
if($capsuleUserMapper->insert($capsuleUser)) {
$capsuleUser = $capsuleUserMapper->fetchOne($capsule->id);
if($capsuleUser) {
$companyMicrolearningUserMapper = CompanyMicrolearningUserMapper::getInstance($this->adapter);
$companyMicrolearningUser = $companyMicrolearningUserMapper->fetchOneByUserIdAndCompanyId($capsuleUser->user_id, $capsuleUser->company_id);
if($companyMicrolearningUser) {
$companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
$companyMicrolearningUserMapper->update($companyMicrolearningUser);
} else {
$companyMicrolearningUser = new CompanyMicrolearningUser();
$companyMicrolearningUser->company_id = $capsuleUser->company_id;
$companyMicrolearningUser->user_id = $capsuleUser->user_id;
$companyMicrolearningUser->added_on = $capsuleUser->added_on;
$companyMicrolearningUser->updated_on = $capsuleUser->updated_on;
$companyMicrolearningUserMapper->insert($companyMicrolearningUser);
}
}
return new JsonModel([
'success' => true,
'data' => 'LABEL_YOU_HAVE_BEEN_SUCCESSFULLY_ENROLLED'
]);
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}
public function getCategoriesAction()
{
return new JsonModel([
'success' => true,
'data' => [
'capsules' => 'Cápsulas'
]
]);
}
}