"); 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); } $field_value = truncate_text($field_value, $length, '…', true); } } return $field_value; } /** * Возвращаем истинное значение поля для документа * * @param int $document_id id документа * @param string $field id поля или его алиас * * @return string */ function get_document_field($document_id, $field) { $document_fields = get_document_fields($document_id); 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 документа * @return mixed */ function get_document_fields($document_id, $values = null) { global $AVE_DB, $request_documents; static $document_fields = array(); if (! is_numeric($document_id)) return false; if (!isset ($document_fields[$document_id])) { $document_fields[$document_id] = false; $where = "WHERE doc_field.document_id = '" . $document_id . "'"; $query=" SELECT doc_field.Id, doc_field.document_id, doc_field.rubric_field_id, rub_field.rubric_field_alias, rub_field.rubric_field_type, rub_field.rubric_field_default, doc_field.field_value, text_field.field_value as field_value_more, doc.document_author_id, 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; $sql = $AVE_DB->Query($query,-1,'doc_'.$document_id); //Вдруг памяти мало!!!! if (memory_panic() && (count($document_fields) > 3)) { $document_fields = array(); } while ($row = $sql->FetchAssocArray()) { $row['tpl_req_empty'] = (trim($row['rubric_field_template_request']) == ''); $row['tpl_field_empty'] = (trim($row['rubric_field_template']) == ''); $row['field_value']=(string)$row['field_value'].(string)$row['field_value_more']; if($values) { $row['field_value']=(isset($values[$row['rubric_field_id']]) ? $values[$row['rubric_field_id']] : $row['field_value']); } if ($row['field_value'] === '') { $row['rubric_field_template_request'] = preg_replace('/\[tag:if_notempty](.*?)\[\/tag:if_notempty]/si', '', $row['rubric_field_template_request']); $row['rubric_field_template_request'] = trim(str_replace(array('[tag:if_empty]','[/tag:if_empty]'), '', $row['rubric_field_template_request'])); $row['rubric_field_template'] = preg_replace('/\[tag:if_notempty](.*?)\[\/tag:if_notempty]/si', '', $row['rubric_field_template']); $row['rubric_field_template'] = trim(str_replace(array('[tag:if_empty]','[/tag:if_empty]'), '', $row['rubric_field_template'])); } else { $row['rubric_field_template_request'] = preg_replace('/\[tag:if_empty](.*?)\[\/tag:if_empty]/si', '', $row['rubric_field_template_request']); $row['rubric_field_template_request'] = trim(str_replace(array('[tag:if_notempty]','[/tag:if_notempty]'), '', $row['rubric_field_template_request'])); $row['rubric_field_template'] = preg_replace('/\[tag:if_empty](.*?)\[\/tag:if_empty]/si', '', $row['rubric_field_template']); $row['rubric_field_template'] = trim(str_replace(array('[tag:if_notempty]','[/tag:if_notempty]'), '', $row['rubric_field_template'])); } $document_fields[$row['document_id']][$row['rubric_field_id']] = $row; $document_fields[$row['document_id']][$row['rubric_field_alias']] = $row['rubric_field_id']; } } return $document_fields[$document_id]; } /** * Возвращает содержимое поля документа по номеру * * @param int $field_id ([tag:fld:X]) - номер поля * @param int $doc_id * @param int $parametr ([tag:parametr:X]) - часть поля * * @return string */ function get_field($field_id, $doc_id = null, $parametr = null) { 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_document_field($doc_id, $field_id); //-- Возвращаем нужную часть поля if ($parametr !== null) { $field = explode("|", $field); $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]) - часть поля * * @return mixed */ function get_true_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_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; unset ($sql, $query); //-- Возвращаем нужную часть поля if ($parametr !== null) { $field = explode("|", $field); $field = array_values(array_diff($field, array(''))); $field = $field[$parametr]; } return $field; } /** * Возвращает элемент сериализованного поля по номеру и ключу * * @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 */ function get_element($field_id, $item_id = 0, $parametr = null, $doc_id = null) { 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); // возвращаем нужную часть поля 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; } /** * Возвращает сериализованны(й|е) элемент(ы) поля * * @param int $field_id ([tag:fld:X]) - номер поля * @param int $item_id - номер элемента * @param int $doc_id ([tag:docid]) - id документа * @return mixed */ function get_serialize($field_id, $item_id = null, $doc_id = null) { 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; } /** * Возвращает элемент сериализованного поля по номеру и ключу, через тег [tag:fld:XXX][XXX][XXX] * * @return string */ function return_element() { $param = func_get_args(); $return = get_element($param[0][1], $param[0][2], $param[0][3]); return $return; } ?>