diff --git a/gulliver/system/class.bootstrap.php b/gulliver/system/class.bootstrap.php index d297cff7e..3a03e37cd 100644 --- a/gulliver/system/class.bootstrap.php +++ b/gulliver/system/class.bootstrap.php @@ -392,6 +392,8 @@ class Bootstrap self::registerClass("UsersPeer", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "UsersPeer.php"); self::registerClass("Xml_Node", PATH_GULLIVER . "class.xmlDocument.php"); + + self::registerClass("Tasks", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.tasks.php"); } //below this line, still not approved methods diff --git a/workflow/engine/classes/class.tasks.php b/workflow/engine/classes/class.tasks.php index 1f19bc8f6..e464bfb7b 100755 --- a/workflow/engine/classes/class.tasks.php +++ b/workflow/engine/classes/class.tasks.php @@ -87,16 +87,13 @@ class Tasks { try { $aTasks = array(); - $sDelimiter = DBAdapter::getStringDelimiter(); + $sDelimiter = @DBAdapter::getStringDelimiter(); $oCriteria = new Criteria('workflow'); $oCriteria->add(TaskPeer::PRO_UID, $sProUid); $aConditions = array(); - $aConditions[] = array(TaskPeer::TAS_UID, ContentPeer::CON_ID - ); - $aConditions[] = array(ContentPeer::CON_CATEGORY, $sDelimiter . 'TAS_TITLE' . $sDelimiter - ); - $aConditions[] = array(ContentPeer::CON_LANG, $sDelimiter . SYS_LANG . $sDelimiter - ); + $aConditions[] = array(TaskPeer::TAS_UID, ContentPeer::CON_ID); + $aConditions[] = array(ContentPeer::CON_CATEGORY, $sDelimiter . 'TAS_TITLE' . $sDelimiter); + $aConditions[] = array(ContentPeer::CON_LANG, $sDelimiter . SYS_LANG . $sDelimiter); $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); $oCriteria->addAscendingOrderByColumn(ContentPeer::CON_VALUE); $oDataset = TaskPeer::doSelectRS($oCriteria); diff --git a/workflow/engine/classes/model/Content.php b/workflow/engine/classes/model/Content.php index 279425861..2a5255e70 100755 --- a/workflow/engine/classes/model/Content.php +++ b/workflow/engine/classes/model/Content.php @@ -51,7 +51,7 @@ class Content extends BaseContent * @param string $sUID * @return variant */ - public function load ($ConCategory, $ConParent, $ConId, $ConLang) + public static function load ($ConCategory, $ConParent, $ConId, $ConLang) { $content = ContentPeer::retrieveByPK( $ConCategory, $ConParent, $ConId, $ConLang ); if (is_null( $content )) { @@ -76,7 +76,7 @@ class Content extends BaseContent * @return string * */ - public function getDefaultContentLang ($ConCategory, $ConParent, $ConId, $destConLang) + public static function getDefaultContentLang ($ConCategory, $ConParent, $ConId, $destConLang) { $Criteria = new Criteria( 'workflow' ); $Criteria->clearSelectColumns()->clearOrderByColumns(); @@ -113,7 +113,7 @@ class Content extends BaseContent * @return void * */ - public function updateEqualValue ($ConCategory, $ConParent, $ConId, $ConValue) + public static function updateEqualValue ($ConCategory, $ConParent, $ConId, $ConValue) { $con = Propel::getConnection('workflow'); $c1 = new Criteria('workflow'); @@ -136,7 +136,7 @@ class Content extends BaseContent * @return string * if the row doesn't exist, it will be created automatically, even the default 'en' language */ - public function autoLoadSave ($ConCategory, $ConParent, $ConId, $destConLang) + public static function autoLoadSave ($ConCategory, $ConParent, $ConId, $destConLang) { //search in 'en' language, the default language $content = ContentPeer::retrieveByPK( $ConCategory, $ConParent, $ConId, 'en' ); @@ -262,7 +262,7 @@ class Content extends BaseContent * @param string $ConValue * @return variant */ - public function removeContent ($ConCategory, $ConParent, $ConId) + public static function removeContent ($ConCategory, $ConParent, $ConId) { try { $c = new Criteria(); diff --git a/workflow/engine/classes/model/Task.php b/workflow/engine/classes/model/Task.php index 157aa5c01..99952fcc4 100755 --- a/workflow/engine/classes/model/Task.php +++ b/workflow/engine/classes/model/Task.php @@ -406,7 +406,7 @@ class Task extends BaseTask if ($this->validate()) { $this->setTasTitle((isset($aData['TAS_TITLE']) ? $aData['TAS_TITLE']: '')); - $this->setTasDescription(""); + $this->setTasDescription((isset($aData['TAS_DESCRIPTION']) ? $aData['TAS_DESCRIPTION']: '')); $this->setTasDefTitle(""); $this->setTasDefDescription(""); $this->setTasDefProcCode(""); diff --git a/workflow/engine/methods/processes/processes_Delete.php b/workflow/engine/methods/processes/processes_Delete.php index a2ca8223b..67d9cf8b0 100755 --- a/workflow/engine/methods/processes/processes_Delete.php +++ b/workflow/engine/methods/processes/processes_Delete.php @@ -47,7 +47,7 @@ try { foreach ($UIDS as $UID) { $oProcessMap->deleteProcess($UID); - ProcessMaker\Adapter\Bpmn\Model::deleteProject($UID); + //ProcessMaker\Adapter\Bpmn\Model::deleteProject($UID); } $resp->status = 0; $resp->msg = 'All process was deleted successfully'; diff --git a/workflow/engine/src/ProcessMaker/Project/Adapter/WorkflowProject.php b/workflow/engine/src/ProcessMaker/Project/Adapter/WorkflowProject.php index e3902f918..c2a143d5f 100644 --- a/workflow/engine/src/ProcessMaker/Project/Adapter/WorkflowProject.php +++ b/workflow/engine/src/ProcessMaker/Project/Adapter/WorkflowProject.php @@ -1,35 +1,71 @@ setProperties($data); + $this->create(); + } + } + + public function setProperties($properties) + { + $this->properties = $properties; + } + + public function getProperties() + { + $process = new Process(); + return $process->load($this->proUid); + } + + public function getUid() + { + return $this->proUid; + } + + public function create() { try { // setting defaults - $data['TASKS'] = array_key_exists('TASKS', $data) ? $data['TASKS'] : array(); - $data['ROUTES'] = array_key_exists('ROUTES', $data) ? $data['ROUTES'] : array(); + $this->properties['PRO_UID'] = array_key_exists('PRO_UID', $this->properties) + ? $this->properties['PRO_UID'] : Hash::generateUID(); + + $this->properties['USR_UID'] = array_key_exists('PRO_CREATE_USER', $this->properties) + ? $this->properties['PRO_CREATE_USER'] : null; + + $this->properties['PRO_CATEGORY'] = array_key_exists('PRO_CATEGORY', $this->properties) + ? $this->properties['PRO_CATEGORY'] : ''; + // Create project $process = new Process(); - $this->proUid = $process->create($data, false); - - // Create project's tasks - foreach ($data['TASKS'] as $taskData) { - $this->addTask($taskData); - } - - // Create project's routes - foreach ($data['ROUTES'] as $route) { - - } + $this->proUid = $process->create($this->properties, false); } catch (Exception $e) { //throw new \RuntimeException($e); @@ -39,19 +75,20 @@ class WorkflowProject extends ProjectHandler } } - public function update($prjUid, $data) + public function update() { // TODO: Implement update() method. } - public function delete($prjUid) + public function delete() { // TODO: Implement delete() method. } - public function load($prjUid) + public static function load($prjUid) { - // TODO: Implement load() method. + $process = new Process(); + return $process->load($prjUid); } /* @@ -60,29 +97,216 @@ class WorkflowProject extends ProjectHandler public function addTask($taskData) { + // Setting defaults + $taskData['TAS_UID'] = array_key_exists('TAS_UID', $taskData) ? $taskData['TAS_UID'] : Hash::generateUID(); $taskData['PRO_UID'] = $this->proUid; $task = new Task(); - $task->create($taskData, false); + + return $task->create($taskData, false); } - public function updateTask($taskData) + public function updateTask($tasUid, $taskData) { - # code... + $task = new Task(); + $taskData['TAS_UID'] = $tasUid; + + return $task->update($taskData); } - public function removeTask($taskData) + public function removeTask($tasUid) { - # code... + $task = new Task(); + $task->remove($tasUid); } - public function addRoute($value='') + public function getTask($tasUid) { - # code... + $task = new Task(); + return $task->load($tasUid); } - public function removeRoute($value='') + + public function getTasks() { - # code... + if (empty($this->proUid)) { + return null; + } + + $tasks = new Tasks(); + + return $tasks->getAllTasks($this->proUid); } + + public function setStartTask($tasUid) + { + $task = \TaskPeer::retrieveByPK($tasUid); + $task->setTasStart("TRUE"); + $task->save(); + } + + public function setEndTask($tasUid) + { + $this->addSequentialRoute($tasUid, "-1", "SEQUENTIAL", true); + } + + public function addSequentialRoute($fromTasUid, $toTasUid, $delete = null) + { + $this->addRoute($fromTasUid, $toTasUid, "SEQUENTIAL", $delete); + } + + public function addSelectRoute($fromTasUid, array $toTasks, $delete = null) + { + foreach ($toTasks as $toTasUid) { + $this->addRoute($fromTasUid, $toTasUid, "SELECT", $delete); + } + } + + public function addRoute($fromTasUid, $toTasUid, $type, $delete = null) + { + + /*switch ($type) { + case 0: + $sType = 'SEQUENTIAL'; + break; + case 1: + $sType = 'SELECT'; + break; + case 2: + $sType = 'EVALUATE'; + break; + case 3: + $sType = 'PARALLEL'; + break; + case 4: + $sType = 'PARALLEL-BY-EVALUATION'; + break; + case 5: + $sType = 'SEC-JOIN'; + break; + case 8: + $sType = 'DISCRIMINATOR'; + break; + default: + throw new \Exception("Invalid type code, given: $type, expected: integer [1...8]"); + } + }*/ + + $validTypes = array("SEQUENTIAL", "SELECT", "EVALUATE", "PARALLEL", "PARALLEL-BY-EVALUATION", "SEC-JOIN", "DISCRIMINATOR"); + + if (! in_array($type, $validTypes)) { + throw new \Exception("Invalid Route type, given: $type, expected: [".implode(",", $validTypes)."]"); + } + + //if ($type != 0 && $type != 5 && $type != 8) { + if ($type != 'SEQUENTIAL' && $type != 'SEC-JOIN' && $type != 'DISCRIMINATOR') { + if ($this->getNumberOfRoutes($this->proUid, $fromTasUid, $toTasUid, $type) > 0) { + // die(); ???? + throw new \RuntimeException("Unexpected behaviour"); + } + //unset($aRow); + } + //if ($delete || $type == 0 || $type == 5 || $type == 8) { + if ($delete || $type == 'SEQUENTIAL' || $type == 'SEC-JOIN' || $type == 'DISCRIMINATOR') { + $oTasks = new Tasks(); + + $oTasks->deleteAllRoutesOfTask($this->proUid, $fromTasUid); + //$oTasks->deleteAllGatewayOfTask($this->proUid, $fromTasUid); + } + return $this->saveNewPattern($this->proUid, $fromTasUid, $toTasUid, $type, $delete); + } + + public function updateRoute($rouUid, $routeData) + { + $route = new Route(); + $routeData['ROU_UID'] = $rouUid; + $route->update($routeData); + } + + public function removeRoute($rouUid) + { + $route = new Route(); + + return $route->remove($rouUid); + } + + public function getRoute($rouUid) + { + $route = new Route(); + + return $route->load($rouUid); + } + + ///////////////////////////////// + /* + * Migrated from class.processMap.php class + */ + private function getNumberOfRoutes($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '') + { + try { + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); + $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); + $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); + $oCriteria->add(RoutePeer::ROU_NEXT_TASK, $sNextTask); + $oCriteria->add(RoutePeer::ROU_TYPE, $sType); + $oDataset = RoutePeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + return (int) $aRow['ROUTE_NUMBER']; + } catch (Exception $oError) { + throw ($oError); + } + } + + private function saveNewPattern($sProcessUID = '', $sTaskUID = '', $sNextTask = '', $sType = '', $sDelete = '') + { + try { + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn('COUNT(*) AS ROUTE_NUMBER'); + //$oCriteria->addSelectColumn('GAT_UID AS GATEWAY_UID'); + $oCriteria->add(RoutePeer::PRO_UID, $sProcessUID); + $oCriteria->add(RoutePeer::TAS_UID, $sTaskUID); + $oCriteria->add(RoutePeer::ROU_TYPE, $sType); + + $oDataset = RoutePeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataset->next(); + $aRow = $oDataset->getRow(); + + $aFields['PRO_UID'] = $sProcessUID; + $aFields['TAS_UID'] = $sTaskUID; + $aFields['ROU_NEXT_TASK'] = $sNextTask; + $aFields['ROU_TYPE'] = $sType; + $aFields['ROU_CASE'] = (int) $aRow['ROUTE_NUMBER'] + 1; + + //$sGatewayUID = $aRow['GATEWAY_UID']; + + //if ($sDelete && $sGatewayUID != '') { + // $oGateway = new Gateway(); + // $oGateway->remove($sGatewayUID); + //} + //Getting Gateway UID after saving gateway + //if($sType != 'SEQUENTIAL' && $sGatewayUID == '' && $sDelete == '1') + + /*??? Maybe this is deprecated + if ($sType != 'SEQUENTIAL') { + $oProcessMap = new processMap(); + $sGatewayUID = $this->saveNewGateway($sProcessUID, $sTaskUID, $sNextTask); + }*/ + + //$aFields['GAT_UID'] = (isset($sGatewayUID)) ? $sGatewayUID : ''; + + $oRoute = new Route(); + + return $oRoute->create($aFields); + } catch (Exception $oError) { + throw ($oError); + } + } + + + } \ No newline at end of file diff --git a/workflow/engine/src/ProcessMaker/Project/ProjectHandler.php b/workflow/engine/src/ProcessMaker/Project/ProjectHandler.php index 3bbf09949..93e9e1cf3 100644 --- a/workflow/engine/src/ProcessMaker/Project/ProjectHandler.php +++ b/workflow/engine/src/ProcessMaker/Project/ProjectHandler.php @@ -3,12 +3,11 @@ namespace ProcessMaker\Project; use ProcessMaker\Util\Logger; -abstract class ProjectHandler implements ProjectHandlerInterface +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); + public abstract function save(); + public abstract function update(); + public abstract function delete(); /** * Log in ProcessMaker Standard Output if debug mode is enabled. diff --git a/workflow/engine/src/ProcessMaker/Project/ProjectHandlerInterface.php b/workflow/engine/src/ProcessMaker/Project/ProjectHandlerInterface.php index 133e7089d..536db30b4 100644 --- a/workflow/engine/src/ProcessMaker/Project/ProjectHandlerInterface.php +++ b/workflow/engine/src/ProcessMaker/Project/ProjectHandlerInterface.php @@ -3,8 +3,8 @@ namespace ProcessMaker\Project; interface ProjectHandlerInterface { - public function create($data); - public function update($prjUid, $data); - public function delete($prjUid); - public function load($prjUid); + public function save(); + public function update(); + public function delete(); + public static function load(); } \ No newline at end of file diff --git a/workflow/engine/src/Tests/ProcessMaker/Adapter/WorkflowProjectTest.php b/workflow/engine/src/Tests/ProcessMaker/Adapter/WorkflowProjectTest.php index 46d32d549..3083b7f2f 100644 --- a/workflow/engine/src/Tests/ProcessMaker/Adapter/WorkflowProjectTest.php +++ b/workflow/engine/src/Tests/ProcessMaker/Adapter/WorkflowProjectTest.php @@ -1,6 +1,7 @@ "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() + "PRO_CREATE_USER" => "00000000000000000000000000000001" ); - $result = $this->workflowProject->create($data); + $wp = new WorkflowProject($data); - var_dump($result); + $processData = $wp->getProperties(); + + foreach ($data as $key => $value) { + $this->assertEquals($data[$key], $processData[$key]); + } + + return $wp; + } + + /** + * @depends testCreate + */ + public function testAddTask($wp) + { + $data = array( + "TAS_TITLE" => "task #1", + "TAS_DESCRIPTION" => "Description for task #1", + "TAS_POSX" => "50", + "TAS_POSY" => "50", + "TAS_WIDTH" => "100", + "TAS_HEIGHT" => "25" + ); + + $tasUid = $wp->addTask($data); + + $taskData = $wp->getTask($tasUid); + + foreach ($data as $key => $value) { + $this->assertEquals($data[$key], $taskData[$key]); + } + } + + /** + * @depends testCreate + */ + public function testUpdateTask($wp) + { + $data = array( + "TAS_TITLE" => "task #1 (updated)", + "TAS_POSX" => "150", + "TAS_POSY" => "250" + ); + + // at this time, there is only one task + $tasks = $wp->getTasks(); + $this->assertInternalType('array', $tasks); + $this->assertCount(1, $tasks); + + $wp->updateTask($tasks[0]['TAS_UID'], $data); + $taskData = $wp->getTask($tasks[0]['TAS_UID']); + + foreach ($data as $key => $value) { + $this->assertEquals($data[$key], $taskData[$key]); + } + } + + /** + * @depends testCreate + */ + public function testRemoveTask($wp) + { + $tasUid = $wp->addTask(array( + "TAS_TITLE" => "task #2", + "TAS_POSX" => "150", + "TAS_POSY" => "250" + )); + + $tasks = $wp->getTasks(); + $this->assertInternalType('array', $tasks); + $this->assertCount(2, $tasks); + + $wp->removeTask($tasUid); + + $tasks = $wp->getTasks(); + $this->assertInternalType('array', $tasks); + $this->assertCount(1, $tasks); + } + + /** + * @depends testCreate + */ + public function testGetTasks($wp) + { + $tasUid1 = $wp->addTask(array( + "TAS_TITLE" => "task #2", + "TAS_POSX" => "250", + "TAS_POSY" => "250" + )); + $tasUid2 = $wp->addTask(array( + "TAS_TITLE" => "task #3", + "TAS_POSX" => "350", + "TAS_POSY" => "350" + )); + + $tasks = $wp->getTasks(); + $this->assertInternalType('array', $tasks); + $this->assertCount(3, $tasks); + + $wp->removeTask($tasUid1); + + $tasks = $wp->getTasks(); + $this->assertInternalType('array', $tasks); + $this->assertCount(2, $tasks); + + $wp->removeTask($tasUid2); + + $tasks = $wp->getTasks(); + $this->assertInternalType('array', $tasks); + $this->assertCount(1, $tasks); + + $wp->removeTask($tasks[0]['TAS_UID']); + + $tasks = $wp->getTasks(); + $this->assertInternalType('array', $tasks); + $this->assertCount(0, $tasks); + } + + /** + * + */ + public function testAddRoute() + { + $wp = new WorkflowProject(array( + "PRO_TITLE" => "Test Project #2 (Sequential)", + "PRO_CREATE_USER" => "00000000000000000000000000000001" + )); + + $tasUid1 = $wp->addTask(array( + "TAS_TITLE" => "task #1", + "TAS_POSX" => "410", + "TAS_POSY" => "61" + )); + $tasUid2 = $wp->addTask(array( + "TAS_TITLE" => "task #2", + "TAS_POSX" => "159", + "TAS_POSY" => "370" + )); + + $rouUid = $wp->addRoute($tasUid1, $tasUid2, "SEQUENTIAL"); + + $routeSaved = $wp->getRoute($rouUid); + + $this->assertEquals($tasUid1, $routeSaved['TAS_UID']); + $this->assertEquals($tasUid2, $routeSaved['ROU_NEXT_TASK']); + $this->assertEquals("SEQUENTIAL", $routeSaved['ROU_TYPE']); + } + + public function testAddSelectRoute() + { + $wp = new WorkflowProject(array( + "PRO_TITLE" => "Test Project #3 (Select)", + "PRO_CREATE_USER" => "00000000000000000000000000000001" + )); + + $tasUid1 = $wp->addTask(array( + "TAS_TITLE" => "task #1", + "TAS_POSX" => "410", + "TAS_POSY" => "61" + )); + $tasUid2 = $wp->addTask(array( + "TAS_TITLE" => "task #2", + "TAS_POSX" => "159", + "TAS_POSY" => "370" + )); + $tasUid3 = $wp->addTask(array( + "TAS_TITLE" => "task #3", + "TAS_POSX" => "670", + "TAS_POSY" => "372" + )); + + $wp->addSelectRoute($tasUid1, array($tasUid2, $tasUid3)); + } + + public function testCompleteWorkflowProject() + { + $wp = new WorkflowProject(array( + "PRO_TITLE" => "Test Complete Project #4", + "PRO_CREATE_USER" => "00000000000000000000000000000001" + )); + + $tasUid1 = $wp->addTask(array( + "TAS_TITLE" => "task #1", + "TAS_POSX" => "406", + "TAS_POSY" => "71" + )); + $tasUid2 = $wp->addTask(array( + "TAS_TITLE" => "task #2", + "TAS_POSX" => "188", + "TAS_POSY" => "240" + )); + $tasUid3 = $wp->addTask(array( + "TAS_TITLE" => "task #3", + "TAS_POSX" => "406", + "TAS_POSY" => "239" + )); + $tasUid4 = $wp->addTask(array( + "TAS_TITLE" => "task #4", + "TAS_POSX" => "294", + "TAS_POSY" => "366" + )); + $tasUid5 = $wp->addTask(array( + "TAS_TITLE" => "task #5", + "TAS_POSX" => "640", + "TAS_POSY" => "240" + )); + $tasUid6 = $wp->addTask(array( + "TAS_TITLE" => "task #6", + "TAS_POSX" => "640", + "TAS_POSY" => "359" + )); + + + $wp->addRoute($tasUid1, $tasUid2, "PARALLEL"); + $wp->addRoute($tasUid1, $tasUid3, "PARALLEL"); + $wp->addRoute($tasUid1, $tasUid5, "PARALLEL"); + + $wp->addRoute($tasUid2, $tasUid4, "SEC-JOIN"); + $wp->addRoute($tasUid3, $tasUid4, "SEC-JOIN"); + + $wp->addRoute($tasUid5, $tasUid6, "EVALUATE"); + $wp->addRoute($tasUid5, "-1", "EVALUATE"); + + $wp->setStartTask($tasUid1); + + $wp->setEndTask($tasUid4); + $wp->setEndTask($tasUid6); } } \ No newline at end of file diff --git a/workflow/engine/src/Tests/pm-bootstrap.php b/workflow/engine/src/Tests/pm-bootstrap.php index 841bc99ad..a641f26ae 100644 --- a/workflow/engine/src/Tests/pm-bootstrap.php +++ b/workflow/engine/src/Tests/pm-bootstrap.php @@ -3,7 +3,8 @@ // pm-bootstrap.php // -$config = parse_ini_file("config.ini"); +$config = parse_ini_file(__DIR__ . DIRECTORY_SEPARATOR . "config.ini"); + $workspace = $config['workspace']; $lang = $config['lang']; $processMakerHome = $config['pm_home_dir']; @@ -132,7 +133,7 @@ if (is_file(PATH_DATA_SITE.PATH_SEP . '.server_info')) { // create memcached singleton Bootstrap::LoadClass( 'memcached' ); -$memcache = PMmemcached::getSingleton( SYS_SYS ); +//$memcache = PMmemcached::getSingleton( SYS_SYS ); Propel::init(PATH_CONFIG . "databases.php");