Adding more improvements to increase performance, by now, it is just affecting for API Rest Requests

This commit is contained in:
Erik Amaru Ortiz
2014-03-12 18:20:35 -04:00
parent e649e829f5
commit 3026937e08
16 changed files with 2335 additions and 1012 deletions

View File

@@ -1,128 +1,6 @@
<?php
namespace ProcessMaker\Util;
class Common
class Common extends \Maveriks\Util\Common
{
/**
* Recursive version of glob php standard function
*
* @author Erik Amaru Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
* @param string $pattern pattern for native glob function
* @param int|string $flags any valid flag for glob function
* @param bool $onlyFiles to filter return array with only matched files, or all matched results
* @return array array containing the recursive glob results
*
* Example:
*
* Common::rglob("/example/path/*");
*
* it will returns:
*
* Array
* (
* [0] => /example/path/README.txt
* [1] => /example/path/composer.json
* [4] => /example/path/one/one_text.txt
* [6] => /example/path/two/two_text.txt
* [7] => /example/path/two/two_one/two_one_text.txt
* [8] => /example/path/two/two_one/build.json
* )
*
* Example 2:
*
* Common::rglob("/example/path/*.json");
*
* It will returns:
*
* Array
* (
* [0] => /example/path/composer.json
* [1] => /example/path/two/two_one/build.json
* )
*/
public static function rglob($pattern, $flags = 0, $onlyFiles = false)
{
$singlePattern = basename($pattern);
if (strpos($singlePattern, "*") !== false) {
$path = rtrim(str_replace($singlePattern, "", $pattern), DIRECTORY_SEPARATOR);
} else {
$singlePattern = "";
$path = $pattern;
}
$files = glob("$path/$singlePattern", $flags);
$dirs = glob("$path/*", GLOB_MARK|GLOB_ONLYDIR|GLOB_NOSORT);
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;});
}
return $files;
}
/**
* Returns the last version given a pattern of file name
*
* @param string $pattern a valid pattern for glob(...) native function
* @param int $flag php flags for glob(...) native function
* @return int|string
*
* Example:
* - Given the following files inside a directory:
* /example/path/myApplication-v1.tar
* /example/path/myApplication-v2.tar
* /example/path/myApplication-v3.tar
* /example/path/myApplication-v5.tar
* /example/path/myApplication-v7.tar
*
* $lastVer = ProcessMaker\Util\Common::getLastVersion("/example/path/myApplication-*.tar");
*
* It will returns: 7
*/
public static function getLastVersion($pattern, $flag = 0)
{
$files = glob($pattern, $flag);
$maxVersion = 0;
$pattern = str_replace("*", '([0-9\.]+)', basename($pattern));
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);
$result = array();
if ($data === false) {
throw new \Exception("Error parsing ini file: $filename");
}
foreach ($data as $key => $value) {
if (strpos($key, ':') !== false) {
list($key, $subSection) = explode(':', $key);
$result[trim($key)][trim($subSection)] = $value;
} else {
$result[$key] = $value;
}
}
return $result;
}
}

View File

@@ -0,0 +1,14 @@
<?php
namespace ProcessMaker\Util;
/**
* Singleton Class Logger
*
* This Utility is useful to log local messages
* @package ProcessMaker\Util
* @author Erik Amaru Ortiz <aortiz.erik@gmail.com, erik@colosa.com>
*/
class Logger extends \Maveriks\Util\Logger
{
}

View File

@@ -30,13 +30,19 @@ try {
);
}
/** @var Composer\Autoload\ClassLoader $loader */
$loader = include $rootDir . "vendor" . DIRECTORY_SEPARATOR . "autoload.php";
$loader->add("", $rootDir . 'src/');
$loader->add("", $rootDir . 'workflow/engine/src/');
$loader->add("", $rootDir . 'workflow/engine/classes/model/');
require $rootDir . "framework/src/Maveriks/Util/ClassLoader.php";
$app = new ProcessMaker\WebApplication();
$loader = Maveriks\Util\ClassLoader::getInstance();
$loader->add($rootDir . 'framework/src/', "Maveriks");
$loader->add($rootDir . 'workflow/engine/src/', "ProcessMaker");
$loader->add($rootDir . 'workflow/engine/src/');
$loader->add($rootDir . 'workflow/engine/classes/model/');
// and vendors to autoloader
$loader->add($rootDir . 'vendor/luracast/restler/vendor', "Luracast");
$loader->add($rootDir . 'vendor/bshaffer/oauth2-server-php/src/', "OAuth2");
$app = new Maveriks\WebApplication();
$app->setRootDir($rootDir);
$app->setRequestUri($_SERVER['REQUEST_URI']);
@@ -44,14 +50,20 @@ try {
switch ($stat)
{
case ProcessMaker\WebApplication::RUNNING_WORKFLOW:
case Maveriks\WebApplication::RUNNING_WORKFLOW:
include "sysGeneric.php";
break;
case ProcessMaker\WebApplication::RUNNING_API:
$app->run(ProcessMaker\WebApplication::SERVICE_API);
case Maveriks\WebApplication::RUNNING_API:
$app->run(Maveriks\WebApplication::SERVICE_API);
break;
}
} catch (Exception $e) {
die($e->getMessage());
$view = new Maveriks\Pattern\Mvc\PhtmlView($rootDir . "framework/src/templates/Exception.phtml");
$view->set("message", $e->getMessage());
$view->set("exception", $e);
$response = new Maveriks\Http\Response($view->getOutput(), 503);
$response->send();
}

File diff suppressed because it is too large Load Diff