removing PMGmail

This commit is contained in:
Fernando Ontiveros
2025-07-11 06:36:38 -04:00
parent b0c0d8d70c
commit 3f8710b60e
27 changed files with 17 additions and 2573 deletions

View File

@@ -1,150 +0,0 @@
<?php
use ProcessMaker\Core\System;
if (! defined( 'JAVA_BRIDGE_PATH' )) {
define( 'JAVA_BRIDGE_PATH', 'JavaBridgePM' );
}
if (! defined( 'JAVA_BRIDGE_PORT' )) {
define( 'JAVA_BRIDGE_PORT', '8080' );
}
if (! defined( 'JAVA_BRIDGE_HOST' )) {
define( 'JAVA_BRIDGE_HOST', '127.0.0.1' );
}
class JavaBridgePM
{
public $JavaBridgeDir = JAVA_BRIDGE_PATH;
public $JavaBridgePort = JAVA_BRIDGE_PORT;
public $JavaBridgeHost = JAVA_BRIDGE_HOST;
/**
* checkJavaExtension
* check if the java extension was loaded.
*
*
* @return true or false
*/
public function checkJavaExtension ()
{
try {
if (! extension_loaded( 'java' )) {
if (! (@include_once ("java/Java.inc"))) {
$urlJavaInc = "http://$this->JavaBridgeHost:$this->JavaBridgePort/$this->JavaBridgeDir/java/Java.inc";
@include_once ($urlJavaInc);
$includedFiles = get_included_files();
$found = false;
foreach ($includedFiles as $filename) {
if ($urlJavaInc == $filename) {
$found = true;
}
}
if (! $found) {
throw new Exception( 'The PHP/Java Bridge is not defined' );
}
}
return true;
}
if (! function_exists( "java_get_server_name" )) {
throw new Exception( 'The loaded java extension is not the PHP/Java Bridge' );
}
return true;
} catch (Exception $e) {
throw new Exception( 'Error in checkJavaExtension: ' . $e->getMessage() );
}
}
/**
* convert a php value to a java one...
*
* @param string $value
* @param string $className
* @return s boolean success
*/
public function convertValue ($value, $className)
{
// if we are a string, just use the normal conversion
// methods from the java extension...
try {
if ($className == 'java.lang.String') {
$temp = new Java( 'java.lang.String', $value );
return $temp;
} elseif ($className == 'java.lang.Boolean' || $className == 'java.lang.Integer' || $className == 'java.lang.Long' || $className == 'java.lang.Short' || $className == 'java.lang.Double' || $className == 'java.math.BigDecimal') {
$temp = new Java( $className, $value );
return $temp;
} elseif ($className == 'java.sql.Timestamp' || $className == 'java.sql.Time') {
$temp = new Java( $className );
$javaObject = $temp->valueOf( $value );
return $javaObject;
}
} catch (Exception $err) {
echo ('unable to convert value, ' . $value . ' could not be converted to ' . $className);
return false;
}
echo ('unable to convert value, class name ' . $className . ' not recognised');
return false;
}
/**
* generateJrxmlFromDynaform
*
* @param string $outDocUid
* @param string $dynaformUid
* @param object $template
* @return void
*/
public function generateJrxmlFromDynaform ($outDocUid, $dynaformUid, $template)
{
require_once 'classes/model/Dynaform.php';
$dyn = new Dynaform();
$aFields = $dyn->load( $dynaformUid );
$xmlFields = $dyn->getDynaformFields( $dynaformUid );
$reportTpl = PATH_TPL . 'javaBridgePM/classic.xml';
$reportFilename = PATH_DYNAFORM . $aFields['PRO_UID'] . PATH_SEP . $outDocUid . '.jrxml';
foreach ($xmlFields as $key => $val) {
if ($val->type == 'submit' || $val->type == 'button' || $val->type == 'title' || $val->type == 'subtitle') {
unset( $xmlFields[$key] );
}
}
//$sqlSentence = 'SELECT * from ' . $tableName;
$sqlSentence = 'dynaform/';
$template = new TemplatePower( $reportTpl );
$template->prepare();
$template->assign( 'sqlSentence', $sqlSentence );
$template->assign( 'tableName', $aFields['DYN_TITLE'] );
$template->assign( 'heightDetail', count( $xmlFields ) * 15 + 20 );
$template->assign( 'PAGE_NUMBER', '{PAGE_NUMBER}' );
$logoReporte = System::getServerProtocolHost() . '/images/lurana.logo.png';
$template->assign( 'logoReporte', $logoReporte );
foreach ($xmlFields as $key => $val) {
$template->newBlock( 'fields' );
$template->assign( 'fieldName', $key );
}
$posX = 140;
$posLabelX = 5;
$posY = 10;
foreach ($xmlFields as $key => $val) {
$template->newBlock( 'detailFields' );
$template->assign( 'fieldName', '{' . $key . '}' );
$template->assign( 'fieldLabel', $key );
$template->assign( 'labelPosX', $posLabelX );
$template->assign( 'fieldPosX', $posX );
$template->assign( 'fieldPosY', $posY );
$posY += 15;
}
$content = $template->getOutputContent();
$iSize = file_put_contents( $reportFilename, $content );
printf( "saved %s bytes in file %s \n", $iSize, $reportFilename );
}
}

View File

@@ -1,424 +0,0 @@
<?php
class labelsGmail
{
function listLabels($service)
{
$labels = array();
try {
$labelsResponse = $service->users_labels->listUsersLabels('me');
if ($labelsResponse->getLabels()) {
$labels = array_merge($labels, $labelsResponse->getLabels());
}
} catch (Exception $e) {
print G::LoadTranslation("ID_PMGMAIL_GENERAL_ERROR") . G::getErrorMessage($e);
throw ($e);
}
return $labels;
}
/**
* Modify the Labels a Message is associated with.
*
* @param Google_Service_Gmail $service Authorized Gmail API instance.
* @param string $userId User's email address. The special value 'me'
* can be used to indicate the authenticated user.
* @param string $messageId ID of Message to modify.
* @param array $labelsToAdd Array of Labels to add.
* @param array $labelsToRemove Array of Labels to remove.
*/
function modifyMessage($service, $userId, $messageId, $labelsToAdd, $labelsToRemove)
{
$mods = new Google_Service_Gmail_ModifyMessageRequest();
$mods->setAddLabelIds($labelsToAdd);
$mods->setRemoveLabelIds($labelsToRemove);
try {
$message = $service->users_messages->modify($userId, $messageId, $mods);
} catch (Exception $e) {
print G::LoadTranslation("ID_PMGMAIL_GENERAL_ERROR") . G::getErrorMessage($e);
throw ($e);
}
}
/**
* Get list of Messages in user's mailbox.
*
* @param Google_Service_Gmail $service Authorized Gmail API instance.
* @param string $userId User's email address. The special value 'me'
* can be used to indicate the authenticated user.
*
* @return array Array of Messages.
*/
function listMessages($service, $userId, $query, $labels)
{
$pageToken = null;
$messages = array();
$opt_param = array();
do {
try {
if ($pageToken) {
$opt_param['pageToken'] = $pageToken;
}
$opt_param['labelIds'] = $labels;
$opt_param['q'] = $query;
$opt_param['maxResults'] = 3;
$messagesResponse = $service->users_messages->listUsersMessages($userId, $opt_param);
if ($messagesResponse->getMessages()) {
$messages = array_merge($messages, $messagesResponse->getMessages());
}
} catch (Exception $e) {
print G::LoadTranslation("ID_PMGMAIL_GENERAL_ERROR") . G::getErrorMessage($e);
throw ($e);
}
} while ($pageToken);
return $messages;
}
public function setLabelsToPauseCase($caseId, $index)
{
$Pmgmail = new \ProcessMaker\BusinessModel\Pmgmail();
$appData = $Pmgmail->getDraftApp($caseId, $index);
foreach ($appData as $application) {
$appNumber = $application['APP_NUMBER'];
$index = $application['DEL_INDEX'];
$threadUsr = $application['USR_UID'];
$proName = $application['APP_PRO_TITLE'];
$threadStatus = $application['DEL_THREAD_STATUS'];
$appStatus = $application['APP_STATUS'];
}
//Getting the privious User email
$oUsers = new \Users();
$usrData = $oUsers->loadDetails($threadUsr);
$mail = $usrData['USR_EMAIL'];
//The Subject to search the email
$subject = "[PM] " . $proName . " (" . $index . ") Case: " . $appNumber;
$pmGoogle = new PmGoogleApi();
$pmGoogle->setUser($mail);
$pmGoogle->setScope(PmGoogleApi::GMAIL_MODIFY);
$client = $pmGoogle->serviceClient();
$service = new Google_Service_Gmail($client);
$labelsIds = $this->getLabelsIds($service);
if ($appStatus == 'DRAFT') {
$labelsToRemove = $labelsIds['Draft'];
$labelsToSearch = "*-draft";
$labelsToAdd = $labelsIds['Paused'];
}
if ($appStatus == 'TO_DO') {
$labelsToRemove = $labelsIds['Inbox'];
$labelsToSearch = "*-inbox";
$labelsToAdd = $labelsIds['Paused'];
}
$q = "subject:('" . preg_quote($subject, '-') . "') label:('" . $labelsToSearch . "')";
$messageList = $this->listMessages($service, $mail, $q, $labelsToRemove);
foreach ($messageList as $message) {
$messageId = $message->getId();
$modifyResult = $this->modifyMessage($service, $mail, $messageId, array($labelsToAdd),
array($labelsToRemove));
}
}
function setLabelsTounpauseCase($caseId, $index)
{
$Pmgmail = new \ProcessMaker\BusinessModel\Pmgmail();
$appData = $Pmgmail->getDraftApp($caseId, $index);
foreach ($appData as $application) {
$appNumber = $application['APP_NUMBER'];
$index = $application['DEL_INDEX'];
$threadUsr = $application['USR_UID'];
$proName = $application['APP_PRO_TITLE'];
$threadStatus = $application['DEL_THREAD_STATUS'];
$appStatus = $application['APP_STATUS'];
}
//Getting the privious User email
$oUsers = new \Users();
$usrData = $oUsers->loadDetails($threadUsr);
$mail = $usrData['USR_EMAIL'];
//The Subject to search the email
$subject = "[PM] " . $proName . " (" . $index . ") Case: " . $appNumber;
$pmGoogle = new PmGoogleApi();
$pmGoogle->setUser($mail);
$pmGoogle->setScope(PmGoogleApi::GMAIL_MODIFY);
$client = $pmGoogle->serviceClient();
$service = new Google_Service_Gmail($client);
$labelsIds = $this->getLabelsIds($service);
if ($appStatus == 'DRAFT') {
$labelsToRemove = $labelsIds['Paused'];
$labelsToSearch = "*-paused";
$labelsToAdd = $labelsIds['Draft'];
}
if ($appStatus == 'TO_DO') {
$labelsToRemove = $labelsIds['Paused'];
$labelsToSearch = "*-paused";
$labelsToAdd = $labelsIds['Inbox'];
}
$q = "subject:('" . preg_quote($subject, '-') . "') label:('" . $labelsToSearch . "')";
$messageList = $this->listMessages($service, $mail, $q, $labelsToRemove);
foreach ($messageList as $message) {
$messageId = $message->getId();
$modifyResult = $this->modifyMessage($service, $mail, $messageId, array($labelsToAdd),
array($labelsToRemove));
}
}
public function setLabels($caseId, $index, $actualLastIndex, $unassigned = false)
{
//First getting the actual thread data
$Pmgmail = new \ProcessMaker\BusinessModel\Pmgmail();
$appData = $Pmgmail->getDraftApp($caseId, $index);
foreach ($appData as $application) {
$appNumber = $application['APP_NUMBER'];
$index = $application['DEL_INDEX'];
$threadUsr = $application['USR_UID'];
$proName = $application['APP_PRO_TITLE'];
$threadStatus = $application['DEL_THREAD_STATUS'];
$appStatus = $application['APP_STATUS'];
$tasUid = $application['TAS_UID'];
}
if ($threadStatus == 'CLOSED' || $unassigned == true) {
//Getting the privious User email
$oUsers = new \Users();
$usrData = $oUsers->loadDetails($threadUsr);
$mail = $usrData['USR_EMAIL'];
//The Subject to search the email
$subject = "[PM] " . $proName . " (" . $index . ") Case: " . $appNumber;
$pmGoogle = new PmGoogleApi();
$pmGoogle->setUser($mail);
$pmGoogle->setScope(PmGoogleApi::GMAIL_MODIFY);
$client = $pmGoogle->serviceClient();
$service = new Google_Service_Gmail($client);
$labelsIds = $this->getLabelsIds($service);
if ($actualLastIndex == 0) {
$labelsToRemove = $labelsIds['Draft'];
$labelsToSearch = "*-draft";
$labelsToAdd = $labelsIds['Participated'];
} else {
if (($actualLastIndex == -1) && ($unassigned == true)) { //Unassigned
$labelsToRemove = $labelsIds['Unassigned'];
$labelsToSearch = "*-unassigned";
$labelsToAdd = $labelsIds['Inbox'];
} else {
if ($actualLastIndex >= 1) {
$labelsToRemove = $labelsIds['Inbox'];
$labelsToSearch = "*-inbox";
$labelsToAdd = $labelsIds['Participated'];
}
}
}
//Searching the email in the user's mail
$q = "subject:('" . preg_quote($subject, '-') . "') label:('" . $labelsToSearch . "')";
$messageList = $this->listMessages($service, $mail, $q, $labelsToRemove);
//if there isn't any message at draft, and lasindex is zero, is a subprocess
//and we must search in inbox:
if ($actualLastIndex === 0 && count($messageList) ===0) {
$labelsToRemove = $labelsIds['Inbox'];
$labelsToSearch = "*-inbox";
$labelsToAdd = $labelsIds['Participated'];
$q = "subject:('" . preg_quote($subject, '-') . "') label:('" . $labelsToSearch . "')";
$messageList = $this->listMessages($service, $mail, $q, $labelsToRemove);
}
foreach ($messageList as $message) {
$messageId = $message->getId();
$modifyResult = $this->modifyMessage($service, $mail, $messageId, array($labelsToAdd),
array($labelsToRemove));
}
//in is unassigned we must remove the label to the orher users
if ($labelsToRemove === $labelsIds['Unassigned']) {
require_once(PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "TaskUser.php");
$oTaskUsers = new \TaskUser();
$taskUsers = $oTaskUsers->getAllUsersTask($tasUid);
foreach ($taskUsers as $user) {
$usrData = $oUsers->loadDetails($user['USR_UID']);
$nextMail = $usrData['USR_EMAIL'];
//this operation is just for the users that didn't make the case claim
if ($nextMail !== $mail) {
$this->changeLabelsOfUnassigned($appData[0], $nextMail);
}
}
}
}
}
function changeLabelsOfUnassigned($application, $mail)
{
$appNumber = $application['APP_NUMBER'];
$index = $application['DEL_INDEX'];
$threadUsr = $application['USR_UID'];
$proName = $application['APP_PRO_TITLE'];
$threadStatus = $application['DEL_THREAD_STATUS'];
$appStatus = $application['APP_STATUS'];
$tasUid = $application['TAS_UID'];
//The Subject to search the email
$subject = "[PM] " . $proName . " (" . $index . ") Case: " . $appNumber;
$pmGoogle = new PmGoogleApi();
$pmGoogle->setUser($mail);
$pmGoogle->setScope(PmGoogleApi::GMAIL_MODIFY);
$client = $pmGoogle->serviceClient();
$service = new Google_Service_Gmail($client);
$labelsIds = $this->getLabelsIds($service);
$labelsToRemove = $labelsIds['Unassigned'];
$labelsToSearch = "*-unassigned";
$labelsToAdd = $labelsIds['Participated'];
//Searching the email in the user's mail
$q = "subject:('" . preg_quote($subject, '-') . "') label:('" . $labelsToSearch . "')";
$messageList = $this->listMessages($service, $mail, $q, $labelsToRemove);
foreach ($messageList as $message) {
$messageId = $message->getId();
$modifyResult = $this->modifyMessage($service, $mail, $messageId, array($labelsToAdd),
array($labelsToRemove));
}
}
/**
* Delete Label with given ID.
*
* @param Google_Service_Gmail $service Authorized Gmail API instance.
* @param string $userId User's email address. The special value 'me'
* can be used to indicate the authenticated user.
* @param string $labelId Id of Label to be updated.
*/
public function deleteLabel($service, $user, $labelId)
{
try {
$service->users_labels->delete($user, $labelId);
} catch (Exception $e) {
error_log(G::LoadTranslation("ID_PMGMAIL_GENERAL_ERROR") . $e->getMessage());
}
}
/**
* Delete PMGmail integration labels getting the list of labels in an email account.
*
* @param string $mail User mail adress.
*
*/
public function deletePMGmailLabels($mail)
{
$pmGoogle = new PmGoogleApi();
$pmGoogle->setUser($mail);
$pmGoogle->setScope(PmGoogleApi::GMAIL_MODIFY);
$client = $pmGoogle->serviceClient();
$service = new Google_Service_Gmail($client);
$count = 0;
$listlabels = $this->listLabels($service);
foreach ($listlabels as $label) {
if ($label->getName() == '* Inbox' ||
$label->getName() == '* Participated' ||
$label->getName() == '* Unassigned' ||
$label->getName() == '* Draft' ||
$label->getName() == '* Inbox' ||
$label->getName() == '* --- ProcessMaker ---' ||
$label->getName() == '* Paused'
) {
$oresp = $this->deleteLabel($service, 'me', $label->getId());
$count++;
}
}
return $count . ' labels successfully deleted.';
}
public function addRelabelingToQueue($caseId, $index, $actualLastIndex, $unassigned = false)
{
$labelingQueue = new GmailRelabeling();
$labelingQueue->setCreateDate(date('Y-m-d H:i:s'));
$labelingQueue->setLabelingUid(G::generateUniqueID());
$labelingQueue->setAppUid($caseId);
$labelingQueue->setDelIndex($index);
$labelingQueue->setCurrentLastIndex($actualLastIndex);
$labelingQueue->setUnassigned(($unassigned === true) ? 1 : 0);
$labelingQueue->setStatus('pending');
$labelingQueue->save();
}
public function processPendingRelabelingInQueue()
{
$c = new \Criteria('workflow');
$c->add(\GmailRelabelingPeer::STATUS, 'pending');
$c->addAscendingOrderByColumn('CREATE_DATE');
$list = \GmailRelabelingPeer::doSelect($c);
foreach ($list as $task) {
try {
$oResponse = $this->setLabels($task->getAppUid(),
$task->getDelIndex(),
$task->getCurrentLastIndex(),
($task->getUnassigned() === 1) ? true : false
);
$task->setStatus('completed');
} catch (exception $e) {
$task->setMsgError($e->getMessage());
$task->setStatus('pending');
}
$task->save();
}
}
private function getLabelsIds($service)
{
$result = array();
try {
$listlabels = $this->listLabels($service);
foreach ($listlabels as $label) {
$labId = $label->getId();
$labName = $label->getName();
switch ($labName) {
case "* Inbox":
$result['Inbox'] = $labId;
break;
case "* Participated":
$result['Participated'] = $labId;
break;
case "* Unassigned":
$result['Unassigned'] = $labId;
break;
case "* Draft":
$result['Draft'] = $labId;
break;
case "* Paused":
$result['Paused'] = $labId;
break;
}
}
} catch (Exception $e) {
throw $e;
}
return $result;
}
}

View File

@@ -883,7 +883,6 @@ class WsBase
* @see workflow\engine\classes\class.pmFunctions::PMFSendMessage()
* @see workflow\engine\methods\services\soap2::sendMessage()
* @see \ProcessMaker\BusinessModel\EmailEvent->sendEmail()
* @see \ProcessMaker\BusinessModel\Pmgmail->sendEmailWithApplicationData()
*
*/
public function sendMessage(
@@ -990,10 +989,6 @@ class WsBase
$this->getTaskId() ? $this->getTaskId() : (isset($oldFields['TAS_ID']) ? $oldFields['TAS_ID'] : 0)
);
if ($gmail === 1) {
return new WsResponse(0, G::loadTranslation('ID_PMGMAIL'));
}
// Create always the record in APP_MESSAGE table
$spool = new SpoolRun();
$spool->setConfig($setup);
@@ -2997,9 +2992,9 @@ class WsBase
$bmCase = new BmCases();
if (!$bmCase->isSupervisor($userIdTarget, $rows['APP_NUMBER'])){
$result = new WsResponse(34, G::loadTranslation('ID_TARGET_USER_DOES_NOT_HAVE_RIGHTS'));
$g->sessionVarRestore();
return $result;
}
}
@@ -3276,13 +3271,13 @@ class WsBase
* @param string $unpauseDate: Optional parameter. The date in the format "yyyy-mm-dd" indicating when to unpause
* the case.
* @param boolean $checkUser: Check if needs to validate if the action will enable only for current user
*
*
* @see Ajax::pauseCase()
* @see workflow/engine/classes/class.pmFunctions.php::PMFPauseCase()
* @see workflow/engine/methods/services/soap2.php::pauseCase()
*
*
* @link https://wiki.processmaker.com/3.3/ProcessMaker_Functions/Case_Functions#PMFPauseCase.28.29
*
*
* @return $result will return an object
*/
public function pauseCase($caseUid, $delIndex, $userUid, $unpauseDate = null, $checkUser = false)

View File

@@ -284,16 +284,6 @@ class AppDelegation extends BaseAppDelegation
$actionsByEmail->sendActionsByEmail($data, $dataAbe);
}
}
try {
$pmGoogle = new PmGoogleApi();
if ($pmGoogle->getServiceGmailStatus()) {
$Pmgmail = new \ProcessMaker\BusinessModel\Pmgmail();
$Pmgmail->gmailsForRouting($usrUid, $tasUid, $appUid, $delIndex, $isSubprocess);
}
} catch (Exception $oError) {
error_log($oError->getMessage());
}
}
if ($flagActionsByEmail) {

View File

@@ -2,18 +2,13 @@
use Illuminate\Filesystem\Filesystem;
use Illuminate\Support\Facades\Log;
use ProcessMaker\Core\System;
use ProcessMaker\PDF\TCPDFHeaderFooter;
class OutputDocument extends BaseOutputDocument
{
public function __construct()
{
$javaInput = PATH_C . 'javaBridgePM' . PATH_SEP . 'input' . PATH_SEP;
$javaOutput = PATH_C . 'javaBridgePM' . PATH_SEP . 'output' . PATH_SEP;
G::mk_dir($javaInput);
G::mk_dir($javaOutput);
}
public function getByUid($sOutDocUid)
@@ -1159,7 +1154,7 @@ class OutputDocument extends BaseOutputDocument
// Save the CSS file
file_put_contents(K_PATH_FONTS . 'fonts.css', $css);
}
/**
* Set and build if header options exist.
* @param TCPDFHeaderFooter $pdf