Files
luos/workflow/engine/controllers/webEntryProxy.php
davidcallizaya 44d60e96d9 HOR-3620
Fix PMSystem -> PmSystem since Processmaker is one word.
2017-08-04 11:49:43 -04:00

239 lines
9.9 KiB
PHP

<?php
class webEntryProxy extends HttpProxyController
{
//Delete Web Entry
public function delete ($params)
{
require_once 'classes/model/Event.php';
$pro_uid = $params->PRO_UID;
$filename = $params->FILE_NAME;
$filename = $filename . '.php';
$evn_uid = $params->EVN_UID;
$event = new Event();
$editEvent = array ();
$editEvent['EVN_UID'] = $evn_uid;
$editEvent['EVN_ACTION'] = '';
$editEvent['EVN_CONDITIONS'] = null;
$event->update( $editEvent );
unlink( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $pro_uid . PATH_SEP . $filename );
unlink( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $pro_uid . PATH_SEP . str_replace( ".php", "Post", $filename ) . ".php" );
$this->success = true;
$this->msg = G::LoadTranslation( 'ID_WEB_ENTRY_SUCCESS_DELETE' );
}
//Check Credentials
public function checkCredentials ($params)
{
require_once 'classes/model/Event.php';
require_once 'classes/model/Users.php';
require_once 'classes/model/TaskUser.php';
require_once 'classes/model/GroupUser.php';
$sPRO_UID = $params->PRO_UID;
$sEVN_UID = $params->EVN_UID;
//$sDYNAFORM = $params->DYN_UID;
$sWS_USER = trim( $params->WS_USER );
$sWS_PASS = trim( $params->WS_PASS );
if (G::is_https()) {
$http = 'https://';
} else {
$http = 'http://';
}
$endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2';
@$client = new SoapClient( $endpoint );
$user = $sWS_USER;
$pass = $sWS_PASS;
$parameters = array ('userid' => $user,'password' => $pass);
$result = $client->__SoapCall( 'login', array ($parameters) );
$fields['status_code'] = $result->status_code;
$fields['message'] = 'ProcessMaker WebService version: ' . $result->version . "\n" . $result->message;
$fields['version'] = $result->version;
$fields['time_stamp'] = $result->timestamp;
$messageCode = true;
$message = $result->message;
$event = new Event();
$event->load( $sEVN_UID );
$sTASKS = $event->getEvnTasUidTo();
$task = new Task();
$task->load( $sTASKS );
$sTASKS_SEL = $task->getTasTitle();
// if the user has been authenticated, then check if has the rights or
// permissions to create the webentry
if ($result->status_code == 0) {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( UsersPeer::USR_UID );
$oCriteria->addSelectColumn( TaskUserPeer::USR_UID );
$oCriteria->addSelectColumn( TaskUserPeer::TAS_UID );
$oCriteria->addJoin( TaskUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN );
$oCriteria->add( TaskUserPeer::TAS_UID, $sTASKS );
$oCriteria->add( UsersPeer::USR_USERNAME, $sWS_USER );
//$oCriteria->add(TaskUserPeer::TU_RELATION,1);
$userIsAssigned = TaskUserPeer::doCount( $oCriteria );
// if the user is not assigned directly, maybe a have the task a group with the user
if ($userIsAssigned < 1) {
$oCriteria = new Criteria( 'workflow' );
$oCriteria->addSelectColumn( UsersPeer::USR_UID );
$oCriteria->addJoin( UsersPeer::USR_UID, GroupUserPeer::USR_UID, Criteria::LEFT_JOIN );
$oCriteria->addJoin( GroupUserPeer::GRP_UID, TaskUserPeer::USR_UID, Criteria::LEFT_JOIN );
$oCriteria->add( TaskUserPeer::TAS_UID, $sTASKS );
$oCriteria->add( UsersPeer::USR_USERNAME, $sWS_USER );
$userIsAssigned = GroupUserPeer::doCount( $oCriteria );
if (! ($userIsAssigned >= 1)) {
$messageCode = false;
$message = "The User \"" . $sWS_USER . "\" doesn't have the task \"" . $sTASKS_SEL . "\" assigned.";
}
}
} else {
$messageCode = false;
}
$this->success = $messageCode;
$this->msg = $message;
}
//Save New WebEntry
public function save ($params)
{
require_once 'classes/model/Event.php';
global $G_FORM;
$sPRO_UID = $params->pro_uid;
$sEVN_UID = $params->evn_uid;
$sDYNAFORM = $params->initDyna;
$sWS_USER = trim( $params->username );
$sWS_PASS = trim( $params->password );
$sWS_ROUNDROBIN = '';
$sWE_USR = '';
$xDYNA = $params->dynaform;
if ($xDYNA != '') {
$pro_uid = $params->pro_uid;
$filename = $xDYNA;
$filename = $filename . '.php';
unlink( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $pro_uid . PATH_SEP . $filename );
unlink( PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $pro_uid . PATH_SEP . str_replace( ".php", "Post", $filename ) . ".php" );
}
$pathProcess = PATH_DATA_SITE . 'public' . PATH_SEP . $sPRO_UID . PATH_SEP;
G::mk_dir( $pathProcess, 0777 );
$oEvent = new Event();
$oEvent->load( $sEVN_UID );
$sTASKS = $oEvent->getEvnTasUidTo();
$oTask = new Task();
$oTask->load( $sTASKS );
$tas_title = $oTask->getTasTitle();
if (G::is_https()) {
$http = 'https://';
} else {
$http = 'http://';
}
$sContent = '';
$SITE_PUBLIC_PATH = '';
if (file_exists( $SITE_PUBLIC_PATH . '' )) {
}
require_once 'classes/model/Dynaform.php';
$oDynaform = new Dynaform();
$aDynaform = $oDynaform->load( $sDYNAFORM );
$dynTitle = str_replace( ' ', '_', str_replace( '/', '_', $aDynaform['DYN_TITLE'] ) );
$sContent = "<?php\n";
$sContent .= "global \$_DBArray;\n";
$sContent .= "if (!isset(\$_DBArray)) {\n";
$sContent .= " \$_DBArray = array();\n";
$sContent .= "}\n";
$sContent .= "\$_SESSION['PROCESS'] = '" . $sPRO_UID . "';\n";
$sContent .= "\$_SESSION['CURRENT_DYN_UID'] = '" . $sDYNAFORM . "';\n";
$sContent .= "\$G_PUBLISH = new Publisher;\n";
$sContent .= "\$G_PUBLISH->AddContent('dynaform', 'xmlform', '" . $sPRO_UID . '/' . $sDYNAFORM . "', '', array(), '" . $dynTitle . 'Post.php' . "');\n";
$sContent .= "G::RenderPage('publish', 'blank');";
file_put_contents( $pathProcess . $dynTitle . '.php', $sContent );
//creating the second file, the post file who receive the post form.
$pluginTpl = PATH_CORE . 'templates' . PATH_SEP . 'processes' . PATH_SEP . 'webentryPost.tpl';
$template = new TemplatePower( $pluginTpl );
$template->prepare();
$template->assign( 'wsdlUrl', $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2' );
$template->assign( 'wsUploadUrl', $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/upload' );
$template->assign( 'processUid', $sPRO_UID );
$template->assign( 'dynaformUid', $sDYNAFORM );
$template->assign( 'taskUid', $sTASKS );
$template->assign( 'wsUser', $sWS_USER );
$template->assign( 'wsPass', Bootstrap::hashPassword($sWS_PASS, '', true) );
$template->assign( 'wsRoundRobin', $sWS_ROUNDROBIN );
if ($sWE_USR == "2") {
$template->assign( 'USR_VAR', "\$cInfo = ws_getCaseInfo(\$caseId);\n\t \$USR_UID = \$cInfo->currentUsers->userId;" );
} else {
$template->assign( 'USR_VAR', '$USR_UID = -1;' );
}
$template->assign( 'dynaform', $dynTitle );
$template->assign( 'timestamp', date( 'l jS \of F Y h:i:s A' ) );
$template->assign( 'ws', SYS_SYS );
$template->assign( 'version', PmSystem::getVersion() );
$fileName = $pathProcess . $dynTitle . 'Post.php';
file_put_contents( $fileName, $template->getOutputContent() );
//creating the third file, only if this wsClient.php file doesn't exists.
$fileName = $pathProcess . 'wsClient.php';
$pluginTpl = PATH_CORE . "templates" . PATH_SEP . "processes" . PATH_SEP . "wsClient.php";
if (file_exists( $fileName )) {
if (filesize( $fileName ) != filesize( $pluginTpl )) {
@copy( $fileName, $pathProcess . 'wsClient.php.bck' );
@unlink( $fileName );
$template = new TemplatePower( $pluginTpl );
$template->prepare();
file_put_contents( $fileName, $template->getOutputContent() );
}
} else {
$template = new TemplatePower( $pluginTpl );
$template->prepare();
file_put_contents( $fileName, $template->getOutputContent() );
}
require_once 'classes/model/Event.php';
$oEvent = new Event();
$aDataEvent = array ();
$aDataEvent['EVN_UID'] = $sEVN_UID;
$aDataEvent['EVN_RELATED_TO'] = 'MULTIPLE';
$aDataEvent['EVN_ACTION'] = $sDYNAFORM;
$aDataEvent['EVN_CONDITIONS'] = $sWS_USER;
$output = $oEvent->update( $aDataEvent );
$link = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/' . $sPRO_UID . '/' . $dynTitle . '.php';
$this->success = true;
$this->msg = G::LoadTranslation( 'ID_WEB_ENTRY_SUCCESS_NEW' );
$this->W_LINK = $link;
$this->TAS_TITLE = $tas_title;
$this->DYN_TITLE = $dynTitle;
$this->USR_UID = $sWS_USER;
}
public function load ($params)
{
$oProcessMap = new processMap( new DBConnection() );
$PRO_UID = $params->PRO_UID;
$EVN_UID = $params->EVN_UID;
$sOutput = $oProcessMap->listNewWebEntry( $PRO_UID, $EVN_UID );
return $sOutput;
}
}