Merged in marcoAntonioNina/processmaker/GI-130-A (pull request #3121)

Gi 130 a
This commit is contained in:
Dante Loayza
2015-11-06 11:42:18 -04:00
16 changed files with 1290 additions and 15 deletions

View File

@@ -29,7 +29,8 @@
"underscore/underscore": "1.5.2",
"colosa/pmUI": "dev-master",
"colosa/MichelangeloFE": "dev-master",
"colosa/pmdynaform": "dev-master"
"colosa/pmdynaform": "dev-master",
"google/apiclient": "1.1.*"
},
"require-dev":{
"guzzle/guzzle":"~3.1.1",

View File

@@ -7033,5 +7033,51 @@ class Cases
return $unserializedData;
}
/**
* This function returns the list of cases (and their categories) that a user can start.
* Used by : End Point workflow/engine/src/ProcessMaker/Services/Api/Cases.php -> doGetCasesListStarCase
* Observation: This function and the doGetCasesListStarCase end point implements a similar functionality
* of the mobile light/process/start-case endpoint. It was decided (Sep 3 2015) the it was necessary to have
* a ProcessMaker endpoint for this functionality and in the future al the mobile end points will be deprecated
* and just the ProcessMaker endpoints will exist.
*
* @param $usrUid
* @param $typeView
* @return array
*/
public function getProcessListStartCase($usrUid, $typeView)
{
$usrUid = empty($usrUid) ? $_SESSION['USER_LOGGED'] : $usrUid;
$canStart = $this->canStartCase($usrUid);
if ($canStart) {
$processList = array();
$list = $this->getStartCasesPerType($usrUid, $typeView);
foreach ($list as $index => $row) {
if (!empty($row['pro_uid'])) {
if ($typeView == 'category') {
$processList[] = array(
'tas_uid' => $row['uid'],
'pro_title' => $row['value'],
'pro_uid' => $row['pro_uid'],
'pro_category' => $row['cat'],
'category_name' => $row['catname']
);
} else {
$processList[] = array(
'tas_uid' => $row['uid'],
'pro_title' => $row['value'],
'pro_uid' => $row['pro_uid']
);
}
}
}
} else {
$processList['success'] = 'failure';
$processList['message'] = G::LoadTranslation('ID_USER_PROCESS_NOT_START');
}
return $processList;
}
}

View File

@@ -0,0 +1,269 @@
<?php
/**
* class.pmDrive.php
*
* @package workflow.engine.class
*
*/
class PMDrive extends PMGoogleApi
{
private $folderIdPMDrive = '';
private $folderNamePMDrive;
/**
* Validate if exist folder PMDrive
*
* @param $userUid id user
*/
private function validateFolderPMDrive($usrUid)
{
if ($this->folderIdPMDrive != '') {
return;
}
$user = new Users();
$dataUser = $user->load($usrUid);
if (!empty($dataUser['USR_EMAIL'])) {
$this->setDriveUser($dataUser['USR_EMAIL']);
}
$this->folderIdPMDrive = empty($dataUser['USR_PMDRIVE_FOLDER_UID']) ? '' : $dataUser['USR_PMDRIVE_FOLDER_UID'];
$conf = $this->getConfigGmail();
$this->folderNamePMDrive = empty($conf->aConfig['folderNamePMDrive']) ? 'PMDrive (' . SYS_SYS . ')' : $conf->aConfig['folderNamePMDrive'];
if ($this->folderIdPMDrive == '') {
$folderid = $this->createFolder($this->folderNamePMDrive);
$this->folderIdPMDrive = $folderid->id;
$dataUser['USR_PMDRIVE_FOLDER_UID'] = $folderid->id;
$user->update($dataUser);
}
}
public function getFolderIdPMDrive($usrUid)
{
$this->validateFolderPMDrive($usrUid);
return $this->folderIdPMDrive;
}
/**
* Set account user
*
* @param $user email user
*/
public function setFolderNamePMDrive($name)
{
$conf = $this->getConfigGmail();
$conf->aConfig['folderNamePMDrive'] = $name;
$conf->saveConfig('GOOGLE_API_SETTINGS', '', '', '');
$this->folderNamePMDrive = $name;
}
/**
* Set account user
*
* @param $user email user
*/
public function setDriveUser($user)
{
$this->setUser($user);
}
/**
* Instance google service Drive
*
* @return Google_Service_Drive $service Drive API service instance.
*/
private function serviceDrive()
{
$client = $this->serviceClient();
$service = new Google_Service_Drive($client);
return $service;
}
/**
* Retrieve a list of File resources.
*
* @param string $fileId uid file
* @return Array List of Google_Service_Drive_DriveFile resources.
*/
public function listFolder($fileId)
{
$this->setScope('https://www.googleapis.com/auth/drive');
$this->setScope('https://www.googleapis.com/auth/drive.file');
$this->setScope('https://www.googleapis.com/auth/drive.readonly');
$this->setScope('https://www.googleapis.com/auth/drive.metadata.readonly');
$this->setScope('https://www.googleapis.com/auth/drive.appdata');
$this->setScope('https://www.googleapis.com/auth/drive.metadata');
$service = $this->serviceDrive();
try {
$parameters['q'] = "'" . $fileId . "' in parents and trashed = false";
$parents = $service->files->listFiles($parameters);
$rows = array();
foreach ($parents->getItems() as $parent) {
//echo 'File Id: ' . $parent->getId() . '<br>';
$rows = $parent;
}
return $rows;
} catch (Exception $e) {
return G::LoadTranslation("ID_MSG_AJAX_FAILURE") . $e->getMessage();
}
}
/**
* Retrieve a list of File resources.
*
* @param string $name Title of the file to insert, including the extension.
* @param string $parentId Parent folder's ID.
* @return Google_Service_Drive_DriveFile The file that was inserted. NULL is returned if an API error occurred.
*/
public function createFolder($name, $parentId = null)
{
$this->setScope('https://www.googleapis.com/auth/drive.file');
$service = $this->serviceDrive();
$file = new Google_Service_Drive_DriveFile();
$file->setMimeType("application/vnd.google-apps.folder");
$file->setTitle($name);
if ($parentId != null) {
$parent = new Google_Service_Drive_ParentReference();
$parent->setId($parentId);
$file->setParents(array($parent));
}
try {
$createdFolder = $service->files->insert($file);
return $createdFolder;
} catch (Exception $e) {
return "An error occurred: " . $e->getMessage();
}
}
/**
* upload new file
*
* @param string $mime MIME type of the file to insert.
* @param string $src location of the file to insert.
* @param string $name Title of the file to insert, including the extension.
* @return Google_Service_Drive_DriveFile The file that was inserted. NULL is returned if an API error occurred.
*/
public function uploadFile($mime, $src, $name, $parentId = null)
{
//$this->validateFolderPMDrive();
$this->setScope('https://www.googleapis.com/auth/drive.file');
$service = $this->serviceDrive();
$file = new Google_Service_Drive_DriveFile();
$file->setMimeType("*/*");
$file->setTitle($name);
// Set the parent folder.
if ($parentId != null) {
$parent = new Google_Service_Drive_ParentReference();
$parent->setId($parentId);
$file->setParents(array($parent));
}
$data = file_get_contents($src);
try {
$createdFile = $service->files->insert(
$file,
array(
'data' => $data,
'mimeType' => $mime,
'uploadType' => 'media'
)
);
return $createdFile;
} catch (Exception $e) {
return "An error occurred: " . $e->getMessage();
}
}
/**
* Download a file's content.
*
* @param string $fileId id file.
* @return String The file's content if successful, null otherwise
*/
public function downloadFile($fileId)
{
//$this->validateFolderPMDrive();
$this->setScope('https://www.googleapis.com/auth/drive');
$this->setScope('https://www.googleapis.com/auth/drive.appdata');
$this->setScope('https://www.googleapis.com/auth/drive.apps.readonly');
$this->setScope('https://www.googleapis.com/auth/drive.file');
$this->setScope('https://www.googleapis.com/auth/drive.metadata');
$this->setScope('https://www.googleapis.com/auth/drive.metadata.readonly');
$this->setScope('https://www.googleapis.com/auth/drive.readonly');
$service = $this->serviceDrive();
try {
$file = $service->files->get($fileId);
$downloadUrl = $file->getDownloadUrl();
if ($downloadUrl) {
$request = new Google_Http_Request($downloadUrl, 'GET', null, null);
$httpRequest = $service->getClient()->getAuth()->authenticatedRequest($request);
if ($httpRequest->getResponseHttpCode() == 200) {
return $httpRequest->getResponseBody();
} else {
// An error occurred.
return null;
}
} else {
// The file doesn't have any content stored on Drive.
return null;
}
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
}
/**
* Insert a new permission.
*
* @param String $fileId ID of the file to insert permission for.
* @param String $value User or group e-mail address, domain name or NULL for "default" type.
* @param String $type The value "user", "group", "domain" or "default".
* @param String $role The value "owner", "writer" or "reader".
* @return Google_Servie_Drive_Permission The inserted permission. NULL is returned if an API error occurred.
*/
public function setPermission($fileId, $value, $type = 'user', $role = 'reader', $sendNotification = false)
{
$this->setScope('https://www.googleapis.com/auth/drive');
$this->setScope('https://www.googleapis.com/auth/drive.file');
$service = $this->serviceDrive();
$newPermission = new Google_Service_Drive_Permission();
$newPermission->setValue($value);
$newPermission->setType($type);
$newPermission->setRole($role);
try {
$permission = $service->permissions->insert(
$fileId,
$newPermission,
array(
'sendNotificationEmails' => $sendNotification
)
);
return $permission;
} catch (Exception $e) {
error_log('permission error: ' . $e->getMessage());
return "An error occurred: " . $e->getMessage();
}
}
}

View File

@@ -0,0 +1,213 @@
<?php
/**
* class.pmGoogleApi.php
*
*/
require_once PATH_TRUNK . 'vendor' . PATH_SEP . 'google' . PATH_SEP . 'apiclient' . PATH_SEP . 'src' . PATH_SEP . 'Google' . PATH_SEP . 'autoload.php';
class PMGoogleApi
{
private $scope = array();
private $serviceAccountEmail;
private $serviceAccountP12;
private $statusService;
private $domain;
private $user;
public function __construct()
{
$licensedFeatures = &PMLicensedFeatures::getSingleton();
if (!$licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) {
G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels');
G::header('location: ../login/login');
die;
}
$this->loadSettings();
}
public function setScope($scope)
{
$this->scope[] = $scope;
}
public function getScope()
{
return $this->scope;
}
public function setUser($user)
{
$this->user = $user;
}
public function getUser()
{
return $this->user;
}
public function setStatusService($status)
{
$conf = $this->getConfigGmail();
$conf->aConfig['statusService'] = $status;
$conf->saveConfig('GOOGLE_API_SETTINGS', '', '', '');
$this->statusService = $status;
}
public function getStatusService()
{
return $this->statusService;
}
public function getConfigGmail()
{
$conf = new Configurations();
$conf->loadConfig($gmail, 'GOOGLE_API_SETTINGS', '');
return $conf;
}
public function setServiceAccountEmail($serviceAccountEmail)
{
$conf = $this->getConfigGmail();
$conf->aConfig['serviceAccountEmail'] = $serviceAccountEmail;
$conf->saveConfig('GOOGLE_API_SETTINGS', '', '', '');
$this->serviceAccountEmail = $serviceAccountEmail;
}
public function getServiceAccountEmail()
{
return $this->serviceAccountEmail;
}
public function setServiceAccountP12($serviceAccountP12)
{
$conf = $this->getConfigGmail();
$conf->aConfig['serviceAccountP12'] = $serviceAccountP12;
$conf->saveConfig('GOOGLE_API_SETTINGS', '', '', '');
$this->serviceAccountP12 = $serviceAccountP12;
}
public function getserviceAccountP12()
{
return $this->serviceAccountP12;
}
public function setDomain($domain)
{
$conf = $this->getConfigGmail();
$conf->aConfig['domain'] = $domain;
$conf->saveConfig('GOOGLE_API_SETTINGS', '', '', '');
$this->domain = $domain;
}
public function getDomain()
{
return $this->domain;
}
/**
* load configuration gmail service account
*
*/
public function loadSettings()
{
$conf = $this->getConfigGmail();
$serviceAccountP12 = empty($conf->aConfig['serviceAccountP12']) ? '' : $conf->aConfig['serviceAccountP12'];
$serviceAccountEmail = empty($conf->aConfig['serviceAccountEmail']) ? '' : $conf->aConfig['serviceAccountEmail'];
$statusService = empty($conf->aConfig['statusService']) ? '' : $conf->aConfig['statusService'];
$this->scope = array();
$this->setServiceAccountEmail($serviceAccountEmail);
$this->setServiceAccountP12($serviceAccountP12);
$this->setStatusService($statusService);
}
/**
* New service client - Authentication google Api
*
* @return Google_Service_Client $service API service instance.
*/
public function serviceClient()
{
$key = file_get_contents(PATH_DATA_SITE . $this->serviceAccountP12);
$assertionCredentials = new Google_Auth_AssertionCredentials(
$this->serviceAccountEmail,
$this->scope,
$key
);
$assertionCredentials->sub = $this->user;
$client = new Google_Client();
$client->setApplicationName("PMDrive");
$client->setAssertionCredentials($assertionCredentials);
return $client;
}
/**
* New service client - Authentication google Api
*
* @return Google_Service_Client $service API service instance.
*/
public function testService($serviceAccountEmail, $pathServiceAccountP12)
{
$key = file_get_contents($pathServiceAccountP12);
$assertionCredentials = new Google_Auth_AssertionCredentials(
$serviceAccountEmail,
array(
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/drive.file',
'https://www.googleapis.com/auth/drive.readonly',
'https://www.googleapis.com/auth/drive.metadata.readonly',
'https://www.googleapis.com/auth/drive.appdata',
'https://www.googleapis.com/auth/drive.metadata',
'https://www.googleapis.com/auth/drive.photos.readonly'
),
$key
);
$assertionCredentials->sub = $this->user;
$client = new Google_Client();
$client->setApplicationName("PMDrive");
$client->setAssertionCredentials($assertionCredentials);
$service = new Google_Service_Drive($client);
$result = new StdClass();
$result->success = true;
$result->currentUserName = G::LoadTranslation('ID_SERVER_COMMUNICATION_ERROR');
$result->rootFolderId = G::LoadTranslation('ID_SERVER_COMMUNICATION_ERROR');
$result->quotaType = G::LoadTranslation('ID_SERVER_COMMUNICATION_ERROR');
$result->quotaBytesTotal = G::LoadTranslation('ID_SERVER_COMMUNICATION_ERROR');
$result->quotaBytesUsed = G::LoadTranslation('ID_SERVER_COMMUNICATION_ERROR');
try {
$about = $service->about->get();
$result->currentUserName = $about->getName();
$result->rootFolderId = $about->getRootFolderId();
$result->quotaType = $about->getQuotaType();
$result->quotaBytesTotal = $about->getQuotaBytesTotal();
$result->quotaBytesUsed = $about->getQuotaBytesUsed();
$result->responseGmailTest = G::LoadTranslation('ID_SUCCESSFUL_CONNECTION');
} catch (Exception $e) {
$result->success = false;
$result->responseGmailTest = G::LoadTranslation('ID_SERVER_COMMUNICATION_ERROR');
}
return $result;
}
}

View File

@@ -131,10 +131,12 @@ class UsersMapBuilder
$tMap->addColumn('USR_TOTAL_UNASSIGNED', 'UsrTotalUnassigned', 'int', CreoleTypes::INTEGER, false, null);
$tMap->addColumn('USR_COST_BY_HOUR', 'UsrCostByHour', 'double', CreoleTypes::DOUBLE, false, 11,2);
$tMap->addColumn('USR_COST_BY_HOUR', 'UsrCostByHour', 'double', CreoleTypes::DECIMAL, false, 7,2);
$tMap->addColumn('USR_UNIT_COST', 'UsrUnitCost', 'string', CreoleTypes::VARCHAR, false, 50);
$tMap->addColumn('USR_BOOKMARK_START_CASES', 'UsrBookmarkStartCases', 'string', CreoleTypes::LONGVARCHAR, false, null);
$tMap->addValidator('USR_STATUS', 'validValues', 'propel.validator.ValidValuesValidator', 'ACTIVE|INACTIVE|VACATION|CLOSED', 'Please select a valid type.');
$tMap->addValidator('USR_STATUS', 'required', 'propel.validator.RequiredValidator', '', 'Type is required.');

View File

@@ -237,6 +237,12 @@ abstract class BaseUsers extends BaseObject implements Persistent
*/
protected $usr_unit_cost = '';
/**
* The value for the usr_bookmark_start_cases field.
* @var string
*/
protected $usr_bookmark_start_cases;
/**
* Flag to prevent endless save loop, if this object is referenced
* by another object which falls in this transaction.
@@ -720,6 +726,17 @@ abstract class BaseUsers extends BaseObject implements Persistent
return $this->usr_unit_cost;
}
/**
* Get the [usr_bookmark_start_cases] column value.
*
* @return string
*/
public function getUsrBookmarkStartCases()
{
return $this->usr_bookmark_start_cases;
}
/**
* Set the value of [usr_uid] column.
*
@@ -1512,6 +1529,28 @@ abstract class BaseUsers extends BaseObject implements Persistent
} // setUsrUnitCost()
/**
* Set the value of [usr_bookmark_start_cases] column.
*
* @param string $v new value
* @return void
*/
public function setUsrBookmarkStartCases($v)
{
// Since the native PHP type for this column is string,
// we will cast the input to a string (if it is not).
if ($v !== null && !is_string($v)) {
$v = (string) $v;
}
if ($this->usr_bookmark_start_cases !== $v) {
$this->usr_bookmark_start_cases = $v;
$this->modifiedColumns[] = UsersPeer::USR_BOOKMARK_START_CASES;
}
} // setUsrBookmarkStartCases()
/**
* Hydrates (populates) the object variables with values from the database resultset.
*
@@ -1599,12 +1638,14 @@ abstract class BaseUsers extends BaseObject implements Persistent
$this->usr_unit_cost = $rs->getString($startcol + 34);
$this->usr_bookmark_start_cases = $rs->getString($startcol + 35);
$this->resetModified();
$this->setNew(false);
// FIXME - using NUM_COLUMNS may be clearer.
return $startcol + 35; // 35 = UsersPeer::NUM_COLUMNS - UsersPeer::NUM_LAZY_LOAD_COLUMNS).
return $startcol + 36; // 36 = UsersPeer::NUM_COLUMNS - UsersPeer::NUM_LAZY_LOAD_COLUMNS).
} catch (Exception $e) {
throw new PropelException("Error populating Users object", $e);
@@ -1913,6 +1954,9 @@ abstract class BaseUsers extends BaseObject implements Persistent
case 34:
return $this->getUsrUnitCost();
break;
case 35:
return $this->getUsrBookmarkStartCases();
break;
default:
return null;
break;
@@ -1968,6 +2012,7 @@ abstract class BaseUsers extends BaseObject implements Persistent
$keys[32] => $this->getUsrTotalUnassigned(),
$keys[33] => $this->getUsrCostByHour(),
$keys[34] => $this->getUsrUnitCost(),
$keys[35] => $this->getUsrBookmarkStartCases(),
);
return $result;
}
@@ -2104,6 +2149,9 @@ abstract class BaseUsers extends BaseObject implements Persistent
case 34:
$this->setUsrUnitCost($value);
break;
case 35:
$this->setUsrBookmarkStartCases($value);
break;
} // switch()
}
@@ -2267,6 +2315,10 @@ abstract class BaseUsers extends BaseObject implements Persistent
$this->setUsrUnitCost($arr[$keys[34]]);
}
if (array_key_exists($keys[35], $arr)) {
$this->setUsrBookmarkStartCases($arr[$keys[35]]);
}
}
/**
@@ -2418,6 +2470,10 @@ abstract class BaseUsers extends BaseObject implements Persistent
$criteria->add(UsersPeer::USR_UNIT_COST, $this->usr_unit_cost);
}
if ($this->isColumnModified(UsersPeer::USR_BOOKMARK_START_CASES)) {
$criteria->add(UsersPeer::USR_BOOKMARK_START_CASES, $this->usr_bookmark_start_cases);
}
return $criteria;
}
@@ -2540,6 +2596,8 @@ abstract class BaseUsers extends BaseObject implements Persistent
$copyObj->setUsrUnitCost($this->usr_unit_cost);
$copyObj->setUsrBookmarkStartCases($this->usr_bookmark_start_cases);
$copyObj->setNew(true);

View File

@@ -25,7 +25,7 @@ abstract class BaseUsersPeer
const CLASS_DEFAULT = 'classes.model.Users';
/** The total number of columns. */
const NUM_COLUMNS = 35;
const NUM_COLUMNS = 36;
/** The number of lazy-loaded columns. */
const NUM_LAZY_LOAD_COLUMNS = 0;
@@ -136,6 +136,9 @@ abstract class BaseUsersPeer
/** the column name for the USR_UNIT_COST field */
const USR_UNIT_COST = 'USERS.USR_UNIT_COST';
/** the column name for the USR_BOOKMARK_START_CASES field */
const USR_BOOKMARK_START_CASES = 'USERS.USR_BOOKMARK_START_CASES';
/** The PHP to DB Name Mapping */
private static $phpNameMap = null;
@@ -147,10 +150,10 @@ abstract class BaseUsersPeer
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
*/
private static $fieldNames = array (
BasePeer::TYPE_PHPNAME => array ('UsrUid', 'UsrUsername', 'UsrPassword', 'UsrFirstname', 'UsrLastname', 'UsrEmail', 'UsrDueDate', 'UsrCreateDate', 'UsrUpdateDate', 'UsrStatus', 'UsrCountry', 'UsrCity', 'UsrLocation', 'UsrAddress', 'UsrPhone', 'UsrFax', 'UsrCellular', 'UsrZipCode', 'DepUid', 'UsrPosition', 'UsrResume', 'UsrBirthday', 'UsrRole', 'UsrReportsTo', 'UsrReplacedBy', 'UsrUx', 'UsrTotalInbox', 'UsrTotalDraft', 'UsrTotalCancelled', 'UsrTotalParticipated', 'UsrTotalPaused', 'UsrTotalCompleted', 'UsrTotalUnassigned', 'UsrCostByHour', 'UsrUnitCost', ),
BasePeer::TYPE_COLNAME => array (UsersPeer::USR_UID, UsersPeer::USR_USERNAME, UsersPeer::USR_PASSWORD, UsersPeer::USR_FIRSTNAME, UsersPeer::USR_LASTNAME, UsersPeer::USR_EMAIL, UsersPeer::USR_DUE_DATE, UsersPeer::USR_CREATE_DATE, UsersPeer::USR_UPDATE_DATE, UsersPeer::USR_STATUS, UsersPeer::USR_COUNTRY, UsersPeer::USR_CITY, UsersPeer::USR_LOCATION, UsersPeer::USR_ADDRESS, UsersPeer::USR_PHONE, UsersPeer::USR_FAX, UsersPeer::USR_CELLULAR, UsersPeer::USR_ZIP_CODE, UsersPeer::DEP_UID, UsersPeer::USR_POSITION, UsersPeer::USR_RESUME, UsersPeer::USR_BIRTHDAY, UsersPeer::USR_ROLE, UsersPeer::USR_REPORTS_TO, UsersPeer::USR_REPLACED_BY, UsersPeer::USR_UX, UsersPeer::USR_TOTAL_INBOX, UsersPeer::USR_TOTAL_DRAFT, UsersPeer::USR_TOTAL_CANCELLED, UsersPeer::USR_TOTAL_PARTICIPATED, UsersPeer::USR_TOTAL_PAUSED, UsersPeer::USR_TOTAL_COMPLETED, UsersPeer::USR_TOTAL_UNASSIGNED, UsersPeer::USR_COST_BY_HOUR, UsersPeer::USR_UNIT_COST, ),
BasePeer::TYPE_FIELDNAME => array ('USR_UID', 'USR_USERNAME', 'USR_PASSWORD', 'USR_FIRSTNAME', 'USR_LASTNAME', 'USR_EMAIL', 'USR_DUE_DATE', 'USR_CREATE_DATE', 'USR_UPDATE_DATE', 'USR_STATUS', 'USR_COUNTRY', 'USR_CITY', 'USR_LOCATION', 'USR_ADDRESS', 'USR_PHONE', 'USR_FAX', 'USR_CELLULAR', 'USR_ZIP_CODE', 'DEP_UID', 'USR_POSITION', 'USR_RESUME', 'USR_BIRTHDAY', 'USR_ROLE', 'USR_REPORTS_TO', 'USR_REPLACED_BY', 'USR_UX', 'USR_TOTAL_INBOX', 'USR_TOTAL_DRAFT', 'USR_TOTAL_CANCELLED', 'USR_TOTAL_PARTICIPATED', 'USR_TOTAL_PAUSED', 'USR_TOTAL_COMPLETED', 'USR_TOTAL_UNASSIGNED', 'USR_COST_BY_HOUR', 'USR_UNIT_COST', ),
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, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, )
BasePeer::TYPE_PHPNAME => array ('UsrUid', 'UsrUsername', 'UsrPassword', 'UsrFirstname', 'UsrLastname', 'UsrEmail', 'UsrDueDate', 'UsrCreateDate', 'UsrUpdateDate', 'UsrStatus', 'UsrCountry', 'UsrCity', 'UsrLocation', 'UsrAddress', 'UsrPhone', 'UsrFax', 'UsrCellular', 'UsrZipCode', 'DepUid', 'UsrPosition', 'UsrResume', 'UsrBirthday', 'UsrRole', 'UsrReportsTo', 'UsrReplacedBy', 'UsrUx', 'UsrTotalInbox', 'UsrTotalDraft', 'UsrTotalCancelled', 'UsrTotalParticipated', 'UsrTotalPaused', 'UsrTotalCompleted', 'UsrTotalUnassigned', 'UsrCostByHour', 'UsrUnitCost', 'UsrBookmarkStartCases', ),
BasePeer::TYPE_COLNAME => array (UsersPeer::USR_UID, UsersPeer::USR_USERNAME, UsersPeer::USR_PASSWORD, UsersPeer::USR_FIRSTNAME, UsersPeer::USR_LASTNAME, UsersPeer::USR_EMAIL, UsersPeer::USR_DUE_DATE, UsersPeer::USR_CREATE_DATE, UsersPeer::USR_UPDATE_DATE, UsersPeer::USR_STATUS, UsersPeer::USR_COUNTRY, UsersPeer::USR_CITY, UsersPeer::USR_LOCATION, UsersPeer::USR_ADDRESS, UsersPeer::USR_PHONE, UsersPeer::USR_FAX, UsersPeer::USR_CELLULAR, UsersPeer::USR_ZIP_CODE, UsersPeer::DEP_UID, UsersPeer::USR_POSITION, UsersPeer::USR_RESUME, UsersPeer::USR_BIRTHDAY, UsersPeer::USR_ROLE, UsersPeer::USR_REPORTS_TO, UsersPeer::USR_REPLACED_BY, UsersPeer::USR_UX, UsersPeer::USR_TOTAL_INBOX, UsersPeer::USR_TOTAL_DRAFT, UsersPeer::USR_TOTAL_CANCELLED, UsersPeer::USR_TOTAL_PARTICIPATED, UsersPeer::USR_TOTAL_PAUSED, UsersPeer::USR_TOTAL_COMPLETED, UsersPeer::USR_TOTAL_UNASSIGNED, UsersPeer::USR_COST_BY_HOUR, UsersPeer::USR_UNIT_COST, UsersPeer::USR_BOOKMARK_START_CASES, ),
BasePeer::TYPE_FIELDNAME => array ('USR_UID', 'USR_USERNAME', 'USR_PASSWORD', 'USR_FIRSTNAME', 'USR_LASTNAME', 'USR_EMAIL', 'USR_DUE_DATE', 'USR_CREATE_DATE', 'USR_UPDATE_DATE', 'USR_STATUS', 'USR_COUNTRY', 'USR_CITY', 'USR_LOCATION', 'USR_ADDRESS', 'USR_PHONE', 'USR_FAX', 'USR_CELLULAR', 'USR_ZIP_CODE', 'DEP_UID', 'USR_POSITION', 'USR_RESUME', 'USR_BIRTHDAY', 'USR_ROLE', 'USR_REPORTS_TO', 'USR_REPLACED_BY', 'USR_UX', 'USR_TOTAL_INBOX', 'USR_TOTAL_DRAFT', 'USR_TOTAL_CANCELLED', 'USR_TOTAL_PARTICIPATED', 'USR_TOTAL_PAUSED', 'USR_TOTAL_COMPLETED', 'USR_TOTAL_UNASSIGNED', 'USR_COST_BY_HOUR', 'USR_UNIT_COST', 'USR_BOOKMARK_START_CASES', ),
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, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, )
);
/**
@@ -160,10 +163,10 @@ abstract class BaseUsersPeer
* e.g. self::$fieldNames[BasePeer::TYPE_PHPNAME]['Id'] = 0
*/
private static $fieldKeys = array (
BasePeer::TYPE_PHPNAME => array ('UsrUid' => 0, 'UsrUsername' => 1, 'UsrPassword' => 2, 'UsrFirstname' => 3, 'UsrLastname' => 4, 'UsrEmail' => 5, 'UsrDueDate' => 6, 'UsrCreateDate' => 7, 'UsrUpdateDate' => 8, 'UsrStatus' => 9, 'UsrCountry' => 10, 'UsrCity' => 11, 'UsrLocation' => 12, 'UsrAddress' => 13, 'UsrPhone' => 14, 'UsrFax' => 15, 'UsrCellular' => 16, 'UsrZipCode' => 17, 'DepUid' => 18, 'UsrPosition' => 19, 'UsrResume' => 20, 'UsrBirthday' => 21, 'UsrRole' => 22, 'UsrReportsTo' => 23, 'UsrReplacedBy' => 24, 'UsrUx' => 25, 'UsrTotalInbox' => 26, 'UsrTotalDraft' => 27, 'UsrTotalCancelled' => 28, 'UsrTotalParticipated' => 29, 'UsrTotalPaused' => 30, 'UsrTotalCompleted' => 31, 'UsrTotalUnassigned' => 32, 'UsrCostByHour' => 33, 'UsrUnitCost' => 34, ),
BasePeer::TYPE_COLNAME => array (UsersPeer::USR_UID => 0, UsersPeer::USR_USERNAME => 1, UsersPeer::USR_PASSWORD => 2, UsersPeer::USR_FIRSTNAME => 3, UsersPeer::USR_LASTNAME => 4, UsersPeer::USR_EMAIL => 5, UsersPeer::USR_DUE_DATE => 6, UsersPeer::USR_CREATE_DATE => 7, UsersPeer::USR_UPDATE_DATE => 8, UsersPeer::USR_STATUS => 9, UsersPeer::USR_COUNTRY => 10, UsersPeer::USR_CITY => 11, UsersPeer::USR_LOCATION => 12, UsersPeer::USR_ADDRESS => 13, UsersPeer::USR_PHONE => 14, UsersPeer::USR_FAX => 15, UsersPeer::USR_CELLULAR => 16, UsersPeer::USR_ZIP_CODE => 17, UsersPeer::DEP_UID => 18, UsersPeer::USR_POSITION => 19, UsersPeer::USR_RESUME => 20, UsersPeer::USR_BIRTHDAY => 21, UsersPeer::USR_ROLE => 22, UsersPeer::USR_REPORTS_TO => 23, UsersPeer::USR_REPLACED_BY => 24, UsersPeer::USR_UX => 25, UsersPeer::USR_TOTAL_INBOX => 26, UsersPeer::USR_TOTAL_DRAFT => 27, UsersPeer::USR_TOTAL_CANCELLED => 28, UsersPeer::USR_TOTAL_PARTICIPATED => 29, UsersPeer::USR_TOTAL_PAUSED => 30, UsersPeer::USR_TOTAL_COMPLETED => 31, UsersPeer::USR_TOTAL_UNASSIGNED => 32, UsersPeer::USR_COST_BY_HOUR => 33, UsersPeer::USR_UNIT_COST => 34, ),
BasePeer::TYPE_FIELDNAME => array ('USR_UID' => 0, 'USR_USERNAME' => 1, 'USR_PASSWORD' => 2, 'USR_FIRSTNAME' => 3, 'USR_LASTNAME' => 4, 'USR_EMAIL' => 5, 'USR_DUE_DATE' => 6, 'USR_CREATE_DATE' => 7, 'USR_UPDATE_DATE' => 8, 'USR_STATUS' => 9, 'USR_COUNTRY' => 10, 'USR_CITY' => 11, 'USR_LOCATION' => 12, 'USR_ADDRESS' => 13, 'USR_PHONE' => 14, 'USR_FAX' => 15, 'USR_CELLULAR' => 16, 'USR_ZIP_CODE' => 17, 'DEP_UID' => 18, 'USR_POSITION' => 19, 'USR_RESUME' => 20, 'USR_BIRTHDAY' => 21, 'USR_ROLE' => 22, 'USR_REPORTS_TO' => 23, 'USR_REPLACED_BY' => 24, 'USR_UX' => 25, 'USR_TOTAL_INBOX' => 26, 'USR_TOTAL_DRAFT' => 27, 'USR_TOTAL_CANCELLED' => 28, 'USR_TOTAL_PARTICIPATED' => 29, 'USR_TOTAL_PAUSED' => 30, 'USR_TOTAL_COMPLETED' => 31, 'USR_TOTAL_UNASSIGNED' => 32, 'USR_COST_BY_HOUR' => 33, 'USR_UNIT_COST' => 34, ),
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, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, )
BasePeer::TYPE_PHPNAME => array ('UsrUid' => 0, 'UsrUsername' => 1, 'UsrPassword' => 2, 'UsrFirstname' => 3, 'UsrLastname' => 4, 'UsrEmail' => 5, 'UsrDueDate' => 6, 'UsrCreateDate' => 7, 'UsrUpdateDate' => 8, 'UsrStatus' => 9, 'UsrCountry' => 10, 'UsrCity' => 11, 'UsrLocation' => 12, 'UsrAddress' => 13, 'UsrPhone' => 14, 'UsrFax' => 15, 'UsrCellular' => 16, 'UsrZipCode' => 17, 'DepUid' => 18, 'UsrPosition' => 19, 'UsrResume' => 20, 'UsrBirthday' => 21, 'UsrRole' => 22, 'UsrReportsTo' => 23, 'UsrReplacedBy' => 24, 'UsrUx' => 25, 'UsrTotalInbox' => 26, 'UsrTotalDraft' => 27, 'UsrTotalCancelled' => 28, 'UsrTotalParticipated' => 29, 'UsrTotalPaused' => 30, 'UsrTotalCompleted' => 31, 'UsrTotalUnassigned' => 32, 'UsrCostByHour' => 33, 'UsrUnitCost' => 34, 'UsrBookmarkStartCases' => 35, ),
BasePeer::TYPE_COLNAME => array (UsersPeer::USR_UID => 0, UsersPeer::USR_USERNAME => 1, UsersPeer::USR_PASSWORD => 2, UsersPeer::USR_FIRSTNAME => 3, UsersPeer::USR_LASTNAME => 4, UsersPeer::USR_EMAIL => 5, UsersPeer::USR_DUE_DATE => 6, UsersPeer::USR_CREATE_DATE => 7, UsersPeer::USR_UPDATE_DATE => 8, UsersPeer::USR_STATUS => 9, UsersPeer::USR_COUNTRY => 10, UsersPeer::USR_CITY => 11, UsersPeer::USR_LOCATION => 12, UsersPeer::USR_ADDRESS => 13, UsersPeer::USR_PHONE => 14, UsersPeer::USR_FAX => 15, UsersPeer::USR_CELLULAR => 16, UsersPeer::USR_ZIP_CODE => 17, UsersPeer::DEP_UID => 18, UsersPeer::USR_POSITION => 19, UsersPeer::USR_RESUME => 20, UsersPeer::USR_BIRTHDAY => 21, UsersPeer::USR_ROLE => 22, UsersPeer::USR_REPORTS_TO => 23, UsersPeer::USR_REPLACED_BY => 24, UsersPeer::USR_UX => 25, UsersPeer::USR_TOTAL_INBOX => 26, UsersPeer::USR_TOTAL_DRAFT => 27, UsersPeer::USR_TOTAL_CANCELLED => 28, UsersPeer::USR_TOTAL_PARTICIPATED => 29, UsersPeer::USR_TOTAL_PAUSED => 30, UsersPeer::USR_TOTAL_COMPLETED => 31, UsersPeer::USR_TOTAL_UNASSIGNED => 32, UsersPeer::USR_COST_BY_HOUR => 33, UsersPeer::USR_UNIT_COST => 34, UsersPeer::USR_BOOKMARK_START_CASES => 35, ),
BasePeer::TYPE_FIELDNAME => array ('USR_UID' => 0, 'USR_USERNAME' => 1, 'USR_PASSWORD' => 2, 'USR_FIRSTNAME' => 3, 'USR_LASTNAME' => 4, 'USR_EMAIL' => 5, 'USR_DUE_DATE' => 6, 'USR_CREATE_DATE' => 7, 'USR_UPDATE_DATE' => 8, 'USR_STATUS' => 9, 'USR_COUNTRY' => 10, 'USR_CITY' => 11, 'USR_LOCATION' => 12, 'USR_ADDRESS' => 13, 'USR_PHONE' => 14, 'USR_FAX' => 15, 'USR_CELLULAR' => 16, 'USR_ZIP_CODE' => 17, 'DEP_UID' => 18, 'USR_POSITION' => 19, 'USR_RESUME' => 20, 'USR_BIRTHDAY' => 21, 'USR_ROLE' => 22, 'USR_REPORTS_TO' => 23, 'USR_REPLACED_BY' => 24, 'USR_UX' => 25, 'USR_TOTAL_INBOX' => 26, 'USR_TOTAL_DRAFT' => 27, 'USR_TOTAL_CANCELLED' => 28, 'USR_TOTAL_PARTICIPATED' => 29, 'USR_TOTAL_PAUSED' => 30, 'USR_TOTAL_COMPLETED' => 31, 'USR_TOTAL_UNASSIGNED' => 32, 'USR_COST_BY_HOUR' => 33, 'USR_UNIT_COST' => 34, 'USR_BOOKMARK_START_CASES' => 35, ),
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, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, )
);
/**
@@ -334,6 +337,8 @@ abstract class BaseUsersPeer
$criteria->addSelectColumn(UsersPeer::USR_UNIT_COST);
$criteria->addSelectColumn(UsersPeer::USR_BOOKMARK_START_CASES);
}
const COUNT = 'COUNT(USERS.USR_UID)';

View File

@@ -1485,6 +1485,16 @@
<column name="USR_TOTAL_UNASSIGNED" type="INTEGER" default="0"/>
<column name="USR_COST_BY_HOUR" type="DECIMAL" size="7,2" required="false" default="0"/>
<column name="USR_UNIT_COST" type="VARCHAR" size="50" required="false" default=""/>
<column name="USR_BOOKMARK_START_CASES" type="LONGVARCHAR" required="false">
<vendor type="mysql">
<parameter name="Field" value="USR_BOOKMARK_START_CASES"/>
<parameter name="Type" value="MEDIUMTEXT"/>
<parameter name="Null" value="YES"/>
<parameter name="Key" value=""/>
<parameter name="Default" value=""/>
<parameter name="Extra" value=""/>
</vendor>
</column>
<validator column="USR_STATUS">
<rule name="validValues" value="ACTIVE|INACTIVE|VACATION|CLOSED" message="Please select a valid type."/>
<rule name="required" message="Type is required."/>

View File

@@ -0,0 +1,115 @@
<?php
/**
* pmGmail controller
* @inherits Controller
*
* @access public
*/
class pmGmail extends Controller
{
public function saveConfigPmGmail($httpData)
{
G::LoadClass( "pmGoogleApi" );
$pmGoogle = new PMGoogleApi();
$result = new StdClass();
$result->success = true;
if (!empty($httpData->status_pmgmail)) {
$httpData->status_pmgmail = $httpData->status_pmgmail == 1 ? true : false;
$pmGoogle->setStatusService($httpData->status_pmgmail);
$message = G::LoadTranslation('ID_ENABLE_PMGMAIL') . ': ' . ($httpData->status_pmgmail ? G::LoadTranslation('ID_ENABLE') : G::LoadTranslation('ID_DISABLE'));
if (!empty($httpData->email_service_account)) {
$pmGoogle->setServiceAccountEmail($httpData->email_service_account);
$message .= ', ' . G::LoadTranslation('ID_PMG_EMAIL') . ': ' . $httpData->email_service_account;
}
if (!empty($_FILES)) {
if ($_FILES['file_p12']['error'] != 1) {
if ($_FILES['file_p12']['tmp_name'] != '') {
G::uploadFile($_FILES['file_p12']['tmp_name'], PATH_DATA_SITE, $_FILES['file_p12']['name']);
$pmGoogle->setServiceAccountP12($_FILES['file_p12']['name']);
$message .= ', ' . G::LoadTranslation('ID_PMG_FILE') . ': ' . $_FILES['file_p12']['name'];
}
} else {
$result->success = false;
$result->fileError = true;
print(G::json_encode($result));
die();
}
}
} else {
$pmGoogle->setStatusService(false);
$message = G::LoadTranslation('ID_ENABLE_PMGMAIL') . ': ' . G::LoadTranslation('ID_DISABLE');
}
G::auditLog("Update Settings Gmail", $message);
print(G::json_encode($result));
}
public function formPMGmail()
{
try {
$this->includeExtJS('admin/pmGmail');
if (!empty ($_SESSION['__PMGMAIL_ERROR__'])) {
$this->setJSVar('__PMGMAIL_ERROR__', $_SESSION['__PMGMAIL_ERROR__']);
unset($_SESSION['__PMGMAIL_ERROR__']);
}
G::LoadClass( "pmGoogleApi" );
$pmGoogle = new PMGoogleApi();
$accountEmail = $pmGoogle->getServiceAccountEmail();
$fileP12 = $pmGoogle->getServiceAccountP12();
$enablePMGmail = $pmGoogle->getStatusService();
$this->setJSVar('accountEmail', $accountEmail);
$this->setJSVar('fileP12', $fileP12);
$this->setJSVar('enablePMGmail', $enablePMGmail);
G::RenderPage('publish', 'extJs');
} catch (Exception $error) {
$_SESSION['__PMGMAIL_ERROR__'] = $error->getMessage();
die();
}
}
public function testConfigPmGmail($httpData)
{
G::LoadClass( "pmGoogleApi" );
$pmGoogle = new PMGoogleApi();
$emailServiceAccount = empty($httpData->email_service_account) ? $pmGoogle->getServiceAccountEmail() : $httpData->email_service_account;
$pathServiceAccountP12 = empty($_FILES['file_p12']['tmp_name']) ? PATH_DATA_SITE . $pmGoogle->getserviceAccountP12() : $_FILES['file_p12']['tmp_name'];
print(G::json_encode($pmGoogle->testService($emailServiceAccount, $pathServiceAccountP12)));
}
public function testUserGmail()
{
$criteria = new Criteria();
$criteria->clearSelectColumns();
$criteria->addSelectColumn('COUNT(*) AS NUM_EMAIL');
$criteria->addSelectColumn(UsersPeer::USR_UID);
$criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME);
$criteria->addSelectColumn(UsersPeer::USR_LASTNAME);
$criteria->addSelectColumn(UsersPeer::USR_EMAIL);
$criteria->addGroupByColumn(UsersPeer::USR_EMAIL);
$rs = UsersPeer::doSelectRS($criteria);
$rs->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$userRepeat = array();
while ($rs->next()) {
$row = $rs->getRow();
if ($row['NUM_EMAIL'] > 1) {
$userRepeat[] = array(
'USR_UID' => $row['USR_UID'],
'FULL_NAME' => $row['USR_FIRSTNAME'] . ' ' . $row['USR_LASTNAME'],
'EMAIL' => $row['USR_EMAIL']
);
}
}
print(G::json_encode($userRepeat));
}
}

View File

@@ -715,6 +715,7 @@ CREATE TABLE `USERS`
`USR_TOTAL_UNASSIGNED` INTEGER default 0,
`USR_COST_BY_HOUR` DECIMAL(7,2) default 0,
`USR_UNIT_COST` VARCHAR(50) default '',
`USR_BOOKMARK_START_CASES` MEDIUMTEXT,
PRIMARY KEY (`USR_UID`)
)ENGINE=InnoDB DEFAULT CHARSET='utf8' COMMENT='Users';
#-----------------------------------------------------------------------------

View File

@@ -70,9 +70,12 @@ if ($RBAC->userCanAccess('PM_SETUP') == 1) {
$G_TMP_MENU->AddIdRawOption('DASHBOARD', '../dashboard/dashletsList', ucfirst(G::LoadTranslation('ID_DASHBOARD')), '', '', 'settings');
/*----------------------------------********---------------------------------*/
if ($licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=')) {
if ($licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjBsZEJ6dnpJa3dTeWVLVT0=')) {
$G_TMP_MENU->AddIdRawOption('STRATEGIC_DASHBOARD', '../strategicDashboard/dashboardList', ucfirst(G::LoadTranslation('ID_STRATEGIC_DASHBOARD')), '', '', 'settings');
}
if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) {
$G_TMP_MENU->AddIdRawOption('PMGMAIL', '../pmGmail/formPMGmail', ucfirst(G::LoadTranslation('ID_PMGMAIL')), '', '', 'settings');
}
/*----------------------------------********---------------------------------*/

View File

@@ -2288,4 +2288,134 @@ class Cases
throw $e;
}
}
/**
* Get process list for start case
*
* @param string $usrUid id of user
* @param string $typeView type of view
*
* return array Return an array with process list that the user can start.
*/
public function getCasesListStarCase($usrUid, $typeView)
{
try {
Validator::usrUid($usrUid, '$usr_uid');
$case = new \Cases();
$response = $case->getProcessListStartCase($usrUid, $typeView);
return $response;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
/**
* Get process list bookmark for start case
*
* @param string $usrUid id of user
* @param string $typeView type of view
*
* return array Return an array with process list that the user can start.
*/
public function getCasesListBookmarkStarCase($usrUid, $typeView)
{
try {
Validator::usrUid($usrUid, '$usr_uid');
$user = new \Users();
$fields = $user->load($usrUid);
$bookmark = empty($fields['USR_BOOKMARK_START_CASES']) ? array() : unserialize($fields['USR_BOOKMARK_START_CASES']);
//Getting group id and adding the user id
$group = new \Groups();
$groups = $group->getActiveGroupsForAnUser($usrUid);
$groups[] = $usrUid;
$c = new \Criteria();
$c->clearSelectColumns();
$c->addSelectColumn(\TaskPeer::TAS_UID);
$c->addSelectColumn(\TaskPeer::PRO_UID);
$c->addJoin(\TaskPeer::PRO_UID, \ProcessPeer::PRO_UID, \Criteria::LEFT_JOIN);
$c->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN);
$c->add(\ProcessPeer::PRO_STATUS, 'ACTIVE');
$c->add(\TaskPeer::TAS_START, 'TRUE');
$c->add(\TaskUserPeer::USR_UID, $groups, \Criteria::IN);
$c->add(\TaskPeer::TAS_UID, $bookmark, \Criteria::IN);
$c->addAsColumn('TAS_TITLE', 'C1.CON_VALUE');
$c->addAlias("C1", 'CONTENT');
$tasTitleConds = array();
$tasTitleConds[] = array(\TaskPeer::TAS_UID, 'C1.CON_ID');
$tasTitleConds[] = array(
'C1.CON_CATEGORY',
\DBAdapter::getStringDelimiter() . 'TAS_TITLE' . \DBAdapter::getStringDelimiter()
);
$tasTitleConds[] = array(
'C1.CON_LANG',
\DBAdapter::getStringDelimiter() . SYS_LANG . \DBAdapter::getStringDelimiter()
);
$c->addJoinMC( $tasTitleConds, \Criteria::LEFT_JOIN );
$c->addAsColumn('PRO_TITLE', 'C2.CON_VALUE');
$c->addAlias("C2", 'CONTENT');
$proTitleConds = array();
$proTitleConds[] = array(\ProcessPeer::PRO_UID, 'C2.CON_ID');
$proTitleConds[] = array(
'C2.CON_CATEGORY',
\DBAdapter::getStringDelimiter() . 'PRO_TITLE' . \DBAdapter::getStringDelimiter()
);
$proTitleConds[] = array(
'C2.CON_LANG',
\DBAdapter::getStringDelimiter() . SYS_LANG . \DBAdapter::getStringDelimiter()
);
$c->addJoinMC( $proTitleConds, \Criteria::LEFT_JOIN );
if ($typeView == 'category') {
$c->addAsColumn('PRO_CATEGORY', 'PCS.PRO_CATEGORY');
$c->addAsColumn('CATEGORY_NAME', 'PCSCAT.CATEGORY_NAME');
$c->addAlias('PCS', 'PROCESS');
$c->addAlias('PCSCAT', 'PROCESS_CATEGORY');
$aConditions = array();
$aConditions[] = array(\TaskPeer::PRO_UID, 'PCS.PRO_UID');
$c->addJoinMC( $aConditions, \Criteria::LEFT_JOIN );
$aConditions = array();
$aConditions[] = array('PCS.PRO_CATEGORY', 'PCSCAT.CATEGORY_UID');
$c->addJoinMC( $aConditions, \Criteria::LEFT_JOIN );
}
$rs = \TaskPeer::doSelectRS($c);
$rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$processList = array();
while ($rs->next()) {
$row = $rs->getRow();
if ($typeView == 'category') {
$processList[] = array(
'tas_uid' => $row['TAS_UID'],
'pro_title' => $row['PRO_TITLE'] . '(' . $row['TAS_TITLE'] . ')',
'pro_uid' => $row['PRO_UID'],
'pro_category' => $row['PRO_CATEGORY'],
'category_name' => $row['CATEGORY_NAME']
);
} else {
$processList[] = array(
'tas_uid' => $row['TAS_UID'],
'pro_title' => $row['PRO_TITLE'] . '(' . $row['TAS_TITLE'] . ')',
'pro_uid' => $row['PRO_UID']
);
}
}
if (count($processList) == 0) {
$processList['success'] = 'failure';
$processList['message'] = G::LoadTranslation('ID_USER_PROCESS_NOT_START');
}
return $processList;
} catch (\Exception $e) {
throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()));
}
}
}

View File

@@ -1193,6 +1193,31 @@ class User
}
}
/**
* change Bookmarks of an user
*
* @access public
* @param $userUID
* @param $tasUid
* @param $type
* @return void
*/
public function updateBookmark($userUID, $tasUid, $type)
{
$this->userObj = new \Users();
$fields = $this->userObj->load($userUID);
$bookmark = empty($fields['USR_BOOKMARK_START_CASES']) ? array() : unserialize($fields['USR_BOOKMARK_START_CASES']);
$position = array_search($tasUid, $bookmark);
if ($type === 'INSERT' and $position === false) {
$bookmark[] = $tasUid;
} elseif ($type === 'DELETE' and $position !== false) {
unset($bookmark[$position]);
}
$fields['USR_BOOKMARK_START_CASES'] = serialize($bookmark);
$this->userObj->update($fields);
}
/**
* Check permission
*

View File

@@ -4,7 +4,6 @@ namespace ProcessMaker\Services\Api;
use \ProcessMaker\Services\Api;
use \Luracast\Restler\RestException;
/**
* Cases Api Controller
*
@@ -1045,5 +1044,52 @@ class Cases extends Api
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
}
/**
* Get process list for start case
*
* @url GET /start-cases
*
* @param string $type_view {@from path}
* @return array
*
*/
public function doGetCasesListStarCase(
$type_view = ''
) {
try {
$usr_uid = $this->getUserId();
$case = new \ProcessMaker\BusinessModel\Cases();
$response = $case->getCasesListStarCase($usr_uid, $type_view);
return $response;
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
/**
* Get process list bookmark for start case
*
* @url GET /bookmark-start-cases
*
* @param string $type_view {@from path}
* @return array
*
*/
public function doGetCasesListBookmarkStarCase(
$type_view = ''
) {
try {
$usr_uid = $this->getUserId();
$case = new \ProcessMaker\BusinessModel\Cases();
$response = $case->getCasesListBookmarkStarCase($usr_uid, $type_view);
return $response;
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
}

View File

@@ -137,5 +137,41 @@ class User extends Api
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
/**
* Save Bookmark start case
* @url POST /bookmark/:tas_uid
*
* @param string $tas_uid {@min 32}{@max 32}
*
*/
public function doPostBookmarkStartCase($tas_uid)
{
try {
$userLoggedUid = $this->getUserId();
$user = new \ProcessMaker\BusinessModel\User();
$user->updateBookmark($userLoggedUid, $tas_uid, 'INSERT');
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
/**
* Delete Bookmark start case
* @url DELETE /bookmark/:tas_uid
*
* @param string $tas_uid {@min 32}{@max 32}
*
*/
public function doDeleteBookmarkStartCase($tas_uid)
{
try {
$userLoggedUid = $this->getUserId();
$user = new \ProcessMaker\BusinessModel\User();
$user->updateBookmark($userLoggedUid, $tas_uid, 'DELETE');
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
}

View File

@@ -0,0 +1,315 @@
var saveButton;
var testButton;
var storeUsers;
Ext.onReady(function(){
Ext.QuickTips.init();
testButton = new Ext.Action({
text : _('ID_TEST_CONNECTION'),
disabled : !enablePMGmail,
handler : testSettings
});
saveButton = new Ext.Action({
text : _('ID_SAVE_SETTINGS'),
disabled : true,
handler : saveSettings
});
var configurationPMGmail = new Ext.form.FieldSet({
title: _('ID_PMGMAIL_SETTINGS'),
items: [
{
xtype: 'checkbox',
id: 'status_pmgmail',
name: 'status_pmgmail',
boxLabel: _('ID_ENABLE_PMGMAIL'),
value: 0,
inputValue: 1,
uncheckedValue: 0,
listeners : {
check : function(that, checked) {
changeSettings();
if (checked) {
Ext.getCmp('email_service_account').enable();
Ext.getCmp('status_pmgmail').enable();
Ext.getCmp('file_p12').enable();
} else {
Ext.MessageBox.confirm(
_('ID_CONFIRM'),
_('ID_PMGMAIL_DISABLE'),
function (btn, text) {
if (btn == "yes") {
Ext.getCmp('email_service_account').disable();
Ext.getCmp('file_p12').disable();
Ext.getCmp('listUsers').hide();
testButton.disable();
saveButton.disable();
saveSettings();
} else {
Ext.getCmp('status_pmgmail').enable();
Ext.getCmp('email_service_account').enable();
Ext.getCmp('file_p12').enable();
Ext.getCmp('status_pmgmail').setValue(1);
return false;
}
}
);
}
}
}
},
{
xtype : 'textfield',
id : 'email_service_account',
name : 'email_service_account',
fieldLabel : _('ID_PMG_EMAIL'),
width : 400,
allowBlank : false,
value : accountEmail,
disabled : !enablePMGmail,
listeners : {
change: function(){
changeSettings();
},
focus : function(tb, e) {
Ext.QuickTips.register({
target: tb,
title: _('ID_PMG_EMAIL'),
text: accountEmail
});
}
}
},
{
xtype : 'fileuploadfield',
id : 'file_p12',
emptyText : _('ID_PMG_SELECT_FILE'),
fieldLabel : _('ID_PMG_FILE'),
name : 'file_p12',
buttonText : '',
width : 400,
disabled : !enablePMGmail,
buttonCfg : {
iconCls : 'upload-icon'
},
listeners:{
change : function(){
changeSettings();
},
afterrender:function(cmp){
changeSettings();
cmp.fileInput.set({
accept:'*/p12'
});
}
},
regex : /(.)+((\.p12)(\w)?)$/i,
regexText : _('ID_PMG_TYPE_ACCEPT')
},
{
xtype : 'label',
labelAlign : 'right',
fieldLabel : '',
text : fileP12,
width : 400,
style : "padding-left:180px;"
}
]
});
var testPMGmail = new Ext.form.FieldSet({
id : 'testPMGmail',
title : _('ID_TEST_CONNECTION'),
hidden : true,
items : [
{
id : 'currentUserName',
xtype : 'label',
labelAlign : 'right',
fieldLabel : _('ID_CURRENT_USER'),
text : '',
width : 400
},
{
id : 'rootFolderId',
xtype : 'label',
labelAlign : 'right',
fieldLabel : _('ID_ROOT_FOLDER'),
text : '',
width : 400
},
{
id : 'quotaType',
xtype : 'label',
labelAlign : 'right',
fieldLabel : _('ID_QUOTA_TYPE'),
text : '',
width : 400
},
{
id : 'quotaBytesTotal',
xtype : 'label',
labelAlign : 'right',
fieldLabel : _('ID_QUOTA_TOTAL'),
text : '',
width : 400
},
{
id : 'quotaBytesUsed',
xtype : 'label',
labelAlign : 'right',
fieldLabel : _('ID_QUOTA_USED'),
text : '',
width : 400
},
{
id : 'responseGmailTest',
xtype : 'label',
labelAlign : 'right',
labelStyle : 'font-weight:bold;',
fieldLabel : _('SERVER_RESPONSE'),
text : '',
width : 400
}
]
});
storeUsers = new Ext.data.JsonStore({
url: '../pmGmail/testUserGmail',
fields: [
'USR_UID',
'FULL_NAME',
'EMAIL'
]
});
var listViewUsers = new Ext.list.ListView({
store: storeUsers,
singleSelect: true,
emptyText: _('ID_GRID_PAGE_NO_USERS_MESSAGE'),
reserveScrollOffset: true,
columns: [
{
header: _('ID_FULL_NAME'),
width:.4,
dataIndex: 'FULL_NAME'
},{
header: _('ID_EMAIL'),
width:.4,
dataIndex: 'EMAIL'
}]
});
var listUsers = new Ext.form.FieldSet({
id : 'listUsers',
title : _('ID_USERS'),
hidden : true,
items : [
listViewUsers
]
});
var formPMGmail = new Ext.FormPanel({
title : '&nbsp',
id :'formPMGmail',
labelWidth : 170,
labelAlign :'right',
autoScroll : true,
fileUpload : true,
bodyStyle :'padding:5px',
waitMsgTarget : true,
frame : true,
defaults: {
allowBlank: false,
msgTarget: 'side',
align:'center'
},
items:[ configurationPMGmail, testPMGmail, listUsers ],
buttons : [testButton, saveButton]
});
var viewport = new Ext.Viewport({
layout: 'fit',
autoScroll: false,
items: [
formPMGmail
]
});
Ext.getCmp('status_pmgmail').checked = enablePMGmail;
Ext.getCmp('status_pmgmail').setValue(enablePMGmail);
});
var testSettings = function ()
{
storeUsers.reload();
Ext.getCmp('testPMGmail').hide();
Ext.getCmp('listUsers').hide();
Ext.getCmp('currentUserName').setText('');
Ext.getCmp('rootFolderId').setText('');
Ext.getCmp('quotaType').setText('');
Ext.getCmp('quotaBytesTotal').setText('');
Ext.getCmp('quotaBytesUsed').setText('');
Ext.getCmp('responseGmailTest').setText('');
Ext.getCmp('responseGmailTest').container.dom.style.color = 'red';
Ext.getCmp('formPMGmail').getForm().submit( {
url : '../pmGmail/testConfigPmGmail',
waitMsg : _('ID_TEST_CONNECTION'),
waitTitle : "&nbsp;",
timeout : 36000,
success : function(obj, resp) {
Ext.getCmp('testPMGmail').show();
Ext.getCmp('listUsers').show();
var response = Ext.decode(resp.response.responseText);
Ext.getCmp('currentUserName').setText(response.currentUserName);
Ext.getCmp('rootFolderId').setText(response.rootFolderId);
Ext.getCmp('quotaType').setText(response.quotaType);
Ext.getCmp('quotaBytesTotal').setText(response.quotaBytesTotal);
Ext.getCmp('quotaBytesUsed').setText(response.quotaBytesUsed);
Ext.getCmp('responseGmailTest').setText(response.responseGmailTest);
Ext.getCmp('responseGmailTest').container.dom.style.color = 'green';
if (storeUsers.data.length == 0) {
saveButton.enable();
}
},
failure: function(obj, resp) {
Ext.getCmp('testPMGmail').show();
Ext.getCmp('listUsers').hide();
saveButton.disable();
Ext.getCmp('responseGmailTest').setText(resp.result.responseGmailTest);
}
});
};
var saveSettings = function ()
{
Ext.getCmp('formPMGmail').getForm().submit( {
url : '../pmGmail/saveConfigPmGmail',
waitMsg : _('ID_SAVING_PROCESS'),
waitTitle : "&nbsp;",
timeout : 36000,
success : function(obj, resp) {
var response = Ext.decode(resp.response.responseText);
parent.PMExt.notify(_('ID_INFO'),_('ID_SAVED_SUCCESSFULLY'));
location.href = '../pmGmail/formPMGmail';
},
failure: function(obj, resp) {
PMExt.error( _('ID_ERROR'), resp.result.message);
}
});
};
var changeSettings = function()
{
Ext.getCmp('testPMGmail').hide();
Ext.getCmp('listUsers').hide();
if (Ext.getCmp('status_pmgmail').checked) {
testButton.enable();
}
saveButton.disable();
};