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 – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.