1153 lines
33 KiB
PHP
1153 lines
33 KiB
PHP
<?
|
|
namespace Bitrix\Rest;
|
|
use Bitrix\Main;
|
|
use Bitrix\Rest\Api\UserFieldType;
|
|
use Bitrix\Rest\UserField\Callback;
|
|
|
|
abstract class UserFieldProxy
|
|
{
|
|
protected $entityID = '';
|
|
/** @var \CUser @ */
|
|
protected $user = null;
|
|
protected $isAdminUser = null;
|
|
protected $isAuthorizedUser = null;
|
|
protected $namePrefix = '';
|
|
private static $langs = null;
|
|
private static $fieldsInfo = null;
|
|
private static $langIncluded = false;
|
|
|
|
function __construct($entityID, \CUser $user = null)
|
|
{
|
|
if(!is_string($entityID))
|
|
{
|
|
throw new Main\ArgumentTypeException('entityID', 'string');
|
|
}
|
|
|
|
$this->entityID = $entityID;
|
|
$this->user = $user !== null ? $user : $this->getCurrentUser();
|
|
}
|
|
public function getEntityID()
|
|
{
|
|
return $this->entityID;
|
|
}
|
|
|
|
public function getNamePrefix()
|
|
{
|
|
return $this->namePrefix;
|
|
}
|
|
public function setNamePrefix($prefix)
|
|
{
|
|
if(!is_string($prefix))
|
|
{
|
|
throw new Main\ArgumentTypeException('prefix', 'string');
|
|
}
|
|
|
|
$this->namePrefix = $prefix !== ''? mb_strtoupper($prefix) : '';
|
|
}
|
|
public static function getFields()
|
|
{
|
|
if(self::$fieldsInfo === null)
|
|
{
|
|
//isReadOnly - Can not be defined by user. Read only access.
|
|
//isImmutable - Can be defined by user during creation. It can not be changed.
|
|
//isMultiple - It is multiple (array will be returned).
|
|
|
|
self::includeLangFile();
|
|
self::$fieldsInfo = array(
|
|
'ID' => array('type' => 'int', 'title' => GetMessage('REST_UF_ID'), 'isReadOnly'=> true),
|
|
'ENTITY_ID' => array('type' => 'string', 'title' => GetMessage('REST_UF_ENTITY_ID'), 'isImmutable' => true),
|
|
'FIELD_NAME' => array('type' => 'string', 'title' => GetMessage('REST_UF_FIELD_NAME'), 'isImmutable' => true),
|
|
'USER_TYPE_ID' => array('type' => 'string', 'title' => GetMessage('REST_UF_USER_TYPE_ID'), 'isImmutable' => true),
|
|
'XML_ID' => array('type' => 'string', 'title' => GetMessage('REST_UF_XML_ID')),
|
|
'SORT' => array('type' => 'int', 'title' => GetMessage('REST_UF_SORT')),
|
|
'MULTIPLE' => array('type' => 'char', 'title' => GetMessage('REST_UF_MULTIPLE')),
|
|
'MANDATORY' => array('type' => 'char', 'title' => GetMessage('REST_UF_MANDATORY')),
|
|
'SHOW_FILTER' => array('type' => 'char', 'title' => GetMessage('REST_UF_SHOW_FILTER')),
|
|
'SHOW_IN_LIST' => array('type' => 'char', 'title' => GetMessage('REST_UF_SHOW_IN_LIST')),
|
|
'EDIT_IN_LIST' => array('type' => 'char', 'title' => GetMessage('REST_UF_EDIT_IN_LIST')),
|
|
'IS_SEARCHABLE' => array('type' => 'char', 'title' => GetMessage('REST_UF_IS_SEARCHABLE')),
|
|
'EDIT_FORM_LABEL' => array('type' => 'string', 'title' => GetMessage('REST_UF_EDIT_FORM_LABEL')),
|
|
'LIST_COLUMN_LABEL' => array('type' => 'string', 'title' => GetMessage('REST_UF_LIST_COLUMN_LABEL')),
|
|
'LIST_FILTER_LABEL' => array('type' => 'string', 'title' => GetMessage('REST_UF_LIST_FILTER_LABEL')),
|
|
'ERROR_MESSAGE' => array('type' => 'string', 'title' => GetMessage('REST_UF_ERROR_MESSAGE')),
|
|
'HELP_MESSAGE' => array('type' => 'string', 'title' => GetMessage('REST_UF_HELP_MESSAGE')),
|
|
'LIST' => array('type' => 'uf_enum_element', 'title' => GetMessage('REST_UF_LIST'), 'isMultiple'=> true),
|
|
'SETTINGS' => array('type' => 'object', 'title' => GetMessage('REST_UF_SETTINGS'))
|
|
);
|
|
}
|
|
|
|
return self::$fieldsInfo;
|
|
}
|
|
public static function getEnumerationElementFields()
|
|
{
|
|
self::includeLangFile();
|
|
return array(
|
|
'ID' => array('type' => 'int', 'title' => GetMessage('REST_UF_ID'), 'isReadOnly'=> true),
|
|
'SORT' => array('type' => 'int', 'title' => GetMessage('REST_UF_SORT')),
|
|
'VALUE' => array('type' => 'string', 'title' => GetMessage('REST_UF_VALUE')),
|
|
'DEF' => array('type' => 'string', 'title' => GetMessage('REST_UF_IS_DEF')),
|
|
'DEL' => array('type' => 'string', 'title' => GetMessage('REST_UF_DEL')),
|
|
);
|
|
}
|
|
public static function getSettingsFields($typeID)
|
|
{
|
|
if(!is_string($typeID))
|
|
{
|
|
throw new Main\ArgumentTypeException('typeID', 'string');
|
|
}
|
|
|
|
if($typeID === '')
|
|
{
|
|
throw new Main\ArgumentException('Empty string is specified', 'typeID');
|
|
}
|
|
|
|
|
|
self::includeLangFile();
|
|
switch($typeID)
|
|
{
|
|
case 'string':
|
|
{
|
|
return array(
|
|
'DEFAULT_VALUE' => array('type' => 'string', 'title' => GetMessage('REST_UF_DEFAULT_VALUE')),
|
|
'ROWS' => array('type' => 'int', 'title' => GetMessage('REST_UF_ROWS'))
|
|
);
|
|
}
|
|
case 'integer':
|
|
{
|
|
return array(
|
|
'DEFAULT_VALUE' => array('type' => 'int', 'title' => GetMessage('REST_UF_DEFAULT_VALUE'))
|
|
);
|
|
}
|
|
case 'double':
|
|
{
|
|
return array(
|
|
'DEFAULT_VALUE' => array('type' => 'double', 'title' => GetMessage('REST_UF_DEFAULT_VALUE')),
|
|
'PRECISION' => array('type' => 'int', 'title' => GetMessage('REST_UF_PRECISION'))
|
|
);
|
|
}
|
|
case 'boolean':
|
|
{
|
|
return array(
|
|
'DEFAULT_VALUE' => array('type' => 'int', 'title' => GetMessage('REST_UF_DEFAULT_VALUE')),
|
|
'DISPLAY' => array('type' => 'string', 'title' => GetMessage('REST_UF_DISPLAY'))
|
|
);
|
|
}
|
|
case 'datetime':
|
|
{
|
|
return array(
|
|
'DEFAULT_VALUE' => array('type' => 'datetime', 'title' => GetMessage('REST_UF_DEFAULT_VALUE'))
|
|
);
|
|
}
|
|
case 'enumeration':
|
|
{
|
|
return array(
|
|
'DISPLAY' => array('type' => 'string', 'title' => GetMessage('REST_UF_DISPLAY')),
|
|
'LIST_HEIGHT' => array('type' => 'int', 'title' => GetMessage('REST_UF_LIST_HEIGHT')),
|
|
);
|
|
}
|
|
case 'iblock_section':
|
|
case 'iblock_element':
|
|
{
|
|
return array(
|
|
'DEFAULT_VALUE' => array('type' => 'int', 'title' => GetMessage('REST_UF_DEFAULT_VALUE')),
|
|
'IBLOCK_ID' => array('type' => 'int', 'title' => GetMessage('REST_UF_IBLOCK_ID')),
|
|
'IBLOCK_TYPE_ID' => array('type' => 'string', 'title' => GetMessage('REST_UF_IBLOCK_TYPE_ID')),
|
|
'DISPLAY' => array('type' => 'string', 'title' => GetMessage('REST_UF_DISPLAY')),
|
|
'LIST_HEIGHT' => array('type' => 'int', 'title' => GetMessage('REST_UF_LIST_HEIGHT')),
|
|
'ACTIVE_FILTER' => array('type' => 'char', 'title' => GetMessage('REST_UF_ACTIVE_FILTER'))
|
|
);
|
|
}
|
|
case 'crm_status':
|
|
{
|
|
return array(
|
|
'ENTITY_TYPE' => array('type' => 'string', 'title' => GetMessage('REST_UF_ENTITY_TYPE'))
|
|
);
|
|
}
|
|
case 'crm':
|
|
{
|
|
return array(
|
|
'LEAD' => array('type' => 'char', 'title' => GetMessage('REST_UF_CRM_LEAD')),
|
|
'CONTACT' => array('type' => 'char', 'title' => GetMessage('REST_UF_CRM_CONTACT')),
|
|
'COMPANY' => array('type' => 'char', 'title' => GetMessage('REST_UF_CRM_COMPANY')),
|
|
'DEAL' => array('type' => 'char', 'title' => GetMessage('REST_UF_CRM_DEAL'))
|
|
);
|
|
}
|
|
default:
|
|
{
|
|
return array();
|
|
}
|
|
}
|
|
}
|
|
public static function getTypes(\CRestServer $server = null)
|
|
{
|
|
self::includeLangFile();
|
|
$result = array(
|
|
array('ID' => 'string', 'title' => GetMessage('REST_UF_TYPE_STRING')),
|
|
array('ID' => 'integer', 'title' => GetMessage('REST_UF_TYPE_INTEGER')),
|
|
array('ID' => 'double', 'title' => GetMessage('REST_UF_TYPE_DOUBLE')),
|
|
array('ID' => 'boolean', 'title' => GetMessage('REST_UF_TYPE_BOOLEAN')),
|
|
array('ID' => 'enumeration', 'title' => GetMessage('REST_UF_TYPE_ENUMERATION')),
|
|
array('ID' => 'datetime', 'title' => GetMessage('REST_UF_TYPE_DATETIME')),
|
|
array('ID' => 'date', 'title' => GetMessage('REST_UF_TYPE_DATE')),
|
|
array('ID' => 'money', 'title' => GetMessage('REST_UF_TYPE_MONEY')),
|
|
array('ID' => 'url', 'title' => GetMessage('REST_UF_TYPE_URL')),
|
|
array('ID' => 'address', 'title' => GetMessage('REST_UF_TYPE_ADDRESS')),
|
|
array('ID' => 'file', 'title' => GetMessage('REST_UF_TYPE_FILE')),
|
|
array('ID' => 'employee', 'title' => GetMessage('REST_UF_TYPE_EMPLOYEE')),
|
|
array('ID' => 'crm_status', 'title' => GetMessage('REST_UF_TYPE_CRM_STATUS')),
|
|
array('ID' => 'iblock_section', 'title' => GetMessage('REST_UF_TYPE_IBLOCK_SECTION')),
|
|
array('ID' => 'iblock_element', 'title' => GetMessage('REST_UF_TYPE_IBLOCK_ELEMENT')),
|
|
array('ID' => 'crm', 'title' => GetMessage('REST_UF_TYPE_CRM'))
|
|
);
|
|
|
|
if($server !== null && $server->getAuthType() === OAuth\Auth::AUTH_TYPE)
|
|
{
|
|
$clientInfo = AppTable::getByClientId($server->getClientId());
|
|
$placementHandlerList = PlacementTable::getHandlersList(UserFieldType::PLACEMENT_UF_TYPE);
|
|
|
|
foreach($placementHandlerList as $handler)
|
|
{
|
|
if($handler['APP_ID'] === $clientInfo['ID'])
|
|
{
|
|
$result[] = array(
|
|
'ID' => $handler['ADDITIONAL'],
|
|
'title' => $handler['TITLE']
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
public function add(array $fields)
|
|
{
|
|
global $APPLICATION;
|
|
if(!$this->checkCreatePermission())
|
|
{
|
|
throw new RestException('Access denied.');
|
|
}
|
|
|
|
if($this->entityID === '')
|
|
{
|
|
throw new RestException('Operation is not allowed. Entity ID is not defined.');
|
|
}
|
|
|
|
//Try get default field label
|
|
$defaultLabel = isset($fields['LABEL']) ? trim($fields['LABEL']) : '';
|
|
|
|
self::sanitizeFields($fields);
|
|
$fields['ENTITY_ID'] = $this->entityID;
|
|
$errors = array();
|
|
|
|
$userTypeID = isset($fields['USER_TYPE_ID']) ? trim($fields['USER_TYPE_ID']) : '';
|
|
if($userTypeID === '')
|
|
{
|
|
$errors[] = "The 'USER_TYPE_ID' field is not found.";
|
|
}
|
|
$fields['USER_TYPE_ID'] = $userTypeID;
|
|
|
|
$fieldName = isset($fields['FIELD_NAME']) ? trim($fields['FIELD_NAME']) : '';
|
|
if($fieldName === '')
|
|
{
|
|
$errors[] = "The 'FIELD_NAME' field is not found.";
|
|
}
|
|
|
|
$fieldName = mb_strtoupper($fieldName);
|
|
$prefix = $this->namePrefix;
|
|
if($prefix !== '')
|
|
{
|
|
$fullPrefix = 'UF_'.$prefix.'_';
|
|
$fullPrefixLen = mb_strlen($fullPrefix);
|
|
if(strncmp($fieldName, $fullPrefix, $fullPrefixLen) !== 0)
|
|
{
|
|
$fieldName = strncmp($fieldName, 'UF_', 3) === 0
|
|
? $fullPrefix.mb_substr($fieldName, 3)
|
|
: $fullPrefix.$fieldName;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$fullPrefix = 'UF_';
|
|
$fullPrefixLen = 3;
|
|
if(strncmp($fieldName, $fullPrefix, $fullPrefixLen) !== 0)
|
|
{
|
|
$fieldName = 'UF_'. $fieldName;
|
|
}
|
|
}
|
|
|
|
$fields['FIELD_NAME'] = $fieldName;
|
|
|
|
if(!empty($errors))
|
|
{
|
|
throw new RestException(implode("\n", $errors));
|
|
}
|
|
|
|
if($defaultLabel === '')
|
|
{
|
|
$defaultLabel = $fieldName;
|
|
}
|
|
|
|
self::prepareLabels($fields, 'LIST_FILTER_LABEL', $defaultLabel);
|
|
self::prepareLabels($fields, 'LIST_COLUMN_LABEL', $defaultLabel);
|
|
self::prepareLabels($fields, 'EDIT_FORM_LABEL', $defaultLabel);
|
|
self::prepareLabels($fields, 'ERROR_MESSAGE', $defaultLabel);
|
|
self::prepareLabels($fields, 'HELP_MESSAGE', $defaultLabel);
|
|
|
|
$fields['MULTIPLE'] = isset($fields['MULTIPLE']) && mb_strtoupper($fields['MULTIPLE']) === 'Y' ? 'Y' : 'N';
|
|
$fields['MANDATORY'] = isset($fields['MANDATORY']) && mb_strtoupper($fields['MANDATORY']) === 'Y' ? 'Y' : 'N';
|
|
$fields['SHOW_FILTER'] = isset($fields['SHOW_FILTER']) && mb_strtoupper($fields['SHOW_FILTER']) === 'Y' ? 'E' : 'N'; // E - 'By mask' is default
|
|
|
|
$isMultiple = isset($fields['MULTIPLE']) && $fields['MULTIPLE'] === 'Y';
|
|
|
|
$settings = isset($fields['SETTINGS']) && is_array($fields['SETTINGS']) ? $fields['SETTINGS'] : array();
|
|
$effectiveSettings = array();
|
|
switch ($userTypeID)
|
|
{
|
|
case 'string':
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = isset($settings['DEFAULT_VALUE'])
|
|
? $settings['DEFAULT_VALUE'] : '';
|
|
|
|
$effectiveSettings['ROWS'] = $settings['ROWS'] > 0
|
|
? $settings['ROWS'] : 1;
|
|
break;
|
|
}
|
|
case 'integer':
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = isset($settings['DEFAULT_VALUE'])
|
|
? $settings['DEFAULT_VALUE'] : '';
|
|
break;
|
|
}
|
|
case 'double':
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = isset($settings['DEFAULT_VALUE'])
|
|
? $settings['DEFAULT_VALUE'] : '';
|
|
|
|
$effectiveSettings['PRECISION'] = $settings['PRECISION'] >= 0
|
|
? $settings['PRECISION'] : 2;
|
|
break;
|
|
}
|
|
case 'boolean':
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = isset($settings['DEFAULT_VALUE'])
|
|
&& $settings['DEFAULT_VALUE'] > 0 ? 1 : 0;
|
|
|
|
$display = isset($settings['DISPLAY']) ? $settings['DISPLAY'] : '';
|
|
$effectiveSettings['DISPLAY'] = $display !== ''? mb_strtoupper($display) : 'CHECKBOX';
|
|
|
|
$fields['MULTIPLE'] = 'N';
|
|
break;
|
|
}
|
|
case 'date':
|
|
case 'datetime':
|
|
{
|
|
$defaultValue = isset($settings['DEFAULT_VALUE']) ? $settings['DEFAULT_VALUE'] : array();
|
|
if(!is_array($defaultValue))
|
|
{
|
|
$defaultValue = array('VALUE' => $defaultValue, 'TYPE' => 'NONE');
|
|
}
|
|
|
|
$effectiveSettings['DEFAULT_VALUE'] = array(
|
|
'VALUE' => isset($defaultValue['VALUE'])
|
|
? \CRestUtil::unConvertDateTime($defaultValue['VALUE']) : '',
|
|
'TYPE' => isset($defaultValue['TYPE']) && $defaultValue['TYPE'] !== ''
|
|
? mb_strtoupper($defaultValue['TYPE']) : 'NONE'
|
|
);
|
|
break;
|
|
}
|
|
case 'enumeration':
|
|
{
|
|
$display = isset($settings['DISPLAY']) ? $settings['DISPLAY'] : '';
|
|
$effectiveSettings['DISPLAY'] = $display !== ''? mb_strtoupper($display) : 'LIST';
|
|
|
|
$height = isset($settings['LIST_HEIGHT']) ? (int)$settings['LIST_HEIGHT'] : 0;
|
|
$effectiveSettings['LIST_HEIGHT'] = $height > 0 ? $height : 1;
|
|
|
|
$listItems = isset($fields['LIST']) && is_array($fields['LIST']) ? $fields['LIST'] : array();
|
|
$effectiveListItems = array();
|
|
|
|
$counter = 0;
|
|
$defaultItemKey = '';
|
|
foreach($listItems as $item)
|
|
{
|
|
$itemValue = isset($item['VALUE']) ? trim($item['VALUE'], " \t\n\r") : '';
|
|
if($itemValue === '')
|
|
{
|
|
continue;
|
|
}
|
|
|
|
$effectiveItem = array('VALUE' => $itemValue);
|
|
$itemSort = isset($item['SORT']) && is_numeric($item['SORT']) ? (int)$item['SORT'] : 0;
|
|
if($itemSort > 0)
|
|
{
|
|
$effectiveItem['SORT'] = $itemSort;
|
|
}
|
|
|
|
if($itemSort > 0)
|
|
{
|
|
$effectiveItem['SORT'] = $itemSort;
|
|
}
|
|
|
|
$itemKey = "n{$counter}";
|
|
$counter++;
|
|
|
|
if(isset($item['DEF']))
|
|
{
|
|
$isDefault = mb_strtoupper($item['DEF']) === 'Y';
|
|
if($isMultiple)
|
|
{
|
|
$effectiveItem['DEF'] = $isDefault ? 'Y' : 'N';
|
|
}
|
|
elseif($isDefault && $defaultItemKey === '')
|
|
{
|
|
$defaultItemKey = $itemKey;
|
|
}
|
|
}
|
|
|
|
if(isset($item['XML_ID']) && is_string($item['XML_ID']) && $item['XML_ID'] != '')
|
|
{
|
|
$effectiveItem['XML_ID'] = $item['XML_ID'];
|
|
}
|
|
|
|
$effectiveListItems[$itemKey] = &$effectiveItem;
|
|
unset($effectiveItem);
|
|
}
|
|
|
|
if(!$isMultiple && $defaultItemKey !== '')
|
|
{
|
|
foreach($effectiveListItems as $key => &$item)
|
|
{
|
|
$item['DEF'] = $key === $defaultItemKey ? 'Y' : 'N';
|
|
}
|
|
unset($item);
|
|
}
|
|
$fields['LIST'] = $effectiveListItems;
|
|
break;
|
|
}
|
|
case 'iblock_section':
|
|
case 'iblock_element':
|
|
{
|
|
$effectiveSettings['IBLOCK_TYPE_ID'] = isset($settings['IBLOCK_TYPE_ID']) ? $settings['IBLOCK_TYPE_ID'] : '';
|
|
$effectiveSettings['IBLOCK_ID'] = isset($settings['IBLOCK_ID']) ? (int)$settings['IBLOCK_ID'] : 0;
|
|
$effectiveSettings['DEFAULT_VALUE'] = isset($settings['DEFAULT_VALUE']) ? $settings['DEFAULT_VALUE'] : '';
|
|
|
|
$display = isset($settings['DISPLAY']) ? $settings['DISPLAY'] : '';
|
|
$effectiveSettings['DISPLAY'] = $display !== ''? mb_strtoupper($display) : 'LIST';
|
|
|
|
$height = isset($settings['LIST_HEIGHT']) ? (int)$settings['LIST_HEIGHT'] : 0;
|
|
$effectiveSettings['LIST_HEIGHT'] = $height > 0 ? $height : 1;
|
|
$effectiveSettings['ACTIVE_FILTER'] = isset($settings['ACTIVE_FILTER'])
|
|
&& mb_strtoupper($settings['ACTIVE_FILTER']) === 'Y' ? 'Y' : 'N';
|
|
break;
|
|
}
|
|
case 'crm_status':
|
|
{
|
|
$effectiveSettings['ENTITY_TYPE'] = isset($settings['ENTITY_TYPE']) ? $settings['ENTITY_TYPE'] : '';
|
|
break;
|
|
}
|
|
case 'crm':
|
|
{
|
|
$effectiveSettings['LEAD'] = isset($settings['LEAD']) && mb_strtoupper($settings['LEAD']) === 'Y' ? 'Y' : 'N';
|
|
$effectiveSettings['CONTACT'] = isset($settings['CONTACT']) && mb_strtoupper($settings['CONTACT']) === 'Y' ? 'Y' : 'N';
|
|
$effectiveSettings['COMPANY'] = isset($settings['COMPANY']) && mb_strtoupper($settings['COMPANY']) === 'Y' ? 'Y' : 'N';
|
|
$effectiveSettings['DEAL'] = isset($settings['DEAL']) && mb_strtoupper($settings['DEAL']) === 'Y' ? 'Y' : 'N';
|
|
break;
|
|
}
|
|
case 'employee':
|
|
{
|
|
if($fields['SHOW_FILTER'] !== 'N')
|
|
{
|
|
$fields['SHOW_FILTER'] = 'I'; // Force exact match for 'USER' field type
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
$userTypeList = PlacementTable::getHandlersList(UserFieldType::PLACEMENT_UF_TYPE);
|
|
|
|
foreach($userTypeList as $userType)
|
|
{
|
|
if($userType['ADDITIONAL'] === $userTypeID)
|
|
{
|
|
$fields['USER_TYPE_ID'] = UserField\Callback::getUserTypeId($userType);
|
|
}
|
|
}
|
|
|
|
$fields['SHOW_FILTER'] = 'N';
|
|
}
|
|
}
|
|
|
|
$fields['SETTINGS'] = $effectiveSettings;
|
|
|
|
$entity = new \CUserTypeEntity();
|
|
$ID = $entity->Add($fields);
|
|
if($ID <= 0)
|
|
{
|
|
$exc = $APPLICATION->GetException();
|
|
$errors[] = $exc !== false ? $exc->GetString() : 'Fail to create new user field.';
|
|
}
|
|
elseif ($userTypeID === 'enumeration' && isset($fields['LIST']) && is_array($fields['LIST']))
|
|
{
|
|
$enum = new \CUserFieldEnum();
|
|
if(!$enum->SetEnumValues($ID, $fields['LIST']))
|
|
{
|
|
$exc = $APPLICATION->GetException();
|
|
$errors[] = $exc !== false ? $exc->GetString() : 'Fail to save enumumeration field values.';
|
|
}
|
|
}
|
|
|
|
if(!empty($errors))
|
|
{
|
|
throw new RestException(implode("\n", $errors), RestException::ERROR_CORE);
|
|
}
|
|
|
|
return $ID;
|
|
}
|
|
public function get($ID)
|
|
{
|
|
if(!is_int($ID))
|
|
{
|
|
$ID = (int)$ID;
|
|
}
|
|
|
|
if($ID <= 0)
|
|
{
|
|
throw new RestException('ID is not defined or invalid.');
|
|
}
|
|
|
|
if(!$this->checkReadPermission())
|
|
{
|
|
throw new RestException('Access denied.');
|
|
}
|
|
|
|
if($this->entityID === '')
|
|
{
|
|
throw new RestException('Operation is not allowed. Entity ID is not defined.');
|
|
}
|
|
|
|
$entity = new \CUserTypeEntity();
|
|
$result = $entity->GetByID($ID);
|
|
if(!is_array($result))
|
|
{
|
|
throw new RestException("The entity with ID '{$ID}' is not found.", RestException::ERROR_NOT_FOUND);
|
|
}
|
|
|
|
$entityID = isset($result['ENTITY_ID']) ? $result['ENTITY_ID'] : '';
|
|
if($entityID !== $this->entityID)
|
|
{
|
|
throw new RestException('Access denied.');
|
|
}
|
|
|
|
if($result['USER_TYPE_ID'] === 'enumeration')
|
|
{
|
|
$result['LIST'] = array();
|
|
|
|
$enumEntity = new \CUserFieldEnum();
|
|
$dbResultEnum = $enumEntity->GetList(array('SORT' => 'ASC'), array('USER_FIELD_ID' => $ID));
|
|
while($enum = $dbResultEnum->Fetch())
|
|
{
|
|
$result['LIST'][] = array(
|
|
'ID' => $enum['ID'],
|
|
'SORT' => $enum['SORT'],
|
|
'VALUE' => $enum['VALUE'],
|
|
'DEF' => $enum['DEF']
|
|
);
|
|
}
|
|
}
|
|
elseif(preg_match("/^".UserField\Callback::USER_TYPE_ID_PREFIX."_([\d]+)_/", $result['USER_TYPE_ID'], $matches))
|
|
{
|
|
$result['USER_TYPE_ID'] = str_replace($matches[0], '', $result['USER_TYPE_ID']);
|
|
|
|
$appInfo = AppTable::getByClientId($matches[1]);
|
|
$result['USER_TYPE_OWNER'] = $appInfo['CLIENT_ID'];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
public function getList(array $order, array $filter)
|
|
{
|
|
if(!$this->checkReadPermission())
|
|
{
|
|
throw new RestException('Access denied.');
|
|
}
|
|
|
|
if($this->entityID === '')
|
|
{
|
|
throw new RestException('Operation is not allowed. Entity ID is not defined.');
|
|
}
|
|
$filter['ENTITY_ID'] = $this->entityID;
|
|
|
|
if(isset($filter['USER_TYPE_ID']))
|
|
{
|
|
$handlerList = PlacementTable::getHandlersList(UserFieldType::PLACEMENT_UF_TYPE);
|
|
foreach($handlerList as $handler)
|
|
{
|
|
if($handler['ADDITIONAL'] === $filter['USER_TYPE_ID'])
|
|
{
|
|
$filter['USER_TYPE_ID'] = Callback::getUserTypeId($handler);
|
|
}
|
|
}
|
|
}
|
|
|
|
$entity = new \CUserTypeEntity();
|
|
$dbResult = $entity->GetList($order, $filter);
|
|
$result = array();
|
|
while($fields = $dbResult->Fetch())
|
|
{
|
|
$userTypeID = isset($fields['USER_TYPE_ID']) ? $fields['USER_TYPE_ID'] : '';
|
|
if($userTypeID === 'datetime'
|
|
&& isset($fields['SETTINGS'])
|
|
&& isset($fields['SETTINGS']['DEFAULT_VALUE'])
|
|
&& isset($fields['SETTINGS']['DEFAULT_VALUE']['VALUE'])
|
|
&& $fields['SETTINGS']['DEFAULT_VALUE']['VALUE'] !== '')
|
|
{
|
|
$fields['SETTINGS']['DEFAULT_VALUE']['VALUE'] = \CRestUtil::ConvertDateTime($fields['SETTINGS']['DEFAULT_VALUE']['VALUE']);
|
|
}
|
|
|
|
if($userTypeID === 'enumeration')
|
|
{
|
|
$fields['LIST'] = array();
|
|
|
|
$enumEntity = new \CUserFieldEnum();
|
|
$dbResultEnum = $enumEntity->GetList(array('SORT' => 'ASC'), array('USER_FIELD_ID' => $fields['ID']));
|
|
while($enum = $dbResultEnum->Fetch())
|
|
{
|
|
$fields['LIST'][] = array(
|
|
'ID' => $enum['ID'],
|
|
'SORT' => $enum['SORT'],
|
|
'VALUE' => $enum['VALUE'],
|
|
'DEF' => $enum['DEF'],
|
|
'XML_ID' => $enum['XML_ID'],
|
|
);
|
|
}
|
|
}
|
|
elseif(preg_match("/^".UserField\Callback::USER_TYPE_ID_PREFIX."_([\d]+)_/", $userTypeID, $matches))
|
|
{
|
|
$fields['USER_TYPE_ID'] = str_replace($matches[0], '', $fields['USER_TYPE_ID']);
|
|
|
|
$appInfo = AppTable::getByClientId($matches[1]);
|
|
$fields['USER_TYPE_OWNER'] = $appInfo['CLIENT_ID'];
|
|
}
|
|
|
|
$result[] = $fields;
|
|
}
|
|
|
|
$result['total'] = count($result);
|
|
return $result;
|
|
}
|
|
public function update($ID, array $fields)
|
|
{
|
|
global $APPLICATION;
|
|
|
|
if(!is_int($ID))
|
|
{
|
|
$ID = (int)$ID;
|
|
}
|
|
|
|
if($ID <= 0)
|
|
{
|
|
throw new RestException('ID is not defined or invalid.');
|
|
}
|
|
|
|
if(!$this->checkUpdatePermission())
|
|
{
|
|
throw new RestException('Access denied.');
|
|
}
|
|
|
|
if($this->entityID === '')
|
|
{
|
|
throw new RestException('Operation is not allowed. Entity ID is not defined.');
|
|
}
|
|
|
|
$entity = new \CUserTypeEntity();
|
|
|
|
$persistedFields = $entity->GetByID($ID);
|
|
if(!is_array($persistedFields))
|
|
{
|
|
throw new RestException("The entity with ID '{$ID}' is not found.", RestException::ERROR_NOT_FOUND);
|
|
}
|
|
|
|
$entityID = isset($persistedFields['ENTITY_ID']) ? $persistedFields['ENTITY_ID'] : '';
|
|
if($entityID !== $this->entityID)
|
|
{
|
|
throw new RestException('Access denied.');
|
|
}
|
|
|
|
//User type ID can't be changed.
|
|
$userTypeID = isset($persistedFields['USER_TYPE_ID']) ? $persistedFields['USER_TYPE_ID'] : '';
|
|
if($userTypeID === '')
|
|
{
|
|
throw new RestException("Could not find 'USER_TYPE_ID' in persisted entity with ID '{$ID}'.");
|
|
}
|
|
|
|
$isMultiple = isset($persistedFields['MULTIPLE']) && $persistedFields['MULTIPLE'] === 'Y';
|
|
|
|
self::sanitizeFields($fields);
|
|
|
|
if(isset($fields['LIST_FILTER_LABEL']))
|
|
{
|
|
self::prepareLabels($fields, 'LIST_FILTER_LABEL', '');
|
|
}
|
|
elseif(isset($persistedFields['LIST_FILTER_LABEL']))
|
|
{
|
|
$fields['LIST_FILTER_LABEL'] = $persistedFields['LIST_FILTER_LABEL'];
|
|
}
|
|
|
|
if(isset($fields['LIST_COLUMN_LABEL']))
|
|
{
|
|
self::prepareLabels($fields, 'LIST_COLUMN_LABEL', '');
|
|
}
|
|
elseif(isset($persistedFields['LIST_COLUMN_LABEL']))
|
|
{
|
|
$fields['LIST_COLUMN_LABEL'] = $persistedFields['LIST_COLUMN_LABEL'];
|
|
}
|
|
|
|
if(isset($fields['EDIT_FORM_LABEL']))
|
|
{
|
|
self::prepareLabels($fields, 'EDIT_FORM_LABEL', '');
|
|
}
|
|
elseif(isset($persistedFields['EDIT_FORM_LABEL']))
|
|
{
|
|
$fields['EDIT_FORM_LABEL'] = $persistedFields['EDIT_FORM_LABEL'];
|
|
}
|
|
|
|
if(isset($fields['ERROR_MESSAGE']))
|
|
{
|
|
self::prepareLabels($fields, 'ERROR_MESSAGE', '');
|
|
}
|
|
elseif(isset($persistedFields['ERROR_MESSAGE']))
|
|
{
|
|
$fields['ERROR_MESSAGE'] = $persistedFields['ERROR_MESSAGE'];
|
|
}
|
|
|
|
if(isset($fields['HELP_MESSAGE']))
|
|
{
|
|
self::prepareLabels($fields, 'HELP_MESSAGE', '');
|
|
}
|
|
elseif(isset($persistedFields['HELP_MESSAGE']))
|
|
{
|
|
$fields['HELP_MESSAGE'] = $persistedFields['HELP_MESSAGE'];
|
|
}
|
|
|
|
$settings = isset($fields['SETTINGS']) && is_array($fields['SETTINGS']) ? $fields['SETTINGS'] : array();
|
|
$effectiveSettings = isset($persistedFields['SETTINGS']) && is_array($persistedFields['SETTINGS'])
|
|
? $persistedFields['SETTINGS'] : array();
|
|
|
|
if(isset($fields['SHOW_FILTER']))
|
|
{
|
|
$fields['SHOW_FILTER'] = mb_strtoupper($fields['SHOW_FILTER']) === 'Y' ? 'E' : 'N'; // E - 'By mask' is default
|
|
}
|
|
|
|
switch ($userTypeID)
|
|
{
|
|
case 'string':
|
|
{
|
|
if(isset($settings['DEFAULT_VALUE']))
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = $settings['DEFAULT_VALUE'];
|
|
}
|
|
|
|
if(isset($settings['ROWS']))
|
|
{
|
|
$effectiveSettings['ROWS'] = min(max($settings['ROWS'], 1), 50);
|
|
}
|
|
break;
|
|
}
|
|
case 'integer':
|
|
{
|
|
if(isset($settings['DEFAULT_VALUE']))
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = $settings['DEFAULT_VALUE'];
|
|
}
|
|
break;
|
|
}
|
|
case 'double':
|
|
{
|
|
if(isset($settings['DEFAULT_VALUE']))
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = $settings['DEFAULT_VALUE'];
|
|
}
|
|
|
|
if(isset($settings['PRECISION']))
|
|
{
|
|
$effectiveSettings['PRECISION'] = $settings['PRECISION'] >= 0
|
|
? $settings['PRECISION'] : 2;
|
|
}
|
|
break;
|
|
}
|
|
case 'boolean':
|
|
{
|
|
if(isset($settings['DEFAULT_VALUE']))
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = $settings['DEFAULT_VALUE'] > 0 ? 1 : 0;
|
|
}
|
|
|
|
if(isset($settings['DISPLAY']))
|
|
{
|
|
$effectiveSettings['DISPLAY'] = $settings['DISPLAY'] !== ''
|
|
? mb_strtoupper($settings['DISPLAY']) : 'CHECKBOX';
|
|
}
|
|
|
|
unset($fields['MULTIPLE']);
|
|
break;
|
|
}
|
|
case 'datetime':
|
|
{
|
|
if(isset($settings['DEFAULT_VALUE']))
|
|
{
|
|
$defaultValue = $settings['DEFAULT_VALUE'];
|
|
if(!is_array($defaultValue))
|
|
{
|
|
$defaultValue = array('VALUE' => $defaultValue, 'TYPE' => 'NONE');
|
|
}
|
|
|
|
$effectiveSettings['DEFAULT_VALUE'] = array(
|
|
'VALUE' => isset($defaultValue['VALUE'])
|
|
? \CRestUtil::unConvertDateTime($defaultValue['VALUE']) : '',
|
|
'TYPE' => isset($defaultValue['TYPE']) && $defaultValue['TYPE'] !== ''
|
|
? mb_strtoupper($defaultValue['TYPE']) : 'NONE'
|
|
);
|
|
}
|
|
break;
|
|
}
|
|
case 'enumeration':
|
|
{
|
|
if(isset($settings['DISPLAY']))
|
|
{
|
|
$effectiveSettings['DISPLAY'] = $settings['DISPLAY'] !== ''
|
|
? mb_strtoupper($settings['DISPLAY']) : 'LIST';
|
|
}
|
|
|
|
if(isset($settings['LIST_HEIGHT']))
|
|
{
|
|
$effectiveSettings['LIST_HEIGHT'] = $settings['LIST_HEIGHT'] > 0 ? $settings['LIST_HEIGHT'] : 1;
|
|
}
|
|
|
|
if(isset($fields['LIST']))
|
|
{
|
|
$listItems = is_array($fields['LIST']) ? $fields['LIST'] : array();
|
|
$effectiveListItems = array();
|
|
|
|
$counter = 0;
|
|
$defaultItemKey = '';
|
|
foreach($listItems as $item)
|
|
{
|
|
$itemValue = isset($item['VALUE']) ? trim($item['VALUE'], " \t\n\r") : '';
|
|
|
|
$effectiveItem = array('VALUE' => $itemValue);
|
|
$itemXmlID = isset($item['XML_ID']) ? $item['XML_ID'] : '';
|
|
if($itemXmlID !== '')
|
|
{
|
|
$effectiveItem['XML_ID'] = $itemXmlID;
|
|
}
|
|
$itemSort = isset($item['SORT']) && is_numeric($item['SORT']) ? (int)$item['SORT'] : 0;
|
|
if($itemSort > 0)
|
|
{
|
|
$effectiveItem['SORT'] = $itemSort;
|
|
}
|
|
|
|
$itemID = isset($item['ID']) && is_numeric($item['ID']) ? (int)$item['ID'] : 0;
|
|
if($itemID > 0)
|
|
{
|
|
$itemKey = strval($itemID);
|
|
if(isset($item['DEL']) && mb_strtoupper($item['DEL']) === 'Y')
|
|
{
|
|
$effectiveItem['DEL'] = 'Y';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$itemKey = "n{$counter}";
|
|
$counter++;
|
|
}
|
|
|
|
if(isset($item['DEF']))
|
|
{
|
|
$isDefault = mb_strtoupper($item['DEF']) === 'Y';
|
|
if($isMultiple)
|
|
{
|
|
$effectiveItem['DEF'] = $isDefault ? 'Y' : 'N';
|
|
}
|
|
elseif($isDefault && $defaultItemKey === '')
|
|
{
|
|
$defaultItemKey = $itemKey;
|
|
}
|
|
}
|
|
|
|
if(!empty($item))
|
|
{
|
|
$effectiveListItems[$itemKey] = &$effectiveItem;
|
|
}
|
|
unset($effectiveItem);
|
|
}
|
|
|
|
if(!$isMultiple && $defaultItemKey !== '')
|
|
{
|
|
foreach($effectiveListItems as $key => &$item)
|
|
{
|
|
$item['DEF'] = $key === $defaultItemKey ? 'Y' : 'N';
|
|
}
|
|
unset($item);
|
|
}
|
|
$fields['LIST'] = $effectiveListItems;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 'iblock_section':
|
|
case 'iblock_element':
|
|
{
|
|
if(isset($settings['IBLOCK_TYPE_ID']))
|
|
{
|
|
$effectiveSettings['IBLOCK_TYPE_ID'] = $settings['IBLOCK_TYPE_ID'];
|
|
}
|
|
|
|
if(isset($settings['IBLOCK_ID']))
|
|
{
|
|
$effectiveSettings['IBLOCK_ID'] = $settings['IBLOCK_ID'] > 0 ? $settings['IBLOCK_ID'] : 0;
|
|
}
|
|
|
|
if(isset($settings['DEFAULT_VALUE']))
|
|
{
|
|
$effectiveSettings['DEFAULT_VALUE'] = $settings['DEFAULT_VALUE'];
|
|
}
|
|
|
|
if(isset($settings['DISPLAY']))
|
|
{
|
|
$effectiveSettings['DISPLAY'] = $settings['DISPLAY'] !== ''
|
|
? mb_strtoupper($settings['DISPLAY']) : 'LIST';
|
|
}
|
|
|
|
if(isset($settings['LIST_HEIGHT']))
|
|
{
|
|
$effectiveSettings['LIST_HEIGHT'] = $settings['LIST_HEIGHT'] > 0 ? $settings['LIST_HEIGHT'] : 1;
|
|
}
|
|
|
|
if(isset($settings['ACTIVE_FILTER']))
|
|
{
|
|
$effectiveSettings['ACTIVE_FILTER'] = mb_strtoupper($settings['ACTIVE_FILTER']) === 'Y' ? 'Y' : 'N';
|
|
}
|
|
|
|
break;
|
|
}
|
|
case 'crm_status':
|
|
{
|
|
if(isset($settings['ENTITY_TYPE']))
|
|
{
|
|
$effectiveSettings['ENTITY_TYPE'] = $settings['ENTITY_TYPE'];
|
|
}
|
|
break;
|
|
}
|
|
case 'crm':
|
|
{
|
|
if(isset($settings['LEAD']))
|
|
{
|
|
$effectiveSettings['LEAD'] = mb_strtoupper($settings['LEAD']) === 'Y' ? 'Y' : 'N';
|
|
}
|
|
|
|
if(isset($settings['CONTACT']))
|
|
{
|
|
$effectiveSettings['CONTACT'] = mb_strtoupper($settings['CONTACT']) === 'Y' ? 'Y' : 'N';
|
|
}
|
|
|
|
if(isset($settings['COMPANY']))
|
|
{
|
|
$effectiveSettings['COMPANY'] = mb_strtoupper($settings['COMPANY']) === 'Y' ? 'Y' : 'N';
|
|
}
|
|
|
|
if(isset($settings['DEAL']))
|
|
{
|
|
$effectiveSettings['DEAL'] = mb_strtoupper($settings['DEAL']) === 'Y' ? 'Y' : 'N';
|
|
}
|
|
break;
|
|
}
|
|
case 'employee':
|
|
{
|
|
if(isset($fields['SHOW_FILTER']) && $fields['SHOW_FILTER'] !== 'N')
|
|
{
|
|
$fields['SHOW_FILTER'] = 'I'; // Force exact match for 'USER' field type
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
$fields['SETTINGS'] = $effectiveSettings;
|
|
|
|
if($entity->Update($ID, $fields) === false)
|
|
{
|
|
$exc = $APPLICATION->GetException();
|
|
throw new RestException(
|
|
$exc !== false ? $exc->GetString() : 'Fail to update user field.',
|
|
RestException::ERROR_CORE
|
|
);
|
|
}
|
|
elseif($userTypeID === 'enumeration' && isset($fields['LIST']) && is_array($fields['LIST']))
|
|
{
|
|
$enum = new \CUserFieldEnum();
|
|
if(!$enum->SetEnumValues($ID, $fields['LIST']))
|
|
{
|
|
$exc = $APPLICATION->GetException();
|
|
throw new RestException(
|
|
$exc !== false ? $exc->GetString() : 'Fail to save enumumeration field values.',
|
|
RestException::ERROR_CORE
|
|
);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
public function delete($ID)
|
|
{
|
|
global $APPLICATION;
|
|
|
|
if(!is_int($ID))
|
|
{
|
|
$ID = (int)$ID;
|
|
}
|
|
|
|
if($ID <= 0)
|
|
{
|
|
throw new RestException('ID is not defined or invalid.');
|
|
}
|
|
|
|
if(!$this->checkDeletePermission())
|
|
{
|
|
throw new RestException('Access denied.');
|
|
}
|
|
|
|
$entity = new \CUserTypeEntity();
|
|
$dbResult = $entity->GetList(array(), array('ID' => $ID));
|
|
$persistedFields = is_object($dbResult) ? $dbResult->Fetch() : null;
|
|
if(!is_array($persistedFields))
|
|
{
|
|
throw new RestException("The entity with ID '{$ID}' is not found.", RestException::ERROR_NOT_FOUND);
|
|
}
|
|
|
|
$entityID = isset($persistedFields['ENTITY_ID']) ? $persistedFields['ENTITY_ID'] : '';
|
|
if($entityID !== $this->entityID)
|
|
{
|
|
throw new RestException('Access denied.');
|
|
}
|
|
|
|
if($entity->Delete($ID) === false)
|
|
{
|
|
$exc = $APPLICATION->GetException();
|
|
throw new RestException(
|
|
$exc !== false ? $exc->GetString() : 'Fail to delete user field.',
|
|
RestException::ERROR_CORE
|
|
);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
protected static function sanitizeFields(array &$fields)
|
|
{
|
|
$fieldsInfo = self::getFields();
|
|
foreach($fields as $k => $v)
|
|
{
|
|
if(!isset($fieldsInfo[$k]))
|
|
{
|
|
unset($fields[$k]);
|
|
}
|
|
}
|
|
}
|
|
protected function isAuthorizedUser()
|
|
{
|
|
if($this->isAuthorizedUser === null)
|
|
{
|
|
$this->isAuthorizedUser = $this->user->IsAuthorized();
|
|
}
|
|
return $this->isAuthorizedUser;
|
|
}
|
|
protected function isAdminUser()
|
|
{
|
|
if($this->isAdminUser !== null)
|
|
{
|
|
return $this->isAdminUser;
|
|
}
|
|
|
|
$this->isAdminUser = $this->user->IsAdmin();
|
|
|
|
if(!$this->isAdminUser
|
|
&& \Bitrix\Main\ModuleManager::isModuleInstalled('bitrix24')
|
|
&& \Bitrix\Main\Loader::includeModule('bitrix24'))
|
|
{
|
|
try
|
|
{
|
|
$this->isAdminUser = \CBitrix24::IsPortalAdmin($this->user->GetID());
|
|
}
|
|
catch(\Exception $exc)
|
|
{
|
|
}
|
|
}
|
|
|
|
return $this->isAdminUser;
|
|
}
|
|
protected function getCurrentUser()
|
|
{
|
|
return isset($USER) && ((get_class($USER) === 'CUser') || ($USER instanceof \CUser))
|
|
? $USER : (new \CUser());
|
|
}
|
|
protected static function getAllLanguages()
|
|
{
|
|
if(self::$langs !== null)
|
|
{
|
|
return self::$langs;
|
|
}
|
|
|
|
self::$langs = array();
|
|
$entity = new \CLanguage();
|
|
$dbResult = $entity->GetList();
|
|
while($lang = $dbResult->Fetch())
|
|
{
|
|
self::$langs[$lang['LID']] = array('LID' => $lang['LID'], 'NAME' => $lang['NAME']);
|
|
}
|
|
return self::$langs;
|
|
}
|
|
protected static function prepareLabels(array &$fields, $name, $defaultLabel)
|
|
{
|
|
$label = isset($fields[$name]) ? $fields[$name] : null;
|
|
if(is_string($label) && $label !== '')
|
|
{
|
|
$labels = array();
|
|
$default = $label;
|
|
}
|
|
else
|
|
{
|
|
$labels = is_array($label) ? $label : array();
|
|
$default = $defaultLabel;
|
|
}
|
|
|
|
$langIDs = array_keys(self::getAllLanguages());
|
|
$fields[$name] = array();
|
|
foreach($langIDs as $lid)
|
|
{
|
|
$fields[$name][$lid] = isset($labels[$lid]) && is_string($labels[$lid]) && $labels[$lid] !== ''
|
|
? $labels[$lid] : $default;
|
|
}
|
|
}
|
|
protected function checkCreatePermission()
|
|
{
|
|
return $this->isAdminUser();
|
|
}
|
|
protected function checkReadPermission()
|
|
{
|
|
return $this->isAdminUser();
|
|
}
|
|
protected function checkUpdatePermission()
|
|
{
|
|
return $this->isAdminUser();
|
|
}
|
|
protected function checkDeletePermission()
|
|
{
|
|
return $this->isAdminUser();
|
|
}
|
|
|
|
private static function includeLangFile()
|
|
{
|
|
if(!self::$langIncluded)
|
|
{
|
|
self::$langIncluded = IncludeModuleLangFile(__FILE__);
|
|
}
|
|
}
|
|
}
|