diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index 8e459c9b2..bf2a95248 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -1042,6 +1042,15 @@ class Cases //$oPluginRegistry = & PMPluginRegistry::getSingleton(); $listing = $oPluginRegistry->executeTriggers(PM_CASE_DOCUMENT_LIST, $folderData); } + /*----------------------------------********---------------------------------*/ + $licensedFeatures = &\PMLicensedFeatures::getSingleton(); + $enablePMGmail = false; + if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { + G::LoadClass( "pmDrive" ); + $pmDrive = new \PMDrive(); + $enablePMGmail = $pmDrive->getStatusService(); + } + /*----------------------------------********---------------------------------*/ $aObjectPermissions = $cases->getAllObjects($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID); if (!is_array($aObjectPermissions)) { $aObjectPermissions = array( @@ -1147,7 +1156,7 @@ class Cases $aFields['ID_DELETE'] = \G::LoadTranslation('ID_DELETE'); } $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_DOWNLOAD'); - $aFields['DOWNLOAD_LINK'] = "cases_ShowDocument?a=" . $aRow['APP_DOC_UID'] . "&v=" . $aRow['DOC_VERSION']; + $aFields['DOWNLOAD_LINK'] = "cases/cases_ShowDocument?a=" . $aRow['APP_DOC_UID'] . "&v=" . $aRow['DOC_VERSION']; $aFields['DOC_VERSION'] = $aRow['DOC_VERSION']; if (is_array($listing)) { foreach ($listing as $folderitem) { @@ -1158,6 +1167,15 @@ class Cases } } } + /*----------------------------------********---------------------------------*/ + //change donwload link - drive + $driveDownload = @unserialize($aRow['APP_DOC_DRIVE_DOWNLOAD']); + if ($driveDownload !== false && is_array($driveDownload) && array_key_exists('INPUT', + $driveDownload) && $enablePMGmail + ) { + $aFields['DOWNLOAD_LINK'] = $driveDownload['INPUT']; + } + /*----------------------------------********---------------------------------*/ if ($lastVersion == $aRow['DOC_VERSION']) { //Show only last version $aInputDocuments[] = $aFields; @@ -1228,7 +1246,16 @@ class Cases $aFields['ID_DELETE'] = G::LoadTranslation('ID_DELETE'); } $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_DOWNLOAD'); - $aFields['DOWNLOAD_LINK'] = "cases_ShowDocument?a=" . $aRow['APP_DOC_UID']; + $aFields['DOWNLOAD_LINK'] = "cases/cases_ShowDocument?a=" . $aRow['APP_DOC_UID']; + /*----------------------------------********---------------------------------*/ + //change donwload link - drive + $driveDownload = @unserialize($aRow['APP_DOC_DRIVE_DOWNLOAD']); + if ($driveDownload !== false && is_array($driveDownload) && array_key_exists('ATTACHED', + $driveDownload) && $enablePMGmail + ) { + $aFields['DOWNLOAD_LINK'] = $driveDownload['ATTACHED']; + } + /*----------------------------------********---------------------------------*/ if ($lastVersion == $aRow['DOC_VERSION']) { //Show only last version $aInputDocuments[] = $aFields; @@ -1292,6 +1319,15 @@ class Cases } } } + /*----------------------------------********---------------------------------*/ + //change donwload link - drive + $driveDownload = @unserialize($aRow['APP_DOC_DRIVE_DOWNLOAD']); + if ($driveDownload !== false && is_array($driveDownload) && array_key_exists('INPUT', + $driveDownload) && $enablePMGmail + ) { + $aFields['DOWNLOAD_LINK'] = $driveDownload['INPUT']; + } + /*----------------------------------********---------------------------------*/ if ($lastVersion == $aRow['DOC_VERSION']) { //Show only last version $aInputDocuments[] = $aFields; @@ -1335,6 +1371,15 @@ class Cases //$oPluginRegistry = & PMPluginRegistry::getSingleton(); $listing = $oPluginRegistry->executeTriggers(PM_CASE_DOCUMENT_LIST, $folderData); } + /*----------------------------------********---------------------------------*/ + $licensedFeatures = &\PMLicensedFeatures::getSingleton(); + $enablePMGmail = false; + if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { + G::LoadClass( "pmDrive" ); + $pmDrive = new \PMDrive(); + $enablePMGmail = $pmDrive->getStatusService(); + } + /*----------------------------------********---------------------------------*/ $aObjectPermissions = $cases->getAllObjects($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID); if (!is_array($aObjectPermissions)) { $aObjectPermissions = array('DYNAFORMS' => array(-1),'INPUT_DOCUMENTS' => array(-1),'OUTPUT_DOCUMENTS' => array(-1)); @@ -1417,7 +1462,7 @@ class Cases case "PDF": $fileDoc = 'javascript:alert("NO DOC")'; $fileDocLabel = " "; - $filePdf = 'cases_ShowOutputDocument?a=' . + $filePdf = 'cases/cases_ShowOutputDocument?a=' . $aRow['APP_DOC_UID'] . '&v=' . $aRow['DOC_VERSION'] . '&ext=pdf&random=' . rand(); $filePdfLabel = ".pdf"; if (is_array($listing)) { @@ -1431,7 +1476,7 @@ class Cases } break; case "DOC": - $fileDoc = 'cases_ShowOutputDocument?a=' . + $fileDoc = 'cases/cases_ShowOutputDocument?a=' . $aRow['APP_DOC_UID'] . '&v=' . $aRow['DOC_VERSION'] . '&ext=doc&random=' . rand(); $fileDocLabel = ".doc"; $filePdf = 'javascript:alert("NO PDF")'; @@ -1447,7 +1492,7 @@ class Cases } break; case "BOTH": - $fileDoc = 'cases_ShowOutputDocument?a=' . + $fileDoc = 'cases/cases_ShowOutputDocument?a=' . $aRow['APP_DOC_UID'] . '&v=' . $aRow['DOC_VERSION'] . '&ext=doc&random=' . rand(); $fileDocLabel = ".doc"; if (is_array($listing)) { @@ -1459,7 +1504,7 @@ class Cases } } } - $filePdf = 'cases_ShowOutputDocument?a=' . + $filePdf = 'cases/cases_ShowOutputDocument?a=' . $aRow['APP_DOC_UID'] . '&v=' . $aRow['DOC_VERSION'] . '&ext=pdf&random=' . rand(); $filePdfLabel = ".pdf"; @@ -1480,6 +1525,20 @@ class Cases } catch (\Exception $oException) { $sUser = '(USER DELETED)'; } + /*----------------------------------********---------------------------------*/ + //change donwload link - drive + $driveDownload = @unserialize($aRow['APP_DOC_DRIVE_DOWNLOAD']); + if ($driveDownload !== false && is_array($driveDownload) && array_key_exists('OUTPUT_DOC', + $driveDownload) && $enablePMGmail + ) { + $fileDoc = $driveDownload['OUTPUT_DOC']; + } + if ($driveDownload !== false && is_array($driveDownload) && array_key_exists('OUTPUT_PDF', + $driveDownload) && $enablePMGmail + ) { + $filePdf = $driveDownload['OUTPUT_PDF']; + } + /*----------------------------------********---------------------------------*/ //if both documents were generated, we choose the pdf one, only if doc was //generate then choose the doc file. $firstDocLink = $filePdf; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php index ad551fec4..454695576 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php @@ -260,10 +260,11 @@ class InputDocument $flagSupervisor = 0; $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); - $arraySupervisor = $supervisor->getProcessSupervisors($application->getProUid()); + $processSupervisor = $supervisor->getProcessSupervisors($application->getProUid(), "ASSIGNED"); + $arraySupervisor = $processSupervisor["data"]; foreach ($arraySupervisor as $value) { - if($value["usr_uid"] == $userUid) { + if(!empty($value["usr_uid"]) && $value["usr_uid"] == $userUid) { $flagSupervisor = 1; break; } @@ -283,6 +284,16 @@ class InputDocument $rsCriteria = \AppDocumentPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + /*----------------------------------********---------------------------------*/ + $licensedFeatures = &\PMLicensedFeatures::getSingleton(); + $enablePMGmail = false; + if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { + \G::LoadClass( "pmDrive" ); + $pmDrive = new \PMDrive(); + $enablePMGmail = $pmDrive->getStatusService(); + } + /*----------------------------------********---------------------------------*/ + while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); @@ -293,6 +304,19 @@ class InputDocument $row["APP_DOC_FILENAME"] = $arrayAppDocument["APP_DOC_FILENAME"]; $row["APP_DOC_CREATE_USER"] = $configuraction->usersNameFormatBySetParameters($confEnvSetting["format"], $arrayUserData["USR_USERNAME"], $arrayUserData["USR_FIRSTNAME"], $arrayUserData["USR_LASTNAME"]); $row["APP_DOC_LINK"] = "cases/cases_ShowDocument?a=" . $row["APP_DOC_UID"] . "&v=" . $row["DOC_VERSION"]; + /*----------------------------------********---------------------------------*/ + //change donwload link - drive + $driveDownload = @unserialize($arrayAppDocument['APP_DOC_DRIVE_DOWNLOAD']); + if ($driveDownload !== false && is_array($driveDownload) && $enablePMGmail + ) { + if (array_key_exists('INPUT', $driveDownload)) { + $row['APP_DOC_LINK'] = $driveDownload['INPUT']; + } else if (array_key_exists('ATTACHED', $driveDownload)) { + $row['APP_DOC_LINK'] = $driveDownload['ATTACHED']; + } + + } + /*----------------------------------********---------------------------------*/ $arrayInputDocument[] = $this->getAppDocumentDataFromRecord($row); } @@ -347,6 +371,15 @@ class InputDocument $rsCriteria = \AppDocumentPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + /*----------------------------------********---------------------------------*/ + $licensedFeatures = &\PMLicensedFeatures::getSingleton(); + $enablePMGmail = false; + if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { + \G::LoadClass( "pmDrive" ); + $pmDrive = new \PMDrive(); + $enablePMGmail = $pmDrive->getStatusService(); + } + /*----------------------------------********---------------------------------*/ while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); @@ -354,9 +387,23 @@ class InputDocument $arrayAppDocument = $appDocument->load($row["APP_DOC_UID"], $row["DOC_VERSION"]); + $row["APP_DOC_FILENAME"] = $arrayAppDocument["APP_DOC_FILENAME"]; $row["APP_DOC_CREATE_USER"] = $configuraction->usersNameFormatBySetParameters($confEnvSetting["format"], $arrayUserData["USR_USERNAME"], $arrayUserData["USR_FIRSTNAME"], $arrayUserData["USR_LASTNAME"]); $row["APP_DOC_LINK"] = "cases/cases_ShowDocument?a=" . $row["APP_DOC_UID"] . "&v=" . $row["DOC_VERSION"]; + /*----------------------------------********---------------------------------*/ + //change donwload link - drive + $driveDownload = @unserialize($arrayAppDocument['APP_DOC_DRIVE_DOWNLOAD']); + if ($driveDownload !== false && is_array($driveDownload) && $enablePMGmail + ) { + if (array_key_exists('INPUT', $driveDownload)) { + $row['APP_DOC_LINK'] = $driveDownload['INPUT']; + } else if (array_key_exists('ATTACHED', $driveDownload)) { + $row['APP_DOC_LINK'] = $driveDownload['ATTACHED']; + } + + } + /*----------------------------------********---------------------------------*/ $arrayInputDocument[] = $this->getAppDocumentDataFromRecord($row); } @@ -404,7 +451,7 @@ class InputDocument $docrow['app_doc_create_user'] = $row['CREATED_BY']; $docrow['app_doc_type'] = $row['TYPE']; $docrow['app_doc_index'] = $row['APP_DOC_INDEX']; - $docrow['app_doc_link'] = 'cases/' . $row['DOWNLOAD_LINK']; + $docrow['app_doc_link'] = $row['DOWNLOAD_LINK']; if ($docrow["app_doc_uid"] == $inputDocumentUid) { $flagInputDocument = true; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php index 2a77fdcb5..e7a683df1 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/OutputDocument.php @@ -197,7 +197,7 @@ class OutputDocument $docrow['app_doc_create_user'] = $row['CREATED_BY']; $docrow['app_doc_type'] = $row['TYPE']; $docrow['app_doc_index'] = $row['APP_DOC_INDEX']; - $docrow['app_doc_link'] = 'cases/' . $row['DOWNLOAD_LINK']; + $docrow['app_doc_link'] = $row['DOWNLOAD_LINK']; $result[] = $docrow; } } @@ -241,7 +241,7 @@ class OutputDocument $docrow['app_doc_create_user'] = $row['CREATED_BY']; $docrow['app_doc_type'] = $row['TYPE']; $docrow['app_doc_index'] = $row['APP_DOC_INDEX']; - $docrow['app_doc_link'] = 'cases/' . $row['DOWNLOAD_LINK']; + $docrow['app_doc_link'] = $row['DOWNLOAD_LINK']; if ($docrow['app_doc_uid'] == $applicationDocumentUid) { $oAppDocument = \AppDocumentPeer::retrieveByPK( $applicationDocumentUid, $row['DOC_VERSION'] ); if (is_null( $oAppDocument )) { @@ -380,6 +380,129 @@ class OutputDocument $aProperties['report_generator'] = $aOD['OUT_DOC_REPORT_GENERATOR']; } $this->generate( $outputID, $Fields['APP_DATA'], $pathOutput, $sFilename, $aOD['OUT_DOC_TEMPLATE'], (boolean) $aOD['OUT_DOC_LANDSCAPE'], $aOD['OUT_DOC_GENERATE'], $aProperties , $applicationUid); + + /*----------------------------------********---------------------------------*/ + $licensedFeatures = &\PMLicensedFeatures::getSingleton(); + if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { + \G::LoadClass( "pmDrive" ); + $pmDrive = new \PMDrive(); + if ($pmDrive->getStatusService()) { + $app = new \Application(); + $user = new \Users(); + $dataUser = $user->load($userUid); + $pmDrive->setDriveUser($dataUser['USR_EMAIL']); + + $appData = $app->Load($applicationUid); + if ($appData['APP_DRIVE_FOLDER_UID'] == null) { + $process = new \Process(); + $process->setProUid($appData['PRO_UID']); + + $result = $pmDrive->createFolder($process->getProTitle() . ' - ' . G::LoadTranslation("ID_CASE") . ' #' . $appData['APP_NUMBER'], + $pmDrive->getFolderIdPMDrive($userUid)); + $appData['APP_DRIVE_FOLDER_UID'] = $result->id; + $app->update($appData); + } + + $fileIdDriveDoc = ''; + $fileIdDrivePdf = ''; + $sFilenameOriginal = preg_replace('[^A-Za-z0-9_]', '_', + \G::replaceDataField($aOD['OUT_DOC_FILENAME'], $Fields['APP_DATA'])); + switch ($aOD['OUT_DOC_GENERATE']) { + case "BOTH": + $result = $pmDrive->uploadFile('application/pdf', $pathOutput . $sFilename . '.pdf', + $sFilenameOriginal . '.pdf', $appData['APP_DRIVE_FOLDER_UID']); + $oAppDocument->setDriveDownload('OUTPUT_PDF', $result->webContentLink); + $fileIdDrivePdf = $result->id; + $result = $pmDrive->uploadFile('application/doc', $pathOutput . $sFilename . '.doc', + $sFilenameOriginal . '.doc', $appData['APP_DRIVE_FOLDER_UID']); + $oAppDocument->setDriveDownload('OUTPUT_DOC', $result->webContentLink); + $fileIdDriveDoc = $result->id; + break; + case "PDF": + $result = $pmDrive->uploadFile('application/pdf', $pathOutput . $sFilename . '.pdf', + $sFilenameOriginal . '.pdf', $appData['APP_DRIVE_FOLDER_UID']); + $oAppDocument->setDriveDownload('OUTPUT_PDF', $result->webContentLink); + $fileIdDrivePdf = $result->id; + break; + case "DOC": + $result = $pmDrive->uploadFile('application/doc', $pathOutput . $sFilename . '.doc', + $sFilenameOriginal . '.doc', $appData['APP_DRIVE_FOLDER_UID']); + $oAppDocument->setDriveDownload('OUTPUT_DOC', $result->webContentLink); + $fileIdDriveDoc = $result->id; + break; + } + $aFields['DOC_VERSION'] = $oAppDocument->getDocVersion();// $docVersion; + $aFields['APP_DOC_UID'] = $oAppDocument->getAppDocUid();//$appDocUid; + $appDocUid = $aFields['APP_DOC_UID']; + + $oAppDocument->update($aFields); + //$option = 'pmDrive'; + + + //add permissions + $criteria = new \Criteria('workflow'); + $criteria->addSelectColumn(\ApplicationPeer::PRO_UID); + $criteria->addSelectColumn(\TaskUserPeer::TAS_UID); + $criteria->addSelectColumn(\TaskUserPeer::USR_UID); + $criteria->addSelectColumn(\TaskUserPeer::TU_RELATION); + + $criteria->add(\ApplicationPeer::APP_UID, $applicationUid); + $criteria->addJoin(\ApplicationPeer::PRO_UID, \TaskPeer::PRO_UID, \Criteria::LEFT_JOIN); + $criteria->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN); + + + $dataset = \ApplicationPeer::doSelectRS($criteria); + $dataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + $userPermission = array(); + $case = new \Cases(); + + while ($dataset->next()) { + $row = $dataset->getRow(); + if ($row['TU_RELATION'] == 1) { + //users + $dataUser = $user->load($row['USR_UID']); + if (array_search($dataUser['USR_EMAIL'], $userPermission) == null) { + $objectPermissions = $case->getAllObjects($row['PRO_UID'], $applicationUid, + $row['TAS_UID'], $row['USR_UID']); + if (array_search($appDocUid, $objectPermissions['OUTPUT_DOCUMENTS']) != null) { + $userPermission[] = $dataUser['USR_EMAIL']; + } + } + } else { + //Groups + $criteria = new \Criteria('workflow'); + $criteria->addSelectColumn(\UsersPeer::USR_EMAIL); + $criteria->addSelectColumn(\UsersPeer::USR_UID); + $criteria->add(\GroupUserPeer::GRP_UID, $row['USR_UID']); + $criteria->addJoin(\GroupUserPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); + + $oDataset = \AppDelegationPeer::doSelectRS($criteria); + $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + + while ( $oDataset->next()) { + $aRow = $oDataset->getRow(); + if (array_search($aRow['USR_EMAIL'], $userPermission) == null) { + $objectPermissions = $case->getAllObjects($row['PRO_UID'], $applicationUid, + $row['TAS_UID'], $aRow['USR_UID']); + if (array_search($appDocUid, $objectPermissions['OUTPUT_DOCUMENTS']) != null) { + $userPermission[] = $aRow['USR_EMAIL']; + } + } + } + } + } + $userPermission = array_unique($userPermission); + + foreach ($userPermission as $key => $val) { + $pmDrive->setPermission($appData['APP_DRIVE_FOLDER_UID'], $val, 'user', 'writer'); + $pmDrive->setPermission($fileIdDrivePdf, $val); + $pmDrive->setPermission($fileIdDriveDoc, $val); + } + } + } + /*----------------------------------********---------------------------------*/ + //Plugin Hook PM_UPLOAD_DOCUMENT for upload document //G::LoadClass('plugin'); $oPluginRegistry = & \PMPluginRegistry::getSingleton();