$sOutput = $oProcessMap->addText($oData->uid, $oData->label, $oData->position->x, $oData->position->y, $oData->task_uid); echo $sOutput; break; case 'updateText': $sOutput = $oProcessMap->updateText($oData->uid, $oData->label, $oData->next_uid); echo $sOutput; break; case 'saveTextPosition': $sOutput = $oProcessMap->saveTextPosition($oData->uid, $oData->position->x, $oData->position->y); break; case 'deleteText': $sOutput = $oProcessMap->deleteText($oData->uid); echo $sOutput; break; case 'getProcesses': $sOutput = $oProcessMap->getAllProcesses(); echo $sOutput; break; case 'dynaforms': $sOutput = $oProcessMap->getDynaformList($oData->uid); $sOutput = $oJSON->encode($sOutput); echo $sOutput; break; case 'webEntry_validate': include PATH_METHODS . 'processes/processes_webEntryValidate.php'; break; case 'webEntry_generate': include PATH_METHODS . 'processes/processes_webEntryGenerate.php'; break; case 'webEntry': $sOutput = $oProcessMap->listNewWebEntry($oData->uid, $oData->evn_uid);
/** * import a pm table * * @param string $httpData->id */ public function import($httpData) { $fromAdmin = false; if (isset($_POST["form"]["TYPE_TABLE"]) && !empty($_POST["form"]["TYPE_TABLE"])) { if ($_POST["form"]["TYPE_TABLE"] == 'admin') { $fromAdmin = true; } } require_once 'classes/model/AdditionalTables.php'; try { $result = new stdClass(); $errors = ''; $fromConfirm = false; $overWrite = isset($_POST['form']['OVERWRITE']) ? true : false; if (isset($_POST["form"]["FROM_CONFIRM"]) && !empty($_POST["form"]["FROM_CONFIRM"])) { $fromConfirm = $_POST["form"]["FROM_CONFIRM"]; $_FILES['form'] = $_SESSION['FILES_FORM']; } //save the file if ($_FILES['form']['error']['FILENAME'] !== 0) { throw new Exception(G::loadTranslation('ID_PMTABLE_UPLOADING_FILE_PROBLEM')); } $_SESSION['FILES_FORM'] = $_FILES['form']; $oAdditionalTables = new AdditionalTables(); $tableNameMap = array(); $processQueue = array(); $processQueueTables = array(); $PUBLIC_ROOT_PATH = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP; $filename = $_FILES['form']['name']['FILENAME']; $tempName = $_FILES['form']['tmp_name']['FILENAME']; if (!$fromConfirm) { G::uploadFile($tempName, $PUBLIC_ROOT_PATH, $filename); } if ($fromConfirm == 'clear') { $fromConfirm = true; } $fileContent = file_get_contents($PUBLIC_ROOT_PATH . $filename); if (strpos($fileContent, '-----== ProcessMaker Open Source Private Tables ==-----') === false) { throw new Exception(G::loadTranslation('ID_PMTABLE_INVALID_FILE')); } $fp = fopen($PUBLIC_ROOT_PATH . $filename, "rb"); $fsData = intval(fread($fp, 9)); //reading the metadata $sType = fread($fp, $fsData); //Ask for all Process $processMap = new processMap(); $aProcess = json_decode($processMap->getAllProcesses()); foreach ($aProcess as $key => $val) { if ($val->value != '') { $proUids[] = $val->value; } } // first create the tables structures while (!feof($fp)) { switch ($sType) { case '@META': $fsData = intval(fread($fp, 9)); $METADATA = fread($fp, $fsData); break; case '@SCHEMA': $fsUid = intval(fread($fp, 9)); $uid = fread($fp, $fsUid); $fsData = intval(fread($fp, 9)); $schema = fread($fp, $fsData); $contentSchema = unserialize($schema); $additionalTable = new additionalTables(); $tableExists = $additionalTable->loadByName($contentSchema['ADD_TAB_NAME']); $tableNameMap[$contentSchema['ADD_TAB_NAME']] = $contentSchema['ADD_TAB_NAME']; $tableData = new stdClass(); if (isset($contentSchema["PRO_UID"])) { $tableData->PRO_UID = $contentSchema["PRO_UID"]; } else { $tableData->PRO_UID = $_POST["form"]["PRO_UID"]; } $isPmTable = false; /*is a report table*/ if ($contentSchema["PRO_UID"] == "") { $isPmTable = true; } $currentPRO_UID = ''; if (isset($_POST["form"]["PRO_UID_HELP"]) && !empty($_POST["form"]["PRO_UID_HELP"])) { $currentPRO_UID = $_POST["form"]["PRO_UID_HELP"]; } else { if (isset($_POST["form"]["PRO_UID"]) && !empty($_POST["form"]["PRO_UID"])) { $currentPRO_UID = $_POST["form"]["PRO_UID"]; $_SESSION['PROCESS'] = $currentPRO_UID; } else { $currentPRO_UID = $_SESSION['PROCESS']; } } if ($fromAdmin) { /* from admin tab */ if ($tableExists !== false && !$fromConfirm && !$overWrite) { $validationType = 1; throw new Exception(G::loadTranslation('ID_OVERWRITE_PMTABLE')); } if (!in_array($tableData->PRO_UID, $proUids) && !$isPmTable) { $validationType = 2; throw new Exception(G::loadTranslation('ID_NO_RELATED_PROCESS')); } } else { /* from designer tab */ if ($isPmTable) { $validationType = ''; throw new Exception(G::loadTranslation('ID_NO_REPORT_TABLE')); } if ($tableExists !== false && !$fromConfirm && !$overWrite) { $validationType = 1; throw new Exception(G::loadTranslation('ID_OVERWRITE_PMTABLE')); } if ($currentPRO_UID != $tableData->PRO_UID) { if (!in_array($tableData->PRO_UID, $proUids)) { $validationType = 2; if (($fromConfirm == $validationType || !$fromConfirm) && !$isPmTable) { throw new Exception(G::loadTranslation('ID_OVERWRITE_RELATED_PROCESS')); } else { $tableData->PRO_UID = $currentPRO_UID; } } else { $validationType = 3; throw new Exception(G::loadTranslation('ID_ALREADY_RELATED_TABLE ')); } } } if ($overWrite) { if ($tableExists !== false) { $additionalTable->deleteAll($tableExists['ADD_TAB_UID']); } } else { if ($tableExists !== false) { // some table exists with the same name // renaming... $tNameOld = $contentSchema['ADD_TAB_NAME']; $newTableName = $contentSchema['ADD_TAB_NAME'] . '_' . date('YmdHis'); $contentSchema['ADD_TAB_UID'] = G::generateUniqueID(); $contentSchema['ADD_TAB_NAME'] = $newTableName; $contentSchema['ADD_TAB_CLASS_NAME'] = additionalTables::getPHPName($newTableName); //mapping the table name for posterior uses $tableNameMap[$tNameOld] = $contentSchema['ADD_TAB_NAME']; } } // validating invalid bds_uid in old tables definition -> mapped to workflow if (!$contentSchema['DBS_UID'] || $contentSchema['DBS_UID'] == '0' || !$contentSchema['DBS_UID']) { $contentSchema['DBS_UID'] = 'workflow'; } $columns = array(); foreach ($contentSchema['FIELDS'] as $field) { $column = array('uid' => '', 'field_uid' => '', 'field_name' => $field['FLD_NAME'], 'field_dyn' => isset($field['FLD_DYN_NAME']) ? $field['FLD_DYN_NAME'] : '', 'field_label' => isset($field['FLD_DESCRIPTION']) ? $field['FLD_DESCRIPTION'] : '', 'field_type' => $field['FLD_TYPE'], 'field_size' => $field['FLD_SIZE'], 'field_key' => isset($field['FLD_KEY']) ? $field['FLD_KEY'] : 0, 'field_null' => isset($field['FLD_NULL']) ? $field['FLD_NULL'] : 1, 'field_autoincrement' => isset($field['FLD_AUTO_INCREMENT']) ? $field['FLD_AUTO_INCREMENT'] : 0); $columns[] = $column; } $tableData->REP_TAB_UID = $contentSchema['ADD_TAB_UID']; $tableData->REP_TAB_NAME = $contentSchema['ADD_TAB_NAME']; $tableData->REP_TAB_DSC = $contentSchema['ADD_TAB_DESCRIPTION']; $tableData->REP_TAB_CONNECTION = $contentSchema['DBS_UID']; $tableData->REP_TAB_TYPE = isset($contentSchema['ADD_TAB_TYPE']) ? $contentSchema['ADD_TAB_TYPE'] : ''; $tableData->REP_TAB_GRID = isset($contentSchema['ADD_TAB_GRID']) ? $contentSchema['ADD_TAB_GRID'] : ''; $tableData->columns = G::json_encode($columns); $tableData->forceUid = true; //save the table $alterTable = false; $result = $this->save($tableData, $alterTable); if ($result->success) { $processQueueTables[$contentSchema['DBS_UID']][] = $contentSchema['ADD_TAB_NAME']; } else { $errors .= 'Error creating table: ' . $tableData->REP_TAB_NAME . '-> ' . $result->message . "\n\n"; } break; case '@DATA': $fstName = intval(fread($fp, 9)); $tableName = fread($fp, $fstName); $fsData = intval(fread($fp, 9)); if ($fsData > 0) { $data = fread($fp, $fsData); } break; } $fsData = intval(fread($fp, 9)); //reading the metadata if ($fsData > 0) { // reading next block type $sType = fread($fp, $fsData); } else { break; } } fclose($fp); G::loadClass('pmTable'); foreach ($processQueueTables as $dbsUid => $tables) { $pmTable = new pmTable(); ob_start(); $pmTable->buildModelFor($dbsUid, $tables); $buildResult = ob_get_contents(); ob_end_clean(); $errors .= $pmTable->upgradeDatabaseFor($pmTable->getDataSource(), $tables); } $fp = fopen($PUBLIC_ROOT_PATH . $filename, "rb"); $fsData = intval(fread($fp, 9)); $sType = fread($fp, $fsData); // data processing while (!feof($fp)) { switch ($sType) { case '@META': $fsData = intval(fread($fp, 9)); $METADATA = fread($fp, $fsData); break; case '@SCHEMA': $fsUid = intval(fread($fp, 9)); $uid = fread($fp, $fsUid); $fsData = intval(fread($fp, 9)); $schema = fread($fp, $fsData); $contentSchema = unserialize($schema); $additionalTable = new additionalTables(); $table = $additionalTable->loadByName($tableNameMap[$contentSchema['ADD_TAB_NAME']]); if ($table['PRO_UID'] != '') { // is a report table, try populate it $additionalTable->populateReportTable($table['ADD_TAB_NAME'], pmTable::resolveDbSource($table['DBS_UID']), $table['ADD_TAB_TYPE'], $table['PRO_UID'], $table['ADD_TAB_GRID'], $table['ADD_TAB_UID']); } G::auditLog("ImportTable", $table['ADD_TAB_NAME'] . " (" . $table['ADD_TAB_UID'] . ") "); break; case '@DATA': $fstName = intval(fread($fp, 9)); $tableName = fread($fp, $fstName); $fsData = intval(fread($fp, 9)); if ($fsData > 0) { $data = fread($fp, $fsData); $contentData = unserialize($data); $tableName = $tableNameMap[$tableName]; $oAdditionalTables = new AdditionalTables(); $table = $oAdditionalTables->loadByName($tableName); $isReport = $table['PRO_UID'] !== '' ? true : false; if ($table !== false) { if (!$isReport) { if (count($contentData) > 0) { $oAdditionalTables->load($table['ADD_TAB_UID'], true); $primaryKeys = $oAdditionalTables->getPrimaryKeys(); // Obtain a list of columns $primaryKeyColumn = array(); foreach ($contentData as $key => $row) { $primaryKeyColumn[$key] = $row[$primaryKeys[0]['FLD_NAME']]; } unset($row); array_multisort($primaryKeyColumn, SORT_ASC, $contentData); foreach ($contentData as $row) { $data = new StdClass(); $data->id = $table['ADD_TAB_UID']; $data->rows = base64_encode(serialize($row)); $res = $this->dataCreate($data, 'base64'); if (!$res->success) { $errors .= $res->message; } } } } } } break; } $fsData = intval(fread($fp, 9)); if ($fsData > 0) { $sType = fread($fp, $fsData); } else { break; } } //////////// if ($errors == '') { $result->success = true; $msg = G::loadTranslation('ID_PMTABLE_IMPORT_SUCCESS', array($filename)); } else { $result->success = false; $result->errorType = 'warning'; $msg = G::loadTranslation('ID_PMTABLE_IMPORT_WITH_ERRORS', array($filename)) . "\n\n" . $errors; } $result->message = $msg; } catch (Exception $e) { $result = new stdClass(); $result->fromAdmin = $fromAdmin; $result->validationType = $validationType; $result->errorType = 'error'; $result->buildResult = ob_get_contents(); ob_end_clean(); $result->success = false; // if it is a propel exception message if (preg_match('/(.*)\\s\\[(.*):\\s(.*)\\]\\s\\[(.*):\\s(.*)\\]/', $e->getMessage(), $match)) { $result->message = $match[3]; $result->type = G::loadTranslation('ID_ERROR'); } else { $result->message = $e->getMessage(); $result->type = G::loadTranslation('ID_EXCEPTION'); } //$result->trace = $e->getTraceAsString(); } return $result; }