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;
+ }
+}