Merged in release/3.8.1 (pull request #8656)

release/3.8.1
This commit is contained in:
Paula Quispe
2022-12-05 19:22:22 +00:00
114 changed files with 1615 additions and 790 deletions

View File

@@ -608,7 +608,7 @@ class LdapAdvanced
if (empty($message)) {
$message = G::LoadTranslation('ID_LDAP_ERROR_CONNECTION');
}
Cache::put('ldapMessageError', $message, 2);
Cache::put('ldapMessageError', $message, 120); //laravel 8.x the time parameter is in seconds.
$this->log($linkIdentifier, $messageError);
}
@@ -1588,7 +1588,7 @@ class LdapAdvanced
if ($error = ldap_errno($ldapcnn)) {
$messageError = ldap_err2str($error);
Cache::put('ldapMessageError', $messageError, 2);
Cache::put('ldapMessageError', $messageError, 120); //laravel 8.x the time parameter is in seconds.
//
} else {
if ($searchResult) {

View File

@@ -1,4 +1,6 @@
<?php
use ProcessMaker\PHPReflectionClass\ClassStructure;
use ProcessMaker\Plugins\PluginRegistry;
class TriggerLibrary
@@ -105,14 +107,13 @@ class TriggerLibrary
* getMethodsFromLibraryFile
*
* @param string $file
* @return object(PHPClass) $parsedLibrary
* @return ClassStructure $parsedLibrary
*/
public function getMethodsFromLibraryFile($file)
{
// parse class comments from file
$parsedLibrary = new PHPClass();
$parsedLibrary = new ClassStructure();
$success = $parsedLibrary->parseFromFile($file);
return $parsedLibrary;
}

View File

@@ -1635,14 +1635,16 @@ function newFolder()
$formNewFolder["items"]= array();
$field=array();
$field["xtype"]= "label";
$field["xtype"]= "textfield";
$field["fieldLabel"]= G::LoadTranslation('ID_CREATE_FOLDER_PATH_FOLDER');
$field["name"]= "form[FOLDER_PATH]";
$field["id"]= "form[FOLDER_PATH]";
$field["name"]= "FOLDER_PATH";
$field["id"]= "FOLDER_PATH";
$field["width"]=175;
$field["allowBlank"]=false;
$field["value"]=$folderPath;
$field["text"]=$folderPath;
$field["readOnly"]= true;
$field["style"] = "{'border': 'none'}";
$formNewFolder["items"][]= $field;
$field=array();

View File

@@ -374,6 +374,7 @@ function getReassignList()
$caseReaderFields[] = ['name' => 'APP_NUMBER'];
$caseReaderFields[] = ['name' => 'APP_TITLE'];
$caseReaderFields[] = ['name' => 'APP_UID'];
$caseReaderFields[] = ['name' => 'DEL_INDEX'];
$caseReaderFields[] = ['name' => 'USR_UID'];
$caseReaderFields[] = ['name' => 'APP_TAS_TITLE'];
$caseReaderFields[] = ['name' => 'APP_PRO_TITLE'];

View File

@@ -56,7 +56,7 @@ if (isset($_GET['ux'])) {
}';
} else {
/*----------------------------------********---------------------------------*/
echo '} else { window.parent.location.href = \'casesListExtJs\'; }';
echo '} else { parent.parent.postMessage("redirect=todo","*"); }';
/*----------------------------------********---------------------------------*/
}
/*----------------------------------********---------------------------------*/

View File

@@ -26,7 +26,7 @@ if (empty($dataPost)) {
foreach ($dataPost as $data) {
// It was supposed will return only one thread related to the task
// todo: implement the reassign case for multi instance task
$openThreads = Delegation::getOpenThreads($data->APP_NUMBER, $data->TAS_UID);
$openThreads = Delegation::getOpenThread($data->APP_NUMBER, $data->DEL_INDEX);
if (!empty($openThreads)) {
// Get the user information assigned in the index
$currentUsrUid = Delegation::getCurrentUser($openThreads['APP_NUMBER'], $openThreads['DEL_INDEX']);

View File

@@ -20,7 +20,7 @@ try {
$googleClient = $gmailOAuth->getGoogleClient();
$result = $googleClient->authenticate($_GET['code']);
if (isset($result["error"])) {
Cache::put('errorMessageIfNotAuthenticate', G::json_decode($result["error"]), 2);
Cache::put('errorMessageIfNotAuthenticate', G::json_decode($result["error"]), 120); //laravel 8.x the time parameter is in seconds.
G::header($header);
return;
}
@@ -34,7 +34,7 @@ try {
* value in minutes for each session. We use 2 minutes, enough time to retrieve
* the error message if there is one.
*/
Cache::put('errorMessageIfNotAuthenticate', $e->getMessage(), 2);
Cache::put('errorMessageIfNotAuthenticate', $e->getMessage(), 120); //laravel 8.x the time parameter is in seconds.
}
G::header($header);

View File

@@ -34,7 +34,7 @@ try {
* value in minutes for each session. We use 2 minutes, enough time to retrieve
* the error message if there is one.
*/
Cache::put('errorMessageIfNotAuthenticate', $e->getMessage(), 2);
Cache::put('errorMessageIfNotAuthenticate', $e->getMessage(), 120); //laravel 8.x the time parameter is in seconds.
}
G::header($header);

View File

@@ -1,6 +1,7 @@
<?php
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Crypt;
use ProcessMaker\BusinessModel\User;
use ProcessMaker\Core\System;
use ProcessMaker\Plugins\PluginRegistry;
@@ -52,7 +53,7 @@ try {
$enterprise->setup();
}
/*----------------------------------********---------------------------------*/
Cache::put('ldapMessageError', '', 2);
Cache::put('ldapMessageError', '', 120); //laravel 8.x the time parameter is in seconds.
$uid = $RBAC->VerifyLogin($usr, $pwd);
$ldapMessageError = Cache::pull('ldapMessageError');
$RBAC->cleanSessionFiles(72); //cleaning session files older than 72 hours
@@ -111,7 +112,7 @@ try {
$_SESSION["USERNAME_PREVIOUS1"] = (isset($_SESSION["USERNAME_PREVIOUS2"]))? $_SESSION["USERNAME_PREVIOUS2"] : "";
$_SESSION["USERNAME_PREVIOUS2"] = $usr;
$_SESSION["FAILED_LOGINS"] = (isset($frm['FAILED_LOGINS']))? $frm['FAILED_LOGINS'] : 0;
$_SESSION["FAILED_LOGINS"] = is_numeric(Cache::get("FAILED_LOGINS{$usr}")) ? Cache::get("FAILED_LOGINS{$usr}") : 0;
if (!isset($uid) || $uid < 0) {
if ($_SESSION["USERNAME_PREVIOUS1"] != "" && $_SESSION["USERNAME_PREVIOUS2"] != "" && $_SESSION["USERNAME_PREVIOUS1"] != $_SESSION["USERNAME_PREVIOUS2"]) {
@@ -138,6 +139,7 @@ try {
$oStatement = $oConnection->prepareStatement("UPDATE USERS SET USR_STATUS = 'INACTIVE' WHERE USR_UID = '" . $sUserUID . "'");
$oStatement->executeQuery();
unset($_SESSION['FAILED_LOGINS']);
Cache::forget("FAILED_LOGINS{$usr}");
$errLabel = G::LoadTranslation('ID_ACCOUNT') . ' "' . $usr . '" ' . G::LoadTranslation('ID_ACCOUNT_DISABLED_CONTACT_ADMIN');
}
//Log failed authentications
@@ -150,7 +152,7 @@ try {
if (strpos($_SERVER['HTTP_REFERER'], 'home/login') !== false) {
$d = serialize(['u' => $usr, 'p' => $pwd, 'm' => G::LoadTranslation($errLabel)]);
$urlLogin = $urlLogin . '?d=' . base64_encode($d);
$urlLogin = $urlLogin . '?d=' . Crypt::encryptString($d);
} else {
if (empty($ldapMessageError)) {
G::SendTemporalMessage($errLabel, "warning");
@@ -266,6 +268,7 @@ try {
//$_SESSION['USR_ROLENAME'] = $rol['ROL_NAME'];
unset($_SESSION['FAILED_LOGINS']);
Cache::forget("FAILED_LOGINS{$usr}");
// Assign the uid of user to userloggedobj
$RBAC->loadUserRolePermission($RBAC->sSystem, $uid);
@@ -404,7 +407,7 @@ try {
"browserTimeZoneOffset" => $_POST['form']['BROWSER_TIME_ZONE_OFFSET']
];
$messPassword['__USR_PASSWORD_CHANGE__'] = G::generateUniqueID();
Cache::put($messPassword['__USR_PASSWORD_CHANGE__'], $values, 2);
Cache::put($messPassword['__USR_PASSWORD_CHANGE__'], $values, 120); //laravel 8.x the time parameter is in seconds.
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/changePasswordpm3', '', $messPassword, 'sysLoginVerify');
G::RenderPage('publish');
session_destroy();

View File

@@ -1,5 +1,6 @@
<?php
use Illuminate\Support\Facades\Cache;
use ProcessMaker\Core\System;
use ProcessMaker\Plugins\PluginRegistry;
@@ -246,7 +247,7 @@ if (isset($oConf->aConfig["login_defaultLanguage"]) && $oConf->aConfig["login_de
$G_PUBLISH = new Publisher();
$version = explode('.', trim(file_get_contents(PATH_GULLIVER . 'VERSION')));
$version = isset($version[0]) ? intval($version[0]) : 0;
$aFields["FAILED_LOGINS"] = $sFailedLogins;
Cache::put("FAILED_LOGINS{$usernamePrevious2}", $sFailedLogins, 1800); //this value will be lost after 30 minutes
if ($version >= 3) {
$G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/loginpm3', '', $aFields, SYS_URI . 'login/authentication.php');
} else {

View File

@@ -1,5 +1,7 @@
<?php
use Illuminate\Support\Facades\Crypt;
/*----------------------------------********---------------------------------*/
//Browser Compatibility
$browserSupported = G::checkBrowserCompatibility();
@@ -10,7 +12,7 @@ if ($browserSupported==false) {
}
/*----------------------------------********---------------------------------*/
if (isset ($_POST['form']['USER_ENV'])) {
$data = base64_encode(serialize($_POST));
$data = Crypt::encryptString(serialize($_POST));
$url = sprintf('/sys%s/%s/%s/login/sysLoginVerify?d=%s', $_POST['form']['USER_ENV'], SYS_LANG, SYS_SKIN, $data);
G::header("location: $url");
die();

View File

@@ -1,7 +1,9 @@
<?php
use Illuminate\Support\Facades\Crypt;
if (array_key_exists("d", $_GET)) {
$str = base64_decode($_GET["d"]);
$str = Crypt::decryptString($_GET["d"]);
if (preg_match('/^a:[0-9]+:{/', $str) && !preg_match('/(^|;|{|})O:\+?[0-9]+:"/', $str)) {
$_POST = unserialize($str);
}

View File

@@ -62,16 +62,21 @@ if (is_file( $imagen )) {
//cpyMoreLogos($dir,$newDir);
$newDir .= PATH_SEP . $idDecode64;
$dir .= PATH_SEP . $idDecode64;
copy( $dir, $newDir );
showLogo( $newDir );
if (file_exists($dir)) {
copy($dir, $newDir);
showLogo( $newDir );
}
die();
}
function showLogo ($imagen)
{
$info = @getimagesize( $imagen );
$fp = fopen( $imagen, "rb" );
$fp = null;
if (file_exists($imagen)) {
$fp = fopen($imagen, "rb");
$info = @getimagesize($imagen);
}
if ($info && $fp) {
header( "Content-type: {$info['mime']}" );
fpassthru( $fp );

View File

@@ -329,6 +329,12 @@ button.x-btn-text:focus,
background-image: url(/skins/neoclassic/images/icons_silk/sprites.png);
height: 18px;
}
#FOLDER_PATH{
border: none;
background-image: none;
background-color: #f1f1f1;
cursor: default;
}
.ICON_FOLDERS {
/*.ss_folder_explore*/

View File

@@ -7,7 +7,7 @@
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon" />
{$header}
</head>
{if ($user_logged neq '' or $tracker neq '') and $timezone_status neq 'failed'}
{if ((isset($user_logged) && $user_logged neq '') or (isset($tracker) && $tracker neq '')) and $timezone_status neq 'failed'}
<body>
<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0" id="pm_main_table">
<tr>

View File

@@ -141,7 +141,6 @@ class GranularExporter
"vendor_version_code" => "Michelangelo",
"export_timestamp" => date("U"),
"export_datetime" => date("Y-m-d\TH:i:sP"),
"export_server_addr" => isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"].":".$_SERVER["SERVER_PORT"] : "Unknown",
"export_server_os" => PHP_OS ,
"export_server_php_version" => PHP_VERSION_ID,
);

View File

@@ -44,7 +44,6 @@ abstract class Exporter
"vendor_version_code" => "Michelangelo",
"export_timestamp" => date("U"),
"export_datetime" => date("Y-m-d\TH:i:sP"),
"export_server_addr" => isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"].":".$_SERVER["SERVER_PORT"] : "Unknown",
"export_server_os" => PHP_OS ,
"export_server_php_version" => PHP_VERSION_ID,
);

View File

@@ -1847,25 +1847,25 @@ class Delegation extends Model
* Return the open thread related to the task
*
* @param int $appNumber, Case number
* @param string $tasUid, The task uid
* @param int $delIndex
*
* @return array
*/
public static function getOpenThreads(int $appNumber, string $tasUid)
public static function getOpenThread(int $appNumber, int $delIndex)
{
$query = Delegation::query()->select();
$query->where('DEL_THREAD_STATUS', 'OPEN');
$query->where('DEL_FINISH_DATE', null);
$query->where('APP_NUMBER', $appNumber);
$query->where('TAS_UID', $tasUid);
$query->where('DEL_INDEX', $delIndex);
$results = $query->get();
$arrayOpenThreads = [];
$results->each(function ($item, $key) use (&$arrayOpenThreads) {
$arrayOpenThreads = $item->toArray();
$arrayOpenThread = [];
$results->each(function ($item, $key) use (&$arrayOpenThread) {
$arrayOpenThread = $item->toArray();
});
return $arrayOpenThreads;
return $arrayOpenThread;
}
/**

View File

@@ -0,0 +1,172 @@
<?php
namespace ProcessMaker\PHPReflectionClass;
use ReflectionClass;
/**
* Structure for the metadata of the class.
*/
class ClassStructure
{
/**
* Array of methods.
* @var array
*/
public $methods;
/**
* Array of properties.
* @var array
*/
public $properties;
/**
* Array of informations.
* @var array
*/
public $info;
/**
* Constructor of the class, require the path of source code.
* @param string $filename
* @return void
*/
public function __construct(string $filename = "")
{
$this->methods = [];
$this->properties = [];
$this->info = [];
if ($filename != "") {
$this->parseFromFile($filename);
}
}
/**
* Remove a property by name.
* @param string $name
* @return boolean
*/
public function deleteInfo(string $name): bool
{
if (array_key_exists($name, $this->info)) {
unset($this->info[$name]);
return true;
}
return false;
}
/**
* Get a property value by name.
* @param string $name
* @return mixed
*/
public function getInfo(string $name)
{
if (array_key_exists($name, $this->info)) {
return $this->info[$name];
} else {
return false;
}
}
/**
* Sets a property by name.
* @param string $name
* @param string $value
* @return void
*/
public function setInfo(string $name, string $value): void
{
$this->info[$name] = $value;
}
/**
* Adds a method to the class definition.
* @param type $method
* @return bool
*/
public function setMethod($method): bool
{
if (is_object($method) && (new ReflectionClass($method))->getShortName() == "MethodStructure") {
$this->methods[$method->getInfo("name")] = $method;
return true;
}
return false;
}
/**
* Parses a source code, require a filename.
* @param string $filename
* @return bool
*/
public function parseFromFile(string $filename): bool
{
if (file_exists($filename) && is_readable($filename)) {
$arrContents = file($filename);
$parsing = false;
$parsingBlocks = [];
$tempBlock = [];
foreach ($arrContents as $line) {
if (trim($line) == "/**") {
$parsing = true;
$blockstart = true;
} elseif ($parsing && trim($line) == "*/") {
$parsing = false;
$parsingBlocks[] = $tempBlock;
$tempBlock = [];
} else {
if ($parsing) {
if ($blockstart) {
$tempBlock[] = $line;
$blockstart = false;
} else {
$tempBlock[] = $line;
}
}
}
}
foreach ($parsingBlocks as $blockLines) {
$block = [];
foreach ($blockLines as $line) {
$str = strstr($line, "@");
$str = substr($str, 1);
if ($str !== false) {
$separatorPos = (strpos($str, " ") && strpos($str, "\t")) ? min(strpos($str, " "), strpos($str, "\t")) : (strpos($str, " ") ? strpos($str, " ") : (strpos($str, "\t") ? strpos($str, "\t") : strlen($str)));
$name = trim(substr($str, 0, $separatorPos));
$value = trim(substr($str, $separatorPos));
} else {
$name = "description";
$value = trim($line);
}
if ($name == "param" || $name == "description")
$block[$name][] = $value;
else
$block[$name] = $value;
}
if (array_key_exists("method", $block)) {
$tempMethod = new MethodStructure($block["method"]);
unset($block["method"]);
if (isset($block["param"]) && is_array($block["param"])) {
foreach ($block["param"] as $param) {
$tempMethod->setParam($param, "");
}
}
unset($block["param"]);
foreach ($block as $name => $value) {
$tempMethod->setInfo($name, $value);
}
$this->setMethod($tempMethod);
} elseif (array_key_exists("class", $block)) {
$this->setInfo("name", $block["class"]);
unset($block["class"]);
foreach ($block as $name => $value) {
$this->setInfo($name, $value);
}
}
}
return true;
}
return false;
}
}

View File

@@ -0,0 +1,69 @@
<?php
namespace ProcessMaker\PHPReflectionClass;
/**
* Structure for the metadata of the class method.
*/
class MethodStructure
{
/**
* Params property.
* @var array
*/
public $params;
/**
* Information property.
* @var array
*/
public $info;
/**
* Constructor, runs when new object instance is created, sets name of the method.
* @param string $name
* @return void
*/
public function __construct(string $name)
{
$this->info = [];
$this->params = [];
$this->setInfo("name", $name);
}
/**
* Get value of a property by name.
* @param string $name
* @return mixed
*/
public function getInfo(string $name)
{
if (array_key_exists($name, $this->info)) {
return $this->info[$name];
} else {
return false;
}
}
/**
* Sets a property with supplied name to a supplied value.
* @param string $name
* @param string $value
* @return void
*/
public function setInfo(string $name, string $value): void
{
$this->info[$name] = $value;
}
/**
* Sets a parameter with supplied name and value.
* @param string $name
* @param string $value
* @return void
*/
public function setParam(string $name, string $value): void
{
$this->params[$name] = $value;
}
}

View File

@@ -398,6 +398,7 @@ function newNoteHandler() {
});
Ext.getCmp('addCancelBtn').setIcon('/images/comment_add.gif');
Ext.getCmp('addCancelBtn').btnEl.dom.ariaLabel = _('ID_CASES_NOTES_ADD');
caseNotesWindow.getTopToolbar().hide();
Ext.getCmp("chkSendMail").hide();
@@ -411,6 +412,7 @@ function newNoteHandler() {
Ext.getCmp('addCancelBtn').setText('');
Ext.getCmp('addCancelBtn').setTooltip({ title: _('ID_CASES_NOTES_CANCEL') });
Ext.getCmp('addCancelBtn').setIcon('/images/cancel.png');
Ext.getCmp('addCancelBtn').btnEl.dom.ariaLabel = _('ID_CASES_NOTES_CANCEL');
caseNotesWindow.getTopToolbar().show();
Ext.getCmp("chkSendMail").show();

View File

@@ -89,11 +89,18 @@
);
Ext.onReady(function(){
var i;
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
Ext.QuickTips.init();
historyGridList();
if (document.getElementsByTagName('input')) {
document.getElementsByTagName('input')[0].ariaLabel = "pagination";
}
if (document.getElementsByTagName('button')) {
for (i = 0; i < document.getElementsByTagName('button').length; i+= 1) {
document.getElementsByTagName('button')[i].ariaLabel = document.getElementsByTagName('button')[i].getAttribute('id');
}
}
});
//!historyGridList|

View File

@@ -222,12 +222,20 @@
}
);
Ext.onReady(function(){
Ext.onReady(function() {
var i;
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
Ext.QuickTips.init();
historyDynaformGrid();
if (document.getElementsByTagName('input')) {
document.getElementsByTagName('input')[0].ariaLabel = "pagination";
}
if (document.getElementsByTagName('button')) {
for (i = 0; i < document.getElementsByTagName('button').length; i+= 1) {
document.getElementsByTagName('button')[i].ariaLabel = document.getElementsByTagName('button')[i].getAttribute('id');
}
}
});
var historyDynaformGridPreviewGlobal = {};

View File

@@ -217,11 +217,18 @@ var ActionTabFrameGlobal = '';
);
Ext.onReady(function(){
var i;
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
Ext.QuickTips.init();
messageHistoryGridList();
if (document.getElementsByTagName('input')) {
document.getElementsByTagName('input')[0].ariaLabel = "pagination";
}
if (document.getElementsByTagName('button')) {
for (i = 0; i < document.getElementsByTagName('button').length; i+= 1) {
document.getElementsByTagName('button')[i].ariaLabel = document.getElementsByTagName('button')[i].getAttribute('id');
}
}
});
//!historyGridList|

View File

@@ -2092,11 +2092,11 @@ var documentsTab = {
};
Ext.onReady(function() {
var viewport = new Ext.Viewport({
layout : 'border',
items: [treepanelmain, documentsTab]
});
var i,
viewport = new Ext.Viewport({
layout : 'border',
items: [treepanelmain, documentsTab]
});
// console.info("viewport -end");
@@ -2108,5 +2108,16 @@ Ext.onReady(function() {
parent.Ext.getCmp('debugPanel').hide();
parent.Ext.getCmp('debugPanel').ownerCt.doLayout();
}
if (document.getElementsByTagName('input')) {
document.getElementsByTagName('input')[0].ariaLabel = "filterField";
}
if (document.getElementsByTagName('input')) {
document.getElementsByTagName('input')[1].ariaLabel = "pagination";
}
if (document.getElementsByTagName('button')) {
for (i = 0; i < document.getElementsByTagName('button').length; i+= 1) {
document.getElementsByTagName('button')[i].ariaLabel = document.getElementsByTagName('button')[i].id;
}
}
});

View File

@@ -154,11 +154,18 @@
);
Ext.onReady(function(){
var i;
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
Ext.QuickTips.init();
generateDocumentGrid();
if (document.getElementsByTagName('input')) {
document.getElementsByTagName('input')[0].ariaLabel = "pagination";
}
if (document.getElementsByTagName('button')) {
for (i = 0; i < document.getElementsByTagName('button').length; i+= 1) {
document.getElementsByTagName('button')[i].ariaLabel = document.getElementsByTagName('button')[i].getAttribute('id');
}
}
});

View File

@@ -2784,8 +2784,17 @@ Ext.onReady ( function() {
}
});
// Add the additional 'advanced' VTypes -- [End]
var i;
if (document.getElementsByTagName('input')) {
for (i = 0; i < document.getElementsByTagName('input').length; i+= 1) {
document.getElementsByTagName('input')[i].ariaLabel = document.getElementsByTagName('input')[i].id;
}
}
if (document.getElementsByTagName('button')) {
for (i = 0; i < document.getElementsByTagName('button').length; i+= 1) {
document.getElementsByTagName('button')[i].ariaLabel = document.getElementsByTagName('button')[i].id;
}
}
});
function msgBox(title, msg, type){

View File

@@ -260,12 +260,19 @@
}
);
Ext.onReady(function(){
Ext.onReady(function() {
var i;
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
Ext.QuickTips.init();
uploadDocumentGrid();
if (document.getElementsByTagName('input')) {
document.getElementsByTagName('input')[0].ariaLabel = "pagination";
}
if (document.getElementsByTagName('button')) {
for (i = 0; i < document.getElementsByTagName('button').length; i+= 1) {
document.getElementsByTagName('button')[i].ariaLabel = document.getElementsByTagName('button')[i].getAttribute('id');
}
}
});

View File

@@ -392,7 +392,11 @@ Ext.onReady(function(){
items:[{
id: 'casesTab',
title: _('ID_CASE') +' ' + _APP_NUM,
frameConfig:{name:'openCaseFrame', id:'openCaseFrame'},
frameConfig:{
name:'openCaseFrame',
id:'openCaseFrame',
title:'openCaseFrame'
},
defaultSrc : uri,
loadMask:{msg: _('ID_LOADING_GRID') },
bodyStyle:{height: (PMExt.getBrowser().screen.height-60) + 'px', overflow:'hidden'},
@@ -680,6 +684,7 @@ Ext.onReady(function(){
} else {
fieldset = {
xtype : 'fieldset',
title: _('ID_INFORMATION'),
autoHeight : true,
defaults : {
width : 170,
@@ -688,11 +693,66 @@ Ext.onReady(function(){
style: 'font-weight: bold'
},
items : [
{fieldLabel: _('ID_TITLE'), text: data.PRO_TITLE},
{fieldLabel: _('ID_DESCRIPTION'), text: data.PRO_DESCRIPTION},
{fieldLabel: _('ID_CATEGORY'), text: data.PRO_CATEGORY_LABEL},
{fieldLabel: _('ID_AUTHOR'), text: data.PRO_AUTHOR},
{fieldLabel: _('ID_CREATE_DATE'), text: data.PRO_CREATE_DATE}
{
xtype: 'textfield',
fieldLabel: _('ID_TITLE'),
value: data.PRO_TITLE,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_DESCRIPTION'),
value: data.PRO_DESCRIPTION,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_CATEGORY'),
value: data.PRO_CATEGORY_LABEL,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_AUTHOR'),
value: data.PRO_AUTHOR,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_CREATE_DATE'),
value: data.PRO_CREATE_DATE,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
}
]
}
@@ -755,24 +815,91 @@ Ext.onReady(function(){
}
});
} else {
fieldset = {
xtype : 'fieldset',
autoHeight : true,
defaults : {
width : 170,
xtype:'label',
labelStyle : 'padding: 0px;',
style: 'font-weight: bold'
},
items : [
{fieldLabel: _('ID_TITLE'), text: data.TAS_TITLE},
{fieldLabel: _('ID_DESCRIPTION'), text: data.TAS_DESCRIPTION},
{fieldLabel: _('ID_INIT_DATE'), text: data.INIT_DATE_LABEL},
{fieldLabel: _('ID_DUE_DATE'), text: data.DUE_DATE_LABEL},
{fieldLabel: _('ID_FINISH_DATE'), text: data.FINISH},
{fieldLabel: _('ID_TASK_DURATION'), text: data.DURATION}
]
}
fieldset = {
xtype : 'fieldset',
title: _('ID_INFORMATION'),
autoHeight : true,
defaults : {
width : 170,
xtype:'label',
labelStyle : 'padding: 0px;',
style: 'font-weight: bold'
},
items : [
{
xtype: 'textfield',
fieldLabel: _('ID_TITLE'),
value: data.TAS_TITLE,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_DESCRIPTION'),
value: data.TAS_DESCRIPTION,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_INIT_DATE'),
value: data.INIT_DATE_LABEL,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_DUE_DATE'),
value: data.DUE_DATE_LABEL,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_FINISH_DATE'),
value: data.FINISH,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_TASK_DURATION'),
value: data.DURATION,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
}
]
}
var frm = new Ext.FormPanel( {
labelAlign : 'right',
@@ -1322,7 +1449,8 @@ Ext.onReady(function(){
url : 'ajaxListener' ,
params : {action : 'verifySession'},
success: function ( result, request ) {
var data = Ext.util.JSON.decode(result.responseText);
var data = Ext.util.JSON.decode(result.responseText),
i;
if( data.lostSession ) {
Ext.Msg.show({
title: _('ID_ERROR'),
@@ -1353,8 +1481,17 @@ Ext.onReady(function(){
}
});
} else {
winReassignInCasesList.show();
grdpnlUsersToReassign.store.load();
winReassignInCasesList.show();
grdpnlUsersToReassign.store.load();
if (document.getElementsByTagName('input')) {
document.getElementsByTagName('input')[1].ariaLabel = "search";
document.getElementsByTagName('input')[2].ariaLabel = "pagination";
}
if (document.getElementsByTagName('button')) {
for (i = 0; i < document.getElementsByTagName('button').length; i+= 1) {
document.getElementsByTagName('button')[i].ariaLabel = document.getElementsByTagName('button')[i].getAttribute('id');
}
}
}
},
failure: function ( result, request) {
@@ -1439,8 +1576,30 @@ Ext.onReady(function(){
style: 'font-weight: bold'
},
items : [
{fieldLabel: _("ID_CASE"), text: stringReplace("\\: ", "", _APP_NUM)},
{fieldLabel: _("ID_PAUSE_DATE"), text: _ENV_CURRENT_DATE},
{
xtype: 'textfield',
fieldLabel: _('ID_CASE'),
value: stringReplace("\\: ", "", _APP_NUM),
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
{
xtype: 'textfield',
fieldLabel: _('ID_PAUSE_DATE'),
value: _ENV_CURRENT_DATE,
readOnly: true,
style: {
border: 'none',
backgroundImage: 'none',
fontWeight: 'bold',
width: '170px'
}
},
new Ext.form.DateField({
id: 'unpauseDate',
format: 'Y-m-d',

View File

@@ -633,7 +633,7 @@ Ext.onReady(function () {
value: 'root',
allowBlank: false,
validator: function (v) {
var t = /^[.a-zA-Z_\-]+$/;
var t = /^[0-9\.a-zA-Z_\-]+$/;
return t.test(v);
},
listeners: {

View File

@@ -4,7 +4,7 @@
overflow-y: hidden;
}
</style>
<iframe name="adminFrame" id="adminFrame" src ="clientSetup" width="99%" height="768" frameborder="0">
<iframe title="adminFrame" name="adminFrame" id="adminFrame" src ="clientSetup" width="99%" height="768" frameborder="0">
<p>Your browser does not support iframes.</p>
</iframe>
</body>

View File

@@ -181,7 +181,7 @@ Ext.onReady(function(){
},
columns: [
{id:'CATEGORY_UID', dataIndex: 'CATEGORY_UID', hidden:true, hideable:false},
{header: _('ID_CATEGORY_NAME'), dataIndex: 'CATEGORY_NAME', width: 500, hidden:false, align:'left'},
{header: _('ID_CATEGORY_NAME'), dataIndex: 'CATEGORY_NAME', width: 500, hidden:false, renderer: categoryNameRenderer, align:'left'},
{header: _('ID_PROCESSES'), dataIndex: 'TOTAL_PROCESSES', width: 100, hidden: false, align: 'center'}
]
});
@@ -282,6 +282,11 @@ Ext.onReady(function(){
});
});
//Sanitize output
categoryNameRenderer = function (value) {
return Ext.util.Format.htmlEncode(value);
};
//Funtion Handles Context Menu Opening
onMessageContextMenu = function (grid, rowIndex, e) {
e.stopEvent();

View File

@@ -26,10 +26,19 @@
<en><![CDATA[Next step]]></en>
</NEXT_STEP>
<JS type="javascript"><![CDATA[
var nextStep = function(oForm)
{
oForm.action = 'cases_NextStep';
oForm.submit();
};
var i,
span,
nextStep = function(oForm) {
oForm.action = 'cases_NextStep';
oForm.submit();
};
label1 = document.getElementsByTagName('label')[0];
label2 = document.getElementsByTagName('label')[1];
span1 = document.createElement('span');
span1.innerHTML = label1.innerHTML;
span2 = document.createElement('span');
span2.innerHTML = label2.innerHTML;
label1.parentNode.replaceChild(span1, label1);
label2.parentNode.replaceChild(span2, label2);
]]></JS>
</dynaForm>

View File

@@ -16,8 +16,6 @@
{$form.USR_PASSWORD_MASK}
{$form.USER_LANG}
{$form.URL}
{$form.FAILED_LOGINS}
</fieldset>
<fieldset>
<label class="panel-login">

View File

@@ -19,12 +19,11 @@ SELECT LANG_ID, LANG_NAME FROM langOptions
<en><![CDATA[Language]]></en>
</USER_LANG>
<URL type="hidden"/>
<FAILED_LOGINS type="hidden"/>
<LOGIN_VERIFY_MSG type="private" showInTable="0"/>
<BSUBMIT type="button">
<en><![CDATA[Login]]></en>
</BSUBMIT>
<FORGOT_PASWORD_LINK type="link" link="forgotPassword" onclick="" colAlign="right" colWidth="135" style="display:none;">
<FORGOT_PASWORD_LINK type="link" link="forgotPassword" onclick="" colAlign="right" colWidth="135">
<en><![CDATA[Forgot Password]]></en>
</FORGOT_PASWORD_LINK>
<JS type="javascript"><![CDATA[
@@ -95,9 +94,10 @@ window.onload= function(){
}
};
// enable/disable forgot password link
if(flagForgotPassword == 'on' || flagForgotPassword == '1') {
document.getElementById("form[FORGOT_PASWORD_LINK]").style.display = 'block';//hideRowById('FORGOT_PASWORD_LINK');
// delete or not forgot password link
if(flagForgotPassword != 'on' && flagForgotPassword != '1') {
var element = document.getElementById("form[FORGOT_PASWORD_LINK]");
element.parentNode.removeChild(element);
}
var panel;