Rev 16768 | 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\CompanyMicrolearningTopicMapper;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleMapper;
use LeadersLinked\Form\TopicCapsuleForm;
use LeadersLinked\Form\PushMicrolearningNotificationForm;
use LeadersLinked\Mapper\QueryMapper;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleUserMapper;
use LeadersLinked\Mapper\UserMapper;
use Laminas\Hydrator\ArraySerializableHydrator;
use Laminas\Db\ResultSet\HydratingResultSet;
use Laminas\Paginator\Adapter\DbSelect;
use Laminas\Paginator\Paginator;
use LeadersLinked\Model\CompanyMicrolearningCapsuleUser;
use LeadersLinked\Mapper\ApplicationMapper;
use LeadersLinked\Mapper\PushMapper;
use LeadersLinked\Mapper\PushTemplateMapper;
use LeadersLinked\Mapper\DeviceHistoryMapper;
use LeadersLinked\Model\Push;
use LeadersLinked\Model\Application;
use LeadersLinked\Form\CapsuleCustomerUploadForm;
use PhpOffice\PhpSpreadsheet\IOFactory;
use LeadersLinked\Model\User;
use LeadersLinked\Model\UserType;
use LeadersLinked\Model\UserPassword;
use LeadersLinked\Mapper\CompanyMicrolearningUserMapper;
use LeadersLinked\Mapper\UserPasswordMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserCompanyMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserFunctionMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserGroupMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserInstitutionMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserProgramMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserPartnerMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserSectorMapper;
use LeadersLinked\Mapper\CompanyMicrolearningExtendUserStudentTypeMapper;
use LeadersLinked\Model\CompanyMicrolearningExtendUser;
use LeadersLinked\Model\CompanyMicrolearningExtendUserCompany;
use LeadersLinked\Model\CompanyMicrolearningExtendUserFunction;
use LeadersLinked\Model\CompanyMicrolearningExtendUserGroup;
use LeadersLinked\Model\CompanyMicrolearningExtendUserInstitution;
use LeadersLinked\Model\CompanyMicrolearningExtendUserProgram;
use LeadersLinked\Model\CompanyMicrolearningExtendUserPartner;
use LeadersLinked\Model\CompanyMicrolearningExtendUserSector;
use LeadersLinked\Model\CompanyMicrolearningExtendUserStudentType;
use LeadersLinked\Model\CompanyMicrolearningUser;
use LeadersLinked\Mapper\CompanyMicrolearningCapsuleCommentMapper;
class MicrolearningAccessForStudentsController 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 revokeAction()
{
$request = $this->getRequest();
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$request = $this->getRequest();
$topic_uuid = $this->params()->fromRoute('topic_uuid');
$capsule_uuid = $this->params()->fromRoute('capsule_uuid');
$user_uuid = $this->params()->fromRoute('user_uuid');
$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
$topic = $topicMapper->fetchOneByUuid($topic_uuid);
if(!$topic) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_TOPIC_NOT_FOUND'
]);
}
if($topic->company_id != $currentCompany->id) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
$capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
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'
]);
}
$userMapper = UserMapper::getInstance($this->adapter);
$user = $userMapper->fetchOneByUuid($user_uuid);
if(!$user) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_USER_NOT_FOUND'
]);
}
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
if(!$capsuleUser) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
if($request->isPost()) {
if($capsuleUser->access != CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_USER_ACCESS_CANNT_BE_REVOKE'
]);
}
$capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_REVOKE;
if($capsuleUserMapper->update($capsuleUser)) {
$capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->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_USER_ACCESS_HAS_BEEN_REVOKE'
]);
} else {
return new JsonModel([
'success' => false,
'data' => $capsuleUserMapper->getError()
]);
}
}
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
public function unlimitAction()
{
$request = $this->getRequest();
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$request = $this->getRequest();
$topic_uuid = $this->params()->fromRoute('topic_uuid');
$capsule_uuid = $this->params()->fromRoute('capsule_uuid');
$user_uuid = $this->params()->fromRoute('user_uuid');
$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
$topic = $topicMapper->fetchOneByUuid($topic_uuid);
if(!$topic) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_TOPIC_NOT_FOUND'
]);
}
if($topic->company_id != $currentCompany->id) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
$capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
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'
]);
}
$userMapper = UserMapper::getInstance($this->adapter);
$user = $userMapper->fetchOneByUuid($user_uuid);
if(!$user) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_USER_NOT_FOUND'
]);
}
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
if(!$capsuleUser) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
if($request->isPost()) {
if($capsuleUser->access != CompanyMicrolearningCapsuleUser::ACCESS_REVOKE) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_USER_ACCESS_CANNT_BE_UNLIMIT'
]);
}
$capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
if($capsuleUserMapper->update($capsuleUser)) {
$capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->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_USER_ACCESS_HAS_BEEN_UNLIMITED'
]);
} else {
return new JsonModel([
'success' => false,
'data' => $capsuleUserMapper->getError()
]);
}
}
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
public function uploadAction()
{
$request = $this->getRequest();
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$request = $this->getRequest();
$topic_uuid = $this->params()->fromRoute('topic_uuid');
$capsule_uuid = $this->params()->fromRoute('capsule_uuid');
$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
$topic = $topicMapper->fetchOneByUuid($topic_uuid);
if(!$topic) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_TOPIC_NOT_FOUND'
]);
}
if($topic->company_id != $currentCompany->id) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
$capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
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($request->isPost()) {
$step = filter_var( $this->params()->fromPost('step'), FILTER_SANITIZE_STRING);
if($step == 'validation') {
$userMapper = UserMapper::getInstance($this->adapter);
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$form = new CapsuleCustomerUploadForm();
$dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
$form->setData($dataPost);
if($form->isValid()) {
$file = $_FILES['file'];
$tmp_filename = $file['tmp_name'];
$final_filename = 'data/' . $file['name'];
if(!move_uploaded_file($tmp_filename, $final_filename)) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UPLOAD_FILE'
]);
}
$users = [];
$spreadsheet = IOFactory::load($final_filename);
$records = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
$emails = [];
foreach($records as $record)
{
//A = Nombre B = Apellidos C = Email D = contraseña
$email = trim(filter_var($record['C'], FILTER_SANITIZE_EMAIL));
$first_name = trim(filter_var($record['A'], FILTER_SANITIZE_STRING));
$last_name = trim(filter_var($record['B'], FILTER_SANITIZE_STRING));
$password = trim(filter_var($record['D'], FILTER_SANITIZE_STRING));
$filterCompany = isset($record['E']) ? trim(filter_var($record['E'], FILTER_SANITIZE_STRING)) : '';
$filterFunction = isset($record['F']) ? trim(filter_var($record['F'], FILTER_SANITIZE_STRING)) : '';
$filterGroup = isset($record['G']) ? trim(filter_var($record['G'], FILTER_SANITIZE_STRING)) : '';
$filterInstitution = isset($record['H']) ? trim(filter_var($record['H'], FILTER_SANITIZE_STRING)) : '';
$filterProgram = isset($record['I']) ? trim(filter_var($record['I'], FILTER_SANITIZE_STRING)) : '';
$filterPartner = isset($record['J']) ? trim(filter_var($record['J'], FILTER_SANITIZE_STRING)) : '';
$filterSector = isset($record['K']) ? trim(filter_var($record['K'], FILTER_SANITIZE_STRING)) : '';
$filterStudentType = isset($record['L']) ? trim(filter_var($record['L'], FILTER_SANITIZE_STRING)) : '';
//|| empty($password)
if(empty($first_name) || empty($last_name) || !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
continue;
}
if(!in_array($email, $emails)) {
$user = $userMapper->fetchOneByEmail($email);
if($user) {
$assigned_capsules = $capsuleUserMapper->fetchCountByCompanyIdAndTopicIdAndUserId($topic->company_id, $topic->id, $user->id);
} else {
$assigned_capsules = 0;
}
array_push($emails, $email);
array_push($users, [
'first_name' => $first_name,
'last_name' => $last_name,
'password' => $password,
'email' => $email,
'assigned_capsules' => $assigned_capsules,
'filterCompany' => $filterCompany,
'filterFunction' => $filterFunction,
'filterGroup' => $filterGroup,
'filterInstitution' => $filterInstitution,
'filterProgram' => $filterProgram,
'filterPartner' => $filterPartner,
'filterSector' => $filterSector,
'filterStudentType' => $filterStudentType
]);
}
}
$key = md5($currentUser->id . '-' . $topic->uuid . '-' . $capsule->uuid);
$this->cache->setItem($key, serialize($users));
return new JsonModel([
'success' => true,
'data' => [
'key' => $key,
'topic' => $topic->name,
'capsule' => $capsule->name,
'items' => $users,
]
]);
} 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($step == 'process') {
$key = filter_var( $this->params()->fromPost('key'), FILTER_SANITIZE_STRING);
if(!$key) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_CACHE_KEY_EMPTY'
]);
}
$value = $this->cache->getItem($key);
if(!$value) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_CACHE_NOT_FOUND'
]);
}
$records = unserialize($value);
if(!$records) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_CACHE_INVALID'
]);
}
$userMapper = UserMapper::getInstance($this->adapter);
$userPasswordMapper = UserPasswordMapper::getInstance($this->adapter);
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserMapper = CompanyMicrolearningExtendUserMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserCompanyMapper = CompanyMicrolearningExtendUserCompanyMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserFunctionMapper = CompanyMicrolearningExtendUserFunctionMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserGroupMapper = CompanyMicrolearningExtendUserGroupMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserInstitutionMapper = CompanyMicrolearningExtendUserInstitutionMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserProgramMapper = CompanyMicrolearningExtendUserProgramMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserPartnerMapper = CompanyMicrolearningExtendUserPartnerMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserSectorMapper = CompanyMicrolearningExtendUserSectorMapper::getInstance($this->adapter);
$companyMicrolearningExtendUserStudentTypeMapper = CompanyMicrolearningExtendUserStudentTypeMapper::getInstance($this->adapter);
$users_assigned = 0;
$user_ids = [];
foreach($records as $record)
{
$first_name = $record['first_name'];
$last_name = $record['last_name'];
$password = $record['password'];
$email = $record['email'];
$filterCompany = $record['filterCompany'];
$filterFunction = $record['filterFunction'];
$filterGroup = $record['filterGroup'];
$filterInstitution = $record['filterInstitution'];
$filterProgram = $record['filterProgram'];
$filterPartner = $record['filterPartner'];
$filterSector = $record['filterSector'];
$filterStudentType = $record['filterStudentType'];
$user = $userMapper->fetchOneByEmail($email);
if(!$user) {
if($password) {
$password_hash = password_hash($password, PASSWORD_DEFAULT);
$user = new User();
$user->blocked = User::BLOCKED_NO;
$user->email_verified = User::EMAIL_VERIFIED_YES;
$user->email = $email;
$user->first_name = $first_name;
$user->last_name = $last_name;
$user->password = $password_hash;
$user->login_attempt = 0;
$user->usertype_id = UserType::USER;
$user->status = User::STATUS_ACTIVE;
$result = $userMapper->insert($user);
if($result) {
$userPassword = new UserPassword();
$userPassword->user_id = $user->id;
$userPassword->password = $password_hash;
$userPasswordMapper->insert($userPassword);
} else {
continue;
}
}
} else {
if($user->email_verified == User::EMAIL_VERIFIED_NO || $user->status != User::STATUS_ACTIVE) {
$user->email_verified = User::EMAIL_VERIFIED_YES;
$user->status != User::STATUS_ACTIVE;
if(!$userMapper->update($user)) {
continue;
}
}
}
if(!in_array($user->id, $user_ids)) {
array_push($user_ids, $user->id);
}
/*
echo '$filterCompany = ' . $filterCompany . PHP_EOL;
echo '$filterFunctio = ' . $filterFunction . PHP_EOL;
echo '$filterGroup = ' . $filterGroup . PHP_EOL;
echo '$filterInstitution = ' . $filterInstitution . PHP_EOL;
echo '$filterPartner = ' . $filterPartner . PHP_EOL;
echo '$filterProgram = ' . $filterProgram . PHP_EOL;
echo '$filterSector = ' . $filterSector . PHP_EOL;
echo '$filterStudentType = ' . $filterStudentType . PHP_EOL;
*/
$extendUser = $companyMicrolearningExtendUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $user->id);
if(!$extendUser) {
$extendUser = new CompanyMicrolearningExtendUser();
$extendUser->company_id = $currentCompany->id;
$extendUser->user_id = $user->id;
}
if($filterCompany) {
$record = $companyMicrolearningExtendUserCompanyMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterCompany);
if(!$record) {
$record = new CompanyMicrolearningExtendUserCompany();
$record->company_id = $currentCompany->id;
$record->name = $filterCompany;
$companyMicrolearningExtendUserCompanyMapper->insert($record);
}
if($record->id) {
$extendUser->extend_company_id = $record->id;
}
}
if($filterFunction) {
$record = $companyMicrolearningExtendUserFunctionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterFunction);
if(!$record) {
$record = new CompanyMicrolearningExtendUserFunction();
$record->company_id = $currentCompany->id;
$record->name = $filterFunction;
$companyMicrolearningExtendUserFunctionMapper->insert($record);
}
if($record->id) {
$extendUser->extend_function_id = $record->id;
}
}
if($filterGroup) {
$record = $companyMicrolearningExtendUserGroupMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterGroup);
if(!$record) {
$record = new CompanyMicrolearningExtendUserGroup();
$record->company_id = $currentCompany->id;
$record->name = $filterGroup;
$companyMicrolearningExtendUserGroupMapper->insert($record);
}
if($record->id) {
$extendUser->extend_group_id = $record->id;
}
}
if($filterInstitution) {
$record = $companyMicrolearningExtendUserInstitutionMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterInstitution);
if(!$record) {
$record = new CompanyMicrolearningExtendUserInstitution();
$record->company_id = $currentCompany->id;
$record->name = $filterInstitution;
$companyMicrolearningExtendUserInstitutionMapper->insert($record);
}
if($record->id) {
$extendUser->extend_institution_id = $record->id;
}
}
if($filterProgram) {
$record = $companyMicrolearningExtendUserProgramMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterProgram);
if(!$record) {
$record = new CompanyMicrolearningExtendUserProgram();
$record->company_id = $currentCompany->id;
$record->name = $filterProgram;
$companyMicrolearningExtendUserProgramMapper->insert($record);
}
if($record->id) {
$extendUser->extend_program_id = $record->id;
}
}
if($filterPartner) {
$record = $companyMicrolearningExtendUserPartnerMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterPartner);
if(!$record) {
$record = new CompanyMicrolearningExtendUserPartner();
$record->company_id = $currentCompany->id;
$record->name = $filterPartner;
$companyMicrolearningExtendUserPartnerMapper->insert($record);
}
if($record->id) {
$extendUser->extend_partner_id = $record->id;
}
}
if($filterSector) {
$record = $companyMicrolearningExtendUserSectorMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterSector);
if(!$record) {
$record = new CompanyMicrolearningExtendUserSector();
$record->company_id = $currentCompany->id;
$record->name = $filterSector;
$companyMicrolearningExtendUserSectorMapper->insert($record);
}
if($record->id) {
$extendUser->extend_sector_id = $record->id;
}
}
if($filterStudentType) {
$record = $companyMicrolearningExtendUserStudentTypeMapper->fetchOneByCompanyIdAndName($currentCompany->id, $filterStudentType);
if(!$record) {
$record = new CompanyMicrolearningExtendUserStudentType();
$record->company_id = $currentCompany->id;
$record->name = $filterStudentType;
$companyMicrolearningExtendUserStudentTypeMapper->insert($record);
}
if($record->id) {
$extendUser->extend_student_type_id = $record->id;
}
}
//print_r($extendUser); exit;
if($extendUser->id) {
$result = $companyMicrolearningExtendUserMapper->update($extendUser);
} else {
$result = $companyMicrolearningExtendUserMapper->insert($extendUser);
}
}
foreach($user_ids as $user_id)
{
$capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user_id, $capsule->id);
if(!$capsuleUser) {
$capsuleUser = new CompanyMicrolearningCapsuleUser();
$capsuleUser->company_id = $capsule->company_id;
$capsuleUser->topic_id = $capsule->topic_id;
$capsuleUser->capsule_id = $capsule->id;
$capsuleUser->user_id = $user_id;
$capsuleUser->access = CompanyMicrolearningCapsuleUser::ACCESS_UNLIMITED;
if($capsuleUserMapper->insert($capsuleUser)) {
$users_assigned++;
$capsuleUser = $capsuleUserMapper->fetchOne($capsuleUser->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' => [
'users_assigned' => $users_assigned
]
]);
} else {
return new JsonModel([
'success' => false,
'data' => 'ERROR_PARAMETERS_ARE_INVALID'
]);
}
}
return new JsonModel([
'success' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
public function notificationAction()
{
$request = $this->getRequest();
$currentUserPlugin = $this->plugin('currentUserPlugin');
$currentUser = $currentUserPlugin->getUser();
$currentCompany = $currentUserPlugin->getCompany();
$request = $this->getRequest();
$topic_uuid = $this->params()->fromRoute('topic_uuid');
$capsule_uuid = $this->params()->fromRoute('capsule_uuid');
$topicMapper = CompanyMicrolearningTopicMapper::getInstance($this->adapter);
$topic = $topicMapper->fetchOneByUuid($topic_uuid);
if(!$topic) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_TOPIC_NOT_FOUND'
]);
}
if($topic->company_id != $currentCompany->id) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_UNAUTHORIZED'
]);
}
$capsuleMapper = CompanyMicrolearningCapsuleMapper::getInstance($this->adapter);
$capsule = $capsuleMapper->fetchOneByUuid($capsule_uuid);
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($request->isPost()) {
$dataPost = $request->getPost()->toArray();
$form = new PushMicrolearningNotificationForm($this->adapter);
$form->setData($dataPost);
if($form->isValid()) {
$customer_uuids = $this->params()->fromPost('customer_uuids');
if(!$customer_uuids) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_NOT_SELECTED_CUSTOMERS'
]);
}
$push_template_uuid = filter_var($form->get('push_template_id')->getValue(), FILTER_SANITIZE_STRING);
$pushMapper = PushMapper::getInstance($this->adapter);
$pushTemplateMapper = PushTemplateMapper::getInstance($this->adapter);
$pushTemplate = $pushTemplateMapper->fetchOneByUuid($push_template_uuid);
if(!$pushTemplate) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_PUSH_TEMPLATE_NOT_FOUND'
]);
}
$applicationMapper = ApplicationMapper::getInstance($this->adapter);
$application = $applicationMapper->fetchOne(Application::TWOGETSKILLS);
$capsuleUserMapper = CompanyMicrolearningCapsuleUserMapper::getInstance($this->adapter);
$push_to_send = 0;
$userMapper = UserMapper::getInstance($this->adapter);
$deviceHistoryMapper = DeviceHistoryMapper::getInstance($this->adapter);
foreach($customer_uuids as $customer_uuid)
{
$user = $userMapper->fetchOneByUuid($customer_uuid);
if(!$user) {
continue;
}
$capsuleUser = $capsuleUserMapper->fetchOneByUserIdAndCapsuleId($user->id, $capsule->id);
if(!$capsuleUser) {
continue;
}
$token = $deviceHistoryMapper->fetchLastDeviceTokenByApplicationIdAndUserId(Application::TWOGETSKILLS, $user->id);
if($token) {
$push = new Push();
$push->status = Push::STATUS_PENDING;
$push->data = json_encode([
'server' => [
'key' => $application->key,
],
'push' => [
'registration_ids' => [
$token,
],
'notification' => [
'body' => $pushTemplate->body,
'title' => $pushTemplate->title,
'vibrate' => 1,
'sound' => 1
],
]
]);
if($pushMapper->insert($push)) {
$push_to_send = $push_to_send + 1;
}
}
}
if(0 == $push_to_send) {
return new JsonModel([
'success' => false,
'data' => 'ERROR_NO_USER_DEVICES_WERE_FOUND_TO_SEND_PUSH'
]);
}
return new JsonModel([
'success' => true,
'data' => [
'push_to_send' => $push_to_send,
]
]);
} 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' => false,
'data' => 'ERROR_METHOD_NOT_ALLOWED'
]);
}
}