PMCORE-1542
This commit is contained in:
54
database/factories/DocumentsFactory.php
Normal file
54
database/factories/DocumentsFactory.php
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Faker\Generator as Faker;
|
||||||
|
|
||||||
|
$factory->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' => '',
|
||||||
|
];
|
||||||
|
});
|
||||||
@@ -2708,6 +2708,8 @@ class G
|
|||||||
$nameToSave = $filter->validateInput($nameToSave, "path");
|
$nameToSave = $filter->validateInput($nameToSave, "path");
|
||||||
@chmod($path . "/" . $nameToSave, $permission);
|
@chmod($path . "/" . $nameToSave, $permission);
|
||||||
umask($oldumask);
|
umask($oldumask);
|
||||||
|
|
||||||
|
return true;
|
||||||
} catch (Exception $oException) {
|
} catch (Exception $oException) {
|
||||||
throw $oException;
|
throw $oException;
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
tests/resources/images/activate.png
Normal file
BIN
tests/resources/images/activate.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 750 B |
BIN
tests/resources/images/activity.gif
Normal file
BIN
tests/resources/images/activity.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.5 KiB |
@@ -5,6 +5,8 @@ namespace ProcessMaker\BusinessModel;
|
|||||||
use Exception;
|
use Exception;
|
||||||
use G;
|
use G;
|
||||||
use ProcessMaker\Model\Application;
|
use ProcessMaker\Model\Application;
|
||||||
|
use ProcessMaker\Model\Delegation;
|
||||||
|
use ProcessMaker\Model\Documents;
|
||||||
use RBAC;
|
use RBAC;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
@@ -77,4 +79,61 @@ class CasesTest extends TestCase
|
|||||||
$case = new Cases();
|
$case = new Cases();
|
||||||
$case->deleteCase($application->APP_UID, $_SESSION['USER_LOGGED']);
|
$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']);
|
||||||
|
|
||||||
|
G::rm_dir($pathCase);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
namespace Tests\unit\workflow\engine\src\ProcessMaker\Model;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
use ProcessMaker\Model\Documents;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class DocumentsTest
|
||||||
|
*
|
||||||
|
* @coversDefaultClass \ProcessMaker\Model\Documents
|
||||||
|
*/
|
||||||
|
class DocumentsTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Review get app files related to the case notes
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_test_get_case_note_files()
|
||||||
|
{
|
||||||
|
$appDoc = factory(Documents::class)->states('case_notes')->create();
|
||||||
|
$doc = new Documents();
|
||||||
|
$res = $doc->getAppFiles($appDoc->APP_UID, Documents::DOC_TYPE_CASE_NOTE);
|
||||||
|
$this->assertNotEmpty($res);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\unit\workflow\src\ProcessMaker\Util\Helpers;
|
||||||
|
|
||||||
|
use G;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
class SaveAppDocumentTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* It test if the file reference was uploaded
|
||||||
|
*
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_should_copy_file_same_name()
|
||||||
|
{
|
||||||
|
$files = [
|
||||||
|
'name' => 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3420,16 +3420,17 @@ class WsBase
|
|||||||
/**
|
/**
|
||||||
* Add case note
|
* Add case note
|
||||||
*
|
*
|
||||||
* @param string caseUid : ID of the case.
|
* @param string $caseUid, ID of the case.
|
||||||
* @param string processUid : ID of the process.
|
* @param string $processUid, ID of the process.
|
||||||
* @param string taskUid : ID of the task.
|
* @param string $taskUid, ID of the task.
|
||||||
* @param string userUid : The unique ID of the user who will add note case.
|
* @param string $userUid, The unique ID of the user who will add note case.
|
||||||
* @param string note : Note of the 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 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 {
|
try {
|
||||||
if (empty($caseUid)) {
|
if (empty($caseUid)) {
|
||||||
@@ -3475,7 +3476,7 @@ class WsBase
|
|||||||
|
|
||||||
//Add note case
|
//Add note case
|
||||||
$appNote = new AppNotes();
|
$appNote = new AppNotes();
|
||||||
$response = $appNote->addCaseNote($caseUid, $userUid, $note, $sendMail);
|
$response = $appNote->addCaseNote($caseUid, $userUid, $note, $sendMail, $files);
|
||||||
|
|
||||||
//Response
|
//Response
|
||||||
$result = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY"));
|
$result = new WsResponse(0, G::LoadTranslation("ID_COMMAND_EXECUTED_SUCCESSFULLY"));
|
||||||
|
|||||||
@@ -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(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 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 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.
|
* @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();
|
$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) {
|
if ($result->status_code == 0) {
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
@@ -260,10 +260,25 @@ class AppNotes extends BaseAppNotes
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function addCaseNote($applicationUid, $userUid, $note, $sendMail)
|
/**
|
||||||
|
* Add a note in the case and send an email
|
||||||
|
*
|
||||||
|
* @param string $applicationUid
|
||||||
|
* @param string $userUid
|
||||||
|
* @param string $note
|
||||||
|
* @param bool $sendMail
|
||||||
|
* @param array $files
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function addCaseNote($applicationUid, $userUid, $note, $sendMail, $files)
|
||||||
{
|
{
|
||||||
$response = $this->postNewNote($applicationUid, $userUid, $note, false);
|
$response = $this->postNewNote($applicationUid, $userUid, $note, false);
|
||||||
|
|
||||||
|
// Check the files to upload
|
||||||
|
$case = new Cases();
|
||||||
|
$res = $case->uploadFilesInCaseNotes($userUid, $applicationUid, $files, null);
|
||||||
|
|
||||||
if ($sendMail == 1) {
|
if ($sendMail == 1) {
|
||||||
|
|
||||||
$case = new Cases();
|
$case = new Cases();
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ class AppDocumentMapBuilder
|
|||||||
|
|
||||||
$tMap->addValidator('USR_UID', 'required', 'propel.validator.RequiredValidator', '', 'User UID is required.');
|
$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.');
|
$tMap->addValidator('APP_DOC_TYPE', 'required', 'propel.validator.RequiredValidator', '', 'Application Document Type is required.');
|
||||||
|
|
||||||
|
|||||||
@@ -284,7 +284,7 @@
|
|||||||
<rule name="required" message="User UID is required."/>
|
<rule name="required" message="User UID is required."/>
|
||||||
</validator>
|
</validator>
|
||||||
<validator column="APP_DOC_TYPE">
|
<validator column="APP_DOC_TYPE">
|
||||||
<rule name="validValues" value="INPUT|OUTPUT|ATTACHED" message="Please select a valid document type."/>
|
<rule name="validValues" value="INPUT|OUTPUT|ATTACHED|CASE_NOTE" message="Please select a valid document type."/>
|
||||||
<rule name="required" message="Application Document Type is required."/>
|
<rule name="required" message="Application Document Type is required."/>
|
||||||
</validator>
|
</validator>
|
||||||
<validator column="APP_DOC_CREATE_DATE">
|
<validator column="APP_DOC_CREATE_DATE">
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ use ProcessMaker\Core\System;
|
|||||||
use ProcessMaker\Exception\UploadException;
|
use ProcessMaker\Exception\UploadException;
|
||||||
use ProcessMaker\Model\Application as ModelApplication;
|
use ProcessMaker\Model\Application as ModelApplication;
|
||||||
use ProcessMaker\Model\Delegation;
|
use ProcessMaker\Model\Delegation;
|
||||||
|
use ProcessMaker\Model\Documents;
|
||||||
use ProcessMaker\Plugins\PluginRegistry;
|
use ProcessMaker\Plugins\PluginRegistry;
|
||||||
use ProcessMaker\Services\OAuth2\Server;
|
use ProcessMaker\Services\OAuth2\Server;
|
||||||
use ProcessMaker\Util\DateTime as UtilDateTime;
|
use ProcessMaker\Util\DateTime as UtilDateTime;
|
||||||
@@ -3843,6 +3844,85 @@ class Cases
|
|||||||
return $response;
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 = [], $appDocUid = null)
|
||||||
|
{
|
||||||
|
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 = [
|
||||||
|
"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
|
* Run the validations related to an Input Document
|
||||||
*
|
*
|
||||||
|
|||||||
95
workflow/engine/src/ProcessMaker/Model/Documents.php
Normal file
95
workflow/engine/src/ProcessMaker/Model/Documents.php
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace ProcessMaker\Model;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Documents extends Model
|
||||||
|
{
|
||||||
|
// Set our table name
|
||||||
|
protected $table = 'APP_DOCUMENT';
|
||||||
|
// No timestamps
|
||||||
|
public $timestamps = false;
|
||||||
|
// Primary key
|
||||||
|
protected $primaryKey = ['APP_DOC_UID', 'DOC_VERSION'];
|
||||||
|
// The IDs are auto-incrementing
|
||||||
|
public $incrementing = false;
|
||||||
|
// Valid AppDocType's
|
||||||
|
const DOC_TYPE_ATTACHED = 'ATTACHED';
|
||||||
|
const DOC_TYPE_CASE_NOTE = 'CASE_NOTE';
|
||||||
|
const DOC_TYPE_INPUT = 'INPUT';
|
||||||
|
const DOC_TYPE_OUTPUT = 'OUTPUT';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model's default values for attributes.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $attributes = [
|
||||||
|
'APP_DOC_TITLE' => '',
|
||||||
|
'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 = [
|
||||||
|
'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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -601,3 +601,39 @@ function getMysqlVersion()
|
|||||||
|
|
||||||
return $mysqlVersion;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user