Changeset 4348


Ignore:
Timestamp:
Nov 23, 2009, 12:59:14 AM (11 years ago)
Author:
plg
Message:

merge r4345 from branch 2.0 to trunk

feature 1051: ability to add/update a file for an existing photo. For example,
you can add the "high" later. Another example is to update the "web resized"
file (new dimensions is a common example). It also works for thumbnails.
Updating an existing file has no impact on the logical level (list of tags,
list of categories, title, description and so on).

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/ws_functions.inc.php

    r4347 r4348  
    943943  ws_logfile('[merge_chunks] input parameter $output_filepath : '.$output_filepath);
    944944
     945  if (is_file($output_filepath))
     946  {
     947    unlink($output_filepath);
     948   
     949    if (is_file($output_filepath))
     950    {
     951      new PwgError(500, '[merge_chunks] error while trying to remove existing '.$output_filepath);
     952      exit();
     953    }
     954  }
     955 
    945956  $upload_dir = PHPWG_ROOT_PATH.'upload/buffer';
    946957  $pattern = '/'.$original_sum.'-'.$type.'/';
     
    10371048    'filesize' => $filesize,
    10381049    );
     1050}
     1051
     1052function ws_images_addFile($params, &$service)
     1053{
     1054  // image_id
     1055  // type {thumb, file, high}
     1056  // sum
     1057
     1058  global $conf;
     1059  if (!is_admin() || is_adviser() )
     1060  {
     1061    return new PwgError(401, 'Access denied');
     1062  }
     1063
     1064  $params['image_id'] = (int)$params['image_id'];
     1065  if ($params['image_id'] <= 0)
     1066  {
     1067    return new PwgError(WS_ERR_INVALID_PARAM, "Invalid image_id");
     1068  }
     1069
     1070  //
     1071  // what is the path?
     1072  //
     1073  $query = '
     1074SELECT
     1075    path,
     1076    md5sum
     1077  FROM '.IMAGES_TABLE.'
     1078  WHERE id = '.$params['image_id'].'
     1079;';
     1080  list($file_path, $original_sum) = mysql_fetch_row(pwg_query($query));
     1081
     1082  // TODO only files added with web API can be updated with web API
     1083
     1084  //
     1085  // makes sure directories are there and call the merge_chunks
     1086  //
     1087  $infos = add_file($file_path, $params['type'], $original_sum, $params['sum']);
     1088
     1089  //
     1090  // update basic metadata from file
     1091  //
     1092  $update = array();
     1093 
     1094  if ('high' == $params['type'])
     1095  {
     1096    $update['high_filesize'] = $infos['filesize'];
     1097    $update['has_high'] = 'true';
     1098  }
     1099
     1100  if ('file' == $params['type'])
     1101  {
     1102    $update['filesize'] = $infos['filesize'];
     1103    $update['width'] = $infos['width'];
     1104    $update['height'] = $infos['height'];
     1105  }
     1106
     1107  // we may have nothing to update at database level, for example with a
     1108  // thumbnail update
     1109  if (count($update) > 0)
     1110  {
     1111    $update['id'] = $params['image_id'];
     1112   
     1113    include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
     1114    mass_updates(
     1115      IMAGES_TABLE,
     1116      array(
     1117        'primary' => array('id'),
     1118        'update'  => array_diff(array_keys($update), array('id'))
     1119        ),
     1120      array($update)
     1121      );
     1122  }
    10391123}
    10401124
  • trunk/tools/piwigo_remote.pl

    r4347 r4348  
    8484
    8585if ($opt{action} eq 'pwg.images.add') {
    86     use MIME::Base64 qw(encode_base64);
    8786    use Digest::MD5::File qw/file_md5_hex/;
    8887
    8988    $form = {};
    90     $form->{method} = 'pwg.images.add';
     89    $form->{method} = $opt{action};
    9190
    9291    my $original_sum = file_md5_hex($opt{original});
     
    115114        $form->{high_sum} = file_md5_hex($opt{high});
    116115    }
     116
     117    foreach my $key (keys %{ $opt{define} }) {
     118        $form->{$key} = $opt{define}{$key};
     119    }
     120
     121    my $response = $ua->post(
     122        $conf{base_url}.'/ws.php?format=json',
     123        $form
     124    );
     125
     126    print "-" x 50, "\n";
     127    printf("response code    : %u\n", $response->code);
     128    printf("response message : %s\n", $response->message);
     129    print "-" x 50, "\n";
     130    print "\n";
     131
     132#     use Data::Dumper;
     133#     print Dumper($response->content);
     134#     print Dumper(from_json($response->content));
     135
     136    if ($response->is_success) {
     137        print "upload successful\n";
     138    }
     139    else {
     140        print Dumper($response);
     141        warn 'A problem has occured during upload', "\n";
     142        warn $response->decoded_content, "\n";
     143        die $response->status_line;
     144    }
     145}
     146
     147if ($opt{action} eq 'pwg.images.addFile') {
     148    use Digest::MD5::File qw/file_md5_hex/;
     149
     150    if (not defined $opt{define}{image_id}) {
     151        die '--define image_id=1234 is missing';
     152    }
     153
     154    # which file type are we going to add/update?
     155    my $type = undef;
     156
     157    foreach my $test_type (qw/thumbnail file high/) {
     158        if (defined $opt{$test_type}) {
     159            $type = $test_type;
     160            last;
     161        }
     162    }
     163
     164    if (not defined $type) {
     165        die 'at least one of file/thumbnail/high parameters must be set';
     166    }
     167
     168    my $type_code = typecode_from_typename($type);
     169
     170    send_chunks(
     171        filepath => $opt{$type},
     172        type => $type_code,
     173        original_sum => file_md5_hex($opt{original}),
     174    );
     175
     176    $form = {};
     177    $form->{method} = $opt{action};
     178    $form->{type}   = $type_code;
     179    $form->{sum}    = file_md5_hex($opt{$type});
    117180
    118181    foreach my $key (keys %{ $opt{define} }) {
     
    334397    my %params = @_;
    335398
     399    use MIME::Base64 qw(encode_base64);
    336400    use File::Slurp;
    337401
     
    376440    }
    377441}
     442
     443sub typecode_from_typename {
     444    my ($typename) = @_;
     445
     446    my $typecode = $typename;
     447
     448    if ('thumbnail' eq $typename) {
     449        $typecode = 'thumb';
     450    }
     451
     452    return $typecode;
     453}
  • trunk/ws.php

    r4347 r4348  
    184184    'POST method only. For admin only.'
    185185    );
    186  
     186
     187  $service->addMethod(
     188    'pwg.images.addFile',
     189    'ws_images_addFile',
     190    array(
     191      'image_id' => array(),
     192      'type' => array(),
     193      'sum' => array(),
     194      ),
     195    'Add or update a file for an existing photo. pwg.images.addChunk must have been called  before (maybe several times)'
     196    );
     197
    187198
    188199  $service->addMethod(
Note: See TracChangeset for help on using the changeset viewer.