Line # Revision Author
1 8 ahitrov@rambler.ru package Contenido::Document;
2
3 # ----------------------------------------------------------------------------
4 # Класс Документ
5 # ----------------------------------------------------------------------------
6
7 use strict;
8 use warnings;
9 use locale;
10
11 use base 'Contenido::Object';
12
13 use Utils;
14 use Contenido::Globals;
15 use Data::Dumper;
16
17 sub class_name {
18 return 'Документ';
19 }
20
21 sub class_description {
22 return 'Документ по умолчанию';
23 }
24
25 # клас реализации таблицы
26 sub class_table {
27 return 'SQL::DocumentTable';
28 }
29
30 # ----------------------------------------------------------------------------
31 # Конструктор. Создает новый объект для работы с документами в среде базы
32 # данных PostgreSQL.
33 #
34 # Формат использования:
35 # Contenido::Document->new()
36 # Contenido::Document->new($keeper)
37 # Contenido::Document->new($keeper, $id)
38 #
39 # Возвращает либо истинное значение, если все получилось, либо ложь.
40 # ----------------------------------------------------------------------------
41 sub new {
42 my ($proto, $keeper, $id) = @_;
43 my $class = ref($proto) || $proto;
44 my $self;
45
46 if (defined($id) && ($id>0) && defined($keeper)) {
47 $self=$keeper->get_document_by_id($id, class=>$class);
48 } else {
49 $self = {};
50 bless($self, $class);
51 $self->init();
52 $self->class($class);
53 $self->keeper($keeper) if (ref $keeper);
54 }
55 return $self;
56 }
57
58 # Возвращает главную секцию (первую)...
59 # вот такой вот загадочный код ;))
60 # искренне надеюсь что он работает и причем так как надо
61 sub section {
62 shift @{[shift->sections()]};
63 }
64
65
66 ####
67 # Шаблонный метод для определения полей, по которым можно искать.
68 # Переопределяется в документах, возвращает массив названий полей.
69 ##################################################################
70 sub search_fields {
71 return ('name');
72 }
73
74 ####
75 # Шаблонный метод для описания полей в документах других классов,
76 # связанных с данным документом связью многие-к-одному от поля
77 612 ahitrov # field документа класса class к id (или source_field) данного документа.
78 # auto - дополнительная инициализация полей создаваемого (target) документа
79 # на базе значений полей текущего (source) документа
80 8 ahitrov@rambler.ru #
81 # Пример:
82 # {
83 # name => 'Описание связи',
84 # class => 'project::Class',
85 247 ahitrov # filter => 'filter_name that will be set to "get_documents" request'
86 # field => 'table_field which is linked to the current table'
87 # source_field => 'field (except id) to which target table is linked to'
88 612 ahitrov # auto => { target_field1 => source_field1, target_field2 => source_field2 ... }
89 8 ahitrov@rambler.ru # }
90 #
91 ##################################################################
92 sub table_links {
93 return undef;
94 }
95
96
97 ####
98 247 ahitrov # Шаблонный конфигуратор Jevix
99 8 ahitrov@rambler.ru ##################################################################
100 sub jevix_conf
101 {
102 my $jevix_conf = {
103 247 ahitrov isHTML => 1, # Работать в режиме гипертекста (в режиме простого текста работает быстрее)
104 lineBreaks => 0, # Расставлять переносы строк <br />
105 paragraphs => 0, # Размечать параграфы <p>
106 dashes => 1, # Тире
107 dots => 1, # Многоточия
108 edgeSpaces => 1, # Убирать пробельные символы в начале и конце строки
109 tagSpaces => 1, # Убирать пробелы между тегами (</td> <td>)
110 multiSpaces => 1, # Превращать множественные пробелы в одинарные
111 redundantSpaces => 1, # Убирать пробелы там, где их не должно быть
112 compositeWords => 0, # Заключать составные слова в тег <nobr>
113 compositeWordsLength => 10, # Максимальная длина составного слова, заключаемого в тег <nobr>
114 nbsp => 0, # Расставлять неразрывные пробелы
115 quotes => 1, # Верстать кавычки
116 qaType => 0, # Тип внешних кавычек (см. настройки отладочного интерфейса на http://jevix.ru/)
117 qbType => 1, # Тип вложенных кавычек
118 misc => 1, # Всякое разное (&copy, дроби и прочее)
119 codeMode => 2, # Способ кодировки спец. символов (0: ANSI <...>, 1: HTML-код <&#133;>, 2: HTML-сужности <&hellip;>)
120 tagsDenyAll => 0, # По умолчанию отвергать все теги
121 tagsDeny => 'script', # Список запрещённых тегов
122 tagsAllow => '', # Список разрешённых тегов (исключает их, когда устанавлен запрет всех)
123 tagCloseSingle => 0, # Закрывать одинарные теги, когда они не закрыты
124 tagNamesToLower => 0, # Приводить имена тегов к нижнему регистру
125 tagNamesToUpper => 0, # Приводить имена тегов к верхнему регистру
126 tagAttributesToLower => 0, # Приводить имена атрибутов тегов к нижнему регистру
127 tagAttributesToUpper => 0, # Приводить имена атрибутов тегов к верхнему регистру
128 tagQuoteValues => 0, # Помещать в кавычки значения атрибутов тегов
129 tagUnQuoteValues => 0, # Убирать кавычки вокруг значений атрибутов тегов
130 simpleXSS => 1, # Удаление возможных XSS-атак в коде документа
131 checkHTML => 0, # Проверять целостность HTML
132 logErrors => 0 # Вести журнал ошибок
133 8 ahitrov@rambler.ru };
134 return $jevix_conf;
135 }
136
137
138 1;
139