AVE.CMS v3.28
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

954 lines
27 KiB

7 years ago
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
/**
* Определяем пустое изображение
*/
7 years ago
$img_pixel = 'templates/images/default.png';
7 years ago
/**
* Проверка папки /fields/ на наличие полей
*/
if (is_dir(BASE_DIR . '/fields/'))
{
$d = dir(BASE_DIR . '/fields');
while (false !== ($entry = $d->read()))
{
$field_dir = $d->path . '/' . $entry;
if (is_dir($field_dir) && file_exists($field_dir . '/field.php'))
7 years ago
{
require_once ($field_dir . '/field.php');
}
7 years ago
}
$d->Close();
}
/**
* Проверка папок /fields/ в модулях, на наличие полей
*/
7 years ago
if (is_dir(BASE_DIR . '/modules/'))
7 years ago
{
7 years ago
$d = dir(BASE_DIR . '/modules');
7 years ago
7 years ago
while (false !== ($entry = $d->read()))
{
$module_dir = $d->path . '/' . $entry;
7 years ago
7 years ago
if (is_dir($module_dir) && file_exists($module_dir . '/field.php'))
require_once($module_dir . '/field.php');
}
$d->Close();
}
7 years ago
/**
* Поле по умолчанию
*
* @param $field_value
* @param $action
* @param int $field_id
* @param string $tpl
* @param int $tpl_empty
* @param null $maxlength
* @param array $document_fields
* @param int $rubric_id
* @param null $default
*
* @return string
*/
5 years ago
function get_field_default ($field_value, $action, $field_id=0, $tpl='', $tpl_empty=0, &$maxlength=null, $document_fields=array(), $rubric_id=0, $default=null, $_tpl=null)
7 years ago
{
switch ($action)
{
case 'edit':
7 years ago
return '<input type="text" style="width: 100%" name="feld[' . $field_id . ']" value="' . $field_value . '">';
7 years ago
case 'doc':
case 'req':
7 years ago
if (! $tpl_empty)
7 years ago
{
$field_param = explode('|', $field_value);
5 years ago
7 years ago
$field_value = preg_replace_callback(
'/\[tag:parametr:(\d+)\]/i',
function($data) use($field_param)
{
return $field_param[(int)$data[1]];
},
$tpl
);
}
return $field_value;
7 years ago
default:
return $field_value;
7 years ago
}
}
/**
* Возвращаем тип поля
*
6 years ago
* @param string $type
*
7 years ago
* @return mixed
7 years ago
*/
7 years ago
function get_field_type ($type = '')
7 years ago
{
static $fields;
7 years ago
if (is_array($fields))
7 years ago
return $fields;
$arr = get_defined_functions();
5 years ago
$fields = [];
$field = [];
7 years ago
7 years ago
foreach ($arr['user'] as $v)
7 years ago
{
7 years ago
if (trim(substr($v, 0, strlen('get_field_'))) == 'get_field_')
7 years ago
{
$d = '';
$name = @$v('', 'name', '', '', 0, $d);
$id = substr($v, strlen('get_field_'));
if ($name != false && is_string($name))
5 years ago
$fields[] = ['id' => $id, 'name' => $name];
7 years ago
if (! empty($type) && $id == $type)
5 years ago
$field = ['id' => $id, 'name' => $name];
7 years ago
}
7 years ago
else
continue;
7 years ago
}
5 years ago
$fields = msort($fields, ['name']);
7 years ago
7 years ago
return (! empty($type))
? $field
: $fields;
7 years ago
}
/**
* Возвращаем алиас по номеру поля
*
* @param $id
* @return string
*/
4 years ago
function get_field_alias ($field_id)
7 years ago
{
4 years ago
if (! Registry::stored('fields_params', $field_id))
_get_field_params($field_id);
7 years ago
4 years ago
$alias = Registry::get('fields_params', $field_id);
7 years ago
4 years ago
$alias = $alias['rubric_field_alias'] ? $alias['rubric_field_alias'] : $field_id;
7 years ago
4 years ago
return $alias;
7 years ago
}
/**
* Возвращаем номер поля по рубрике и алиасу
*
* @param $rubric_id
* @param $alias
*
* @return string
*/
5 years ago
function get_field_num ($rubric_id, $alias)
7 years ago
{
7 years ago
global $AVE_DB;
7 years ago
5 years ago
static $alias_field_id = [];
7 years ago
if (isset($alias_field_id[$rubric_id][$alias]))
return $alias_field_id[$rubric_id][$alias];
$sql = "
5 years ago
SELECT
Id
7 years ago
FROM
" . PREFIX . "_rubric_fields
WHERE
6 years ago
(rubric_field_alias = '" . addslashes($alias) . "'
OR Id = '" . intval($alias) . "')
7 years ago
AND
6 years ago
rubric_id = " . intval($rubric_id)
7 years ago
;
$alias_field_id[$rubric_id][$alias] = $AVE_DB->Query($sql)->GetCell();
7 years ago
return $alias_field_id[$rubric_id][$alias];
}
7 years ago
7 years ago
/**
5 years ago
* Возвращаем значение по умолчанию, для поля
7 years ago
*
* @param $id
*
* @return string
*/
5 years ago
function get_field_default_value ($id)
7 years ago
{
global $AVE_DB;
5 years ago
static $alias_field_id = [];
7 years ago
7 years ago
if (isset($alias_field_id[$id]))
7 years ago
return $alias_field_id[$id];
7 years ago
$sql = "
7 years ago
SELECT
rubric_field_default
FROM
" . PREFIX . "_rubric_fields
WHERE
Id = ".intval($id)
7 years ago
;
$alias_field_id[$id] = $AVE_DB->Query($sql)->GetCell();
7 years ago
return $alias_field_id[$id];
}
7 years ago
7 years ago
/**
* Возвращаем шаблон tpl или пусто
*
7 years ago
* @param string $dir папка шаблона
7 years ago
* @param int $field_id идентификатор поля
7 years ago
* @param string $type тип поля
* @param int $_tpl номер шаблона
7 years ago
*
* @return string
*/
4 years ago
function get_field_tpl ($dir = '', $field_id = 0, $type = 'admin', $_tpl = null)
7 years ago
{
7 years ago
if (! $type)
return false;
7 years ago
7 years ago
$alias_field_id = get_field_alias($field_id);
7 years ago
4 years ago
// Если существует файл с ID поля и ID шаблона
7 years ago
if (file_exists($dir.'field-'.$type.'-'.$field_id.'-'.$_tpl.'.tpl'))
$tpl = $dir.'field-'.$type.'-'.$field_id.'-'.$_tpl.'.tpl';
4 years ago
// Если существует файл с аласом поля и ID шаблона
7 years ago
else if (file_exists($dir.'field-'.$type.'-'.$alias_field_id.'-'.$_tpl.'.tpl'))
$tpl = $dir.'field-'.$type.'-'.$alias_field_id.'-'.$_tpl.'.tpl';
4 years ago
// Если существует файл с ID поля
7 years ago
else if (file_exists($dir.'field-'.$type.'-'.$field_id.'.tpl'))
$tpl = $dir.'field-'.$type.'-'.$field_id.'.tpl';
4 years ago
// Если существует файл с алиасом поля
7 years ago
else if (file_exists($dir.'field-'.$type.'-'.$alias_field_id.'.tpl'))
$tpl = $dir.'field-'.$type.'-'.$alias_field_id.'.tpl';
4 years ago
// Если существует файл c типом поля
7 years ago
else if (file_exists($dir.'field-'.$type.'.tpl'))
$tpl = $dir.'field-'.$type.'.tpl';
4 years ago
// Если существует файл c ID поля
7 years ago
else if (file_exists($dir.'field-'.$field_id.'.tpl'))
$tpl = $dir.'field-'.$field_id.'.tpl';
// Иначе
else
$tpl = $dir.'field.tpl';
7 years ago
return $tpl;
}
/**
* Формирование поля документа в соответствии с шаблоном отображения
*
* @param int $field_id идентификатор поля
* @param int $document_id
*
6 years ago
* @param null $_tpl
*
5 years ago
* @param null $maxlength
*
7 years ago
* @return string
*/
5 years ago
function document_get_field ($field_id, $document_id = null, $_tpl = null, $maxlength = null)
7 years ago
{
global $AVE_Core;
7 years ago
if (! $_tpl && is_array($field_id))
$_tpl = $field_id[2];
7 years ago
if (is_array($field_id))
$field_id = $field_id[1];
$document_fields = get_document_fields(empty($document_id)
? $AVE_Core->curentdoc->Id
: intval($document_id));
if (! is_array($document_fields[$field_id]))
$field_id = intval($document_fields[$field_id]);
if (empty($document_fields[$field_id]))
return '';
$field_value = trim($document_fields[$field_id]['field_value']);
$tpl_field_empty = $document_fields[$field_id]['tpl_field_empty'];
5 years ago
// ToDo
7 years ago
// if ($field_value == '' && $tpl_field_empty) return '';
$field_type = $document_fields[$field_id]['rubric_field_type'];
$rubric_field_template = trim($document_fields[$field_id]['rubric_field_template']);
$rubric_field_default = $document_fields[$field_id]['rubric_field_default'];
5 years ago
// ToDo
7 years ago
// $field_value = parse_hide($field_value);
// $field_value = ($length != '') ? truncate_text($field_value, $length, '…', true) : $field_value;
$func = 'get_field_' . $field_type;
7 years ago
if (! is_callable($func))
7 years ago
$func = 'get_field_default';
7 years ago
$field_value = $func($field_value, 'doc', $field_id, $rubric_field_template, $tpl_field_empty, $maxlength, $document_fields, RUB_ID, $rubric_field_default, $_tpl);
7 years ago
return $field_value;
}
/**
* Функция получения содержимого поля для обработки в шаблоне рубрики
*
* @param int $field_id идентификатор поля, для [tag:fld:12] $field_id = 12
* @param int $length необязательный параметр,
* количество возвращаемых символов содержимого поля.
* если данный параметр указать со знаком минус
* содержимое поля будет очищено от HTML-тегов.
* @return string
*/
5 years ago
function document_get_field_value ($field_id, $length = 0)
7 years ago
{
7 years ago
if (! is_numeric($field_id))
return '';
7 years ago
5 years ago
$doc_id = get_current_document_id();
$document_fields = get_document_fields($doc_id);
7 years ago
$field_value = trim($document_fields[$field_id]['field_value']);
if ($field_value != '')
{
7 years ago
$field_value = strip_tags($field_value); // "<br /><strong><em><p><i>"
7 years ago
if (is_numeric($length) && $length != 0)
{
if ($length < 0)
{
$field_value = strip_tags($field_value);
$field_value = preg_replace('/ +/', ' ', $field_value);
$field_value = trim($field_value);
$length = abs($length);
}
5 years ago
$field_value = truncate_text($field_value, $length, '…');
7 years ago
}
}
return $field_value;
}
/**
* Возвращаем истинное значение поля для документа
*
* @param int $document_id id документа
* @param string $field id поля или его алиас
*
* @return string
*/
5 years ago
function get_document_field ($document_id, $field)
7 years ago
{
4 years ago
if (Registry::stored($document_id, $field))
$document_fields = Registry::get($document_id, $field);
else
$document_fields = get_document_fields($document_id);
7 years ago
if (! is_array($document_fields[$field]))
$field = intval($document_fields[$field]);
if (empty($document_fields[$field]))
return false;
$field_value = $document_fields[$field]['field_value'];
return $field_value;
}
/**
* Функция возвращает массив со значениями полей
*
* @param $document_id
* @param array $values если надо вернуть документ с произвольными значениями - используется для ревизий документов
* @internal param int $id id документа
7 years ago
* @return mixed
7 years ago
*/
5 years ago
function get_document_fields ($document_id, $values = null)
7 years ago
{
4 years ago
global $AVE_DB, $AVE_Core; //$request_documents
7 years ago
7 years ago
if (! is_numeric($document_id))
7 years ago
return false;
4 years ago
if (! defined('USE_STATIC_DATA') || ! USE_STATIC_DATA)
Registry::clean();
if (Registry::stored('fields', $document_id))
return Registry::get('fields', $document_id);
$document_fields = Registry::get('fields');
$fields_param = Registry::get('fields_param');
if (Registry::stored('rubric_changeds'))
$rubric_changed_fields = Registry::get('rubric_changeds');
else
$rubric_changed_fields = get_rubrics_changes();
4 years ago
if (! isset($AVE_Core) || $AVE_Core->curentdoc->Id != $document_id)
{
4 years ago
$rubric_id = get_document($document_id, 'rubric_id');
4 years ago
4 years ago
$cache_time = $rubric_changed_fields[$rubric_id]['rubric_changed_fields'];
4 years ago
}
else
{
$cache_time = $AVE_Core->curentdoc->rubric_changed_fields;
}
if ($cache_time == 0)
$cache_time = -1;
7 years ago
if (! isset($document_fields[$document_id]))
7 years ago
{
$document_fields[$document_id] = false;
$where = "WHERE doc_field.document_id = '" . $document_id . "'";
7 years ago
$query = "
7 years ago
SELECT
7 years ago
doc.document_author_id,
7 years ago
doc_field.Id,
doc_field.document_id,
doc_field.rubric_field_id,
7 years ago
doc_field.field_value,
5 years ago
text_field.field_value AS field_value_more,
4 years ago
rub_field.rubric_id,
7 years ago
rub_field.rubric_field_alias,
rub_field.rubric_field_type,
rub_field.rubric_field_default,
4 years ago
rub_field.rubric_field_numeric,
7 years ago
rub_field.rubric_field_title,
rub_field.rubric_field_template,
rub_field.rubric_field_template_request
FROM
" . PREFIX . "_document_fields AS doc_field
JOIN
" . PREFIX . "_rubric_fields AS rub_field
ON doc_field.rubric_field_id = rub_field.Id
LEFT JOIN
" . PREFIX . "_document_fields_text AS text_field
7 years ago
ON (doc_field.rubric_field_id = text_field.rubric_field_id AND doc_field.document_id = text_field.document_id)
7 years ago
JOIN
" . PREFIX . "_documents AS doc
7 years ago
ON doc.Id = doc_field.document_id
5 years ago
" . $where . "
# DOC FIELDS = $document_id
";
7 years ago
4 years ago
$cache_id = (int)$document_id;
5 years ago
$cache_id = 'documents/' . (floor($cache_id / 1000)) . '/' . $cache_id;
7 years ago
7 years ago
$cache_file = md5($query) . '.fields';
$cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > ''
? trim($cache_id) . '/'
: substr($cache_file, 0, 2) . '/' . substr($cache_file, 2, 2) . '/' . substr($cache_file, 4, 2) . '/');
// Наличие файла
if (file_exists($cache_dir . $cache_file))
7 years ago
{
7 years ago
// Получаем время создания файла
$file_time = filemtime($cache_dir . $cache_file);
// Сравниваем временные метки
4 years ago
if (! $cache_time || $cache_time > $file_time || $cache_time == 0)
unlink($cache_dir . $cache_file);
7 years ago
}
5 years ago
$cache_time = (defined('CACHE_DOC_FILE') && CACHE_DOC_FILE)
? -1
: 0;
$sql = $AVE_DB->Query($query, $cache_time, 'fld_' . $document_id, true, '.fields');
7 years ago
// Вдруг памяти мало!!!!
if (memory_panic() && (count($document_fields) > 3))
5 years ago
$document_fields = [];
7 years ago
7 years ago
while ($row = $sql->FetchAssocArray())
{
$row['tpl_req_empty'] = (trim($row['rubric_field_template_request']) == '');
$row['tpl_field_empty'] = (trim($row['rubric_field_template']) == '');
6 years ago
$row['field_value'] = (string)$row['field_value'] . (string)$row['field_value_more'];
7 years ago
6 years ago
if ($values)
4 years ago
$row['field_value'] = (isset($values[$row['rubric_field_id']])
? $values[$row['rubric_field_id']]
: $row['field_value']);
7 years ago
if ($row['field_value'] === '')
{
$row['rubric_field_template_request'] = preg_replace('/\[tag:if_notempty](.*?)\[\/tag:if_notempty]/si', '', $row['rubric_field_template_request']);
5 years ago
$row['rubric_field_template_request'] = trim(str_replace(['[tag:if_empty]','[/tag:if_empty]'], '', $row['rubric_field_template_request']));
7 years ago
$row['rubric_field_template'] = preg_replace('/\[tag:if_notempty](.*?)\[\/tag:if_notempty]/si', '', $row['rubric_field_template']);
5 years ago
$row['rubric_field_template'] = trim(str_replace(['[tag:if_empty]','[/tag:if_empty]'], '', $row['rubric_field_template']));
7 years ago
}
else
{
$row['rubric_field_template_request'] = preg_replace('/\[tag:if_empty](.*?)\[\/tag:if_empty]/si', '', $row['rubric_field_template_request']);
5 years ago
$row['rubric_field_template_request'] = trim(str_replace(['[tag:if_notempty]','[/tag:if_notempty]'], '', $row['rubric_field_template_request']));
7 years ago
$row['rubric_field_template'] = preg_replace('/\[tag:if_empty](.*?)\[\/tag:if_empty]/si', '', $row['rubric_field_template']);
5 years ago
$row['rubric_field_template'] = trim(str_replace(['[tag:if_notempty]','[/tag:if_notempty]'], '', $row['rubric_field_template']));
7 years ago
}
4 years ago
//$document_fields[$row['document_id']][$row['rubric_field_id']] = $row;
7 years ago
$document_fields[$row['document_id']][$row['rubric_field_alias']] = $row['rubric_field_id'];
4 years ago
$document_fields[$document_id][$row['rubric_field_id']] = [
'Id' => $row['Id'],
'document_id' => $row['document_id'],
'document_author_id' => $row['document_author_id'],
'rubric_field_id' => $row['rubric_field_id'],
'field_value' => $row['field_value'],
'field_value_more' => $row['field_value_more'],
'tpl_req_empty' => $row['tpl_req_empty'],
'tpl_field_empty' => $row['tpl_field_empty'],
'rubric_id' => $row['rubric_id'],
'rubric_field_alias' => $row['rubric_field_alias'],
'rubric_field_type' => $row['rubric_field_type'],
'rubric_field_default' => $row['rubric_field_default'],
'rubric_field_numeric' => $row['rubric_field_numeric'],
'rubric_field_title' => $row['rubric_field_title'],
'rubric_field_template' => $row['rubric_field_template'],
'rubric_field_template_request' => $row['rubric_field_template_request'],
];
$fields_param[$row['rubric_field_id']] = [
'rubric_id' => $row['rubric_id'],
'rubric_field_alias' => $row['rubric_field_alias'],
'rubric_field_type' => $row['rubric_field_type'],
'rubric_field_default' => $row['rubric_field_default'],
'rubric_field_numeric' => $row['rubric_field_numeric'],
'rubric_field_title' => $row['rubric_field_title'],
];
7 years ago
}
}
7 years ago
4 years ago
Registry::set('fields', $document_fields);
if (! Registry::stored('fields_param', $row['rubric_field_id']))
Registry::set('fields_param', $fields_param);
unset ($document_fields, $rubric_changed_fields, $fields_param);
return Registry::get('fields', $document_id);
7 years ago
}
/**
* Возвращает содержимое поля документа по номеру
*
* @param int $field_id ([tag:fld:X]) - номер поля
* @param int $doc_id
* @param int $parametr ([tag:parametr:X]) - часть поля
*
* @return string
*/
5 years ago
function get_field ($field_id, $doc_id = null, $parametr = null)
7 years ago
{
global $req_item_id;
7 years ago
//-- Если не передан $doc_id, то проверяем реквест
if (! $doc_id && $req_item_id)
$doc_id = $req_item_id;
//-- Или берём для текущего дока
7 years ago
elseif (! $doc_id && $_REQUEST['id'] > 0)
$doc_id = $_REQUEST['id'];
7 years ago
//-- Возвращаем FALSE, если не число
elseif (! is_numeric($doc_id))
return false;
7 years ago
7 years ago
//-- Забираем из базы массив полей
5 years ago
$field = get_document_field ($doc_id, $field_id);
7 years ago
7 years ago
//-- Возвращаем нужную часть поля
7 years ago
if ($parametr !== null)
{
7 years ago
$field = explode("|", $field);
7 years ago
$field = array_values(array_diff($field, array('')));
$field = $field[$parametr];
}
return $field;
}
/**
* Возвращает содержимое поля документа по номеру
*
* @param int $field_id ([tag:fld:X]) - номер поля
* @param int $doc_id
* @param int $parametr ([tag:parametr:X]) - часть поля
*
7 years ago
* @return mixed
7 years ago
*/
5 years ago
function get_true_field ($field_id, $doc_id = null, $parametr = null)
7 years ago
{
global $req_item_id, $AVE_DB;
7 years ago
//-- Если не передан $doc_id, то проверяем реквест
7 years ago
if (! $doc_id && $req_item_id)
$doc_id = $req_item_id;
7 years ago
//-- Или берём для текущего дока
7 years ago
elseif (! $doc_id && $_REQUEST['id'] > 0)
$doc_id = $_REQUEST['id'];
7 years ago
//-- Возвращаем FALSE, если не число
elseif (! is_numeric($doc_id))
return false;
7 years ago
7 years ago
//-- Забираем поле из базы
7 years ago
$sql = "
SELECT
doc_field.field_value,
text_field.field_value AS field_value_more
FROM
" . PREFIX . "_document_fields AS doc_field
LEFT JOIN
" . PREFIX . "_document_fields_text AS text_field
ON (doc_field.rubric_field_id = text_field.rubric_field_id AND doc_field.document_id = text_field.document_id)
WHERE
doc_field.document_id = '" . $doc_id . "'
AND
doc_field.rubric_field_id = '" . $field_id . "'
";
$query = $AVE_DB->Query($sql)->FetchRow();
$field = (string)$query->field_value . (string)$query->field_value_more;
7 years ago
unset ($sql, $query);
7 years ago
7 years ago
//-- Возвращаем нужную часть поля
7 years ago
if ($parametr !== null)
{
$field = explode("|", $field);
$field = array_values(array_diff($field, array('')));
$field = $field[$parametr];
}
return $field;
}
7 years ago
7 years ago
/**
* Возвращает элемент сериализованного поля по номеру и ключу
*
* @param int $field_id ([tag:fld:X]) - номер поля
* @param int $item_id - номер элемента
* @param int $doc_id ([tag:docid]) - id документа
* @param int $parametr ([tag:parametr:X]) - номер параметра элемента
* @return string
*/
5 years ago
function get_element ($field_id, $item_id = 0, $parametr = null, $doc_id = null)
7 years ago
{
global $req_item_id;
7 years ago
//-- Если не передан $doc_id, то проверяем реквест
if (! $doc_id && $req_item_id)
7 years ago
$doc_id = $req_item_id;
7 years ago
//-- Или берём для текущего дока
7 years ago
elseif (! $doc_id && $_REQUEST['id'] > 0)
$doc_id = $_REQUEST['id'];
7 years ago
//-- Возвращаем FALSE, если не число
elseif (! is_numeric($doc_id))
return false;
7 years ago
7 years ago
//-- Забираем из базы поле
7 years ago
$field = get_field($field_id, $doc_id);
$field = unserialize($field);
// возвращаем нужную часть поля
if ($parametr !== null)
{
$field = $field[$item_id];
$field = explode("|", $field);
$field = $field[$parametr];
}
else
{
$field = $field[$item_id];
$field = explode("|", $field);
$field = $field[0];
}
return $field;
}
7 years ago
/**
* Возвращает сериализованны(й|е) элемент(ы) поля
*
* @param int $field_id ([tag:fld:X]) - номер поля
* @param int $item_id - номер элемента
* @param int $doc_id ([tag:docid]) - id документа
* @return mixed
*/
5 years ago
function get_serialize ($field_id, $item_id = null, $doc_id = null)
7 years ago
{
global $req_item_id;
//-- Если не передан $doc_id, то проверяем реквест
if (! $doc_id && $req_item_id)
$doc_id = $req_item_id;
//-- Или берём для текущего дока
elseif (! $doc_id && $_REQUEST['id'] > 0)
$doc_id = $_REQUEST['id'];
//-- Возвращаем FALSE, если не число
elseif (! is_numeric($doc_id))
return false;
//-- Забираем поле
$field = get_field($field_id, $doc_id);
$field = unserialize($field);
$field_data = array();
//-- Если получили массив из данных, собираем новый
if (! empty($field))
foreach ($field AS $k => $v)
$field_data[$k] = explode('|', $v);
//-- Иначе возвращаем FALSE
else
return false;
unset($field);
//-- Если пришло $item_id
if (is_numeric($item_id))
return $field_data[$item_id];
else
return $field_data;
}
7 years ago
/**
* Возвращает элемент сериализованного поля по номеру и ключу, через тег [tag:fld:XXX][XXX][XXX]
*
* @return string
*/
5 years ago
function get_field_element ()
7 years ago
{
$param = func_get_args();
7 years ago
// Field ID
$param_1 = isset($param[0]) ? $param[0] : null;
// Item ID
$param_2 = isset($param[1]) ? $param[1] : null;
// Param ID
$param_3 = isset($param[2]) ? $param[2] : null;
// Document ID
$param_4 = isset($param[3]) ? $param[3] : null;
$return = get_element($param_1, $param_2, $param_3, $param_4);
7 years ago
return $return;
}
7 years ago
/**
* Возвращает наименование поля документа по номеру
*
6 years ago
* @param int $field_id ([tag:fld:X]) - номер поля
* @param int $doc_id
7 years ago
*
* @return string
*/
5 years ago
function get_field_name ($field_id, $doc_id = null)
7 years ago
{
global $req_item_id;
//-- Если не передан $doc_id, то проверяем реквест
if (! $doc_id && $req_item_id)
$doc_id = $req_item_id;
//-- Или берём для текущего дока
elseif (! $doc_id && $_REQUEST['id'] > 0)
$doc_id = $_REQUEST['id'];
//-- Возвращаем FALSE, если не число
elseif (! is_numeric($doc_id))
return false;
$document_fields = get_document_fields($doc_id);
if (empty($document_fields[$field_id]))
return false;
$field_name = $document_fields[$field_id]['rubric_field_title'];
return $field_name;
}
5 years ago
4 years ago
/**
* Возвращает параметры поля
*
* @param int $field_id ([tag:fld:X]) - номер поля
*
* @return void
*/
function _get_field_params ($field_id)
{
global $AVE_DB;
if (Registry::stored('fields_params', $field_id))
return Registry::get('fields_params', $field_id);
$fields_param = Registry::get('fields_params');
$query = "
SELECT
rubric_id,
rubric_field_alias,
rubric_field_type,
rubric_field_default,
rubric_field_numeric,
rubric_field_title
FROM
" . PREFIX . "_rubric_fields
WHERE
Id = '" . $field_id . "'
LIMIT 0,1
# FIELDS PARAMS = $field_id
";
$row = $AVE_DB->Query($query)->FetchAssocArray();
$fields_param[$field_id] = [
'rubric_id' => $row['rubric_id'],
'rubric_field_alias' => $row['rubric_field_alias'],
'rubric_field_type' => $row['rubric_field_type'],
'rubric_field_default' => $row['rubric_field_default'],
'rubric_field_numeric' => $row['rubric_field_numeric'],
'rubric_field_title' => $row['rubric_field_title'],
];
Registry::set('fields_params', $fields_param);
unset ($query, $row, $fields_param);
}
5 years ago
/**
* Возвращает поле документа по номеру
*
* @param int $field_id ([tag:fld:X]) - номер поля
* @param int $doc_id
* @param int $parametr знчение
*
* @return mixed
*/
function get_full_field ($field_id, $doc_id = null, $parametr = null)
{
global $req_item_id, $AVE_DB;
//-- Если не передан $doc_id, то проверяем реквест
if (! $doc_id && $req_item_id)
$doc_id = $req_item_id;
//-- Или берём для текущего дока
elseif (! $doc_id && $_REQUEST['id'] > 0)
$doc_id = $_REQUEST['id'];
//-- Возвращаем FALSE, если не число
elseif (! is_numeric($doc_id))
return false;
//-- Забираем поле из базы
$sql = "
SELECT
doc.document_author_id,
doc_field.document_id,
doc_field.rubric_field_id,
doc_field.field_value,
doc_field.field_number_value,
text_field.field_value AS field_value_more,
rub_field.rubric_field_alias,
rub_field.rubric_field_type,
rub_field.rubric_field_default,
rub_field.rubric_field_title,
rub_field.rubric_field_template,
rub_field.rubric_field_template_request
FROM
" . PREFIX . "_document_fields AS doc_field
JOIN
" . PREFIX . "_rubric_fields AS rub_field
ON doc_field.rubric_field_id = rub_field.Id
LEFT JOIN
" . PREFIX . "_document_fields_text AS text_field
ON (doc_field.rubric_field_id = text_field.rubric_field_id AND doc_field.document_id = text_field.document_id)
JOIN
" . PREFIX . "_documents AS doc
ON doc.Id = doc_field.document_id
WHERE
doc_field.document_id = '" . $doc_id . "'
AND
doc_field.rubric_field_id = '" . $field_id . "'
";
$field = $AVE_DB->Query($sql)->FetchRow();
$field->field_value = (string)$field->field_value . (string)$field->field_value_more;
unset ($sql);
//-- Возвращаем нужную часть
if ($parametr !== null)
return $field[$parametr];
return $field;
}
7 years ago
?>