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 247 ahitrov # field документа класса class к id (или source_field) данного документа
78 8 ahitrov@rambler.ru #
79 # Пример:
80 # {
81 # name => 'Описание связи',
82 # class => 'project::Class',
83 247 ahitrov # filter => 'filter_name that will be set to "get_documents" request'
84 # field => 'table_field which is linked to the current table'
85 # source_field => 'field (except id) to which target table is linked to'
86 # auto => { source_field1 => target_field1, source_field2 => target_field2 ... }
87 8 ahitrov@rambler.ru # }
88 #
89 ##################################################################
90 sub table_links {
91 return undef;
92 }
93
94
95 ####
96 247 ahitrov # Шаблонный конфигуратор Jevix
97 8 ahitrov@rambler.ru ##################################################################
98 sub jevix_conf
99 {
100 my $jevix_conf = {
101 247 ahitrov isHTML => 1, # Работать в режиме гипертекста (в режиме простого текста работает быстрее)
102 lineBreaks => 0, # Расставлять переносы строк <br />
103 paragraphs => 0, # Размечать параграфы <p>
104 dashes => 1, # Тире
105 dots => 1, # Многоточия
106 edgeSpaces => 1, # Убирать пробельные символы в начале и конце строки
107 tagSpaces => 1, # Убирать пробелы между тегами (</td> <td>)
108 multiSpaces => 1, # Превращать множественные пробелы в одинарные
109 redundantSpaces => 1, # Убирать пробелы там, где их не должно быть
110 compositeWords => 0, # Заключать составные слова в тег <nobr>
111 compositeWordsLength => 10, # Максимальная длина составного слова, заключаемого в тег <nobr>
112 nbsp => 0, # Расставлять неразрывные пробелы
113 quotes => 1, # Верстать кавычки
114 qaType => 0, # Тип внешних кавычек (см. настройки отладочного интерфейса на http://jevix.ru/)
115 qbType => 1, # Тип вложенных кавычек
116 misc => 1, # Всякое разное (&copy, дроби и прочее)
117 codeMode => 2, # Способ кодировки спец. символов (0: ANSI <...>, 1: HTML-код <&#133;>, 2: HTML-сужности <&hellip;>)
118 tagsDenyAll => 0, # По умолчанию отвергать все теги
119 tagsDeny => 'script', # Список запрещённых тегов
120 tagsAllow => '', # Список разрешённых тегов (исключает их, когда устанавлен запрет всех)
121 tagCloseSingle => 0, # Закрывать одинарные теги, когда они не закрыты
122 tagNamesToLower => 0, # Приводить имена тегов к нижнему регистру
123 tagNamesToUpper => 0, # Приводить имена тегов к верхнему регистру
124 tagAttributesToLower => 0, # Приводить имена атрибутов тегов к нижнему регистру
125 tagAttributesToUpper => 0, # Приводить имена атрибутов тегов к верхнему регистру
126 tagQuoteValues => 0, # Помещать в кавычки значения атрибутов тегов
127 tagUnQuoteValues => 0, # Убирать кавычки вокруг значений атрибутов тегов
128 simpleXSS => 1, # Удаление возможных XSS-атак в коде документа
129 checkHTML => 0, # Проверять целостность HTML
130 logErrors => 0 # Вести журнал ошибок
131 8 ahitrov@rambler.ru };
132 return $jevix_conf;
133 }
134
135
136 1;
137