From c5a63873b4e2d31d4cddb9e20abb19b9948c6b7c Mon Sep 17 00:00:00 2001 From: hjonathan Date: Mon, 7 Aug 2017 08:51:02 -0400 Subject: [PATCH] HOR-2933 HOR-2933-B update --- framework/src/Maveriks/Util/Common.php | 37 ++++++++++++++++--- gulliver/system/class.g.php | 28 ++++++++++---- .../methods/processes/processes_Export.php | 2 +- .../Migrator/GranularExporter.php | 2 +- .../src/ProcessMaker/Importer/Importer.php | 2 +- .../src/ProcessMaker/Services/Api/Project.php | 2 +- 6 files changed, 56 insertions(+), 17 deletions(-) diff --git a/framework/src/Maveriks/Util/Common.php b/framework/src/Maveriks/Util/Common.php index 2ccbd9c28..9ad136593 100644 --- a/framework/src/Maveriks/Util/Common.php +++ b/framework/src/Maveriks/Util/Common.php @@ -52,16 +52,18 @@ class Common } $files = glob("$path/$singlePattern", $flags); - $dirs = glob("$path/*", GLOB_MARK|GLOB_ONLYDIR|GLOB_NOSORT); + $dirs = glob("$path/*", GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT); - if(is_array($dirs)){ + if (is_array($dirs)) { foreach ($dirs as $dir) { $files = array_merge($files, self::rglob("$dir/$singlePattern", $flags)); } } if ($onlyFiles) { - $files = array_filter($files, function($v) { return is_dir($v) ? false : true;}); + $files = array_filter($files, function ($v) { + return is_dir($v) ? false : true; + }); } return $files; @@ -96,7 +98,7 @@ class Common foreach ($files as $file) { $filename = basename($file); - if (preg_match('/'.$pattern.'/', $filename, $match)) { + if (preg_match('/' . $pattern . '/', $filename, $match)) { if ($maxVersion < $match[1]) { $maxVersion = $match[1]; @@ -107,6 +109,29 @@ class Common return $maxVersion; } + /** + * This method get the last version of file when exists a special characters + * @param $pattern + * @param $extension + * @param int $flag + * @return int + */ + public static function getLastVersionSpecialCharacters($dir, $pattern, $extension, $flag = 0) + { + $files = glob($dir . quotemeta($pattern) . "-*." . $extension, $flag); + $maxVersion = 0; + $pattern = preg_quote(basename($pattern)) . '-([0-9\.]+)pmx'; + foreach ($files as $file) { + $filename = basename($file); + if (preg_match('/' . $pattern . '/', $filename, $match)) { + if ($maxVersion < $match[1]) { + $maxVersion = $match[1]; + } + } + } + return $maxVersion; + } + public static function parseIniFile($filename) { $data = @parse_ini_file($filename, true); @@ -141,8 +166,8 @@ class Common } while ($parent_folder_path = array_pop($folder_path)) { - if (! @is_dir($parent_folder_path)) { - if (! @mkdir($parent_folder_path, $rights)) { + if (!@is_dir($parent_folder_path)) { + if (!@mkdir($parent_folder_path, $rights)) { umask($oldumask); } } diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 4332c12fa..e628699c6 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -3221,20 +3221,34 @@ class G * @param (array) additional characteres map * */ - public function inflect ($string, $replacement = '_', $map = array()) + public function inflect($string, $replacement = '_', $map = array()) { - if (is_array( $replacement )) { + if (is_array($replacement)) { $map = $replacement; $replacement = '_'; } - $quotedReplacement = preg_quote( $replacement, '/' ); + $quotedReplacement = preg_quote($replacement, '/'); - $default = array ('/à|á|å|â/' => 'a','/è|é|ê|ẽ|ë/' => 'e','/ì|í|î/' => 'i','/ò|ó|ô|ø/' => 'o','/ù|ú|ů|û/' => 'u','/ç/' => 'c','/ñ/' => 'n','/ä|æ/' => 'ae','/ö/' => 'oe','/ü/' => 'ue','/Ä/' => 'Ae','/Ü/' => 'Ue','/Ö/' => 'Oe','/ß/' => 'ss','/\.|\,|\:|\-|\\|\//' => " ",'/\\s+/' => $replacement - ); + $default = array('/à|á|å|â/' => 'a', + '/è|é|ê|ẽ|ë/' => 'e', + '/ì|í|î/' => 'i', + '/ò|ó|ô|ø/' => 'o', + '/ù|ú|ů|û/' => 'u', + '/ç/' => 'c', + '/ñ/' => 'n', + '/ä|æ/' => 'ae', + '/ö/' => 'oe', + '/ü/' => 'ue', + '/Ä/' => 'Ae', + '/Ü/' => 'Ue', + '/Ö/' => 'Oe', + '/ß/' => 'ss', + '/[\.|\,|\+|\"|\:|\;|\-|\\|\/]/' => " ", + '/\\s+/' => $replacement); - $map = array_merge( $default, $map ); - return preg_replace( array_keys( $map ), array_values( $map ), $string ); + $map = array_merge($default, $map); + return preg_replace(array_keys($map), array_values($map), $string); } /** diff --git a/workflow/engine/methods/processes/processes_Export.php b/workflow/engine/methods/processes/processes_Export.php index 524bbe49a..5d4f4c803 100644 --- a/workflow/engine/methods/processes/processes_Export.php +++ b/workflow/engine/methods/processes/processes_Export.php @@ -42,7 +42,7 @@ try { $projectName = $exporter->getProjectName(); $getProjectName = $exporter->truncateName($projectName, false); - $version = ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1; + $version = ProcessMaker\Util\Common::getLastVersionSpecialCharacters($outputDir, $getProjectName, "pmx") + 1; $outputFilename = sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); $outputFilename = $exporter->saveExport($outputDir . $outputFilename); /*----------------------------------********---------------------------------*/ diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php index 461f17e3d..60afe6e34 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php @@ -64,7 +64,7 @@ class GranularExporter $this->prjName = $projectData['PRJ_NAME']; $getProjectName = $this->publisher->truncateName($projectData['PRJ_NAME'], false); $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; - $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx2") + 1; + $version = \ProcessMaker\Util\Common::getLastVersionSpecialCharacters($outputDir, $getProjectName, "pmx2") + 1; $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx2"); $bpnmDefinition = array( diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index 1e89f110f..94c4a3167 100644 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -771,7 +771,7 @@ abstract class Importer $getProjectName = $exporter->truncateName($exporter->getProjectName(), false); $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; - $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1; + $version = \ProcessMaker\Util\Common::getLastVersionSpecialCharacters($outputDir, $getProjectName, "pmx") + 1; $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); $exporter->setMetadata("export_version", $version); diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index 0496db5b0..0b57f33e2 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -182,7 +182,7 @@ class Project extends Api $getProjectName = $exporter->truncateName($exporter->getProjectName(), false); $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; - $version = \ProcessMaker\Util\Common::getLastVersion($outputDir . $getProjectName . "-*.pmx") + 1; + $version = \ProcessMaker\Util\Common::getLastVersionSpecialCharacters($outputDir, $getProjectName, "pmx") + 1; $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); $exporter->setMetadata("export_version", $version);