%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/bizproc/admin/ |
| Current File : /home/bitrix/www/bitrix/modules/bizproc/admin/bizproc_selector.php |
<?
define("NOT_CHECK_PERMISSIONS", true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_js.php");
include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/bizproc/include.php");
IncludeModuleLangFile(__FILE__);
if(!$USER->IsAuthorized())
die('<script>alert("'.GetMessageJS("ACCESS_DENIED").'");</script>');
CBPHelper::decodeTemplatePostData($_POST);
$documentType = array(MODULE_ID, ENTITY, $_POST['document_type']);
$documentId = !empty($_POST['document_id'])? array(MODULE_ID, ENTITY, $_POST['document_id']) : null;
try
{
$canWrite = false;
if ($documentId)
{
$canWrite = CBPDocument::CanUserOperateDocument(
CBPCanUserOperateOperation::WriteDocument,
$GLOBALS["USER"]->GetID(),
$documentId
);
}
if (!$canWrite)
{
$canWrite = CBPDocument::CanUserOperateDocumentType(
CBPCanUserOperateOperation::WriteDocument,
$GLOBALS["USER"]->GetID(),
$documentType
);
}
}
catch (Exception $e)
{
$canWrite = false;
}
if(!$canWrite)
{
echo '<script>alert("'.GetMessageJS("ACCESS_DENIED").'");</script>';
die();
}
$arWorkflowTemplate = isset($_POST['arWorkflowTemplate']) && is_array($_POST['arWorkflowTemplate'])? $_POST['arWorkflowTemplate']: array();
$arWorkflowParameters = isset($_POST['arWorkflowParameters']) && is_array($_POST['arWorkflowParameters'])? $_POST['arWorkflowParameters']: array();
$arWorkflowVariables = isset($_POST['arWorkflowVariables']) && is_array($_POST['arWorkflowVariables'])? $_POST['arWorkflowVariables']: array();
$arWorkflowConstants = isset($_POST['arWorkflowConstants']) && is_array($_POST['arWorkflowConstants'])? $_POST['arWorkflowConstants']: array();
$selectorMode = isset($_POST['selectorMode']) ? $_POST['selectorMode']: null;
$runtime = CBPRuntime::GetRuntime();
$runtime->StartRuntime();
$documentService = $runtime->GetService("DocumentService");
$documentFields = $documentService->GetDocumentFields($documentType);
$documentFieldTypes = $documentService->GetDocumentFieldTypes($documentType);
$arUsers = Array();
$arAllowableUserGroups = $documentService->GetAllowableUserGroups($documentType, true);
foreach($arAllowableUserGroups as $gId=>$gName)
{
$a = CBPHelper::extractUsersFromExtendedGroup($gId);
if ($a === false)
$a = $documentService->GetUsersFromUserGroup($gId, $documentType);
foreach ($a as $v)
{
if (!in_array($v, $arUsers))
$arUsers[] = $v;
}
}
switch($_POST['fieldType'])
{
case "int":
case "double":
$arFilter = Array("int", "double", 'mixed');
break;
case "date":
case "datetime":
$arFilter = Array("datetime", "date", 'mixed');
break;
case "user":
$arFilter = Array("user", 'mixed');
break;
default:
$arFilter = false;
}
if (!empty($_REQUEST['load_access_lib']))
CJSCore::init('access');
?>
<body class="dialogcontent">
<?
$popupWindow = new CJSPopup(GetMessage("BIZPROC_AS_TITLE"));
$popupWindow->ShowTitlebar(GetMessage("BIZPROC_AS_TITLE_TOOLBAR"));
?>
<style>
.dialogt {width:100% !important; }
.adm-workarea .dialogt option {padding: 0px;}
</style>
<?
$popupWindow->StartDescription("");
?>
<?echo GetMessage("BIZPROC_SEL_TITLEBAR_DESC")?>
<?
$popupWindow->EndDescription();
$popupWindow->StartContent();
?>
<script>
var BPSLastId = false;
function BPSHideShow(id)
{
if(BPSLastId)
document.getElementById(BPSLastId).style.display = 'none';
if(BPSLastId==id)
BPSLastId = false;
else
{
BPSLastId = id;
try{
document.getElementById(BPSLastId).style.display = 'table-row';
}catch(e){
document.getElementById(BPSLastId).style.display = 'inline';
}
}
}
</script>
<table class="dialogt" cellpadding="0" cellspacing="0" border="0">
<?if($_REQUEST['only_users']!='Y'):?>
<tr>
<td>
<a href="javascript:void(0)" onclick="BPSHideShow('BPSId1')"><b><?echo GetMessage("BIZPROC_SEL_PARAMS_TAB")?></b></a>
</td>
</tr>
<tr id="BPSId1" style="display:none">
<td>
<select id="BPSId1S" size="13" style="width:100%" ondblclick="BPSVInsert(this.value)">
<?foreach($arWorkflowParameters as $fieldId => $documentField):?>
<?if($arFilter===false || in_array($documentFieldTypes[$documentField["Type"]]["BaseType"], $arFilter)):
if ($_POST['fieldType']=='text')
$fieldId .= ' > printable';
?>
<option value="{=<?=htmlspecialcharsbx($arWorkflowTemplate[0]['Name'])?>:<?=htmlspecialcharsbx($fieldId)?>}<?if($_POST['fieldType']=='user')echo '; '?>"><?=htmlspecialcharsbx($documentField['Name'])?></option>
<?endif?>
<?endforeach?>
</select>
</td>
</tr>
<tr>
<td>
<a href="javascript:void(0)" onclick="BPSHideShow('BPSId3')"><b><?echo GetMessage("BP_SEL_VARS")?></b></a>
</td>
</tr>
<tr id="BPSId3" style="display:none">
<td>
<select id="BPSId3S" size="13" style="width:100%" ondblclick="BPSVInsert(this.value)">
<?foreach($arWorkflowVariables as $fieldId => $documentField):?>
<?if($arFilter===false || in_array($documentFieldTypes[$documentField["Type"]]["BaseType"], $arFilter)):
if ($_POST['fieldType']=='text')
$fieldId .= ' > printable';
?>
<option value="{=Variable:<?=htmlspecialcharsbx($fieldId)?>}<?if($_POST['fieldType']=='user')echo '; '?>"><?=htmlspecialcharsbx($documentField['Name'])?></option>
<?endif?>
<?endforeach?>
</select>
</td>
</tr>
<tr>
<td>
<a href="javascript:void(0)" onclick="BPSHideShow('BPSId6')"><b><?echo GetMessage("BP_SEL_CONSTANTS")?></b></a>
</td>
</tr>
<tr id="BPSId6" style="display:none">
<td>
<select id="BPSId6S" size="13" style="width:100%" ondblclick="BPSVInsert(this.value)">
<?foreach($arWorkflowConstants as $fieldId => $documentField):?>
<?if($arFilter===false || in_array($documentFieldTypes[$documentField["Type"]]["BaseType"], $arFilter)):
if ($_POST['fieldType']=='text')
$fieldId .= ' > printable';
?>
<option value="{=Constant:<?=htmlspecialcharsbx($fieldId)?>}<?if($_POST['fieldType']=='user')echo '; '?>"><?=htmlspecialcharsbx($documentField['Name'])?></option>
<?endif?>
<?endforeach?>
</select>
</td>
</tr>
<tr>
<td>
<a href="javascript:void(0)" onclick="BPSHideShow('BPSId2')"><b><?echo GetMessage("BIZPROC_SEL_FIELDS_TAB")?></b></a>
</td>
</tr>
<tr id="BPSId2" style="display:none">
<td>
<select id="BPSId2S" size="13" style="width:100%" ondblclick="BPSVInsert(this.value)">
<?foreach($documentFields as $fieldId => $documentField):?>
<?if($arFilter===false || in_array($documentField["BaseType"], $arFilter)):?>
<option value="{=Document:<?=$fieldId?>}"><?=htmlspecialcharsbx($documentField['Name'])?></option>
<?endif?>
<?endforeach?>
</select>
</td>
</tr>
<tr>
<td>
<a href="javascript:void(0)" onclick="BPSHideShow('BPSId4')"><b><?echo GetMessage("BP_SEL_ADDIT")?></b></a>
</td>
</tr>
<tr id="BPSId4" style="display:none">
<td>
<?
$runtime = CBPRuntime::GetRuntime();
$arAllActivities = $runtime->SearchActivitiesByType("activity", $documentType);
function _RecFindParams($act, $arFilter, &$arResult)
{
global $arAllActivities;
foreach($act as $key => $value)
{
$value["Type"] = strtolower($value["Type"]);
if(is_array($arAllActivities[$value["Type"]]['RETURN']) && count($arAllActivities[$value["Type"]]['RETURN'])>0)
{
$arResultTmp = Array();
foreach($arAllActivities[$value["Type"]]['RETURN'] as $return_name=>$return_props)
{
if($arFilter!==false && !in_array($return_props['TYPE'], $arFilter))
continue;
$arResultTmp[] = Array(
'ID' => '{='.$value["Name"].':'.$return_name.'}',
'NAME' => '...'.$return_props['NAME'],
'TYPE' => $return_props['TYPE']
);
}
if(count($arResultTmp)>0)
{
$arResult[] = Array(
'ID' => $value["Name"],
'NAME'=>$value['Properties']['Title']
);
$arResult = array_merge($arResult, $arResultTmp);
}
}
elseif(is_array($arAllActivities[$value['Type']]['ADDITIONAL_RESULT']))
{
$resultTmp = array();
foreach($arAllActivities[$value['Type']]['ADDITIONAL_RESULT'] as $propertyKey)
{
if(!is_array($value['Properties'][$propertyKey]))
continue;
foreach($value['Properties'][$propertyKey] as $fieldId => $fieldData)
{
if($arFilter !== false && !in_array($fieldData['Type'], $arFilter))
continue;
$resultTmp[] = array(
'ID' => '{='.$value['Name'].':'.$fieldId.'}',
'NAME' => '...'.$fieldData['Name'],
'TYPE' => $fieldData['Type']
);
}
}
if(count($resultTmp) > 0)
{
$arResult[] = array(
'ID' => $value['Name'],
'NAME' => $value['Properties']['Title']
);
$arResult = array_merge($arResult, $resultTmp);
}
}
if(is_array($value["Children"]))
_RecFindParams($value["Children"], $arFilter, $arResult);
}
}
$arReturns = Array();
_RecFindParams($arWorkflowTemplate, $arFilter, $arReturns);
?>
<select id="BPSId4S" size="13" style="width:100%" ondblclick="BPSVInsert(this.value)">
<?foreach($arReturns as $val):?>
<?if($val['TYPE']):?>
<?if($arFilter===false || in_array($val['TYPE'], $arFilter)):?>
<option value="<?=htmlspecialcharsbx($val['ID'])?>"><?=htmlspecialcharsbx($val['NAME'])?></option>
<?endif?>
<?else:?>
<option value="<?=htmlspecialcharsbx($val['ID'])?>"><?=htmlspecialcharsbx($val['NAME'])?></option>
<?endif?>
<?endforeach?>
</select>
</td>
</tr>
<?endif?>
<?if ($selectorMode != 'employee'):?>
<tr>
<td>
<a href="javascript:void(0)" <?if($_REQUEST['only_users']!="Y"):?> onclick="BPSHideShow('BPSId5')"<?endif?>><b><?echo GetMessage("BIZPROC_SEL_USERS_TAB")?></b></a>
</td>
</tr>
<tr id="BPSId5" style="display:none">
<td>
<script>
var prev = '';
function BPSlookup(t)
{
t = t.toUpperCase();
if(t == prev)
return;
prev = t;
var ss = document.getElementById('BPSId5S');
for(var i=0; i<ss.options.length; i++)
{
var o = ss.options[i];
if(o.value)
{
if(o.value.toUpperCase().indexOf(t)>=0)
{
o.selected = true;
break;
}
}
}
}
function BPSKeyd(e)
{
var ss = document.getElementById('BPSId5S');
if(e.keyCode == 40)
{
if(ss.options.selectedIndex < ss.options.length-1)
ss.options.selectedIndex++;
return false;
}
if(e.keyCode == 38)
{
if(ss.options.selectedIndex>0)
ss.options.selectedIndex--;
else
ss.options.selectedIndex = 0;
return false;
}
if(e.keyCode == 13)
{
if(ss.options.selectedIndex>0)
{
BPSVInsert(ss.options[ss.options.selectedIndex].value);
}
return false;
}
}
</script>
<input type="text" id="BPSId5I" style="width:100%" onkeyup="BPSlookup(this.value)" onkeydown="return BPSKeyd(event)">
<select id="BPSId5S" size="<?=($_REQUEST['only_users'] == 'Y' ? 14 : 11)?>" style="width:100%" ondblclick="BPSVInsert(this.value)">
<option value="" style="background-color: #eeeeff" selected><?echo GetMessage("BIZPROC_SEL_USERS_TAB_GROUPS")?></option>
<?foreach($arAllowableUserGroups as $groupId => $groupName):
if ($groupName === "" || strpos($groupId, 'group_u') === 0)
continue;
?>
<option value="<?=htmlspecialcharsbx($groupName)?>; "><?=htmlspecialcharsbx($groupName)?></option>
<?endforeach?>
<option value="" style="background-color: #eeeeff"><?echo GetMessage("BIZPROC_SEL_USERS_TAB_USERS")?></option>
<?
global $DB;
$cnt = max(2000, count($arUsers));
$mcnt = 500;
$i = 0;
while ($i < $cnt)
{
$str = "SELECT ID, LOGIN, NAME, LAST_NAME, SECOND_NAME, EMAIL FROM b_user WHERE ID IN (0";
$cnt1 = min($cnt, $i + $mcnt);
for ($j = $i; $j < $cnt1; $j++)
$str .= ", ".IntVal($arUsers[$j]);
$i += $mcnt;
$str .= ") AND ACTIVE='Y' AND (EXTERNAL_AUTH_ID IS NULL OR EXTERNAL_AUTH_ID NOT IN ('replica', 'email', 'imconnector', 'bot')) ORDER BY LAST_NAME, EMAIL, ID";
$dbuser = $DB->Query($str);
while($user = $dbuser->fetch())
{
$n = CUser::FormatName(str_replace(",","", COption::GetOptionString("bizproc", "name_template", CSite::GetNameFormat(false), SITE_ID)), $user, true, true);
?>
<option value="<?= $n ?> [<?=(int)$user['ID']?>]; "><?=$n?> <<?=htmlspecialcharsbx($user['EMAIL'])?>> [<?=(int)$user['ID']?>]</option>
<?
}
}
?>
</select>
</td>
</tr>
<tr>
<td>
<a href="javascript:void(0)" onclick="BPSShowUserGropupsDialog()"><b><?echo GetMessage("BIZPROC_SEL_GROUPS_TAB")?></b></a>
</td>
</tr>
<?endif?>
</table>
<script>
function BPSVInsert(v)
{
if(!v)
{
if(BPSLastId)
{
var s = document.getElementById(BPSLastId+'S');
if(s)
v = s.value;
}
}
if(!v)
{
alert('<?=GetMessageJS("BIZPROC_SEL_ERR")?>');
return;
}
else
{
<?if ($selectorMode == 'employee'):?>
v = BX.util.trim(v.replace(';', ''));
<?endif;?>
var tdocument = top.document;
var toField = tdocument.getElementById('<?=AddSlashes(htmlspecialcharsbx($_POST["fieldName"]))?>');
toField.focus();
if(tdocument.selection && tdocument.selection.createRange)
{
var range = tdocument.selection.createRange();
if(range.text.length>0)
range.text = v;
else
toField.value = toField.value + v;
}
else if(toField.selectionStart != 'undefined')
{
var value = toField.value;
var pos = toField.selectionStart + v.length;
toField.value = value.substring(0, toField.selectionStart) + v + value.substring(toField.selectionEnd);
toField.selectionStart = pos;
toField.selectionEnd = pos;
}
else
{
toField.value = toField.value + v;
}
}
CloseDialog();
}
function CloseDialog()
{
<?=$popupWindow->jsPopup?>.CloseDialog();
}
var BPSShowUserGropupsDialog = function()
{
BX.Access.Init({other:{disabled:true}});
BX.Access.ShowForm({
bind: '<?=RandString(4);?>',
callback: function (selected)
{
var prepareName = function(str)
{
str = str.replace(/&/g, '&');
str = str.replace(/"/g, '"');
str = str.replace(/</g, '<');
str = str.replace(/>/g, '>');
str = str.replace(/,/g, '');
str = str.replace(/;/g, '');
return str;
};
var result = [];
for (var provider in selected)
{
if (selected.hasOwnProperty(provider))
{
for (var varId in selected[provider])
{
if (selected[provider].hasOwnProperty(varId))
{
var id = varId;
if (id.indexOf('U') === 0)
id = id.substr(1);
if (id.indexOf('IU') === 0)
id = id.substr(2);
result.push(prepareName(selected[provider][varId].name) + ' [' + id + ']');
}
}
}
}
if (result)
{
BPSVInsert(result.join('; ')+'; ');
}
}
});
};
<?if($_POST['fieldType']=='user' && $selectorMode != 'employee'):?>
BPSHideShow('BPSId5');
try{
document.getElementById('BPSId5I').focus();
}catch(e)
{}
<?else:?>
BPSHideShow('BPSId2');
try{
document.getElementById('BPSId2S').focus();
}catch(e)
{}
<?endif?>
</script>
<?
$popupWindow->EndContent();
$popupWindow->StartButtons();
?>
<input type="button" value="<?=GetMessage("BIZPROC_SEL_INSERT")?>" onclick="BPSVInsert();" />
<?
$popupWindow->ShowStandardButtons(array('cancel'));
?>
<?$popupWindow->EndButtons();?>
</body>
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php");
?>