Revision 125
Date:
2011/08/26 13:49:39
Author:
ahitrov
Revision Log:
multimedia_new fields operations: store & delete
Files:
Legend:
Added
Removed
Modified
utf8/core/lib/Contenido/File.pm
186
186
} elsif ( $opts{filename} ) {
187
187
$ext = $opts{filename} =~ /(jpe?g|gif|png)$/i ? lc $1 : 'bin';
188
188
}
189
if ( ref $fh eq 'IO::Scalar' ) {
190
$size = length("$fh");
191
}
189
192
$ext ||= 'bin';
190
193
191
194
my $fh_tmp = IO::File->new('>'.$filename_tmp.'.'.$ext) || return;
…
…
324
327
}
325
328
326
329
330
sub store_binary {
331
my $input = shift;
332
my (%opts) = @_;
333
my $object = delete $opts{object} || return;
334
my $attr = delete $opts{attr} || return;
335
336
my ($prop) = grep { $_->{attr} eq $attr } $object->structure;
337
return unless ref $prop;
338
339
my $filename = '/binary/'.$object->get_file_name() || return;
340
my $filename_tmp = $state->{'tmp_dir'}.'/'.join('_', split('/', $filename));
341
342
my $fh = get_fh($input);
343
return unless ref $fh;
344
345
my $ext;
346
my $size = 1073741824;
347
if ( not ref $input ) {
348
$ext = $input =~ /(jpe?g|gif|png)$/i ? lc $1 : 'bin';
349
if ( scheme($input) eq 'file' ) {
350
$size = (stat $fh)[7];
351
}
352
} elsif ( ref $input eq 'Apache::Upload' ) {
353
$ext = $input->filename() =~ /(jpe?g|gif|png)$/i ? lc $1 : 'bin';
354
$size = (stat $fh)[7];
355
} elsif ( $opts{filename} ) {
356
$ext = $opts{filename} =~ /(jpe?g|gif|png)$/i ? lc $1 : 'bin';
357
}
358
if ( ref $fh eq 'IO::Scalar' ) {
359
$size = length("$fh");
360
}
361
$ext ||= 'bin';
362
363
my $fh_tmp = IO::File->new('>'.$filename_tmp.'.'.$ext) || return;
364
my $buffer;
365
366
$size = sysread $fh, $buffer, $size;
367
syswrite $fh_tmp, $buffer, $size;
368
369
undef $fh_tmp;
370
371
my $BINARY;
372
if ( store($filename.'.'.$ext, $filename_tmp.'.'.$ext) ) {
373
$BINARY = { filename => $filename.'.'.$ext };
374
unlink $filename_tmp.'.'.$ext if -e $filename_tmp.'.'.$ext;
375
}
376
377
return $BINARY;
378
}
379
380
sub remove_binary {
381
my $BINARY = shift;
382
383
if ( ref $BINARY eq 'HASH' && exists $BINARY->{filename} ) {
384
remove($BINARY->{'filename'}) || return;
385
}
386
387
1;
388
}
389
390
327
391
1;
utf8/core/lib/Contenido/Object.pm
1132
1132
}
1133
1133
1134
1134
# ----------------------------------------------------------------------------
1135
# Метод _image_store() генерит сохраняет графику, привязанную к полю image или images
1135
# Метод _store_image() сохраняет графику, привязанную к полю image или images
1136
1136
#
1137
1137
# Формат использования:
1138
# $document->_image_store( INPUT, attr => 'fieldname' )
1138
# $document->_store_image( INPUT, attr => 'fieldname' )
1139
1139
# ----------------------------------------------------------------------------
1140
1140
sub _store_image {
1141
1141
my $self = shift;
…
…
1147
1147
return Contenido::File::store_image( $input, object => $self, attr => $opts{attr} );
1148
1148
}
1149
1149
1150
# ----------------------------------------------------------------------------
1151
# Метод _delete_image() удаляет файлы, связанные с полем image или images.
1152
# Вычищает все мини-копии
1153
#
1154
# Формат использования:
1155
# $document->_store_image( $image_attr_structure )
1156
# ----------------------------------------------------------------------------
1150
1157
sub _delete_image {
1151
1158
my $self = shift;
1152
1159
my $IMAGE = shift;
…
…
1154
1161
return Contenido::File::remove_image( $IMAGE );
1155
1162
}
1156
1163
1164
# ----------------------------------------------------------------------------
1165
# Метод _store_binary() сохраняет произвольный бинарный файл, привязанную к полю multimedia или multimedia_new
1166
#
1167
# Формат использования:
1168
# $document->_store_binary( INPUT, attr => 'fieldname' )
1169
# ----------------------------------------------------------------------------
1170
sub _store_binary {
1171
my $self = shift;
1172
do { $log->error("Метод delete() можно вызывать только у объектов, но не классов"); die } unless ref($self);
1173
1174
my $input = shift;
1175
my (%opts) = @_;
1176
1177
return Contenido::File::store_binary( $input, object => $self, attr => $opts{attr} );
1178
}
1179
1180
# ----------------------------------------------------------------------------
1181
# Метод _delete_binary() удаляет файлы, связанные с полем multimedia или multimedia_new.
1182
# Не пытается искать мини-копии
1183
#
1184
# Формат использования:
1185
# $document->_delete_binary( $binary_attr_structure )
1186
# ----------------------------------------------------------------------------
1187
sub _delete_binary {
1188
my $self = shift;
1189
my $BINARY = shift;
1190
1191
return Contenido::File::remove_binary( $BINARY );
1192
}
1193
1157
1194
1;
1158
1195
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.