diff --git a/workflow/engine/classes/class.derivation.php b/workflow/engine/classes/class.derivation.php index 567588251..6938842c8 100644 --- a/workflow/engine/classes/class.derivation.php +++ b/workflow/engine/classes/class.derivation.php @@ -940,7 +940,7 @@ class Derivation break; case TASK_FINISH_TASK: $iAppThreadIndex = $appFields['DEL_THREAD']; - $this->case->closeAppThread( $currentDelegation['APP_UID'], $iAppThreadIndex ); + $this->case->closeAppThread($currentDelegation['APP_UID'], $iAppThreadIndex); break; default: //Get all siblingThreads diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/PMXPublisher.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/PMXPublisher.php index 13371f7dc..31c665a8e 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/PMXPublisher.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/PMXPublisher.php @@ -27,6 +27,11 @@ class PMXPublisher return $filename; } + /** + * @param $outputFile + * @param bool $dirName + * @return mixed|string + */ public function truncateName($outputFile, $dirName = true) { $limit = 200; @@ -34,23 +39,27 @@ class PMXPublisher $limit = 150; } if ($dirName) { - if (strlen(basename($outputFile)) >= $limit) { - $lastPos = strrpos(basename($outputFile), '.'); - $fileName = substr(basename($outputFile), 0, $lastPos); + $currentLocale = setlocale(LC_CTYPE, 0); + setlocale(LC_CTYPE, 'en_US.UTF-8'); + $filename = basename($outputFile); + if (strlen($filename) >= $limit) { + $lastPos = strrpos($filename, '.'); + $fileName = substr($filename, 0, $lastPos); $newFileName = \G::inflect($fileName); $excess = strlen($newFileName) - $limit; - $newFileName = substr($newFileName, 0, strlen($newFileName) - $excess); + $newFileName = substr($newFileName, 0, strlen($newFileName) - $excess - 1); $newOutputFile = str_replace($fileName, $newFileName, $outputFile); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $newOutputFile = str_replace("/", DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR, $newOutputFile); } $outputFile = $newOutputFile; } + setlocale(LC_CTYPE, $currentLocale); } else { $outputFile = \G::inflect($outputFile); if (strlen($outputFile) >= $limit) { $excess = strlen($outputFile) - $limit; - $newFileName = substr($outputFile, 0, strlen($outputFile) - $excess); + $newFileName = substr($outputFile, 0, strlen($outputFile) - $excess - 1); $outputFile = $newFileName; } } diff --git a/workflow/engine/src/ProcessMaker/Exporter/XmlExporter.php b/workflow/engine/src/ProcessMaker/Exporter/XmlExporter.php index fa817dc02..d85d76d5e 100644 --- a/workflow/engine/src/ProcessMaker/Exporter/XmlExporter.php +++ b/workflow/engine/src/ProcessMaker/Exporter/XmlExporter.php @@ -161,31 +161,40 @@ class XmlExporter extends Exporter return $this->dom->createCDATASection($value); } } - - public function truncateName($outputFile,$dirName = true) + + /** + * @param $outputFile + * @param bool $dirName + * @return mixed|string + */ + public function truncateName($outputFile, $dirName = true) { $limit = 200; if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { $limit = 150; } - if($dirName) { - if (strlen(basename($outputFile)) >= $limit) { - $lastPos = strrpos(basename($outputFile),'.'); - $fileName = substr(basename($outputFile),0,$lastPos); + if ($dirName) { + $currentLocale = setlocale(LC_CTYPE, 0); + setlocale(LC_CTYPE, 'en_US.UTF-8'); + $filename = basename($outputFile); + if (strlen($filename) >= $limit) { + $lastPos = strrpos($filename, '.'); + $fileName = substr($filename, 0, $lastPos); $newFileName = \G::inflect($fileName); $excess = strlen($newFileName) - $limit; - $newFileName = substr($newFileName,0,strlen($newFileName)-$excess); - $newOutputFile = str_replace($fileName,$newFileName,$outputFile); + $newFileName = substr($newFileName, 0, strlen($newFileName) - $excess - 1); + $newOutputFile = str_replace($fileName, $newFileName, $outputFile); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $newOutputFile = str_replace("/", DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR, $newOutputFile); + $newOutputFile = str_replace("/", DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR, $newOutputFile); } $outputFile = $newOutputFile; - } + } + setlocale(LC_CTYPE, $currentLocale); } else { $outputFile = \G::inflect($outputFile); if (strlen($outputFile) >= $limit) { $excess = strlen($outputFile) - $limit; - $newFileName = substr($outputFile,0,strlen($outputFile)-$excess); + $newFileName = substr($outputFile, 0, strlen($outputFile) - $excess - 1); $outputFile = $newFileName; } } diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index e33f5902e..43adb6cb0 100644 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -813,9 +813,11 @@ function newProcess(params) fieldLabel: _('ID_TITLE'), xtype:'textfield', width: 260, + maxLength: 100, maskRe: /^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\...*)(\..+)?$)[^\x00-\x1f\\?*\";|/]+$/i, allowBlank: false, vtype: "textWithoutTags", + autoCreate: {tag: 'input', type: 'text', size: '100', autocomplete: 'off', maxlength: '100'}, listeners: { 'focus' : function(value){ document.getElementById("PRO_TITLE").onpaste = function() {