diff --git a/database/factories/DocumentsFactory.php b/database/factories/DocumentsFactory.php new file mode 100644 index 000000000..acfafb0ce --- /dev/null +++ b/database/factories/DocumentsFactory.php @@ -0,0 +1,54 @@ +define(\ProcessMaker\Model\Documents::class, function (Faker $faker) { + $types = ['INPUT', 'OUTPUT', 'ATTACHED']; + $type = $faker->randomElement($types); + return [ + 'APP_DOC_UID' => G::generateUniqueID(), + 'APP_DOC_FILENAME' => 'image.png', + 'APP_DOC_TITLE' => '', + 'APP_DOC_COMMENT' => '', + 'DOC_VERSION' => 1, + 'APP_UID' => G::generateUniqueID(), + 'DEL_INDEX' => 1, + 'DOC_UID' => G::generateUniqueID(), + 'USR_UID' => G::generateUniqueID(), + 'APP_DOC_TYPE' => $type, + 'APP_DOC_CREATE_DATE' => $faker->date(), + 'APP_DOC_INDEX' => 1, + 'FOLDER_UID' => G::generateUniqueID(), + 'APP_DOC_PLUGIN' => '', + 'APP_DOC_TAGS' => '', + 'APP_DOC_STATUS' => 'ACTIVE', + 'APP_DOC_STATUS_DATE' => $faker->date(), + 'APP_DOC_FIELDNAME' => '', + 'APP_DOC_DRIVE_DOWNLOAD' => '', + ]; +}); + +// Create a dynaform with the foreign keys +$factory->state(\ProcessMaker\Model\Documents::class, 'case_notes', function (Faker $faker) { + return [ + 'APP_DOC_UID' => G::generateUniqueID(), + 'APP_DOC_FILENAME' => 'image.png', + 'APP_DOC_TITLE' => '', + 'APP_DOC_COMMENT' => '', + 'DOC_VERSION' => 1, + 'APP_UID' => G::generateUniqueID(), + 'DEL_INDEX' => 1, + 'DOC_UID' => G::generateUniqueID(), + 'USR_UID' => G::generateUniqueID(), + 'APP_DOC_TYPE' => 'CASE_NOTE', + 'APP_DOC_CREATE_DATE' => $faker->date(), + 'APP_DOC_INDEX' => 1, + 'FOLDER_UID' => G::generateUniqueID(), + 'APP_DOC_PLUGIN' => '', + 'APP_DOC_TAGS' => '', + 'APP_DOC_STATUS' => 'ACTIVE', + 'APP_DOC_STATUS_DATE' => $faker->date(), + 'APP_DOC_FIELDNAME' => '', + 'APP_DOC_DRIVE_DOWNLOAD' => '', + ]; +}); diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index ee129521e..8e9e9af86 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -2708,6 +2708,8 @@ class G $nameToSave = $filter->validateInput($nameToSave, "path"); @chmod($path . "/" . $nameToSave, $permission); umask($oldumask); + + return true; } catch (Exception $oException) { throw $oException; } diff --git a/tests/resources/images/activate.png b/tests/resources/images/activate.png new file mode 100644 index 000000000..1be605c56 Binary files /dev/null and b/tests/resources/images/activate.png differ diff --git a/tests/resources/images/activity.gif b/tests/resources/images/activity.gif new file mode 100644 index 000000000..94d46c129 Binary files /dev/null and b/tests/resources/images/activity.gif differ diff --git a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php index 99778d4f2..3c7da31c5 100644 --- a/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php +++ b/tests/unit/workflow/engine/src/ProcessMaker/BusinessModel/CasesTest.php @@ -5,6 +5,8 @@ namespace ProcessMaker\BusinessModel; use Exception; use G; use ProcessMaker\Model\Application; +use ProcessMaker\Model\Delegation; +use ProcessMaker\Model\Documents; use RBAC; use Tests\TestCase; @@ -77,4 +79,61 @@ class CasesTest extends TestCase $case = new Cases(); $case->deleteCase($application->APP_UID, $_SESSION['USER_LOGGED']); } + + /** + * Review the upload file related to the case notes, an return an exception when the array is empty + * + * @covers \ProcessMaker\BusinessModel\Cases::uploadFilesInCaseNotes() + * + * @test + * @expectedException Exception + */ + public function it_return_exception_in_upload_files_related_case_note() + { + $application = factory(Application::class)->create(); + factory(Delegation::class)->states('foreign_keys')->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'APP_UID' => $application->APP_UID + ]); + // Upload the file + $case = new Cases(); + // Return an exception because the files does not exist + $case->uploadFilesInCaseNotes('00000000000000000000000000000001', $application->APP_UID, $filesReferences = []); + } + + /** + * Review the upload file related to the case notes + * + * @covers \ProcessMaker\BusinessModel\Cases::uploadFilesInCaseNotes() + * + * @test + */ + public function it_should_upload_files_related_case_note() + { + $application = factory(Application::class)->create(); + factory(Delegation::class)->states('foreign_keys')->create([ + 'APP_NUMBER' => $application->APP_NUMBER, + 'APP_UID' => $application->APP_UID + ]); + // File reference to upload + $filesReferences = [ + 'activityRename.gif' => PATH_TRUNK . 'tests' . PATH_SEP . 'resources' . PATH_SEP . 'images' . PATH_SEP . 'activity.gif', + ]; + // Path of the case + $pathCase = PATH_DB . config('system.workspace') . PATH_SEP . 'files' . PATH_SEP . $application->APP_UID . PATH_SEP; + // Upload the file + $case = new Cases(); + $result = $case->uploadFilesInCaseNotes('00000000000000000000000000000001', $application->APP_UID, $filesReferences); + $result = head($result); + $this->assertNotEmpty($result); + $this->assertArrayHasKey('APP_UID', $result); + $this->assertEquals($application->APP_UID, $result['APP_UID']); + $this->assertArrayHasKey('APP_DOC_TYPE', $result); + $this->assertEquals(Documents::DOC_TYPE_CASE_NOTE, $result['APP_DOC_TYPE']); + $this->assertArrayHasKey('APP_DOC_FILENAME', $result); + $this->assertEquals('activityRename.gif', $result['APP_DOC_FILENAME']); + + // Remove the path created + G::rm_dir($pathCase); + } } diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Model/DocumentsTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Model/DocumentsTest.php new file mode 100644 index 000000000..bc882b79d --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Model/DocumentsTest.php @@ -0,0 +1,29 @@ +states('case_notes')->create(); + $doc = new Documents(); + $res = $doc->getAppFiles($appDoc->APP_UID, Documents::DOC_TYPE_CASE_NOTE); + $this->assertNotEmpty($res); + } +} \ No newline at end of file diff --git a/tests/unit/workflow/engine/src/ProcessMaker/Util/Helpers/SaveAppDocumentTest.php b/tests/unit/workflow/engine/src/ProcessMaker/Util/Helpers/SaveAppDocumentTest.php new file mode 100644 index 000000000..4f1079a08 --- /dev/null +++ b/tests/unit/workflow/engine/src/ProcessMaker/Util/Helpers/SaveAppDocumentTest.php @@ -0,0 +1,47 @@ + PATH_TRUNK . 'tests' . PATH_SEP . 'resources' . PATH_SEP . 'images' . PATH_SEP . 'activate.png', + 'tmp_name' => PATH_TRUNK . 'tests' . PATH_SEP . 'resources' . PATH_SEP . 'images' . PATH_SEP . 'activate.png', + ]; + $appUid = G::generateUniqueID(); + $appDocUid = G::generateUniqueID(); + $pathCase = PATH_DB . config('system.workspace') . PATH_SEP . 'files' . PATH_SEP . G::getPathFromUID($appUid) . PATH_SEP; + saveAppDocument($files, $appUid, $appDocUid, 1, false); + $this->assertFileExists($pathCase . $appDocUid . '_1.png'); + G::rm_dir($pathCase); + } + + /** + * It test if the file reference was uploaded + * + * @test + */ + public function it_should_copy_file_different_name() + { + $files = [ + 'name' => 'activityRename.gif', + 'tmp_name' => PATH_TRUNK . 'tests' . PATH_SEP . 'resources' . PATH_SEP . 'images' . PATH_SEP . 'activity.gif', + ]; + $appUid = G::generateUniqueID(); + $appDocUid = G::generateUniqueID(); + $pathCase = PATH_DB . config('system.workspace') . PATH_SEP . 'files' . PATH_SEP . G::getPathFromUID($appUid) . PATH_SEP; + saveAppDocument($files, $appUid, $appDocUid, 1, false); + $this->assertFileExists($pathCase . $appDocUid . '_1.gif'); + G::rm_dir($pathCase); + } +} \ No newline at end of file diff --git a/workflow/engine/classes/WsBase.php b/workflow/engine/classes/WsBase.php index 898b2af56..48330d1cd 100644 --- a/workflow/engine/classes/WsBase.php +++ b/workflow/engine/classes/WsBase.php @@ -3420,16 +3420,17 @@ class WsBase /** * Add case note * - * @param string caseUid : ID of the case. - * @param string processUid : ID of the process. - * @param string taskUid : ID of the task. - * @param string userUid : The unique ID of the user who will add note case. - * @param string note : Note of the case. - * @param int sendMail : Optional parameter. If set to 1, will send an email to all participants in the case. + * @param string $caseUid, ID of the case. + * @param string $processUid, ID of the process. + * @param string $taskUid, ID of the task. + * @param string $userUid, The unique ID of the user who will add note case. + * @param string $note, Note of the case. + * @param int $sendMail, Optional parameter. If set to 1, will send an email to all participants in the case. + * @param array $files, Optional parameter. This is an array of files. * - * @return $result will return an object + * @return object */ - public function addCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail = 1) + public function addCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail = 1, $files = []) { try { if (empty($caseUid)) { @@ -3474,8 +3475,8 @@ class WsBase } //Add note case - $appNote = new AppNotes(); - $response = $appNote->addCaseNote($caseUid, $userUid, $note, $sendMail); + $appNote = new ProcessMaker\BusinessModel\Cases(); + $response = $appNote->addNote($caseUid, $userUid, $note, $sendMail, $files); //Response $result = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY")); diff --git a/workflow/engine/classes/class.pmFunctions.php b/workflow/engine/classes/class.pmFunctions.php index e99854804..5193afb66 100644 --- a/workflow/engine/classes/class.pmFunctions.php +++ b/workflow/engine/classes/class.pmFunctions.php @@ -2887,13 +2887,15 @@ function PMFUnpauseCase ($caseUid, $delIndex, $userUid) * @param string(32) | $userUid | ID user | The unique ID of the user who will add note case. * @param string | $note | Note of the case | Note of the case. * @param int | $sendMail = 1 | Send mail | Optional parameter. If set to 1, will send an email to all participants in the case. + * @param array | $files | Array of files | An array of files (full paths) to be attached to the case notes. + * * @return int | $result | Result of the add a case note | Returns 1 if the note has been added to the case.; otherwise, returns 0 if an error occurred. * */ -function PMFAddCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail = 1) +function PMFAddCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail = 1, $files = []) { $ws = new WsBase(); - $result = $ws->addCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail); + $result = $ws->addCaseNote($caseUid, $processUid, $taskUid, $userUid, $note, $sendMail, $files); if ($result->status_code == 0) { return 1; diff --git a/workflow/engine/classes/model/map/AppDocumentMapBuilder.php b/workflow/engine/classes/model/map/AppDocumentMapBuilder.php index c0a6495d2..9e8ca2f1a 100644 --- a/workflow/engine/classes/model/map/AppDocumentMapBuilder.php +++ b/workflow/engine/classes/model/map/AppDocumentMapBuilder.php @@ -81,6 +81,8 @@ class AppDocumentMapBuilder $tMap->addColumn('DOC_UID', 'DocUid', 'string', CreoleTypes::VARCHAR, true, 32); + $tMap->addColumn('DOC_ID', 'DocId', 'int', CreoleTypes::INTEGER, false, null); + $tMap->addColumn('USR_UID', 'UsrUid', 'string', CreoleTypes::VARCHAR, true, 32); $tMap->addColumn('APP_DOC_TYPE', 'AppDocType', 'string', CreoleTypes::VARCHAR, true, 32); @@ -127,7 +129,7 @@ class AppDocumentMapBuilder $tMap->addValidator('USR_UID', 'required', 'propel.validator.RequiredValidator', '', 'User UID is required.'); - $tMap->addValidator('APP_DOC_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'INPUT|OUTPUT|ATTACHED', 'Please select a valid document type.'); + $tMap->addValidator('APP_DOC_TYPE', 'validValues', 'propel.validator.ValidValuesValidator', 'INPUT|OUTPUT|ATTACHED|CASE_NOTE', 'Please select a valid document type.'); $tMap->addValidator('APP_DOC_TYPE', 'required', 'propel.validator.RequiredValidator', '', 'Application Document Type is required.'); diff --git a/workflow/engine/classes/model/map/AppNotesMapBuilder.php b/workflow/engine/classes/model/map/AppNotesMapBuilder.php index 469e66cda..90f497a0b 100644 --- a/workflow/engine/classes/model/map/AppNotesMapBuilder.php +++ b/workflow/engine/classes/model/map/AppNotesMapBuilder.php @@ -63,7 +63,9 @@ class AppNotesMapBuilder $tMap = $this->dbMap->addTable('APP_NOTES'); $tMap->setPhpName('AppNotes'); - $tMap->setUseIdGenerator(false); + $tMap->setUseIdGenerator(true); + + $tMap->addColumn('NOTE_ID', 'NoteId', 'int', CreoleTypes::INTEGER, true, null); $tMap->addColumn('APP_UID', 'AppUid', 'string', CreoleTypes::VARCHAR, true, 32); diff --git a/workflow/engine/classes/model/om/BaseAppDocument.php b/workflow/engine/classes/model/om/BaseAppDocument.php index d4874f670..ce2d5a86c 100644 --- a/workflow/engine/classes/model/om/BaseAppDocument.php +++ b/workflow/engine/classes/model/om/BaseAppDocument.php @@ -75,6 +75,12 @@ abstract class BaseAppDocument extends BaseObject implements Persistent */ protected $doc_uid = ''; + /** + * The value for the doc_id field. + * @var int + */ + protected $doc_id = 0; + /** * The value for the usr_uid field. * @var string @@ -255,6 +261,17 @@ abstract class BaseAppDocument extends BaseObject implements Persistent return $this->doc_uid; } + /** + * Get the [doc_id] column value. + * + * @return int + */ + public function getDocId() + { + + return $this->doc_id; + } + /** * Get the [usr_uid] column value. * @@ -616,6 +633,28 @@ abstract class BaseAppDocument extends BaseObject implements Persistent } // setDocUid() + /** + * Set the value of [doc_id] column. + * + * @param int $v new value + * @return void + */ + public function setDocId($v) + { + + // Since the native PHP type for this column is integer, + // we will cast the input value to an int (if it is not). + if ($v !== null && !is_int($v) && is_numeric($v)) { + $v = (int) $v; + } + + if ($this->doc_id !== $v || $v === 0) { + $this->doc_id = $v; + $this->modifiedColumns[] = AppDocumentPeer::DOC_ID; + } + + } // setDocId() + /** * Set the value of [usr_uid] column. * @@ -949,38 +988,40 @@ abstract class BaseAppDocument extends BaseObject implements Persistent $this->doc_uid = $rs->getString($startcol + 7); - $this->usr_uid = $rs->getString($startcol + 8); + $this->doc_id = $rs->getInt($startcol + 8); - $this->app_doc_type = $rs->getString($startcol + 9); + $this->usr_uid = $rs->getString($startcol + 9); - $this->app_doc_create_date = $rs->getTimestamp($startcol + 10, null); + $this->app_doc_type = $rs->getString($startcol + 10); - $this->app_doc_index = $rs->getInt($startcol + 11); + $this->app_doc_create_date = $rs->getTimestamp($startcol + 11, null); - $this->folder_uid = $rs->getString($startcol + 12); + $this->app_doc_index = $rs->getInt($startcol + 12); - $this->app_doc_plugin = $rs->getString($startcol + 13); + $this->folder_uid = $rs->getString($startcol + 13); - $this->app_doc_tags = $rs->getString($startcol + 14); + $this->app_doc_plugin = $rs->getString($startcol + 14); - $this->app_doc_status = $rs->getString($startcol + 15); + $this->app_doc_tags = $rs->getString($startcol + 15); - $this->app_doc_status_date = $rs->getTimestamp($startcol + 16, null); + $this->app_doc_status = $rs->getString($startcol + 16); - $this->app_doc_fieldname = $rs->getString($startcol + 17); + $this->app_doc_status_date = $rs->getTimestamp($startcol + 17, null); - $this->app_doc_drive_download = $rs->getString($startcol + 18); + $this->app_doc_fieldname = $rs->getString($startcol + 18); - $this->sync_with_drive = $rs->getString($startcol + 19); + $this->app_doc_drive_download = $rs->getString($startcol + 19); - $this->sync_permissions = $rs->getString($startcol + 20); + $this->sync_with_drive = $rs->getString($startcol + 20); + + $this->sync_permissions = $rs->getString($startcol + 21); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 21; // 21 = AppDocumentPeer::NUM_COLUMNS - AppDocumentPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 22; // 22 = AppDocumentPeer::NUM_COLUMNS - AppDocumentPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating AppDocument object", $e); @@ -1209,42 +1250,45 @@ abstract class BaseAppDocument extends BaseObject implements Persistent return $this->getDocUid(); break; case 8: - return $this->getUsrUid(); + return $this->getDocId(); break; case 9: - return $this->getAppDocType(); + return $this->getUsrUid(); break; case 10: - return $this->getAppDocCreateDate(); + return $this->getAppDocType(); break; case 11: - return $this->getAppDocIndex(); + return $this->getAppDocCreateDate(); break; case 12: - return $this->getFolderUid(); + return $this->getAppDocIndex(); break; case 13: - return $this->getAppDocPlugin(); + return $this->getFolderUid(); break; case 14: - return $this->getAppDocTags(); + return $this->getAppDocPlugin(); break; case 15: - return $this->getAppDocStatus(); + return $this->getAppDocTags(); break; case 16: - return $this->getAppDocStatusDate(); + return $this->getAppDocStatus(); break; case 17: - return $this->getAppDocFieldname(); + return $this->getAppDocStatusDate(); break; case 18: - return $this->getAppDocDriveDownload(); + return $this->getAppDocFieldname(); break; case 19: - return $this->getSyncWithDrive(); + return $this->getAppDocDriveDownload(); break; case 20: + return $this->getSyncWithDrive(); + break; + case 21: return $this->getSyncPermissions(); break; default: @@ -1275,19 +1319,20 @@ abstract class BaseAppDocument extends BaseObject implements Persistent $keys[5] => $this->getAppUid(), $keys[6] => $this->getDelIndex(), $keys[7] => $this->getDocUid(), - $keys[8] => $this->getUsrUid(), - $keys[9] => $this->getAppDocType(), - $keys[10] => $this->getAppDocCreateDate(), - $keys[11] => $this->getAppDocIndex(), - $keys[12] => $this->getFolderUid(), - $keys[13] => $this->getAppDocPlugin(), - $keys[14] => $this->getAppDocTags(), - $keys[15] => $this->getAppDocStatus(), - $keys[16] => $this->getAppDocStatusDate(), - $keys[17] => $this->getAppDocFieldname(), - $keys[18] => $this->getAppDocDriveDownload(), - $keys[19] => $this->getSyncWithDrive(), - $keys[20] => $this->getSyncPermissions(), + $keys[8] => $this->getDocId(), + $keys[9] => $this->getUsrUid(), + $keys[10] => $this->getAppDocType(), + $keys[11] => $this->getAppDocCreateDate(), + $keys[12] => $this->getAppDocIndex(), + $keys[13] => $this->getFolderUid(), + $keys[14] => $this->getAppDocPlugin(), + $keys[15] => $this->getAppDocTags(), + $keys[16] => $this->getAppDocStatus(), + $keys[17] => $this->getAppDocStatusDate(), + $keys[18] => $this->getAppDocFieldname(), + $keys[19] => $this->getAppDocDriveDownload(), + $keys[20] => $this->getSyncWithDrive(), + $keys[21] => $this->getSyncPermissions(), ); return $result; } @@ -1344,42 +1389,45 @@ abstract class BaseAppDocument extends BaseObject implements Persistent $this->setDocUid($value); break; case 8: - $this->setUsrUid($value); + $this->setDocId($value); break; case 9: - $this->setAppDocType($value); + $this->setUsrUid($value); break; case 10: - $this->setAppDocCreateDate($value); + $this->setAppDocType($value); break; case 11: - $this->setAppDocIndex($value); + $this->setAppDocCreateDate($value); break; case 12: - $this->setFolderUid($value); + $this->setAppDocIndex($value); break; case 13: - $this->setAppDocPlugin($value); + $this->setFolderUid($value); break; case 14: - $this->setAppDocTags($value); + $this->setAppDocPlugin($value); break; case 15: - $this->setAppDocStatus($value); + $this->setAppDocTags($value); break; case 16: - $this->setAppDocStatusDate($value); + $this->setAppDocStatus($value); break; case 17: - $this->setAppDocFieldname($value); + $this->setAppDocStatusDate($value); break; case 18: - $this->setAppDocDriveDownload($value); + $this->setAppDocFieldname($value); break; case 19: - $this->setSyncWithDrive($value); + $this->setAppDocDriveDownload($value); break; case 20: + $this->setSyncWithDrive($value); + break; + case 21: $this->setSyncPermissions($value); break; } // switch() @@ -1438,55 +1486,59 @@ abstract class BaseAppDocument extends BaseObject implements Persistent } if (array_key_exists($keys[8], $arr)) { - $this->setUsrUid($arr[$keys[8]]); + $this->setDocId($arr[$keys[8]]); } if (array_key_exists($keys[9], $arr)) { - $this->setAppDocType($arr[$keys[9]]); + $this->setUsrUid($arr[$keys[9]]); } if (array_key_exists($keys[10], $arr)) { - $this->setAppDocCreateDate($arr[$keys[10]]); + $this->setAppDocType($arr[$keys[10]]); } if (array_key_exists($keys[11], $arr)) { - $this->setAppDocIndex($arr[$keys[11]]); + $this->setAppDocCreateDate($arr[$keys[11]]); } if (array_key_exists($keys[12], $arr)) { - $this->setFolderUid($arr[$keys[12]]); + $this->setAppDocIndex($arr[$keys[12]]); } if (array_key_exists($keys[13], $arr)) { - $this->setAppDocPlugin($arr[$keys[13]]); + $this->setFolderUid($arr[$keys[13]]); } if (array_key_exists($keys[14], $arr)) { - $this->setAppDocTags($arr[$keys[14]]); + $this->setAppDocPlugin($arr[$keys[14]]); } if (array_key_exists($keys[15], $arr)) { - $this->setAppDocStatus($arr[$keys[15]]); + $this->setAppDocTags($arr[$keys[15]]); } if (array_key_exists($keys[16], $arr)) { - $this->setAppDocStatusDate($arr[$keys[16]]); + $this->setAppDocStatus($arr[$keys[16]]); } if (array_key_exists($keys[17], $arr)) { - $this->setAppDocFieldname($arr[$keys[17]]); + $this->setAppDocStatusDate($arr[$keys[17]]); } if (array_key_exists($keys[18], $arr)) { - $this->setAppDocDriveDownload($arr[$keys[18]]); + $this->setAppDocFieldname($arr[$keys[18]]); } if (array_key_exists($keys[19], $arr)) { - $this->setSyncWithDrive($arr[$keys[19]]); + $this->setAppDocDriveDownload($arr[$keys[19]]); } if (array_key_exists($keys[20], $arr)) { - $this->setSyncPermissions($arr[$keys[20]]); + $this->setSyncWithDrive($arr[$keys[20]]); + } + + if (array_key_exists($keys[21], $arr)) { + $this->setSyncPermissions($arr[$keys[21]]); } } @@ -1532,6 +1584,10 @@ abstract class BaseAppDocument extends BaseObject implements Persistent $criteria->add(AppDocumentPeer::DOC_UID, $this->doc_uid); } + if ($this->isColumnModified(AppDocumentPeer::DOC_ID)) { + $criteria->add(AppDocumentPeer::DOC_ID, $this->doc_id); + } + if ($this->isColumnModified(AppDocumentPeer::USR_UID)) { $criteria->add(AppDocumentPeer::USR_UID, $this->usr_uid); } @@ -1662,6 +1718,8 @@ abstract class BaseAppDocument extends BaseObject implements Persistent $copyObj->setDocUid($this->doc_uid); + $copyObj->setDocId($this->doc_id); + $copyObj->setUsrUid($this->usr_uid); $copyObj->setAppDocType($this->app_doc_type); diff --git a/workflow/engine/classes/model/om/BaseAppDocumentPeer.php b/workflow/engine/classes/model/om/BaseAppDocumentPeer.php index df748ac54..4aaeb0c1d 100644 --- a/workflow/engine/classes/model/om/BaseAppDocumentPeer.php +++ b/workflow/engine/classes/model/om/BaseAppDocumentPeer.php @@ -25,7 +25,7 @@ abstract class BaseAppDocumentPeer const CLASS_DEFAULT = 'classes.model.AppDocument'; /** The total number of columns. */ - const NUM_COLUMNS = 21; + const NUM_COLUMNS = 22; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; @@ -55,6 +55,9 @@ abstract class BaseAppDocumentPeer /** the column name for the DOC_UID field */ const DOC_UID = 'APP_DOCUMENT.DOC_UID'; + /** the column name for the DOC_ID field */ + const DOC_ID = 'APP_DOCUMENT.DOC_ID'; + /** the column name for the USR_UID field */ const USR_UID = 'APP_DOCUMENT.USR_UID'; @@ -105,10 +108,10 @@ abstract class BaseAppDocumentPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AppDocUid', 'AppDocFilename', 'AppDocTitle', 'AppDocComment', 'DocVersion', 'AppUid', 'DelIndex', 'DocUid', 'UsrUid', 'AppDocType', 'AppDocCreateDate', 'AppDocIndex', 'FolderUid', 'AppDocPlugin', 'AppDocTags', 'AppDocStatus', 'AppDocStatusDate', 'AppDocFieldname', 'AppDocDriveDownload', 'SyncWithDrive', 'SyncPermissions', ), - BasePeer::TYPE_COLNAME => array (AppDocumentPeer::APP_DOC_UID, AppDocumentPeer::APP_DOC_FILENAME, AppDocumentPeer::APP_DOC_TITLE, AppDocumentPeer::APP_DOC_COMMENT, AppDocumentPeer::DOC_VERSION, AppDocumentPeer::APP_UID, AppDocumentPeer::DEL_INDEX, AppDocumentPeer::DOC_UID, AppDocumentPeer::USR_UID, AppDocumentPeer::APP_DOC_TYPE, AppDocumentPeer::APP_DOC_CREATE_DATE, AppDocumentPeer::APP_DOC_INDEX, AppDocumentPeer::FOLDER_UID, AppDocumentPeer::APP_DOC_PLUGIN, AppDocumentPeer::APP_DOC_TAGS, AppDocumentPeer::APP_DOC_STATUS, AppDocumentPeer::APP_DOC_STATUS_DATE, AppDocumentPeer::APP_DOC_FIELDNAME, AppDocumentPeer::APP_DOC_DRIVE_DOWNLOAD, AppDocumentPeer::SYNC_WITH_DRIVE, AppDocumentPeer::SYNC_PERMISSIONS, ), - BasePeer::TYPE_FIELDNAME => array ('APP_DOC_UID', 'APP_DOC_FILENAME', 'APP_DOC_TITLE', 'APP_DOC_COMMENT', 'DOC_VERSION', 'APP_UID', 'DEL_INDEX', 'DOC_UID', 'USR_UID', 'APP_DOC_TYPE', 'APP_DOC_CREATE_DATE', 'APP_DOC_INDEX', 'FOLDER_UID', 'APP_DOC_PLUGIN', 'APP_DOC_TAGS', 'APP_DOC_STATUS', 'APP_DOC_STATUS_DATE', 'APP_DOC_FIELDNAME', 'APP_DOC_DRIVE_DOWNLOAD', 'SYNC_WITH_DRIVE', 'SYNC_PERMISSIONS', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ) + BasePeer::TYPE_PHPNAME => array ('AppDocUid', 'AppDocFilename', 'AppDocTitle', 'AppDocComment', 'DocVersion', 'AppUid', 'DelIndex', 'DocUid', 'DocId', 'UsrUid', 'AppDocType', 'AppDocCreateDate', 'AppDocIndex', 'FolderUid', 'AppDocPlugin', 'AppDocTags', 'AppDocStatus', 'AppDocStatusDate', 'AppDocFieldname', 'AppDocDriveDownload', 'SyncWithDrive', 'SyncPermissions', ), + BasePeer::TYPE_COLNAME => array (AppDocumentPeer::APP_DOC_UID, AppDocumentPeer::APP_DOC_FILENAME, AppDocumentPeer::APP_DOC_TITLE, AppDocumentPeer::APP_DOC_COMMENT, AppDocumentPeer::DOC_VERSION, AppDocumentPeer::APP_UID, AppDocumentPeer::DEL_INDEX, AppDocumentPeer::DOC_UID, AppDocumentPeer::DOC_ID, AppDocumentPeer::USR_UID, AppDocumentPeer::APP_DOC_TYPE, AppDocumentPeer::APP_DOC_CREATE_DATE, AppDocumentPeer::APP_DOC_INDEX, AppDocumentPeer::FOLDER_UID, AppDocumentPeer::APP_DOC_PLUGIN, AppDocumentPeer::APP_DOC_TAGS, AppDocumentPeer::APP_DOC_STATUS, AppDocumentPeer::APP_DOC_STATUS_DATE, AppDocumentPeer::APP_DOC_FIELDNAME, AppDocumentPeer::APP_DOC_DRIVE_DOWNLOAD, AppDocumentPeer::SYNC_WITH_DRIVE, AppDocumentPeer::SYNC_PERMISSIONS, ), + BasePeer::TYPE_FIELDNAME => array ('APP_DOC_UID', 'APP_DOC_FILENAME', 'APP_DOC_TITLE', 'APP_DOC_COMMENT', 'DOC_VERSION', 'APP_UID', 'DEL_INDEX', 'DOC_UID', 'DOC_ID', 'USR_UID', 'APP_DOC_TYPE', 'APP_DOC_CREATE_DATE', 'APP_DOC_INDEX', 'FOLDER_UID', 'APP_DOC_PLUGIN', 'APP_DOC_TAGS', 'APP_DOC_STATUS', 'APP_DOC_STATUS_DATE', 'APP_DOC_FIELDNAME', 'APP_DOC_DRIVE_DOWNLOAD', 'SYNC_WITH_DRIVE', 'SYNC_PERMISSIONS', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ) ); /** @@ -118,10 +121,10 @@ abstract class BaseAppDocumentPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AppDocUid' => 0, 'AppDocFilename' => 1, 'AppDocTitle' => 2, 'AppDocComment' => 3, 'DocVersion' => 4, 'AppUid' => 5, 'DelIndex' => 6, 'DocUid' => 7, 'UsrUid' => 8, 'AppDocType' => 9, 'AppDocCreateDate' => 10, 'AppDocIndex' => 11, 'FolderUid' => 12, 'AppDocPlugin' => 13, 'AppDocTags' => 14, 'AppDocStatus' => 15, 'AppDocStatusDate' => 16, 'AppDocFieldname' => 17, 'AppDocDriveDownload' => 18, 'SyncWithDrive' => 19, 'SyncPermissions' => 20, ), - BasePeer::TYPE_COLNAME => array (AppDocumentPeer::APP_DOC_UID => 0, AppDocumentPeer::APP_DOC_FILENAME => 1, AppDocumentPeer::APP_DOC_TITLE => 2, AppDocumentPeer::APP_DOC_COMMENT => 3, AppDocumentPeer::DOC_VERSION => 4, AppDocumentPeer::APP_UID => 5, AppDocumentPeer::DEL_INDEX => 6, AppDocumentPeer::DOC_UID => 7, AppDocumentPeer::USR_UID => 8, AppDocumentPeer::APP_DOC_TYPE => 9, AppDocumentPeer::APP_DOC_CREATE_DATE => 10, AppDocumentPeer::APP_DOC_INDEX => 11, AppDocumentPeer::FOLDER_UID => 12, AppDocumentPeer::APP_DOC_PLUGIN => 13, AppDocumentPeer::APP_DOC_TAGS => 14, AppDocumentPeer::APP_DOC_STATUS => 15, AppDocumentPeer::APP_DOC_STATUS_DATE => 16, AppDocumentPeer::APP_DOC_FIELDNAME => 17, AppDocumentPeer::APP_DOC_DRIVE_DOWNLOAD => 18, AppDocumentPeer::SYNC_WITH_DRIVE => 19, AppDocumentPeer::SYNC_PERMISSIONS => 20, ), - BasePeer::TYPE_FIELDNAME => array ('APP_DOC_UID' => 0, 'APP_DOC_FILENAME' => 1, 'APP_DOC_TITLE' => 2, 'APP_DOC_COMMENT' => 3, 'DOC_VERSION' => 4, 'APP_UID' => 5, 'DEL_INDEX' => 6, 'DOC_UID' => 7, 'USR_UID' => 8, 'APP_DOC_TYPE' => 9, 'APP_DOC_CREATE_DATE' => 10, 'APP_DOC_INDEX' => 11, 'FOLDER_UID' => 12, 'APP_DOC_PLUGIN' => 13, 'APP_DOC_TAGS' => 14, 'APP_DOC_STATUS' => 15, 'APP_DOC_STATUS_DATE' => 16, 'APP_DOC_FIELDNAME' => 17, 'APP_DOC_DRIVE_DOWNLOAD' => 18, 'SYNC_WITH_DRIVE' => 19, 'SYNC_PERMISSIONS' => 20, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ) + BasePeer::TYPE_PHPNAME => array ('AppDocUid' => 0, 'AppDocFilename' => 1, 'AppDocTitle' => 2, 'AppDocComment' => 3, 'DocVersion' => 4, 'AppUid' => 5, 'DelIndex' => 6, 'DocUid' => 7, 'DocId' => 8, 'UsrUid' => 9, 'AppDocType' => 10, 'AppDocCreateDate' => 11, 'AppDocIndex' => 12, 'FolderUid' => 13, 'AppDocPlugin' => 14, 'AppDocTags' => 15, 'AppDocStatus' => 16, 'AppDocStatusDate' => 17, 'AppDocFieldname' => 18, 'AppDocDriveDownload' => 19, 'SyncWithDrive' => 20, 'SyncPermissions' => 21, ), + BasePeer::TYPE_COLNAME => array (AppDocumentPeer::APP_DOC_UID => 0, AppDocumentPeer::APP_DOC_FILENAME => 1, AppDocumentPeer::APP_DOC_TITLE => 2, AppDocumentPeer::APP_DOC_COMMENT => 3, AppDocumentPeer::DOC_VERSION => 4, AppDocumentPeer::APP_UID => 5, AppDocumentPeer::DEL_INDEX => 6, AppDocumentPeer::DOC_UID => 7, AppDocumentPeer::DOC_ID => 8, AppDocumentPeer::USR_UID => 9, AppDocumentPeer::APP_DOC_TYPE => 10, AppDocumentPeer::APP_DOC_CREATE_DATE => 11, AppDocumentPeer::APP_DOC_INDEX => 12, AppDocumentPeer::FOLDER_UID => 13, AppDocumentPeer::APP_DOC_PLUGIN => 14, AppDocumentPeer::APP_DOC_TAGS => 15, AppDocumentPeer::APP_DOC_STATUS => 16, AppDocumentPeer::APP_DOC_STATUS_DATE => 17, AppDocumentPeer::APP_DOC_FIELDNAME => 18, AppDocumentPeer::APP_DOC_DRIVE_DOWNLOAD => 19, AppDocumentPeer::SYNC_WITH_DRIVE => 20, AppDocumentPeer::SYNC_PERMISSIONS => 21, ), + BasePeer::TYPE_FIELDNAME => array ('APP_DOC_UID' => 0, 'APP_DOC_FILENAME' => 1, 'APP_DOC_TITLE' => 2, 'APP_DOC_COMMENT' => 3, 'DOC_VERSION' => 4, 'APP_UID' => 5, 'DEL_INDEX' => 6, 'DOC_UID' => 7, 'DOC_ID' => 8, 'USR_UID' => 9, 'APP_DOC_TYPE' => 10, 'APP_DOC_CREATE_DATE' => 11, 'APP_DOC_INDEX' => 12, 'FOLDER_UID' => 13, 'APP_DOC_PLUGIN' => 14, 'APP_DOC_TAGS' => 15, 'APP_DOC_STATUS' => 16, 'APP_DOC_STATUS_DATE' => 17, 'APP_DOC_FIELDNAME' => 18, 'APP_DOC_DRIVE_DOWNLOAD' => 19, 'SYNC_WITH_DRIVE' => 20, 'SYNC_PERMISSIONS' => 21, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, ) ); /** @@ -238,6 +241,8 @@ abstract class BaseAppDocumentPeer $criteria->addSelectColumn(AppDocumentPeer::DOC_UID); + $criteria->addSelectColumn(AppDocumentPeer::DOC_ID); + $criteria->addSelectColumn(AppDocumentPeer::USR_UID); $criteria->addSelectColumn(AppDocumentPeer::APP_DOC_TYPE); diff --git a/workflow/engine/classes/model/om/BaseAppNotes.php b/workflow/engine/classes/model/om/BaseAppNotes.php index 60225d6d6..4eba38105 100644 --- a/workflow/engine/classes/model/om/BaseAppNotes.php +++ b/workflow/engine/classes/model/om/BaseAppNotes.php @@ -27,6 +27,12 @@ abstract class BaseAppNotes extends BaseObject implements Persistent */ protected static $peer; + /** + * The value for the note_id field. + * @var int + */ + protected $note_id; + /** * The value for the app_uid field. * @var string @@ -101,6 +107,17 @@ abstract class BaseAppNotes extends BaseObject implements Persistent */ protected $alreadyInValidation = false; + /** + * Get the [note_id] column value. + * + * @return int + */ + public function getNoteId() + { + + return $this->note_id; + } + /** * Get the [app_uid] column value. * @@ -232,6 +249,28 @@ abstract class BaseAppNotes extends BaseObject implements Persistent return $this->note_recipients; } + /** + * Set the value of [note_id] column. + * + * @param int $v new value + * @return void + */ + public function setNoteId($v) + { + + // Since the native PHP type for this column is integer, + // we will cast the input value to an int (if it is not). + if ($v !== null && !is_int($v) && is_numeric($v)) { + $v = (int) $v; + } + + if ($this->note_id !== $v) { + $this->note_id = $v; + $this->modifiedColumns[] = AppNotesPeer::NOTE_ID; + } + + } // setNoteId() + /** * Set the value of [app_uid] column. * @@ -476,32 +515,34 @@ abstract class BaseAppNotes extends BaseObject implements Persistent { try { - $this->app_uid = $rs->getString($startcol + 0); + $this->note_id = $rs->getInt($startcol + 0); - $this->usr_uid = $rs->getString($startcol + 1); + $this->app_uid = $rs->getString($startcol + 1); - $this->note_date = $rs->getTimestamp($startcol + 2, null); + $this->usr_uid = $rs->getString($startcol + 2); - $this->note_content = $rs->getString($startcol + 3); + $this->note_date = $rs->getTimestamp($startcol + 3, null); - $this->note_type = $rs->getString($startcol + 4); + $this->note_content = $rs->getString($startcol + 4); - $this->note_availability = $rs->getString($startcol + 5); + $this->note_type = $rs->getString($startcol + 5); - $this->note_origin_obj = $rs->getString($startcol + 6); + $this->note_availability = $rs->getString($startcol + 6); - $this->note_affected_obj1 = $rs->getString($startcol + 7); + $this->note_origin_obj = $rs->getString($startcol + 7); - $this->note_affected_obj2 = $rs->getString($startcol + 8); + $this->note_affected_obj1 = $rs->getString($startcol + 8); - $this->note_recipients = $rs->getString($startcol + 9); + $this->note_affected_obj2 = $rs->getString($startcol + 9); + + $this->note_recipients = $rs->getString($startcol + 10); $this->resetModified(); $this->setNew(false); // FIXME - using NUM_COLUMNS may be clearer. - return $startcol + 10; // 10 = AppNotesPeer::NUM_COLUMNS - AppNotesPeer::NUM_LAZY_LOAD_COLUMNS). + return $startcol + 11; // 11 = AppNotesPeer::NUM_COLUMNS - AppNotesPeer::NUM_LAZY_LOAD_COLUMNS). } catch (Exception $e) { throw new PropelException("Error populating AppNotes object", $e); @@ -706,33 +747,36 @@ abstract class BaseAppNotes extends BaseObject implements Persistent { switch($pos) { case 0: - return $this->getAppUid(); + return $this->getNoteId(); break; case 1: - return $this->getUsrUid(); + return $this->getAppUid(); break; case 2: - return $this->getNoteDate(); + return $this->getUsrUid(); break; case 3: - return $this->getNoteContent(); + return $this->getNoteDate(); break; case 4: - return $this->getNoteType(); + return $this->getNoteContent(); break; case 5: - return $this->getNoteAvailability(); + return $this->getNoteType(); break; case 6: - return $this->getNoteOriginObj(); + return $this->getNoteAvailability(); break; case 7: - return $this->getNoteAffectedObj1(); + return $this->getNoteOriginObj(); break; case 8: - return $this->getNoteAffectedObj2(); + return $this->getNoteAffectedObj1(); break; case 9: + return $this->getNoteAffectedObj2(); + break; + case 10: return $this->getNoteRecipients(); break; default: @@ -755,16 +799,17 @@ abstract class BaseAppNotes extends BaseObject implements Persistent { $keys = AppNotesPeer::getFieldNames($keyType); $result = array( - $keys[0] => $this->getAppUid(), - $keys[1] => $this->getUsrUid(), - $keys[2] => $this->getNoteDate(), - $keys[3] => $this->getNoteContent(), - $keys[4] => $this->getNoteType(), - $keys[5] => $this->getNoteAvailability(), - $keys[6] => $this->getNoteOriginObj(), - $keys[7] => $this->getNoteAffectedObj1(), - $keys[8] => $this->getNoteAffectedObj2(), - $keys[9] => $this->getNoteRecipients(), + $keys[0] => $this->getNoteId(), + $keys[1] => $this->getAppUid(), + $keys[2] => $this->getUsrUid(), + $keys[3] => $this->getNoteDate(), + $keys[4] => $this->getNoteContent(), + $keys[5] => $this->getNoteType(), + $keys[6] => $this->getNoteAvailability(), + $keys[7] => $this->getNoteOriginObj(), + $keys[8] => $this->getNoteAffectedObj1(), + $keys[9] => $this->getNoteAffectedObj2(), + $keys[10] => $this->getNoteRecipients(), ); return $result; } @@ -797,33 +842,36 @@ abstract class BaseAppNotes extends BaseObject implements Persistent { switch($pos) { case 0: - $this->setAppUid($value); + $this->setNoteId($value); break; case 1: - $this->setUsrUid($value); + $this->setAppUid($value); break; case 2: - $this->setNoteDate($value); + $this->setUsrUid($value); break; case 3: - $this->setNoteContent($value); + $this->setNoteDate($value); break; case 4: - $this->setNoteType($value); + $this->setNoteContent($value); break; case 5: - $this->setNoteAvailability($value); + $this->setNoteType($value); break; case 6: - $this->setNoteOriginObj($value); + $this->setNoteAvailability($value); break; case 7: - $this->setNoteAffectedObj1($value); + $this->setNoteOriginObj($value); break; case 8: - $this->setNoteAffectedObj2($value); + $this->setNoteAffectedObj1($value); break; case 9: + $this->setNoteAffectedObj2($value); + break; + case 10: $this->setNoteRecipients($value); break; } // switch() @@ -850,43 +898,47 @@ abstract class BaseAppNotes extends BaseObject implements Persistent $keys = AppNotesPeer::getFieldNames($keyType); if (array_key_exists($keys[0], $arr)) { - $this->setAppUid($arr[$keys[0]]); + $this->setNoteId($arr[$keys[0]]); } if (array_key_exists($keys[1], $arr)) { - $this->setUsrUid($arr[$keys[1]]); + $this->setAppUid($arr[$keys[1]]); } if (array_key_exists($keys[2], $arr)) { - $this->setNoteDate($arr[$keys[2]]); + $this->setUsrUid($arr[$keys[2]]); } if (array_key_exists($keys[3], $arr)) { - $this->setNoteContent($arr[$keys[3]]); + $this->setNoteDate($arr[$keys[3]]); } if (array_key_exists($keys[4], $arr)) { - $this->setNoteType($arr[$keys[4]]); + $this->setNoteContent($arr[$keys[4]]); } if (array_key_exists($keys[5], $arr)) { - $this->setNoteAvailability($arr[$keys[5]]); + $this->setNoteType($arr[$keys[5]]); } if (array_key_exists($keys[6], $arr)) { - $this->setNoteOriginObj($arr[$keys[6]]); + $this->setNoteAvailability($arr[$keys[6]]); } if (array_key_exists($keys[7], $arr)) { - $this->setNoteAffectedObj1($arr[$keys[7]]); + $this->setNoteOriginObj($arr[$keys[7]]); } if (array_key_exists($keys[8], $arr)) { - $this->setNoteAffectedObj2($arr[$keys[8]]); + $this->setNoteAffectedObj1($arr[$keys[8]]); } if (array_key_exists($keys[9], $arr)) { - $this->setNoteRecipients($arr[$keys[9]]); + $this->setNoteAffectedObj2($arr[$keys[9]]); + } + + if (array_key_exists($keys[10], $arr)) { + $this->setNoteRecipients($arr[$keys[10]]); } } @@ -900,6 +952,10 @@ abstract class BaseAppNotes extends BaseObject implements Persistent { $criteria = new Criteria(AppNotesPeer::DATABASE_NAME); + if ($this->isColumnModified(AppNotesPeer::NOTE_ID)) { + $criteria->add(AppNotesPeer::NOTE_ID, $this->note_id); + } + if ($this->isColumnModified(AppNotesPeer::APP_UID)) { $criteria->add(AppNotesPeer::APP_UID, $this->app_uid); } @@ -997,6 +1053,8 @@ abstract class BaseAppNotes extends BaseObject implements Persistent public function copyInto($copyObj, $deepCopy = false) { + $copyObj->setNoteId($this->note_id); + $copyObj->setAppUid($this->app_uid); $copyObj->setUsrUid($this->usr_uid); diff --git a/workflow/engine/classes/model/om/BaseAppNotesPeer.php b/workflow/engine/classes/model/om/BaseAppNotesPeer.php index 2efabc48c..858e32b61 100644 --- a/workflow/engine/classes/model/om/BaseAppNotesPeer.php +++ b/workflow/engine/classes/model/om/BaseAppNotesPeer.php @@ -25,12 +25,15 @@ abstract class BaseAppNotesPeer const CLASS_DEFAULT = 'classes.model.AppNotes'; /** The total number of columns. */ - const NUM_COLUMNS = 10; + const NUM_COLUMNS = 11; /** The number of lazy-loaded columns. */ const NUM_LAZY_LOAD_COLUMNS = 0; + /** the column name for the NOTE_ID field */ + const NOTE_ID = 'APP_NOTES.NOTE_ID'; + /** the column name for the APP_UID field */ const APP_UID = 'APP_NOTES.APP_UID'; @@ -72,10 +75,10 @@ abstract class BaseAppNotesPeer * e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id' */ private static $fieldNames = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid', 'UsrUid', 'NoteDate', 'NoteContent', 'NoteType', 'NoteAvailability', 'NoteOriginObj', 'NoteAffectedObj1', 'NoteAffectedObj2', 'NoteRecipients', ), - BasePeer::TYPE_COLNAME => array (AppNotesPeer::APP_UID, AppNotesPeer::USR_UID, AppNotesPeer::NOTE_DATE, AppNotesPeer::NOTE_CONTENT, AppNotesPeer::NOTE_TYPE, AppNotesPeer::NOTE_AVAILABILITY, AppNotesPeer::NOTE_ORIGIN_OBJ, AppNotesPeer::NOTE_AFFECTED_OBJ1, AppNotesPeer::NOTE_AFFECTED_OBJ2, AppNotesPeer::NOTE_RECIPIENTS, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID', 'USR_UID', 'NOTE_DATE', 'NOTE_CONTENT', 'NOTE_TYPE', 'NOTE_AVAILABILITY', 'NOTE_ORIGIN_OBJ', 'NOTE_AFFECTED_OBJ1', 'NOTE_AFFECTED_OBJ2', 'NOTE_RECIPIENTS', ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ) + BasePeer::TYPE_PHPNAME => array ('NoteId', 'AppUid', 'UsrUid', 'NoteDate', 'NoteContent', 'NoteType', 'NoteAvailability', 'NoteOriginObj', 'NoteAffectedObj1', 'NoteAffectedObj2', 'NoteRecipients', ), + BasePeer::TYPE_COLNAME => array (AppNotesPeer::NOTE_ID, AppNotesPeer::APP_UID, AppNotesPeer::USR_UID, AppNotesPeer::NOTE_DATE, AppNotesPeer::NOTE_CONTENT, AppNotesPeer::NOTE_TYPE, AppNotesPeer::NOTE_AVAILABILITY, AppNotesPeer::NOTE_ORIGIN_OBJ, AppNotesPeer::NOTE_AFFECTED_OBJ1, AppNotesPeer::NOTE_AFFECTED_OBJ2, AppNotesPeer::NOTE_RECIPIENTS, ), + BasePeer::TYPE_FIELDNAME => array ('NOTE_ID', 'APP_UID', 'USR_UID', 'NOTE_DATE', 'NOTE_CONTENT', 'NOTE_TYPE', 'NOTE_AVAILABILITY', 'NOTE_ORIGIN_OBJ', 'NOTE_AFFECTED_OBJ1', 'NOTE_AFFECTED_OBJ2', 'NOTE_RECIPIENTS', ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ) ); /** @@ -85,10 +88,10 @@ abstract class BaseAppNotesPeer * e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0 */ private static $fieldKeys = array ( - BasePeer::TYPE_PHPNAME => array ('AppUid' => 0, 'UsrUid' => 1, 'NoteDate' => 2, 'NoteContent' => 3, 'NoteType' => 4, 'NoteAvailability' => 5, 'NoteOriginObj' => 6, 'NoteAffectedObj1' => 7, 'NoteAffectedObj2' => 8, 'NoteRecipients' => 9, ), - BasePeer::TYPE_COLNAME => array (AppNotesPeer::APP_UID => 0, AppNotesPeer::USR_UID => 1, AppNotesPeer::NOTE_DATE => 2, AppNotesPeer::NOTE_CONTENT => 3, AppNotesPeer::NOTE_TYPE => 4, AppNotesPeer::NOTE_AVAILABILITY => 5, AppNotesPeer::NOTE_ORIGIN_OBJ => 6, AppNotesPeer::NOTE_AFFECTED_OBJ1 => 7, AppNotesPeer::NOTE_AFFECTED_OBJ2 => 8, AppNotesPeer::NOTE_RECIPIENTS => 9, ), - BasePeer::TYPE_FIELDNAME => array ('APP_UID' => 0, 'USR_UID' => 1, 'NOTE_DATE' => 2, 'NOTE_CONTENT' => 3, 'NOTE_TYPE' => 4, 'NOTE_AVAILABILITY' => 5, 'NOTE_ORIGIN_OBJ' => 6, 'NOTE_AFFECTED_OBJ1' => 7, 'NOTE_AFFECTED_OBJ2' => 8, 'NOTE_RECIPIENTS' => 9, ), - BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ) + BasePeer::TYPE_PHPNAME => array ('NoteId' => 0, 'AppUid' => 1, 'UsrUid' => 2, 'NoteDate' => 3, 'NoteContent' => 4, 'NoteType' => 5, 'NoteAvailability' => 6, 'NoteOriginObj' => 7, 'NoteAffectedObj1' => 8, 'NoteAffectedObj2' => 9, 'NoteRecipients' => 10, ), + BasePeer::TYPE_COLNAME => array (AppNotesPeer::NOTE_ID => 0, AppNotesPeer::APP_UID => 1, AppNotesPeer::USR_UID => 2, AppNotesPeer::NOTE_DATE => 3, AppNotesPeer::NOTE_CONTENT => 4, AppNotesPeer::NOTE_TYPE => 5, AppNotesPeer::NOTE_AVAILABILITY => 6, AppNotesPeer::NOTE_ORIGIN_OBJ => 7, AppNotesPeer::NOTE_AFFECTED_OBJ1 => 8, AppNotesPeer::NOTE_AFFECTED_OBJ2 => 9, AppNotesPeer::NOTE_RECIPIENTS => 10, ), + BasePeer::TYPE_FIELDNAME => array ('NOTE_ID' => 0, 'APP_UID' => 1, 'USR_UID' => 2, 'NOTE_DATE' => 3, 'NOTE_CONTENT' => 4, 'NOTE_TYPE' => 5, 'NOTE_AVAILABILITY' => 6, 'NOTE_ORIGIN_OBJ' => 7, 'NOTE_AFFECTED_OBJ1' => 8, 'NOTE_AFFECTED_OBJ2' => 9, 'NOTE_RECIPIENTS' => 10, ), + BasePeer::TYPE_NUM => array (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ) ); /** @@ -189,6 +192,8 @@ abstract class BaseAppNotesPeer public static function addSelectColumns(Criteria $criteria) { + $criteria->addSelectColumn(AppNotesPeer::NOTE_ID); + $criteria->addSelectColumn(AppNotesPeer::APP_UID); $criteria->addSelectColumn(AppNotesPeer::USR_UID); diff --git a/workflow/engine/config/schema.xml b/workflow/engine/config/schema.xml index 24e4d7490..313c2ed73 100644 --- a/workflow/engine/config/schema.xml +++ b/workflow/engine/config/schema.xml @@ -230,6 +230,7 @@ + @@ -284,7 +285,7 @@ - + @@ -3287,7 +3288,7 @@ - +
@@ -3308,6 +3309,7 @@ + @@ -3318,6 +3320,9 @@ + + + diff --git a/workflow/engine/data/mysql/schema.sql b/workflow/engine/data/mysql/schema.sql index 4946fb777..67608ac2e 100644 --- a/workflow/engine/data/mysql/schema.sql +++ b/workflow/engine/data/mysql/schema.sql @@ -120,6 +120,7 @@ CREATE TABLE `APP_DOCUMENT` `APP_UID` VARCHAR(32) default '' NOT NULL, `DEL_INDEX` INTEGER default 0 NOT NULL, `DOC_UID` VARCHAR(32) default '' NOT NULL, + `DOC_ID` INTEGER default 0, `USR_UID` VARCHAR(32) default '' NOT NULL, `APP_DOC_TYPE` VARCHAR(32) default '' NOT NULL, `APP_DOC_CREATE_DATE` DATETIME NOT NULL, @@ -1583,6 +1584,7 @@ DROP TABLE IF EXISTS `APP_NOTES`; CREATE TABLE `APP_NOTES` ( + `NOTE_ID` INTEGER NOT NULL AUTO_INCREMENT, `APP_UID` VARCHAR(32) default '' NOT NULL, `USR_UID` VARCHAR(32) default '' NOT NULL, `NOTE_DATE` DATETIME NOT NULL, @@ -1593,6 +1595,7 @@ CREATE TABLE `APP_NOTES` `NOTE_AFFECTED_OBJ1` VARCHAR(32) default '', `NOTE_AFFECTED_OBJ2` VARCHAR(32) default '' NOT NULL, `NOTE_RECIPIENTS` MEDIUMTEXT, + UNIQUE KEY `NOTE_ID` (`NOTE_ID`), KEY `indexAppNotesDate`(`APP_UID`, `NOTE_DATE`), KEY `indexAppNotesUser`(`APP_UID`, `USR_UID`) )ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Application Notes'; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index c8e078d8a..15727a9c9 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -41,7 +41,9 @@ use ProcessMaker\BusinessModel\User as BmUser; use ProcessMaker\Core\System; use ProcessMaker\Exception\UploadException; use ProcessMaker\Model\Application as ModelApplication; +use ProcessMaker\Model\AppNotes; use ProcessMaker\Model\Delegation; +use ProcessMaker\Model\Documents; use ProcessMaker\Plugins\PluginRegistry; use ProcessMaker\Services\OAuth2\Server; use ProcessMaker\Util\DateTime as UtilDateTime; @@ -3843,6 +3845,138 @@ class Cases return $response; } + /** + * Add a case note + * + * @param string $appUid + * @param string $userUid + * @param string $note + * @param bool $sendMail + * @param array $files + * + * @return array + * @throws Exception + */ + public function addNote($appUid, $userUid, $note, $sendMail = false, $files = []) + { + // Register the note + $attributes = [ + "APP_UID" => $appUid, + "USR_UID" => $userUid, + "NOTE_DATE" => date("Y-m-d H:i:s"), + "NOTE_CONTENT" => $note, + "NOTE_TYPE" => "USER", + "NOTE_AVAILABILITY" => "PUBLIC", + "NOTE_RECIPIENTS" => "" + ]; + $response = AppNotes::create($attributes); + // Get the FK + $noteId = $response->NOTE_ID; + + // Register the files related to the note + $this->uploadFilesInCaseNotes($userUid, $appUid, $files, $noteId); + + // Send the email + if ($sendMail) { + // @todo refactor this section the files attached need to send in the email + $case = new ClassesCases(); + $p = $case->getUsersParticipatedInCase($appUid, 'ACTIVE'); + $noteRecipientsList = []; + + foreach ($p["array"] as $key => $userParticipated) { + if ($key != '') { + $noteRecipientsList[] = $key; + } + } + + $noteRecipients = implode(",", $noteRecipientsList); + $note = stripslashes($note); + + $note = new \AppNotes(); + $note->sendNoteNotification($appUid, $userUid, $note, $noteRecipients); + } + } + + /** + * Upload file related to the case notes + * + * @param string $userUid + * @param string $appUid + * @param array $filesReferences + * @param string $appDocUid + * + * @return array + * @throws Exception + */ + public function uploadFilesInCaseNotes($userUid, $appUid, $filesReferences = [], $noteId = 0) + { + if (!empty($_FILES["form"]["name"])) { + $upload = true; + // Array from post upload + foreach ($_FILES["form"]["name"] as $fileIndex => $fileName) { + if (!is_array($fileName)) { + $files[] = [ + 'name' => $_FILES["form"]["name"][$fileIndex], + 'tmp_name' => $_FILES["form"]["tmp_name"][$fileIndex], + 'error' => $_FILES["form"]["error"][$fileIndex] + ]; + } + } + } elseif (!empty($filesReferences)) { + $upload = false; + // Array with path references + foreach ($filesReferences as $fileIndex => $fileName) { + $nameFile = !is_numeric($fileIndex) ? basename($fileIndex) : basename($fileName); + $files[] = [ + 'name' => $nameFile, + 'tmp_name' => $fileName, + 'error' => UPLOAD_ERR_OK + ]; + } + } + + // Get the delIndex related to the case + $cases = new ClassesCases(); + $delIndex = $cases->getCurrentDelegation($appUid); + + // We will to register the files in the database + $response = []; + if (!empty($files)) { + $i = 0; + foreach ($files as $fileIndex => $fileName) { + // There is no error, the file uploaded with success + if ($fileName["error"] === UPLOAD_ERR_OK) { + $appDocUid = G::generateUniqueID(); + $attributes = [ + "DOC_ID" => $noteId, + "APP_DOC_UID" => $appDocUid, + "DOC_VERSION" => 1, + "APP_UID" => $appUid, + "DEL_INDEX" => $delIndex, + "USR_UID" => $userUid, + "DOC_UID" => -1, + "APP_DOC_TYPE" => 'CASE_NOTE', + "APP_DOC_CREATE_DATE" => date("Y-m-d H:i:s"), + "APP_DOC_FILENAME" => $fileName["name"] + ]; + Documents::create($attributes); + + // Upload or move the file + $isUploaded = saveAppDocument($fileName, $appUid, $appDocUid, 1, $upload); + + // List of files uploaded or copy + $response[$i++] = $attributes; + } else { + throw new UploadException($fileName['error']); + } + } + } else { + throw new Exception(G::LoadTranslation('ID_ERROR_UPLOAD_FILE_CONTACT_ADMINISTRATOR')); + } + + return $response; + } + /** * Run the validations related to an Input Document * diff --git a/workflow/engine/src/ProcessMaker/Model/AppNotes.php b/workflow/engine/src/ProcessMaker/Model/AppNotes.php index 2db007ad5..402662991 100644 --- a/workflow/engine/src/ProcessMaker/Model/AppNotes.php +++ b/workflow/engine/src/ProcessMaker/Model/AppNotes.php @@ -6,6 +6,42 @@ use Illuminate\Database\Eloquent\Model; class AppNotes extends Model { + // Set our table name protected $table = 'APP_NOTES'; + // No timestamps public $timestamps = false; + // Primary key + protected $primaryKey = 'NOTE_ID'; + // The IDs are auto-incrementing + public $incrementing = true; + + /** + * The model's default values for attributes. + * + * @var array + */ + protected $attributes = [ + 'NOTE_TYPE' => 'USER', + 'NOTE_ORIGIN_OBJ' => '', + 'NOTE_AFFECTED_OBJ1' => '', + 'NOTE_AFFECTED_OBJ2' => '' + ]; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'APP_UID', + 'USR_UID', + 'NOTE_DATE', + 'NOTE_CONTENT', + 'NOTE_TYPE', + 'NOTE_AVAILABILITY', + 'NOTE_ORIGIN_OBJ', + 'NOTE_AFFECTED_OBJ1', + 'NOTE_AFFECTED_OBJ2', + 'NOTE_RECIPIENTS' + ]; } diff --git a/workflow/engine/src/ProcessMaker/Model/Documents.php b/workflow/engine/src/ProcessMaker/Model/Documents.php new file mode 100644 index 000000000..740e7d689 --- /dev/null +++ b/workflow/engine/src/ProcessMaker/Model/Documents.php @@ -0,0 +1,96 @@ + '', + 'APP_DOC_COMMENT' => '', + 'DOC_UID' => '-1', + 'FOLDER_UID' => '', + 'APP_DOC_PLUGIN' => '', + 'APP_DOC_TAGS' => '', + 'APP_DOC_FIELDNAME' => '', + 'APP_DOC_DRIVE_DOWNLOAD' => 'a:0:{}', + 'SYNC_WITH_DRIVE' => 'UNSYNCHRONIZED', + 'SYNC_PERMISSIONS' => '', + 'APP_DOC_STATUS_DATE' => '', + ]; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'DOC_ID', + 'APP_DOC_UID', + 'DOC_VERSION', + 'APP_DOC_FILENAME', + 'APP_UID', + 'DEL_INDEX', + 'DOC_UID', + 'USR_UID', + 'APP_DOC_TYPE', + 'APP_DOC_CREATE_DATE', + 'APP_DOC_INDEX', + 'FOLDER_UID', + 'APP_DOC_STATUS', + ]; + + /** + * Scope a query to filter an specific case + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param string $proUid + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeAppUid($query, string $appUid) + { + return $query->where('APP_UID', $appUid); + } + + /** + * Return the documents related to the case + * + * @param int $proId + * @param string $type + * + * @return array + */ + public static function getAppFiles(string $appUid, $type = 'CASE_NOTES') + { + $query = Documents::query()->select(); + $query->appUid($appUid); + $query->where('APP_DOC_TYPE', $type); + $results = $query->get(); + $documentList = []; + $results->each(function ($item, $key) use (&$documentList) { + $documentList[] = $item->toArray(); + }); + + return $documentList; + } +} diff --git a/workflow/engine/src/ProcessMaker/Util/helpers.php b/workflow/engine/src/ProcessMaker/Util/helpers.php index 22272a78e..a844b2eaa 100644 --- a/workflow/engine/src/ProcessMaker/Util/helpers.php +++ b/workflow/engine/src/ProcessMaker/Util/helpers.php @@ -601,3 +601,39 @@ function getMysqlVersion() return $mysqlVersion; } + +/** + * Move the uploaded file to the documents folder + * + * @param array $file + * @param string $appUid + * @param string $appDocUid + * @param int $version + * + * @return string + */ +function saveAppDocument($file, $appUid, $appDocUid, $version = 1, $upload = true) +{ + try { + $info = pathinfo($file["name"]); + $extension = ((isset($info["extension"])) ? $info["extension"] : ""); + //$pathCase = G::getPathFromUID($appUid); + $fileName = $appDocUid . "_" . $version . "." . $extension; + + $pathCase = PATH_DATA_SITE . 'files' . PATH_SEP . G::getPathFromUID($appUid) . PATH_SEP; + + $response = false; + if ($upload) { + $response = G::uploadFile( + $file["tmp_name"], + $pathCase, + $fileName + ); + } else { + G::verifyPath($pathCase, true); + $response = copy($file["tmp_name"], $pathCase . $fileName); + } + } catch (Exception $e) { + throw $e; + } +}