Refactoring Bpmn/Workflow handling layer (1st commit)

This commit is contained in:
Erik Amaru Ortiz
2014-01-30 19:15:10 -04:00
parent 27f077838b
commit 70d61efda0
17 changed files with 359 additions and 42 deletions

1
.gitignore vendored
View File

@@ -28,3 +28,4 @@ workflow/public_html/lib/
workflow/public_html/lib-dev/
session.data
behat.yml
workflow/engine/src/Tests/config.ini

View File

@@ -794,7 +794,7 @@ class Bootstrap
* @param string $strClass
* @return void
*/
public function LoadClass($strClass)
public static function LoadClass($strClass)
{
$classfile = Bootstrap::ExpandPath("classes") . 'class.' . $strClass . '.php';
if (!file_exists($classfile)) {
@@ -818,7 +818,7 @@ class Bootstrap
* @param string $strClass
* @return void
*/
public function LoadThirdParty($sPath, $sFile)
public static function LoadThirdParty($sPath, $sFile)
{
$classfile = PATH_THIRDPARTY . $sPath . '/' . $sFile . ((substr($sFile, 0, - 4) !== '.php') ? '.php' : '');
return require_once ($classfile);
@@ -1068,7 +1068,7 @@ class Bootstrap
* @param string $strPath
* @return string
*/
public function expandPath($strPath = '')
public static function expandPath($strPath = '')
{
$res = "";
$res = PATH_CORE;

View File

@@ -2078,7 +2078,7 @@ class G
* @param eter array data // erik: associative array within data input to replace for formatted string i.e "any messsage {replaced_label} that contains a replace label"
* @return string
*/
public function LoadTranslation ($msgID, $lang = SYS_LANG, $data = null)
public static function LoadTranslation ($msgID, $lang = SYS_LANG, $data = null)
{
global $translation;
@@ -2746,7 +2746,7 @@ class G
* @access public
* @return int
*/
public function generateUniqueID ()
public static function generateUniqueID ()
{
do {
$sUID = str_replace( '.', '0', uniqid( rand( 0, 999999999 ), true ) );

View File

@@ -183,7 +183,7 @@ class Content extends BaseContent
* @param string $ConValue
* @return variant
*/
public function addContent ($ConCategory, $ConParent, $ConId, $ConLang, $ConValue)
public static function addContent ($ConCategory, $ConParent, $ConId, $ConLang, $ConValue)
{
try {
if ($ConLang != 'en') {

View File

@@ -869,7 +869,7 @@ class Process extends BaseProcess
$limit = 25;
$start = 0;
$memcache = &PMmemcached::getSingleton( SYS_SYS );
$memcache = PMmemcached::getSingleton( SYS_SYS );
for ($start = 0; $start <= 50 - 1; $start ++) {
$memkey = "processList-allProcesses-" . ($start * $limit) . "-" . $limit;

View File

@@ -63,7 +63,7 @@ class ProcessProxy extends HttpProxyController
$sProUid = $oProcessMap->createProcess( $processData );
//call plugins
//call pluginsx
$oData['PRO_UID'] = $sProUid;
$oData['PRO_TEMPLATE'] = isset( $httpData->PRO_TEMPLATE ) && $httpData->PRO_TEMPLATE != '' ? $httpData->PRO_TEMPLATE : '';
$oData['PROCESSMAP'] = $oProcessMap;

View File

@@ -499,17 +499,21 @@ class Model
$result = self::updateDiagram($prjUid, $process->getProUid(), $diff);
self::log("Method: ".__METHOD__, 'Returns: ', $result);
return $result;
}
public static function updateDiagram($prjUid, $proUid, $diff)
{
self::log('executing: updateDiagram() with params -> ', $prjUid, $proUid, $diff);
self::log("Method: ".__METHOD__, 'Params: ', "\$prjUid: $prjUid", "\$proUid: $proUid", "\$diff:", $diff);
//return false;
$uids = array();
// Updating objects
/*
* Updating Records
*/
foreach ($diff['updated'] as $element => $items) {
foreach ($items as $data) {
$data = array_change_key_case((array) $data, CASE_UPPER);
@@ -550,7 +554,37 @@ class Model
}
}
// Creating new records
/*
* Deleting Records
*/
foreach ($diff['deleted'] as $element => $items) {
foreach ($items as $uid) {
$data = array_change_key_case((array) $data, CASE_UPPER);
switch ($element) {
case 'laneset':
break;
case 'lanes':
break;
case 'activities':
$activity = ActivityPeer::retrieveByPK($uid);
$activity->delete();
break;
case 'events':
break;
case 'gateways':
break;
case 'flows':
break;
case 'artifacts':
break;
}
}
}
/*
* Creating new records
*/
foreach ($diff['new'] as $element => $items) {
foreach ($items as $data) {
$data = array_change_key_case((array) $data, CASE_UPPER);
@@ -586,35 +620,6 @@ class Model
}
}
// Creating new records
foreach ($diff['deleted'] as $element => $items) {
foreach ($items as $uid) {
$data = array_change_key_case((array) $data, CASE_UPPER);
switch ($element) {
case 'laneset':
break;
case 'lanes':
break;
case 'activities':
$activity = ActivityPeer::retrieveByPK($uid);
$activity->delete();
$uidData['new_uid'] = $activity->getActUid();
$uids[] = $uidData;
break;
case 'events':
break;
case 'gateways':
break;
case 'flows':
break;
case 'artifacts':
break;
}
}
}
return $uids;
}
@@ -914,7 +919,7 @@ class Model
$me = Logger::getInstance();
$args = func_get_args();
array_unshift($args, 'Class '.__CLASS__.': ');
//array_unshift($args, 'Class '.__CLASS__.' ');
call_user_func_array(array($me, 'setLog'), $args);
}

View File

@@ -0,0 +1,9 @@
<?php
namespace ProcessMaker\Project\Adapter;
use ProcessMaker\Project\ProjectHandler;
class BpmnProject extends ProjectHandler
{
}

View File

@@ -0,0 +1,9 @@
<?php
namespace ProcessMaker\Project\Adapter;
use ProcessMaker\Project\Adapter\BpmnHandler;
class WorkflowBpmnProject extends BpmnHandler
{
}

View File

@@ -0,0 +1,56 @@
<?php
namespace ProcessMaker\Project\Adapter;
use \Process;
use \Task;
use ProcessMaker\Project\ProjectHandler;
class WorkflowProject extends ProjectHandler
{
public function create($data)
{
try {
// setting defaults
$data['TASKS'] = array_key_exists('TASKS', $data) ? $data['TASKS'] : array();
$data['ROUTES'] = array_key_exists('ROUTES', $data) ? $data['ROUTES'] : array();
// Create project
$process = new Process();
$proUid = $process->create($data, false);
// Create project's tasks
foreach ($data['TASKS'] as $taskData) {
$taskData['PRO_UID'] = $proUid;
$task = new Task();
$task->create($taskData, false);
}
// Create project's routes
foreach ($data['ROUTES'] as $route) {
}
} catch (Exception $e) {
//throw new \RuntimeException($e);
echo $e->getMessage() . PHP_EOL;
echo $e->getTraceAsString() . PHP_EOL;
die;
}
}
public function update($prjUid, $data)
{
// TODO: Implement update() method.
}
public function delete($prjUid)
{
// TODO: Implement delete() method.
}
public function load($prjUid)
{
// TODO: Implement load() method.
}
}

View File

@@ -0,0 +1,35 @@
<?php
namespace ProcessMaker\Project;
use ProcessMaker\Util\Logger;
abstract class ProjectHandler implements ProjectHandlerInterface
{
public abstract function create($data);
public abstract function update($prjUid, $data);
public abstract function delete($prjUid);
public abstract function load($prjUid);
/**
* Log in ProcessMaker Standard Output if debug mode is enabled.
*
* @author Erik Amaru Ortiz <aortiz.erik at icloud dot com>
* @internal param $args this method receives N-Arguments dynamically with any type, string, array, object, etc
* it means that you ca use it by example:
*
* self::log("Beginning transaction");
* self::log("Method: ", __METHOD__, 'Returns: ', $result);
*
*/
public static function log()
{
if (System::isDebugMode()) {
$me = Logger::getInstance();
$args = func_get_args();
//array_unshift($args, 'Class '.__CLASS__.' ');
call_user_func_array(array($me, 'setLog'), $args);
}
}
}

View File

@@ -0,0 +1,10 @@
<?php
namespace ProcessMaker\Project;
interface ProjectHandlerInterface
{
public function create($data);
public function update($prjUid, $data);
public function delete($prjUid);
public function load($prjUid);
}

View File

@@ -38,8 +38,10 @@ class Logger
$arg = print_r($arg, true);
}
$stat = fwrite($this->fp, "- " . date('Y-m-d H:i:s') . " " . $arg . PHP_EOL);
fwrite($this->fp, "- " . date('Y-m-d H:i:s') . " " . $arg . PHP_EOL);
}
if (count($args) > 1)
fwrite($this->fp, PHP_EOL);
}
public static function log()

View File

@@ -0,0 +1,43 @@
<?php
if (! class_exists("Propel")) {
include_once "../../bootstrap.php";
}
use \ProcessMaker\Project\Adapter\WorkflowProject;
class WorkflowProjectTest extends PHPUnit_Framework_TestCase
{
protected $workflowProject;
protected function setUp()
{
$this->workflowProject = new WorkflowProject();
}
public function testCreate()
{
$data = array(
"PRO_UID" => "b72405854591363786050152eabf59dc",
"PRO_TITLE" => "Test Project #1",
"PRO_DESCRIPTION" => "Description for - Test Project #1",
"PRO_CATEGORY" => "",
"USR_UID" => "00000000000000000000000000000001",
"TASKS" => array(
array(
"TAS_UID" => "85459136378bf56050152ea9dcb72405",
"TAS_TITLE" => "task_1",
"TAS_POSX" => "50",
"TAS_POSY" => "50",
"TAS_WIDTH" => "100",
"TAS_HEIGHT" => "25"
)
),
"ROUTES" => array()
);
$result = $this->workflowProject->create($data);
var_dump($result);
}
}

View File

@@ -0,0 +1,5 @@
<?php
include "pm-bootstrap.php";

View File

@@ -0,0 +1,4 @@
pm_home_dir = "/Users/erik/devel/colosa/processmaker"
workspace = workflow
lang = en

View File

@@ -0,0 +1,138 @@
<?php
//
// pm-bootstrap.php
//
$config = parse_ini_file("config.ini");
$workspace = $config['workspace'];
$lang = $config['lang'];
$processMakerHome = $config['pm_home_dir'];
$rootDir = realpath($processMakerHome) . DIRECTORY_SEPARATOR;
define('SYS_LANG', $lang);
define('PATH_SEP', DIRECTORY_SEPARATOR);
define('PATH_TRUNK', $rootDir . PATH_SEP);
define('PATH_OUTTRUNK', realpath($rootDir . '/../') . PATH_SEP);
define('PATH_HOME', $rootDir . PATH_SEP . 'workflow' . PATH_SEP);
define('PATH_HTML', PATH_HOME . 'public_html' . PATH_SEP);
define('PATH_RBAC_HOME', PATH_TRUNK . 'rbac' . PATH_SEP);
define('PATH_GULLIVER_HOME', PATH_TRUNK . 'gulliver' . PATH_SEP);
define('PATH_GULLIVER', PATH_GULLIVER_HOME . 'system' . PATH_SEP); //gulliver system classes
define('PATH_GULLIVER_BIN', PATH_GULLIVER_HOME . 'bin' . PATH_SEP); //gulliver bin classes
define('PATH_TEMPLATE', PATH_GULLIVER_HOME . 'templates' . PATH_SEP);
define('PATH_THIRDPARTY', PATH_GULLIVER_HOME . 'thirdparty' . PATH_SEP);
define('PATH_RBAC', PATH_RBAC_HOME . 'engine' . PATH_SEP . 'classes' . PATH_SEP); //to enable rbac version 2
define('PATH_RBAC_CORE', PATH_RBAC_HOME . 'engine' . PATH_SEP);
define('PATH_CORE', PATH_HOME . 'engine' . PATH_SEP);
define('PATH_SKINS', PATH_CORE . 'skins' . PATH_SEP);
define('PATH_SKIN_ENGINE', PATH_CORE . 'skinEngine' . PATH_SEP);
define('PATH_METHODS', PATH_CORE . 'methods' . PATH_SEP);
define('PATH_XMLFORM', PATH_CORE . 'xmlform' . PATH_SEP);
define('PATH_CONFIG', PATH_CORE . 'config' . PATH_SEP);
define('PATH_PLUGINS', PATH_CORE . 'plugins' . PATH_SEP);
define('PATH_HTMLMAIL', PATH_CORE . 'html_templates' . PATH_SEP);
define('PATH_TPL', PATH_CORE . 'templates' . PATH_SEP);
define('PATH_TEST', PATH_CORE . 'test' . PATH_SEP);
define('PATH_FIXTURES', PATH_TEST . 'fixtures' . PATH_SEP);
define('PATH_RTFDOCS', PATH_CORE . 'rtf_templates' . PATH_SEP);
define('PATH_DYNACONT', PATH_CORE . 'content' . PATH_SEP . 'dynaform' . PATH_SEP);
define('SYS_UPLOAD_PATH', PATH_HOME . "public_html/files/" );
define('PATH_UPLOAD', PATH_HTML . 'files' . PATH_SEP);
define('PATH_WORKFLOW_MYSQL_DATA', PATH_CORE . 'data' . PATH_SEP . 'mysql' . PATH_SEP);
define('PATH_RBAC_MYSQL_DATA', PATH_RBAC_CORE . 'data' . PATH_SEP . 'mysql' . PATH_SEP);
define('FILE_PATHS_INSTALLED', PATH_CORE . 'config' . PATH_SEP . 'paths_installed.php' );
define('PATH_WORKFLOW_MSSQL_DATA', PATH_CORE . 'data' . PATH_SEP . 'mssql' . PATH_SEP);
define('PATH_RBAC_MSSQL_DATA', PATH_RBAC_CORE . 'data' . PATH_SEP . 'mssql' . PATH_SEP);
define('PATH_CONTROLLERS', PATH_CORE . 'controllers' . PATH_SEP);
define('PATH_SERVICES_REST', PATH_CORE . 'services' . PATH_SEP . 'rest' . PATH_SEP);
require_once PATH_GULLIVER . PATH_SEP . 'class.bootstrap.php';
spl_autoload_register(array("Bootstrap", "autoloadClass"));
Bootstrap::registerClass("G", PATH_GULLIVER . "class.g.php");
Bootstrap::registerClass("System", PATH_HOME . "engine/classes/class.system.php");
// define autoloading for others
Bootstrap::registerClass("wsBase", PATH_HOME . "engine/classes/class.wsBase.php");
Bootstrap::registerClass('Xml_Node', PATH_GULLIVER . "class.xmlDocument.php");
Bootstrap::registerClass('XmlForm_Field_TextPM', PATH_HOME . "engine/classes/class.XmlForm_Field_TextPM.php");
Bootstrap::registerClass('XmlForm_Field_SimpleText', PATH_GULLIVER . "class.xmlformExtension.php");
Bootstrap::registerClass('XmlForm_Field', PATH_GULLIVER . "class.xmlform.php");
Bootstrap::LoadThirdParty("smarty/libs", "Smarty.class");
Bootstrap::registerSystemClasses();
Bootstrap::registerDir('src', PATH_HOME . 'engine/src/');
$config = System::getSystemConfiguration();
define('DEBUG_SQL_LOG', $config['debug_sql']);
define('DEBUG_TIME_LOG', $config['debug_time']);
define('DEBUG_CALENDAR_LOG', $config['debug_calendar']);
define('MEMCACHED_ENABLED', $config['memcached']);
define('MEMCACHED_SERVER', $config['memcached_server']);
define('TIME_ZONE', $config['time_zone']);
// set include path
set_include_path(
PATH_CORE . PATH_SEPARATOR .
PATH_THIRDPARTY . PATH_SEPARATOR .
PATH_THIRDPARTY . 'pear' . PATH_SEPARATOR .
PATH_RBAC_CORE . PATH_SEPARATOR .
get_include_path()
);
/*
* Setting Up Workspace
*/
// include the server installed configuration
require_once FILE_PATHS_INSTALLED;
define('SYS_SYS', $workspace);
// defining system constant when a valid server environment exists
define( 'PATH_LANGUAGECONT', PATH_DATA . "META-INF" . PATH_SEP );
define( 'PATH_CUSTOM_SKINS', PATH_DATA . 'skins' . PATH_SEP );
define( 'PATH_TEMPORAL', PATH_C . 'dynEditor/' );
define( 'PATH_DB', PATH_DATA . 'sites' . PATH_SEP );
$workspaceDir = PATH_DB . $workspace;
// smarty constants
define( 'PATH_SMARTY_C', PATH_C . 'smarty' . PATH_SEP . 'c' );
define( 'PATH_SMARTY_CACHE', PATH_C . 'smarty' . PATH_SEP . 'cache' );
//***************** PM Paths DATA **************************
define('PATH_DATA_SITE', PATH_DATA . 'sites/' . SYS_SYS . '/');
define('PATH_DOCUMENT', PATH_DATA_SITE . 'files/');
define('PATH_DATA_MAILTEMPLATES', PATH_DATA_SITE . 'mailTemplates/');
define('PATH_DATA_PUBLIC', PATH_DATA_SITE . 'public/');
define('PATH_DATA_REPORTS', PATH_DATA_SITE . 'reports/');
define('PATH_DYNAFORM', PATH_DATA_SITE . 'xmlForms/');
define('PATH_IMAGES_ENVIRONMENT_FILES', PATH_DATA_SITE . 'usersFiles' . PATH_SEP);
define('PATH_IMAGES_ENVIRONMENT_USERS', PATH_DATA_SITE . 'usersPhotographies' . PATH_SEP);
if (is_file(PATH_DATA_SITE.PATH_SEP . '.server_info')) {
$SERVER_INFO = file_get_contents(PATH_DATA_SITE.PATH_SEP.'.server_info');
$SERVER_INFO = unserialize($SERVER_INFO);
define('SERVER_NAME', $SERVER_INFO ['SERVER_NAME']);
define('SERVER_PORT', $SERVER_INFO ['SERVER_PORT']);
} else {
echo "WARNING! No server info found!";
}
// create memcached singleton
Bootstrap::LoadClass( 'memcached' );
$memcache = PMmemcached::getSingleton( SYS_SYS );
Propel::init(PATH_CONFIG . "databases.php");