Rev 15459 | Rev 16768 | 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 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\Mapper\NetworkMapper;use LeadersLinked\Model\Network;use LeadersLinked\Model\User;use LeadersLinked\Model\UserType;use LeadersLinked\Mapper\PageMapper;use LeadersLinked\Mapper\UserMapper;use LeadersLinked\Mapper\UserPasswordMapper;use LeadersLinked\Model\UserPassword;use LeadersLinked\Mapper\CompanySizeMapper;use LeadersLinked\Mapper\IndustryMapper;use LeadersLinked\Model\Company;use LeadersLinked\Mapper\CompanyMapper;use LeadersLinked\Model\CompanyUser;use LeadersLinked\Mapper\CompanyUserMapper;use LeadersLinked\Form\Network\NetworkCreateForm;use LeadersLinked\Form\Network\NetworkEditForm;use LeadersLinked\Mapper\EmailTemplateMapper;use LeadersLinked\Model\Page;use LeadersLinked\Mapper\ThemeMapper;use LeadersLinked\Model\EmailTemplate;class PrivateNetworksController 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();$request = $this->getRequest();$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) {$acl = $this->getEvent()->getViewModel()->getVariable('acl');$allowEdit = $acl->isAllowed($currentUser->usertype_id, 'settings/private-networks/edit');$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'settings/private-networks/delete');$search = $this->params()->fromQuery('search');$search = empty($search['value']) ? '' : filter_var($search['value'], 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 = ['name','main_hostname', 'admin_hostname'];$order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';if(!in_array($order_direction, ['ASC', 'DESC'])) {$order_direction = 'ASC';}$networkMapper = NetworkMapper::getInstance($this->adapter);$paginator = $networkMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);$items = [];$records = $paginator->getCurrentItems();foreach($records as $record){$item = ['name' => $record->name,'main_hostname' => $record->main_hostname,'admin_hostname' => $record->admin_hostname,'status' => $record->status,'actions' => ['link_edit' => $allowEdit ? $this->url()->fromRoute('settings/private-networks/edit', ['id' => $record->uuid ]) : '','link_delete' => $allowDelete && $record->default == Network::DEFAULT_NO ? $this->url()->fromRoute('settings/private-networks/delete', ['id' => $record->uuid ]) : '',],];array_push($items, $item);}return new JsonModel(['success' => true,'data' => ['items' => $items,'total' => $paginator->getTotalItemCount(),]]);} else {$formAdd = new NetworkCreateForm($this->adapter);$formEdit = new NetworkEditForm($this->adapter);$this->layout()->setTemplate('layout/layout-backend');$viewModel = new ViewModel();$viewModel->setTemplate('leaders-linked/private-networks/index.phtml');$viewModel->setVariables(['formAdd' => $formAdd,'formEdit' => $formEdit]);return $viewModel ;}} else {return new JsonModel(['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED']);;}}public function addAction() {$currentUserPlugin = $this->plugin('currentUserPlugin');$currentUser = $currentUserPlugin->getUser();$request = $this->getRequest();if ($request->isPost()) {$form = new NetworkCreateForm($this->adapter);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if ($form->isValid()) {$dataPost = (array) $form->getData();$networkMapper = NetworkMapper::getInstance($this->adapter);$networkDefault = $networkMapper->fetchOneByDefault();$themeMapper = ThemeMapper::getInstance($this->adapter);$theme = $themeMapper->fetchOneByUuid($dataPost['theme_id']);$network = new Network();$network->status = Network::STATUS_ACTIVE;$network->default = Network::DEFAULT_NO;$network->name = $dataPost['company'];$network->admin_hostname = $dataPost['admin_hostname'];$network->alternative_hostname = $dataPost['alternative_hostname'];$network->main_hostname = $dataPost['main_hostname'];$network->moodle_name = $dataPost['moodle_name'];$network->moodle_url = $dataPost['moodle_url'];$network->microlearning_appstore = $dataPost['microlearning_appstore'];$network->microlearning_playstore = $dataPost['microlearning_playstore'];$network->theme_id = $theme->id;foreach($networkDefault as $key => $value){if(strpos($key, 'css') !== false) {$network->{$key} = $networkDefault->{$key};}}if(!$networkMapper->insert($network)) {$response = ['success' => false,'data' => $networkMapper->getError()];return new JsonModel($response);}$this->logger->info('Se agrego la red privada : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$timestamp = time();$activation_key = sha1($dataPost['email'] . uniqid() . $timestamp);$password_hash = password_hash($dataPost['password'], PASSWORD_DEFAULT);$user = new User();$user->blocked = User::BLOCKED_NO;$user->email = $dataPost['email'];$user->email_verified = User::EMAIL_VERIFIED_YES;$user->first_name = $dataPost['first_name'];$user->last_name = $dataPost['last_name'];$user->usertype_id = UserType::ADMIN;$user->password = $password_hash;$user->password_updated_on = date('Y-m-d H:i:s');$user->activation_key = $activation_key;$user->status = User::STATUS_ACTIVE;$user->login_attempt = 0;$user->network_id = $network->id;$userMapper = UserMapper::getInstance($this->adapter);if(!$userMapper->insert($user)) {$response = ['success' => false,'data' => $networkMapper->getError()];return new JsonModel($response);}$userPassword = new UserPassword();$userPassword->user_id = $user->id;$userPassword->password = $password_hash;$userPasswordMapper = UserPasswordMapper::getInstance($this->adapter);$userPasswordMapper->insert($userPassword);$this->logger->info('Se agrego el usuario administrador : ' . $user->first_name . ' ' . $user->last_name . ' de la red privada : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$companySizeMapper = CompanySizeMapper::getInstance($this->adapter);$companySize = $companySizeMapper->fetchOneByUuid($dataPost['company_size_id']);$industryMapper = IndustryMapper::getInstance($this->adapter);$industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);$company = new Company();$company->name = $network->name;$company->default_for_network = Company::DEFAULT_FOR_NETWORK_YES;$company->network_id = $network->id;$company->company_size_id = $companySize->id;$company->industry_id = $industry->id;$company->foundation_year = date('Y');$company->status = Company::STATUS_ACTIVE;$company->description = '';$companyMapper = CompanyMapper::getInstance($this->adapter);$result = $companyMapper->insert($company);if($result) {/** Creación del fake user propietario de la empresa */$owner = new User();$owner->network_id = $network->id;$owner->email = 'fake-email'.$company->id;$owner->first_name = substr($company->name, 0, 64);$owner->last_name = substr($company->name, 64);$owner->status = User::STATUS_INACTIVE;$owner->blocked = User::BLOCKED_YES;$owner->login_attempt = 0;$owner->email_verified = User::EMAIL_VERIFIED_YES;$owner->show_in_search = User::SHOW_IN_SEARCH_NO;$owner->password = 'NO-PASSWORD';$owner->usertype_id = UserType::COMPANY;$userMapper = UserMapper::getInstance($this->adapter);$userMapper->insert($owner);$companyUser = new CompanyUser();$companyUser->company_id = $company->id;$companyUser->user_id = $owner->id;$companyUser->owner = CompanyUser::OWNER_YES;$companyUser->creator = CompanyUser::CREATOR_NO;$companyUser->status = CompanyUser::STATUS_ACCEPTED;$companyUserMapper = CompanyUserMapper::getInstance($this->adapter);$companyUserMapper->insert($companyUser);/** agregamos el usuario que lo crea como full administrador */$companyUser = new CompanyUser();$companyUser->company_id = $company->id;$companyUser->user_id = $user->id;$companyUser->owner = CompanyUser::OWNER_NO;$companyUser->creator = CompanyUser::CREATOR_YES;$companyUser->status = CompanyUser::STATUS_ACCEPTED;$companyUser->backend = CompanyUser::BACKEND_YES;$companyUserMapper->insert($companyUser);$emailTemplateMapper = EmailTemplateMapper::getInstance($this->adapter);$records = $emailTemplateMapper->fetchAllDefault();foreach($records as $record){$emailTemplate = new EmailTemplate();$emailTemplate->network_id = $network->id;$emailTemplate->email_template_default_id = $record->id;$emailTemplate->code = $record->code;$emailTemplate->subject = $record->subject;$emailTemplate->content = $record->content;$emailTemplate->status = $record->status;$emailTemplateMapper->insert($emailTemplate);}$pageMapper = PageMapper::getInstance($this->adapter);$records = $pageMapper->fetchAllDefault();foreach($records as $record){$page = new Page();$page->network_id = $network->id;$page->code = $record->code;$page->content = $record->content;$page->fixed = $record->fixed;$page->page_default_id = $record->id;$page->title = $record->title;$page->status = $record->status;$page->type = $record->type;$page->url = $record->url;$pageMapper->insert($page);}$this->logger->info('Se agrego la empresa por defecto : ' . $company->name . ' de la red : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_ADDED'];} else {$data = ['success' => false,'data' => $companyMapper->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();$request = $this->getRequest();$id = $this->params()->fromRoute('id');if (!$id) {$data = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($data);}$networkMapper = NetworkMapper::getInstance($this->adapter);$network = $networkMapper->fetchOneByUuid($id);if (!$network) {$data = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($data);}if ($request->isPost()) {$form = new NetworkEditForm($this->adapter);$dataPost = $request->getPost()->toArray();$form->setData($dataPost);if ($form->isValid()) {$dataPost = (array) $form->getData();if(empty($dataPost['status'])) {$network->status = Network::STATUS_INACTIVE;}$themeMapper = ThemeMapper::getInstance($this->adapter);$theme = $themeMapper->fetchOneByUuid($dataPost['theme_id']);$network->name = $dataPost['name'];$network->main_hostname = $dataPost['main_hostname'];$network->alternative_hostname = $dataPost['alternative_hostname'];$network->admin_hostname = $dataPost['admin_hostname'];$network->theme_id = $theme->id;$network->moodle_name = $dataPost['moodle_name'];$network->moodle_url = $dataPost['moodle_url'];$network->microlearning_appstore = $dataPost['microlearning_appstore'];$network->microlearning_playstore = $dataPost['microlearning_playstore'];$network->relationship_user_mode = $dataPost['relationship_user_mode'];$result = $networkMapper->update($network);if ($result) {$this->logger->info('Se actualizo la red privada : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$data = ['success' => true,'data' => 'LABEL_RECORD_UPDATED'];} else {$data = ['success' => false,'data' => $networkMapper->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()) {$themeMapper = ThemeMapper::getInstance($this->adapter);$theme = $themeMapper->fetchOne($network->theme_id);$data = ['success' => true,'data' => ['name' => $network->name,'status' => $network->status,'main_hostname' => $network->main_hostname,'admin_hostname' => $network->admin_hostname,'alternative_hostname' => $network->alternative_hostname,'status' => $network->status,'theme_id' => $theme->uuid,'moodle_name' => $network->moodle_name,'moodle_url' => $network->moodle_url,'microlearning_appstore' => $network->microlearning_appstore,'microlearning_playstore' => $network->microlearning_playstore,'relationship_user_mode' => $network->relationship_user_mode,]];return new JsonModel($data);} 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();if ($request->isPost()) {$id = $this->params()->fromRoute('id');if (!$id) {$response = ['success' => false,'data' => 'ERROR_INVALID_PARAMETER'];return new JsonModel($response);}$networkMapper = NetworkMapper::getInstance($this->adapter);$network = $networkMapper->fetchOneByUuid($id);if (!$network) {$response = ['success' => false,'data' => 'ERROR_RECORD_NOT_FOUND'];return new JsonModel($response);}if($network->default == Network::DEFAULT_YES) {$response = ['success' => false,'data' => 'ERROR_PRIVATE_NETWORK_CANNOT_DELETED'];return new JsonModel($response);}$result = $networkMapper->delete($network->id);if ($result) {$this->logger->info('Se borro la red privada : ' . $network->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);$response = ['success' => true,'data' => 'LABEL_RECORD_DELETED'];} else {$response = ['success' => false,'data' => $networkMapper->getError()];}} else {$response = ['success' => false,'data' => 'ERROR_METHOD_NOT_ALLOWED'];}return new JsonModel($response);}}