예제 #1
0
     $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);
예제 #2
0
 /**
  * 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;
 }