Files
luos/workflow/engine/controllers/strategicDashboard.php

295 lines
13 KiB
PHP
Raw Permalink Normal View History

2015-03-26 17:37:32 -04:00
<?php
2017-08-14 16:13:46 -04:00
use ProcessMaker\Core\System;
2023-03-24 17:55:53 +00:00
use ProcessMaker\Exception\RBACException;
2017-08-14 16:13:46 -04:00
2015-03-26 17:37:32 -04:00
/**
* StrategicDashboard controller
* @inherits Controller
*
* @access public
*/
class StrategicDashboard extends Controller
{
// Class properties
private $urlProxy;
private $clientToken;
private $usrId;
private $usrUnitCost;
2015-03-26 17:37:32 -04:00
// Class constructor
2017-12-04 13:25:35 +00:00
public function __construct()
2015-03-26 17:37:32 -04:00
{
global $RBAC;
$this->usrId = $RBAC->aUserInfo['USER_INFO']['USR_UID'];
$user = new Users();
$user = $user->load($RBAC->aUserInfo['USER_INFO']['USR_UID']);
$this->usrUnitCost = $this->currencySymbolToShow($user);
2017-10-10 12:33:25 -04:00
$this->urlProxy = System::getHttpServerHostnameRequestsFrontEnd() . '/api/1.0/' . config("system.workspace") . '/';
2015-03-26 17:37:32 -04:00
//change
$clientId = 'x-pm-local-client';
$client = $this->getClientCredentials($clientId);
$authCode = $this->getAuthorizationCode($client);
$debug = false; //System::isDebugMode();
$loader = Maveriks\Util\ClassLoader::getInstance();
$loader->add(PATH_TRUNK . 'vendor/bshaffer/oauth2-server-php/src/', "OAuth2");
$request = array(
'grant_type' => 'authorization_code',
'code' => $authCode
);
$server = array(
'REQUEST_METHOD' => 'POST'
);
$headers = array(
"PHP_AUTH_USER" => $client['CLIENT_ID'],
"PHP_AUTH_PW" => $client['CLIENT_SECRET'],
"Content-Type" => "multipart/form-data;",
"Authorization" => "Basic " . base64_encode($client['CLIENT_ID'] . ":" . $client['CLIENT_SECRET'])
);
$request = new \OAuth2\Request(array(), $request, array(), array(), array(), $server, null, $headers);
$oauthServer = new \ProcessMaker\Services\OAuth2\Server();
$response = $oauthServer->postToken($request, true);
$this->clientToken = $response->getParameters();
$this->clientToken["client_id"] = $client['CLIENT_ID'];
$this->clientToken["client_secret"] = $client['CLIENT_SECRET'];
}
private function currencySymbolToShow($user)
{
$result = '$';
if (isset($user['USR_UNIT_COST']) && !empty($user['USR_UNIT_COST'])) {
$result = $user['USR_UNIT_COST'];
2017-12-04 13:25:35 +00:00
} else {
$processModel = new Process();
$processList = $processModel->getAllConfiguredCurrencies();
$defaultProcessCurrency = '';
foreach ($processList as $key => $value) {
if (!empty($value)) {
$defaultProcessCurrency = $value;
}
}
if (!empty($defaultProcessCurrency)) {
$result = $defaultProcessCurrency;
}
}
return $result;
}
2015-03-26 17:37:32 -04:00
private function getClientCredentials($clientId)
{
$oauthQuery = new ProcessMaker\Services\OAuth2\PmPdo($this->getDsn());
return $oauthQuery->getClientDetails($clientId);
}
private function getAuthorizationCode($client)
{
\ProcessMaker\Services\OAuth2\Server::setDatabaseSource($this->getDsn());
\ProcessMaker\Services\OAuth2\Server::setPmClientId($client['CLIENT_ID']);
$oauthServer = new \ProcessMaker\Services\OAuth2\Server();
$userId = $_SESSION['USER_LOGGED'];
$authorize = true;
$_GET = array_merge($_GET, array(
'response_type' => 'code',
'client_id' => $client['CLIENT_ID'],
'scope' => implode(' ', $oauthServer->getScope())
));
$response = $oauthServer->postAuthorize($authorize, $userId, true);
$code = substr($response->getHttpHeader('Location'), strpos($response->getHttpHeader('Location'), 'code=')+5, 40);
return $code;
}
private function getDsn()
{
list($host, $port) = strpos(DB_HOST, ':') !== false ? explode(':', DB_HOST) : array(DB_HOST, '');
$port = empty($port) ? '' : ";port=$port";
$dsn = DB_ADAPTER.':host='.$host.';dbname='.DB_NAME.$port;
return array('dsn' => $dsn, 'username' => DB_USER, 'password' => DB_PASS);
}
// Functions for the StrategicDashboards
2017-12-04 13:25:35 +00:00
public function dashboardList()
2015-03-26 17:37:32 -04:00
{
2023-03-24 17:55:53 +00:00
// Include global object RBAC
global $RBAC;
// Check if the current user have the correct permissions to access to this resource, if not throws a RBAC Exception with code 403
if ($RBAC->userCanAccess('PM_SETUP') !== 1 || $RBAC->userCanAccess('PM_SETUP_DASHBOARDS') !== 1) {
throw new RBACException('ID_ACCESS_DENIED', 403);
}
2015-03-26 17:37:32 -04:00
try {
2017-12-04 13:25:35 +00:00
$this->includeExtJS('strategicDashboard/dashboardList');
if (isset($_SESSION['__StrategicDashboard_ERROR__'])) {
$this->setJSVar('__StrategicDashboard_ERROR__', $_SESSION['__StrategicDashboard_ERROR__']);
unset($_SESSION['__StrategicDashboard_ERROR__']);
2015-03-26 17:37:32 -04:00
}
2017-12-04 13:25:35 +00:00
$this->setView('strategicDashboard/dashboardList');
2015-03-26 17:37:32 -04:00
2017-12-04 13:25:35 +00:00
$this->setJSVar('urlProxy', $this->urlProxy);
$this->setJSVar('credentials', $this->clientToken);
G::RenderPage('publish', 'extJs');
2015-03-26 17:37:32 -04:00
} catch (Exception $error) {
$_SESSION['__DASHBOARD_ERROR__'] = $error->getMessage();
die();
}
}
2017-12-04 13:25:35 +00:00
public function formDashboard($data)
2015-03-26 17:37:32 -04:00
{
try {
2017-12-04 13:25:35 +00:00
$this->includeExtJS('strategicDashboard/formDashboard', true, true);
$this->setView('strategicDashboard/formDashboard');
2015-03-26 17:37:32 -04:00
$this->setJSVar('DAS_UID', '');
2017-12-04 13:25:35 +00:00
$this->setJSVar('urlProxy', $this->urlProxy);
$this->setJSVar('credentials', $this->clientToken);
2015-03-26 17:37:32 -04:00
2017-12-04 13:25:35 +00:00
G::RenderPage('publish', 'extJs');
2015-03-26 17:37:32 -04:00
return null;
} catch (Exception $error) {
$_SESSION['__DASHBOARD_ERROR__'] = $error->getMessage();
2017-12-04 13:25:35 +00:00
G::header('Location: dashboardList');
2015-03-26 17:37:32 -04:00
die();
}
}
2017-12-04 13:25:35 +00:00
public function formEditDashboard($data)
2015-03-26 17:37:32 -04:00
{
try {
2017-12-04 13:25:35 +00:00
$this->includeExtJS('strategicDashboard/formDashboard', true, true);
$this->setView('strategicDashboard/formDashboard');
2015-03-26 17:37:32 -04:00
$dasUid = isset($_REQUEST['DAS_UID']) ? $_REQUEST['DAS_UID'] : '';
$this->setJSVar('DAS_UID', $dasUid);
2017-12-04 13:25:35 +00:00
$this->setJSVar('urlProxy', $this->urlProxy);
$this->setJSVar('credentials', $this->clientToken);
2015-03-26 17:37:32 -04:00
2017-12-04 13:25:35 +00:00
G::RenderPage('publish', 'extJs');
2015-03-26 17:37:32 -04:00
return null;
} catch (Exception $error) {
$_SESSION['__DASHBOARD_ERROR__'] = $error->getMessage();
2017-12-04 13:25:35 +00:00
G::header('Location: dashboardList');
2015-03-26 17:37:32 -04:00
die();
}
}
2017-12-04 13:25:35 +00:00
public function viewDashboard()
2015-03-26 17:37:32 -04:00
{
2023-03-24 17:55:53 +00:00
// Include global object RBAC
global $RBAC;
// Check if the current user have the correct permissions to access to this resource, if not throws a RBAC Exception with code 403
if ($RBAC->userCanAccess('PM_DASHBOARD') !== 1) {
throw new RBACException('ID_ACCESS_DENIED', 403);
}
2015-03-26 17:37:32 -04:00
try {
2017-12-04 13:25:35 +00:00
if (isset($_SESSION['__StrategicDashboard_ERROR__'])) {
$this->setJSVar('__StrategicDashboard_ERROR__', $_SESSION['__StrategicDashboard_ERROR__']);
unset($_SESSION['__StrategicDashboard_ERROR__']);
2015-03-26 17:37:32 -04:00
}
2017-12-04 13:25:35 +00:00
$this->setView('strategicDashboard/viewDashboard');
2015-03-26 17:37:32 -04:00
$this->setVar('urlProxy', $this->urlProxy);
2017-10-10 12:33:25 -04:00
$this->setVar('SYS_SYS', config("system.workspace"));
$this->setVar('usrId', $this->usrId);
$this->setVar('credentials', $this->clientToken);
$this->setVar('unitCost', $this->usrUnitCost);
HOR-433 "(WSSO Plugin) Cuando se ingresa al proceso, se..." SOLVED Issue: (WSSO Plugin) Cuando se ingresa al proceso, se puede verificar que no se puede recuperar la data del mismo Cause: Se esta usando el mismo VirtualHost para clientes WEB y REST Solution: Se realizo la implementacion de la nueva directiva "server_hostname_requests_frontend" del "env.ini"; esto para el caso en que se requiera del "feature SSO", tomar nota de lo siguiente: - Habilitar el modulo "mod_headers" de apache (httpd.conf) - Tener configurado un VirtualHost normal para ProcessMaker (pmos.conf) - Para el "feature SSO" se debera crear un 2do VirtualHost con toda la configuracion necesaria para el mismo (pmos.conf), por lo que todos los usuarios que requieran este feature, deberan usar este para acceder por browser - Crear un 3er VirtualHost para las solicitudes del front-end (DESIGNER), en donde se agregara lo siguiente (pmos.conf): <IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Headers "Content-Type,Depth,User-Agent,X-File-Size,X-Requested-With,If-Modified-Since,X-File-Name,Cache-Control,Authorization" Header set Access-Control-Allow-Methods "OPTIONS,GET,POST,PUT,DELETE" </IfModule> De tal forma que quedara asi: <IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" Header set Access-Control-Allow-Headers "Content-Type,Depth,User-Agent,X-File-Size,X-Requested-With,If-Modified-Since,X-File-Name,Cache-Control,Authorization" Header set Access-Control-Allow-Methods "OPTIONS,GET,POST,PUT,DELETE" </IfModule> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^.*/(.*)$ app.php [QSA,L,NC] </IfModule> - Agregar lo siguiente al archivo "/path/to/processmaker/shared/sites/your-workspace/env.ini" server_hostname_requests_frontend = "{your_server_hostname_requests_frontend}" Donde: - your_server_hostname_requests_frontend, es el nombre del servidor configurado para el front-end (3er VirtualHost), ejemplo: server_hostname_requests_frontend = "192.168.40.72:3017" - Tambien se puede hacer la configuracion en el archivo "/path/to/processmaker/workflow/engine/config/env.ini", considerar que esto afectara a todos lo workspaces creados Note: Todo el desarrollo se lo hizo en un server Windows-Server-2012-R2 con Apache-2.4
2016-03-17 08:45:23 -04:00
2017-12-04 13:25:35 +00:00
$translation = $this->getTranslations();
2015-03-26 17:37:32 -04:00
$this->setVar('translation', $translation);
$this->render();
} catch (Exception $error) {
$_SESSION['__DASHBOARD_ERROR__'] = $error->getMessage();
die();
}
}
2017-12-04 13:25:35 +00:00
public function viewDashboardIE()
2015-03-26 17:37:32 -04:00
{
try {
2017-12-04 13:25:35 +00:00
$this->setView('strategicDashboard/viewDashboardIE');
$this->setVar('urlProxy', $this->urlProxy);
$this->setVar('usrId', $this->usrId);
$this->setVar('credentials', $this->clientToken);
$this->setVar('unitCost', $this->usrUnitCost);
2015-04-24 13:17:02 -04:00
2017-12-04 13:25:35 +00:00
$translation = $this->getTranslations();
2015-04-24 13:17:02 -04:00
$this->setVar('translation', $translation);
2015-03-26 17:37:32 -04:00
$this->render();
2015-04-24 13:17:02 -04:00
} catch (Exception $error) {
2015-03-26 17:37:32 -04:00
} catch (Exception $error) {
$_SESSION['__DASHBOARD_ERROR__'] = $error->getMessage();
die();
}
}
2017-12-04 13:25:35 +00:00
private function getTranslations()
{
$translation = array();
$translation['ID_MANAGERS_DASHBOARDS'] = G::LoadTranslation('ID_MANAGERS_DASHBOARDS');
$translation['ID_PRO_EFFICIENCY_INDEX'] = G::LoadTranslation('ID_PRO_EFFICIENCY_INDEX');
$translation['ID_EFFICIENCY_USER'] = G::LoadTranslation('ID_EFFICIENCY_USER');
$translation['ID_COMPLETED_CASES'] = G::LoadTranslation('ID_COMPLETED_CASES');
$translation['ID_WELL_DONE'] = G::LoadTranslation('ID_WELL_DONE');
$translation['ID_NUMBER_CASES'] = G::LoadTranslation('ID_NUMBER_CASES');
$translation['ID_EFFICIENCY_INDEX'] = G::LoadTranslation('ID_EFFICIENCY_INDEX');
$translation['ID_INEFFICIENCY_COST'] = G::LoadTranslation('ID_INEFFICIENCY_COST');
$translation['ID_EFFICIENCY_COST'] = G::LoadTranslation('ID_EFFICIENCY_COST');
$translation['ID_RELATED_PROCESS'] = G::LoadTranslation('ID_RELATED_PROCESS');
$translation['ID_RELATED_GROUPS'] = G::LoadTranslation('ID_RELATED_GROUPS');
$translation['ID_RELATED_TASKS'] = G::LoadTranslation('ID_RELATED_TASKS');
$translation['ID_RELATED_USERS'] = G::LoadTranslation('ID_RELATED_USERS');
$translation['ID_GRID_PAGE_NO_DASHBOARD_MESSAGE'] = G::LoadTranslation('ID_GRID_PAGE_NO_DASHBOARD_MESSAGE');
$translation['ID_PROCESS_TASKS'] = G::LoadTranslation('ID_PROCESS_TASKS');
$translation['ID_TIME_HOURS'] = G::LoadTranslation('ID_TIME_HOURS');
$translation['ID_GROUPS'] = G::LoadTranslation('ID_GROUPS');
$translation['ID_COSTS'] = G::LoadTranslation('ID_COSTS');
$translation['ID_TASK'] = G::LoadTranslation('ID_TASK');
$translation['ID_USER'] = G::LoadTranslation('ID_USER');
$translation['ID_YEAR'] = G::LoadTranslation('ID_YEAR');
$translation['ID_USERS'] = G::LoadTranslation('ID_USERS');
$translation['ID_USERS'] = G::LoadTranslation('ID_USERS');
$translation['ID_OVERDUE'] = G::LoadTranslation('ID_OVERDUE');
$translation['ID_AT_RISK'] = G::LoadTranslation('ID_AT_RISK');
$translation['ID_ON_TIME'] = G::LoadTranslation('ID_ON_TIME');
$translation['ID_NO_INEFFICIENT_PROCESSES'] = G::LoadTranslation('ID_NO_INEFFICIENT_PROCESSES');
$translation['ID_NO_INEFFICIENT_TASKS'] = G::LoadTranslation('ID_NO_INEFFICIENT_TASKS');
$translation['ID_NO_INEFFICIENT_USER_GROUPS'] = G::LoadTranslation('ID_NO_INEFFICIENT_USER_GROUPS');
$translation['ID_NO_INEFFICIENT_USERS'] = G::LoadTranslation('ID_NO_INEFFICIENT_USERS');
$translation['ID_DISPLAY_EMPTY'] = G::LoadTranslation('ID_DISPLAY_EMPTY');
$translation['ID_INBOX_EMPTY'] = G::LoadTranslation('ID_INBOX_EMPTY');
$translation['ID_INDICATOR'] = G::LoadTranslation('ID_INDICATOR');
$translation['ID_PERIODICITY'] = G::LoadTranslation('ID_PERIODICITY');
$translation['ID_MONTH'] = G::LoadTranslation('ID_MONTH');
$translation['ID_QUARTER'] = G::LoadTranslation('ID_QUARTER');
$translation['ID_SEMESTER'] = G::LoadTranslation('ID_SEMESTER');
$translation['ID_TO'] = G::LoadTranslation('ID_TO');
$translation['ID_FROM'] = G::LoadTranslation('ID_FROM');
$translation['ID_MONTH_ABB_1'] = G::LoadTranslation('ID_MONTH_ABB_1');
$translation['ID_MONTH_ABB_2'] = G::LoadTranslation('ID_MONTH_ABB_2');
$translation['ID_MONTH_ABB_3'] = G::LoadTranslation('ID_MONTH_ABB_3');
$translation['ID_MONTH_ABB_4'] = G::LoadTranslation('ID_MONTH_ABB_4');
$translation['ID_MONTH_ABB_5'] = G::LoadTranslation('ID_MONTH_ABB_5');
$translation['ID_MONTH_ABB_6'] = G::LoadTranslation('ID_MONTH_ABB_6');
$translation['ID_MONTH_ABB_7'] = G::LoadTranslation('ID_MONTH_ABB_7');
$translation['ID_MONTH_ABB_8'] = G::LoadTranslation('ID_MONTH_ABB_8');
$translation['ID_MONTH_ABB_9'] = G::LoadTranslation('ID_MONTH_ABB_9');
$translation['ID_MONTH_ABB_10'] = G::LoadTranslation('ID_MONTH_ABB_10');
$translation['ID_MONTH_ABB_11'] = G::LoadTranslation('ID_MONTH_ABB_11');
$translation['ID_MONTH_ABB_12'] = G::LoadTranslation('ID_MONTH_ABB_12');
return $translation;
}
2015-03-26 17:37:32 -04:00
}