Merge branch 'master' of bitbucket.org:colosa/processmaker

This commit is contained in:
Wendy Nestor
2014-06-03 09:04:44 -04:00
17 changed files with 643 additions and 123 deletions

View File

@@ -14,11 +14,11 @@ ProcessMaker "Michelangelo"
Overview
--------
ProcessMaker is an open source, workflow management software suite, which
ProcessMaker is an open source, workflow management software suite, which
includes tools to automate your workflow, design forms, create documents, assign
roles and users, create routing rules, and map an individual process quickly and
easily. It's relatively lightweight and doesn't require any kind of installation
on the client computer. This file describes the requirements and installation
on the client computer. This file describes the requirements and installation
steps for the server.
License
@@ -32,3 +32,4 @@ http://www.affero.org/oagpl.html
For further information visit:
http://www.processmaker.com/

View File

@@ -192,7 +192,7 @@ def getVersion(path)
version = `rake version`
end
return version.strip
return /([0-9\.]{5}+)/.match(version)
end

View File

@@ -293,15 +293,13 @@ class Publisher
$oFieldCondition = new FieldCondition();
//This dynaform has show/hide field conditions
$dynUid = '';
if (isset($_SESSION['CURRENT_DYN_UID']) && $_SESSION['CURRENT_DYN_UID'] != '') {
$dynUid = $_SESSION['CURRENT_DYN_UID'];
$ConditionalShowHideRoutines = $oFieldCondition->getConditionScript($_SESSION["CURRENT_DYN_UID"]); //lsl
} else {
if (isset($_SESSION['CONDITION_DYN_UID']) && $_SESSION['CONDITION_DYN_UID'] != '') {
$dynUid = $_SESSION['CONDITION_DYN_UID'];
$ConditionalShowHideRoutines = $oFieldCondition->getConditionScript($_SESSION["CONDITION_DYN_UID"]); //lsl
}
}
$ConditionalShowHideRoutines = $oFieldCondition->getConditionScript($dynUid);
}
}

View File

@@ -3178,17 +3178,12 @@ class XmlForm_Field_Checkbox extends XmlForm_Field
$checked = (isset( $value ) && ($value == $this->value)) ? 'checked' : '';
if ($this->labelOnRight) {
$html = '';
$html = "<input id='form[" . $this->name . "]' value='{$this->value}' " . $this->NSFieldType() . " name='form[" . $this->name . "]' type='checkbox' $checked $readOnly disabled >
$html = "<input value='{$this->value}' " . $this->NSFieldType() . " type='checkbox' $checked $readOnly disabled />
<span class='FormCheck'>" . $this->label . '</span></input>';
} else {
$html = "<input id='form[" . $this->name . "]' value='{$this->value}' " . $this->NSFieldType() . " name='form[" . $this->name . "]' type='checkbox' $checked $readOnly disabled/>";
$html = "<input value='{$this->value}' " . $this->NSFieldType() . " type='checkbox' $checked $readOnly disabled />";
}
$html .= "<input id='form[" . $this->name . "]' value='{$value}' name='form[" . $this->name . "]' type='hidden' />";
// if($this->hint){
// $html .= '<a href="#" onmouseout="hideTooltip()" onmouseover="showTooltip(event, \''.$this->hint.'\');return false;">
// <image src="/images/help4.gif" width="15" height="15" border="0"/>
// </a>';
// }
return $html;
}
}
@@ -3360,11 +3355,6 @@ class XmlForm_Field_Submit extends XmlForm_Field
$sLinkNextStep = 'window.location=("casesSaveDataView?UID=' . $_SESSION['CURRENT_DYN_UID'] . '");';
$html = '<input style="' . $this->style . '" class="module_app_button___gray ' . $this->className . '" id="form[' . $this->name . ']" ' . $this->NSFieldType() . ' name="form[' . $this->name . ']" type="button" value="' . G::LoadTranslation( 'ID_CONTINUE' ) . '" onclick="' . htmlentities( $sLinkNextStep, ENT_COMPAT, 'utf-8' ) . '" />';
}
$html .= '<input ';
$html .= 'id="form[' . $this->name . ']" ';
$html .= 'name="form[' . $this->name . ']" ';
$html .= 'type="hidden" value="' . $this->htmlentities( $this->label, ENT_QUOTES, 'utf-8' ) . '" />';
return $html;
} else {
return $this->htmlentities( $value, ENT_COMPAT, 'utf-8' );
@@ -3616,7 +3606,7 @@ class XmlForm_Field_Dropdown extends XmlForm_Field
$html = $html . "<option value=\"\"></option>";
}
if ($value !== $findValue) {
if ($value !== $findValue && $this->renderMode == 'view') {
$html .= "<option value=\"$value\" selected=\"selected\">$value</option>";
}

View File

@@ -588,7 +588,15 @@ abstract class ".$this->getClassname()." extends ".ClassTools::classname($this->
$script .= "
if (\$v !== null && !is_int(\$v)) {
\$ts = strtotime(\$v);
\$ts = strtotime(\$v);";
if ($col->getPhpDefaultValue() != 1) {
$script .= "
//Date/time accepts null values
if (\$v == '') {
\$ts = null;
}";
}
$script .="
if (\$ts === -1 || \$ts === false) {
throw new PropelException(\"Unable to parse date/time value for [$clo] from input: \" .
var_export(\$v, true));

View File

@@ -2843,8 +2843,9 @@ function PMFAddAttachmentToArray($arrayData, $index, $value, $suffix = " Copy({i
*
* It delete the mask a field.
*
* @name PMFAddAttachmentToArray
*
* @name PMFRemoveMask
* @label PMF Remove Mask
*
* @param string | $field | Value the field
* @param string | $separator | Separator of thousands (, or .)
* @param string | $currency | symbol of currency
@@ -2852,7 +2853,7 @@ function PMFAddAttachmentToArray($arrayData, $index, $value, $suffix = " Copy({i
*
*/
function PMRemoveMask ($field, $separator = '.', $currency = '')
function PMFRemoveMask ($field, $separator = '.', $currency = '')
{
$sep = array();
if ( trim($currency) != '') {

View File

@@ -3125,7 +3125,6 @@ class wsBase
return $result;
}
if (empty( $userUid )) {
$result = new wsResponse( 100, G::LoadTranslation( "ID_REQUIRED_FIELD" ) . " userUid" );
@@ -3133,8 +3132,7 @@ class wsBase
return $result;
}
if (! empty( $unpauseDate )) {
if( strlen($unpauseDate) >=10 ){
if (! preg_match( "/^\d{4}-\d{2}-\d{2}| \d{2}:\d{2}:\d{2}$/", $unpauseDate )) {
$result = new wsResponse( 100, G::LoadTranslation( "ID_INVALID_DATA" ) . " $unpauseDate" );
@@ -3142,8 +3140,9 @@ class wsBase
return $result;
}
} else {
$unpauseDate = null;
}
$case = new Cases();
$case->pauseCase( $caseUid, $delIndex, $userUid, $unpauseDate );
@@ -3154,7 +3153,6 @@ class wsBase
);
$g->sessionVarRestore();
return $result;
} catch (Exception $e) {
$result = new wsResponse(100, $e->getMessage());

View File

@@ -20,12 +20,6 @@ if (! isset ($_REQUEST ['action'])) {
print G::json_encode ($res);
die ();
}
if (! function_exists ($_REQUEST['action']) || !G::isUserFunction($_REQUEST['action'])) {
$res ['success'] = false;
$res ['message'] = 'The requested action does not exist';
print G::json_encode ($res);
die ();
}
if (($_REQUEST['action']) != 'rename') {
$functionName = $_REQUEST ['action'];
@@ -48,6 +42,12 @@ if (($_REQUEST['action']) != 'rename') {
renameFolder ($oldname, $newname, $uid);
}
if (! function_exists ($_REQUEST['action']) || !G::isUserFunction($_REQUEST['action'])) {
$res ['success'] = false;
$res ['message'] = 'The requested action does not exist';
print G::json_encode ($res);
die ();
}
/////////////////////////////////////////////
function renameFolder($oldname, $newname, $uid)

View File

@@ -1540,6 +1540,15 @@ class Cases
$oCriteria->addSelectColumn(\ContentPeer::CON_VALUE);
$oCriteria->addSelectColumn(\TaskPeer::TAS_START);
$oCriteria->addSelectColumn(\TaskPeer::TAS_TYPE);
$oCriteria->addSelectColumn(\TaskPeer::TAS_ASSIGN_TYPE);
$oCriteria->addSelectColumn(\TaskPeer::TAS_ASSIGN_LOCATION);
$oCriteria->addSelectColumn(\TaskPeer::TAS_ASSIGN_LOCATION_ADHOC);
$oCriteria->addSelectColumn(\TaskPeer::TAS_LAST_ASSIGNED);
$oCriteria->addSelectColumn(\TaskPeer::TAS_START);
$oCriteria->addSelectColumn(\TaskPeer::TAS_TO_LAST_USER);
$oCriteria->addSelectColumn(\TaskPeer::TAS_DERIVATION);
$aConditions = array();
$aConditions[] = array(0 => \TaskPeer::TAS_UID, 1 => \ContentPeer::CON_ID);
$aConditions[] = array(0 => \ContentPeer::CON_CATEGORY, 1 => \DBAdapter::getStringDelimiter() . 'TAS_TITLE' . \DBAdapter::getStringDelimiter() );
@@ -1584,6 +1593,15 @@ class Cases
$oTask->tas_title = htmlentities($aRow1['CON_VALUE'], ENT_QUOTES, 'UTF-8');
}
}
$oTask->tas_assign_type = $aRow1['TAS_ASSIGN_TYPE'];
$oTask->tas_assign_location = $aRow1['TAS_ASSIGN_LOCATION'];
$oTask->tas_assign_location_adhoc = $aRow1['TAS_ASSIGN_LOCATION_ADHOC'];
$oTask->tas_last_assigned = $aRow1['TAS_LAST_ASSIGNED'];
$oTask->tas_start = $aRow1['TAS_START'];
$oTask->tas_to_last_user = $aRow1['TAS_TO_LAST_USER'];
$oTask->tas_derivation = $aRow1['TAS_DERIVATION'];
$oTask->routing = new \StdClass();
$oTask->routing->rou_type = '';
$oTask->routing->to = array();
@@ -1609,30 +1627,8 @@ class Cases
$oDataset2 = \AppDelegationPeer::doSelectRS($oCriteria);
$oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$oDataset2->next();
while ($aRow2 = $oDataset2->getRow()) {
switch ($aRow2['ROU_TYPE']) {
case 'SEQUENTIAL':
$aRow2['ROU_TYPE'] = 0;
break;
case 'SELECT':
$aRow2['ROU_TYPE'] = 1;
break;
case 'EVALUATE':
$aRow2['ROU_TYPE'] = 2;
break;
case 'PARALLEL':
$aRow2['ROU_TYPE'] = 3;
break;
case 'PARALLEL-BY-EVALUATION':
$aRow2['ROU_TYPE'] = 4;
break;
case 'SEC-JOIN':
$aRow2['ROU_TYPE'] = 5;
break;
case 'DISCRIMINATOR':
$aRow2['ROU_TYPE'] = 8;
break;
}
$iDiff = strtotime($aRow2['DEL_FINISH_DATE']) - strtotime($aRow2['DEL_INIT_DATE']);
$oTo = new \StdClass();
$oTo->rou_next_task = $aRow2['ROU_NEXT_TASK'];
@@ -1673,22 +1669,22 @@ class Cases
$aRow2['FINISH'] = '';
}
if (empty($aRow2["FINISH"]) && $aRow1["TAS_UID"] == $sTask) {
$oTask->color = "#FF0000"; //Red
$oTask->status = G::LoadTranslation( 'ID_TASK_IN_PROGRESS' );
} else {
if (!empty($aRow2["FINISH"])) {
$oTask->color = "#006633"; //Green
$oTask->status = G::LoadTranslation( 'ID_COMPLETED_TASK' );
} else {
if ($oTask->routing->rou_type != 5) {
if ($oTask->routing->rou_type != 'SEC-JOIN') {
if ($aRow2["CANT"] != 0) {
$oTask->color = "#FF0000"; //Red
$oTask->status = G::LoadTranslation( 'ID_TASK_IN_PROGRESS' );
} else {
$oTask->color = "#939598"; //Gray
$oTask->status = G::LoadTranslation( 'ID_PENDING_TASK' );
}
} else {
if ($aRow3) {
$oTask->color = "#FF0000"; //Red
$oTask->status = G::LoadTranslation( 'ID_TASK_IN_PROGRESS' );
} else {
$oTask->color = "#939598"; //Gray
$oTask->status = G::LoadTranslation( 'ID_PENDING_TASK' );
}
}
}
@@ -1717,19 +1713,19 @@ class Cases
$aRow2['FINISH'] = '';
}
if (empty($aRow2["FINISH"]) && $aRow1["TAS_UID"] == $sTask) {
$oTask->color = "#FF0000"; //Red
$oTask->status = G::LoadTranslation( 'ID_TASK_IN_PROGRESS' );
} else {
if (!empty($aRow2["FINISH"])) {
$oTask->color = "#006633"; //Green
$oTask->status = G::LoadTranslation( 'ID_COMPLETED_TASK' );
} else {
if ($oTask->routing->rou_type != 5) {
if ($oTask->routing->rou_type != 'SEC-JOIN') {
if ($aRow2["CANT"] != 0) {
$oTask->color = "#FF0000"; //Red
$oTask->status = G::LoadTranslation( 'ID_TASK_IN_PROGRESS' );
} else {
$oTask->color = "#939598"; //Gray
$oTask->status = G::LoadTranslation( 'ID_PENDING_TASK' );
}
} else {
$oTask->color = "#FF9900"; //Yellow
$oTask->status = G::LoadTranslation( 'ID_PARALLEL_TASK' );
}
}
}
@@ -1743,4 +1739,4 @@ class Cases
throw $e;
}
}
}
}

View File

@@ -483,6 +483,27 @@ class Process
}
}
/**
* Verify if does not exist the Permission in table PERMISSIONS (Database RBAC)
*
* @param string $permissionUid Unique id of Permission
* @param string $fieldNameForException Field name for the exception
*
* return void Throw exception if does not exist the Permission in table PERMISSIONS
*/
public function throwExceptionIfNotExistsPermission($permissionUid, $fieldNameForException)
{
try {
$obj = \PermissionsPeer::retrieveByPK($permissionUid);
if (is_null($obj)) {
throw new \Exception(\G::LoadTranslation("ID_PERMISSION_DOES_NOT_EXIST", array($fieldNameForException, $permissionUid)));
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Update Process
*

View File

@@ -355,6 +355,10 @@ class Role
//Verify data
$this->throwExceptionIfNotExistsRole($roleUid, $this->arrayFieldNameForException["roleUid"]);
if ($roleUid == "00000000000000000000000000000002") {
throw new \Exception(\G::LoadTranslation("ID_ROLES_MSG"));
}
$this->throwExceptionIfDataIsInvalid($roleUid, $arrayData);
//Update

View File

@@ -0,0 +1,405 @@
<?php
namespace ProcessMaker\BusinessModel\Role;
class Permission
{
private $arrayFieldDefinition = array(
"ROL_UID" => array("type" => "string", "required" => false, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "roleUid"),
"PER_UID" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array(), "fieldNameAux" => "permissionUid")
);
private $formatFieldNameInUppercase = true;
private $arrayFieldNameForException = array(
"filter" => "FILTER",
"start" => "START",
"limit" => "LIMIT"
);
/**
* Constructor of the class
*
* return void
*/
public function __construct()
{
try {
foreach ($this->arrayFieldDefinition as $key => $value) {
$this->arrayFieldNameForException[$value["fieldNameAux"]] = $key;
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Set the format of the fields name (uppercase, lowercase)
*
* @param bool $flag Value that set the format
*
* return void
*/
public function setFormatFieldNameInUppercase($flag)
{
try {
$this->formatFieldNameInUppercase = $flag;
$this->setArrayFieldNameForException($this->arrayFieldNameForException);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Set exception messages for fields
*
* @param array $arrayData Data with the fields
*
* return void
*/
public function setArrayFieldNameForException(array $arrayData)
{
try {
foreach ($arrayData as $key => $value) {
$this->arrayFieldNameForException[$key] = $this->getFieldNameByFormatFieldName($value);
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get the name of the field according to the format
*
* @param string $fieldName Field name
*
* return string Return the field name according the format
*/
public function getFieldNameByFormatFieldName($fieldName)
{
try {
return ($this->formatFieldNameInUppercase)? strtoupper($fieldName) : strtolower($fieldName);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Verify if it's assigned the Permission to Role
*
* @param string $roleUid Unique id of Role
* @param string $permissionUid Unique id of Permission
* @param string $fieldNameForException Field name for the exception
*
* return void Throw exception if it's assigned the Permission to Role
*/
public function throwExceptionIfItsAssignedPermissionToRole($roleUid, $permissionUid, $fieldNameForException)
{
try {
$obj = \RolesPermissionsPeer::retrieveByPK($roleUid, $permissionUid);
if (!is_null($obj)) {
throw new \Exception(\G::LoadTranslation("ID_ROLE_PERMISSION_IS_ALREADY_ASSIGNED", array($fieldNameForException, $permissionUid)));
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Verify if not it's assigned the Permission to Role
*
* @param string $roleUid Unique id of Role
* @param string $permissionUid Unique id of Permission
* @param string $fieldNameForException Field name for the exception
*
* return void Throw exception if not it's assigned the Permission to Role
*/
public function throwExceptionIfNotItsAssignedPermissionToRole($roleUid, $permissionUid, $fieldNameForException)
{
try {
$obj = \RolesPermissionsPeer::retrieveByPK($roleUid, $permissionUid);
if (is_null($obj)) {
throw new \Exception(\G::LoadTranslation("ID_ROLE_PERMISSION_IS_NOT_ASSIGNED", array($fieldNameForException, $permissionUid)));
}
} catch (\Exception $e) {
throw $e;
}
}
/**
* Assign Permission to Role
*
* @param string $roleUid Unique id of Role
* @param array $arrayData Data
*
* return array Return data of the Permission assigned to Role
*/
public function create($roleUid, array $arrayData)
{
try {
//Verify data
$process = new \ProcessMaker\BusinessModel\Process();
$validator = new \ProcessMaker\BusinessModel\Validator();
$validator->throwExceptionIfDataIsNotArray($arrayData, "\$arrayData");
$validator->throwExceptionIfDataIsEmpty($arrayData, "\$arrayData");
//Set data
$arrayData = array_change_key_case($arrayData, CASE_UPPER);
unset($arrayData["ROL_UID"]);
//Verify data
$role = new \ProcessMaker\BusinessModel\Role();
$role->throwExceptionIfNotExistsRole($roleUid, $this->arrayFieldNameForException["roleUid"]);
$process->throwExceptionIfDataNotMetFieldDefinition($arrayData, $this->arrayFieldDefinition, $this->arrayFieldNameForException, true);
$process->throwExceptionIfNotExistsPermission($arrayData["PER_UID"], $this->arrayFieldNameForException["permissionUid"]);
$this->throwExceptionIfItsAssignedPermissionToRole($roleUid, $arrayData["PER_UID"], $this->arrayFieldNameForException["permissionUid"]);
if ($roleUid == "00000000000000000000000000000002") {
throw new \Exception(\G::LoadTranslation("ID_ROLE_PERMISSION_ROLE_PERMISSIONS_CAN_NOT_BE_CHANGED", array("PROCESSMAKER_ADMIN")));
}
//Create
$role = new \Roles();
$arrayData = array_merge(array("ROL_UID" => $roleUid), $arrayData);
$role->assignPermissionRole($arrayData);
//Return
if (!$this->formatFieldNameInUppercase) {
$arrayData = array_change_key_case($arrayData, CASE_LOWER);
}
return $arrayData;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Unassign Permission of the Role
*
* @param string $roleUid Unique id of Role
* @param string $permissionUid Unique id of Permission
*
* return void
*/
public function delete($roleUid, $permissionUid)
{
try {
//Verify data
$process = new \ProcessMaker\BusinessModel\Process();
$role = new \ProcessMaker\BusinessModel\Role();
$role->throwExceptionIfNotExistsRole($roleUid, $this->arrayFieldNameForException["roleUid"]);
$process->throwExceptionIfNotExistsPermission($permissionUid, $this->arrayFieldNameForException["permissionUid"]);
$this->throwExceptionIfNotItsAssignedPermissionToRole($roleUid, $permissionUid, $this->arrayFieldNameForException["permissionUid"]);
if ($roleUid == "00000000000000000000000000000002") {
throw new \Exception(\G::LoadTranslation("ID_ROLE_PERMISSION_ROLE_PERMISSIONS_CAN_NOT_BE_CHANGED", array("PROCESSMAKER_ADMIN")));
}
//Delete
$role = new \Roles();
$role->deletePermissionRole($roleUid, $permissionUid);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get criteria for Permission
*
* @param string $roleUid Unique id of Role
* @param array $arrayPermissionUidExclude Unique id of Permissions to exclude
*
* return object
*/
public function getPermissionCriteria($roleUid, array $arrayPermissionUidExclude = null)
{
try {
$criteria = new \Criteria("rbac");
$criteria->addSelectColumn(\PermissionsPeer::PER_UID);
$criteria->addSelectColumn(\PermissionsPeer::PER_CODE);
if ($roleUid != "") {
$criteria->addJoin(\RolesPermissionsPeer::PER_UID, \PermissionsPeer::PER_UID, \Criteria::LEFT_JOIN);
$criteria->add(\RolesPermissionsPeer::ROL_UID, $roleUid, \Criteria::EQUAL);
}
$criteria->add(\PermissionsPeer::PER_STATUS, 1, \Criteria::EQUAL);
if (!is_null($arrayPermissionUidExclude) && is_array($arrayPermissionUidExclude)) {
$criteria->add(\PermissionsPeer::PER_UID, $arrayPermissionUidExclude, \Criteria::NOT_IN);
}
return $criteria;
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get data of a Permission from a record
*
* @param array $record Record
*
* return array Return an array with data Permission
*/
public function getPermissionDataFromRecord(array $record)
{
try {
return array(
$this->getFieldNameByFormatFieldName("PER_UID") => $record["PER_UID"],
$this->getFieldNameByFormatFieldName("PER_CODE") => $record["PER_CODE"],
$this->getFieldNameByFormatFieldName("PER_NAME") => $record["PER_NAME"]
);
} catch (\Exception $e) {
throw $e;
}
}
/**
* Get all Permissions of a Role
*
* @param string $roleUid Unique id of Role
* @param string $option Option (PERMISSIONS, AVAILABLE-PERMISSIONS)
* @param array $arrayFilterData Data of the filters
* @param string $sortField Field name to sort
* @param string $sortDir Direction of sorting (ASC, DESC)
* @param int $start Start
* @param int $limit Limit
*
* return array Return an array with all Permissions of a Role
*/
public function getPermissions($roleUid, $option, array $arrayFilterData = null, $sortField = null, $sortDir = null, $start = null, $limit = null)
{
try {
$arrayPermission = array();
//Verify data
$process = new \ProcessMaker\BusinessModel\Process();
$role = new \ProcessMaker\BusinessModel\Role();
$role->throwExceptionIfNotExistsRole($roleUid, $this->arrayFieldNameForException["roleUid"]);
$process->throwExceptionIfDataNotMetFieldDefinition(
array("OPTION" => $option),
array("OPTION" => array("type" => "string", "required" => true, "empty" => false, "defaultValues" => array("PERMISSIONS", "AVAILABLE-PERMISSIONS"), "fieldNameAux" => "option")),
array("option" => "\$option"),
true
);
$process->throwExceptionIfDataNotMetPagerVarDefinition(array("start" => $start, "limit" => $limit), $this->arrayFieldNameForException);
//Get data
if (!is_null($limit) && $limit . "" == "0") {
return $arrayPermission;
}
//Set variables
$rolePermission = new \RolesPermissions();
//SQL
switch ($option) {
case "PERMISSIONS":
//Criteria
$criteria = $this->getPermissionCriteria($roleUid);
break;
case "AVAILABLE-PERMISSIONS":
//Get Uids
$arrayUid = array();
$criteria = $this->getPermissionCriteria($roleUid);
$rsCriteria = \PermissionsPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayUid[] = $row["PER_UID"];
}
//Criteria
$criteria = $this->getPermissionCriteria("", $arrayUid);
break;
}
if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData["filter"]) && trim($arrayFilterData["filter"]) != "") {
$criteria->add(\PermissionsPeer::PER_CODE, "%" . $arrayFilterData["filter"] . "%", \Criteria::LIKE);
}
//Number records total
$criteriaCount = clone $criteria;
$criteriaCount->clearSelectColumns();
$criteriaCount->addAsColumn("NUM_REC", "COUNT(" . \PermissionsPeer::PER_UID . ")");
$rsCriteriaCount = \PermissionsPeer::doSelectRS($criteriaCount);
$rsCriteriaCount->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
$rsCriteriaCount->next();
$row = $rsCriteriaCount->getRow();
$numRecTotal = $row["NUM_REC"];
//SQL
if (!is_null($sortField) && trim($sortField) != "") {
$sortField = strtoupper($sortField);
if (in_array($sortField, array("PER_UID", "PER_CODE"))) {
$sortField = \PermissionsPeer::TABLE_NAME . "." . $sortField;
} else {
$sortField = \PermissionsPeer::PER_CODE;
}
} else {
$sortField = \PermissionsPeer::PER_CODE;
}
if (!is_null($sortDir) && trim($sortDir) != "" && strtoupper($sortDir) == "DESC") {
$criteria->addDescendingOrderByColumn($sortField);
} else {
$criteria->addAscendingOrderByColumn($sortField);
}
if (!is_null($start)) {
$criteria->setOffset((int)($start));
}
if (!is_null($limit)) {
$criteria->setLimit((int)($limit));
}
$rsCriteria = \PermissionsPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$rolePermission->setPerUid($row["PER_UID"]);
$row["PER_NAME"] = $rolePermission->getPermissionName();
$arrayPermission[] = $this->getPermissionDataFromRecord($row);
}
//Return
return $arrayPermission;
} catch (\Exception $e) {
throw $e;
}
}
}

View File

@@ -187,8 +187,8 @@ class User
/**
* Unassign User of the Role
*
* @param string $roleUid Unique id of Role
* @param string $userUid Unique id of User
* @param string $roleUid Unique id of Role
* @param string $userUid Unique id of User
*
* return void
*/
@@ -205,7 +205,7 @@ class User
$this->throwExceptionIfNotItsAssignedUserToRole($roleUid, $userUid, $this->arrayFieldNameForException["userUid"]);
if ($roleUid == "00000000000000000000000000000002" && $userUid == "00000000000000000000000000000001") {
if ($userUid == "00000000000000000000000000000001") {
throw new \Exception(\G::LoadTranslation("ID_ADMINISTRATOR_ROLE_CANT_CHANGED"));
}

View File

@@ -0,0 +1,81 @@
<?php
namespace ProcessMaker\Services\Api\Role;
use \ProcessMaker\Services\Api;
use \Luracast\Restler\RestException;
/**
* Role\Permission Api Controller
*
* @protected
*/
class Permission extends Api
{
private $rolePermission;
/**
* Constructor of the class
*
* return void
*/
public function __construct()
{
try {
$this->rolePermission = new \ProcessMaker\BusinessModel\Role\Permission();
$this->rolePermission->setFormatFieldNameInUppercase(false);
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
/**
* @url GET /:rol_uid/permissions
* @url GET /:rol_uid/available-permissions
*
* @param string $rol_uid {@min 32}{@max 32}
*/
public function doGetPermissions($rol_uid, $filter = null, $start = null, $limit = null)
{
try {
$response = $this->rolePermission->getPermissions($rol_uid, (preg_match("/^.*\/permissions$/", $this->restler->url))? "PERMISSIONS" : "AVAILABLE-PERMISSIONS", array("filter" => $filter), null, null, $start, $limit);
return $response;
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
/**
* @url POST /:rol_uid/permission
*
* @param string $rol_uid {@min 32}{@max 32}
* @param array $request_data
*
* @status 201
*/
public function doPostPermission($rol_uid, array $request_data)
{
try {
$arrayData = $this->rolePermission->create($rol_uid, $request_data);
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
/**
* @url DELETE /:rol_uid/permission/:per_uid
*
* @param string $rol_uid {@min 32}{@max 32}
* @param string $per_uid {@min 32}{@max 32}
*/
public function doDeletePermission($rol_uid, $per_uid)
{
try {
$this->rolePermission->delete($rol_uid, $per_uid);
} catch (\Exception $e) {
throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage());
}
}
}

View File

@@ -34,6 +34,7 @@ catch(z){
itemSelected = "";
lastDir = "";
var conn = new Ext.data.Connection();
var showDirs = 'noFolders';
streamFilefromPM=function(fileStream) {
Ext.Ajax.request({
@@ -605,6 +606,9 @@ function getRequestParams() {
}
else {
sOptiondir='documents';
if (selectedRows[0].data.owner == '') {
sOptiondir='directory';
}
selitems = Array(selectedRows.length);
if( selectedRows.length > 0 ) {
@@ -1128,18 +1132,10 @@ var gridtb = new Ext.Toolbar(
handler : function(btn, e) {
if (btn.pressed) {
datastore.sendWhat = 'both';
loadDir();
} else {
datastore.sendWhat = 'files';
loadDir();
}
if (showDirs) {
Ext.getCmp("showOrHiDirs").setText(_('ID_SHOW_DIRS'));
showDirs = false;
} else {
Ext.getCmp("showOrHiDirs").setText(_('ID_HIDE_DIRS'));
showDirs = true;
}
loadDir();
}
}), '-', new Ext.form.TextField({
name : "filterValue",
@@ -1321,11 +1317,15 @@ rowExpander, {
header: _("ID_SIZE"),
dataIndex: "size",
width: 50,
sortable: false,
hideable: false,
hidden: true
}, {
header: _("ID_PERMISSIONS"),
dataIndex: "perms",
width: 100,
sortable: false,
hideable: false,
hidden: true
}, {
dataIndex: "is_deletable",
@@ -1373,28 +1373,34 @@ rowExpander, {
cm.defaultSortable = true;
function handleRowClick(sm, rowIndex) {//alert(rowIndex);
// console.log("Row Clicked: "+rowIndex);
var selections = sm.getSelections();
tb = ext_itemgrid.getTopToolbar();
if (selections.length > 1) {
// tb.items.get('tb_delete').enable();
tb.items.get('tb_delete')[permitodelete==1 ? 'enable': 'disable']();
tb.items.get('tb_rename').disable();
tb.items.get('tb_download').hide();
//tb.items.get('tb_download').disable();
} else if (selections.length == 1) {
// tb.items.get('tb_delete')[selections[0].get('is_deletable') ? 'enable': 'disable']();
tb.items.get('tb_delete')[permitodelete==1 ? 'enable': 'disable']();
tb.items.get('tb_rename')[selections[0].get('is_deletable') ? 'disable': 'disable']();
tb.items.get('tb_download')[selections[0].get('is_readable')
&& selections[0].get('is_file') ? 'show' : 'hide']();
} else {
tb.items.get('tb_delete').disable();
tb.items.get('tb_rename').disable();
tb.items.get('tb_download').hide();
}
return true;
//console.log("Row Clicked: ", rowIndex);
var selections = sm.getSelections();
tb = ext_itemgrid.getTopToolbar();
if (selections.length > 1) {
//tb.items.get('tb_delete').enable();
tb.items.get('tb_delete')[permitodelete==1 ? 'enable': 'disable']();
tb.items.get('tb_rename').disable();
tb.items.get('tb_download').hide();
//tb.items.get('tb_download').disable();
} else if (selections.length == 1) {
//tb.items.get('tb_delete')[selections[0].get('is_deletable') ? 'enable': 'disable']();
tb.items.get('tb_delete')[permitodelete==1 ? 'enable': 'disable']();
tb.items.get('tb_rename')[selections[0].get('is_deletable') ? 'disable': 'disable']();
tb.items.get('tb_download')[selections[0].get('is_readable')
&& selections[0].get('is_file') ? 'show' : 'hide']();
if (showDirs == 'folders') {
Ext.getCmp("showOrHiDirs").setText(_('ID_SHOW_DIRS'));
showDirs = 'noFolders';
} else {
Ext.getCmp("showOrHiDirs").setText(_('ID_HIDE_DIRS'));
showDirs = 'folders';
}
} else {
tb.items.get('tb_delete').disable();
tb.items.get('tb_rename').disable();
tb.items.get('tb_download').hide();
}
return true;
}
@@ -1402,18 +1408,23 @@ function handleRowClick(sm, rowIndex) {//alert(rowIndex);
function loadDir() {
// console.info("loadDir");
// console.trace();
itemSelected = "loadDir";
datastore.load({
params : {
start: 0,
limit: 100,
dir : datastore.directory,
node : datastore.directory,
option : 'gridDocuments',
action : 'expandNode',
sendWhat : datastore.sendWhat
itemSelected = "loadDir";
datastore.load({
params : {
start: 0,
limit: 100,
dir : datastore.directory,
node : datastore.directory,
option : 'gridDocuments',
action : 'expandNode',
sendWhat : datastore.sendWhat
}
});
if (datastore.sendWhat == 'files') {
Ext.getCmp("showOrHiDirs").setText(_('ID_SHOW_DIRS'));
} else {
Ext.getCmp("showOrHiDirs").setText(_('ID_HIDE_DIRS'));
}
});
}
function rowContextMenu(grid, rowIndex, e, f) {
@@ -1438,6 +1449,14 @@ function rowContextMenu(grid, rowIndex, e, f) {
gridCtxMenu.items.get('gc_rename')[selections[0].get('is_deletable') ? 'disable': 'disable']();
gridCtxMenu.items.get('gc_download')[selections[0].get('is_readable')
&& selections[0].get('is_file') ? 'enable' : 'disable']();
if (showDirs == 'folders') {
Ext.getCmp("showOrHiDirs").setText(_('ID_SHOW_DIRS'));
showDirs = 'noFolders';
} else {
Ext.getCmp("showOrHiDirs").setText(_('ID_HIDE_DIRS'));
showDirs = 'folders';
}
}
gridCtxMenu.show(e.getTarget(), 'tr-br?');

View File

@@ -399,11 +399,9 @@ statusDashletInstance = function(){
var data = {
DAS_INS_UID: rows[i].data.DAS_INS_UID,
DAS_INS_TITLE: rows[i].data.DAS_INS_TITLE,
DAS_UID: rows[i].data.DAS_INS_UID,
DAS_INS_STATUS: status,
DAS_STATUS: status
DAS_INS_STATUS: status
};
Ext.Ajax.request({
url: 'saveDashletInstance',
method: 'POST',

View File

@@ -64,9 +64,9 @@ var editStagesMap = function(sProcessUID) {
oPanel.events = {
remove: function() {
delete(oPanel);
if(menu_edit.maked === true){
if(typeof menu_edit != "undefined" && menu_edit.maked === true){
menu_edit.remove();
} else if (menu_add.maked === true) {
} else if (typeof menu_add != "undefined" && menu_add.maked === true) {
menu_add.remove();
}
}.extend(this)