Changeset 8734


Ignore:
Timestamp:
Jan 18, 2011, 3:03:00 PM (9 years ago)
Author:
plg
Message:

bug fixed: no more categories.uploadable column when creating a new category

split the admin/photos_add_direct.php script into
admin/include/photos_add_direct_prepare.php (prepare the upload form)
+ admin/include/photos_add_direct_process.inc.php (process the submitted form)
: it makes the upload form backend easier to reuse in the future Community
plugin.

Location:
trunk/admin
Files:
2 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/include/functions.php

    r8728 r8734  
    12261226    'rank' => ++$current_rank,
    12271227    'commentable' => boolean_to_string($conf['newcat_default_commentable']),
    1228     'uploadable' => 'false',
    12291228    );
    12301229
     
    12771276    array(
    12781277      'site_id', 'name', 'id_uppercat', 'rank', 'commentable',
    1279       'uploadable', 'visible', 'status', 'global_rank',
     1278      'visible', 'status', 'global_rank',
    12801279      ),
    12811280    array($insert)
     
    19851984  {
    19861985    case 'photos_add':
    1987     case 'upload':
    19881986    case 'rating':
    19891987    case 'tags':
  • trunk/admin/photos_add_direct.php

    r8728 r8734  
    33// | Piwigo - a PHP based photo gallery                                    |
    44// +-----------------------------------------------------------------------+
    5 // | Copyright(C) 2010      Pierrick LE GALL             http://piwigo.org |
     5// | Copyright(C) 2008-2011 Piwigo Team                  http://piwigo.org |
     6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
     7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
    68// +-----------------------------------------------------------------------+
    79// | This program is free software; you can redistribute it and/or modify  |
     
    6365// +-----------------------------------------------------------------------+
    6466
    65 if (isset($_GET['processed']))
    66 {
    67 //   echo '<pre>POST'."\n"; print_r($_POST); echo '</pre>';
    68 //   echo '<pre>FILES'."\n"; print_r($_FILES); echo '</pre>';
    69 //   echo '<pre>SESSION'."\n"; print_r($_SESSION); echo '</pre>';
    70 //   exit();
    71 
    72   // sometimes, you have submitted the form but you have nothing in $_POST
    73   // and $_FILES. This may happen when you have an HTML upload and you
    74   // exceeded the post_max_size (but not the upload_max_size)
    75   if (!isset($_POST['submit_upload']))
    76   {
    77     array_push(
    78       $page['errors'],
    79       sprintf(
    80         l10n('The uploaded files exceed the post_max_size directive in php.ini: %sB'),
    81         ini_get('post_max_size')
    82         )
    83       );
    84   }
    85  
    86   $category_id = null;
    87   if (!isset($_POST['category_type']))
    88   {
    89     // nothing to do, we certainly have the post_max_size issue
    90   }
    91   elseif ('existing' == $_POST['category_type'])
    92   {
    93     $category_id = $_POST['category'];
    94   }
    95   elseif ('new' == $_POST['category_type'])
    96   {
    97     $output_create = create_virtual_category(
    98       $_POST['category_name'],
    99       (0 == $_POST['category_parent'] ? null : $_POST['category_parent'])
    100       );
    101    
    102     $category_id = $output_create['id'];
    103 
    104     if (isset($output_create['error']))
    105     {
    106       array_push($page['errors'], $output_create['error']);
    107     }
    108     else
    109     {
    110       $category_name = get_cat_display_name_from_id($category_id, 'admin.php?page=cat_modify&amp;cat_id=');
    111       // information
    112       array_push(
    113         $page['infos'],
    114         sprintf(
    115           l10n('Album "%s" has been added'),
    116           '<em>'.$category_name.'</em>'
    117           )
    118         );
    119       // TODO: add the onclick="window.open(this.href); return false;"
    120       // attribute with jQuery on upload.tpl side for href containing
    121       // "cat_modify"
    122     }
    123   }
    124 
    125   $image_ids = array();
    126        
    127   if (isset($_FILES) and !empty($_FILES['image_upload']))
    128   {
    129     $starttime = get_moment();
    130 
    131   foreach ($_FILES['image_upload']['error'] as $idx => $error)
    132   {
    133     if (UPLOAD_ERR_OK == $error)
    134     {
    135       $images_to_add = array();
    136      
    137       $extension = pathinfo($_FILES['image_upload']['name'][$idx], PATHINFO_EXTENSION);
    138       if ('zip' == strtolower($extension))
    139       {
    140         $upload_dir = $conf['upload_dir'].'/buffer';
    141         prepare_directory($upload_dir);
    142        
    143         $temporary_archive_name = date('YmdHis').'-'.generate_key(10);
    144         $archive_path = $upload_dir.'/'.$temporary_archive_name.'.zip';
    145        
    146         move_uploaded_file(
    147           $_FILES['image_upload']['tmp_name'][$idx],
    148           $archive_path
    149           );
    150 
    151         define('PCLZIP_TEMPORARY_DIR', $upload_dir.'/');
    152         include(PHPWG_ROOT_PATH.'admin/include/pclzip.lib.php');
    153         $zip = new PclZip($archive_path);
    154         if ($list = $zip->listContent())
    155         {
    156           $indexes_to_extract = array();
    157          
    158           foreach ($list as $node)
    159           {
    160             if (1 == $node['folder'])
    161             {
    162               continue;
    163             }
    164 
    165             if (is_valid_image_extension(pathinfo($node['filename'], PATHINFO_EXTENSION)))
    166             {
    167               array_push($indexes_to_extract, $node['index']);
    168              
    169               array_push(
    170                 $images_to_add,
    171                 array(
    172                   'source_filepath' => $upload_dir.'/'.$temporary_archive_name.'/'.$node['filename'],
    173                   'original_filename' => basename($node['filename']),
    174                   )
    175                 );
    176             }
    177           }
    178      
    179           if (count($indexes_to_extract) > 0)
    180           {
    181             $zip->extract(
    182               PCLZIP_OPT_PATH, $upload_dir.'/'.$temporary_archive_name,
    183               PCLZIP_OPT_BY_INDEX, $indexes_to_extract,
    184               PCLZIP_OPT_ADD_TEMP_FILE_ON
    185               );
    186           }
    187         }
    188       }
    189       elseif (is_valid_image_extension($extension))
    190       {
    191         array_push(
    192           $images_to_add,
    193           array(
    194             'source_filepath' => $_FILES['image_upload']['tmp_name'][$idx],
    195             'original_filename' => $_FILES['image_upload']['name'][$idx],
    196             )
    197           );
    198       }
    199 
    200       foreach ($images_to_add as $image_to_add)
    201       {
    202         $image_id = add_uploaded_file(
    203           $image_to_add['source_filepath'],
    204           $image_to_add['original_filename'],
    205           array($category_id),
    206           $_POST['level']
    207           );
    208 
    209         array_push($image_ids, $image_id);
    210 
    211         // TODO: if $image_id is not an integer, something went wrong
    212       }
    213     }
    214     else
    215     {
    216       $error_message = file_upload_error_message($error);
    217      
    218       array_push(
    219         $page['errors'],
    220         sprintf(
    221           l10n('Error on file "%s" : %s'),
    222           $_FILES['image_upload']['name'][$idx],
    223           $error_message
    224           )
    225         );
    226     }
    227   }
    228  
    229   $endtime = get_moment();
    230   $elapsed = ($endtime - $starttime) * 1000;
    231   // printf('%.2f ms', $elapsed);
    232 
    233   } // if (!empty($_FILES))
    234 
    235   if (isset($_POST['upload_id']))
    236   {
    237     // we're on a multiple upload, with uploadify and so on
    238     if (isset($_SESSION['uploads_error'][ $_POST['upload_id'] ]))
    239     {
    240       foreach ($_SESSION['uploads_error'][ $_POST['upload_id'] ] as $error)
    241       {
    242         array_push($page['errors'], $error);
    243       }
    244     }
    245 
    246     if (isset($_SESSION['uploads'][ $_POST['upload_id'] ]))
    247     {
    248       $image_ids = $_SESSION['uploads'][ $_POST['upload_id'] ];
    249 
    250       associate_images_to_categories(
    251         $image_ids,
    252         array($category_id)
    253         );
    254 
    255       $query = '
    256 UPDATE '.IMAGES_TABLE.'
    257   SET level = '.$_POST['level'].'
    258   WHERE id IN ('.implode(', ', $image_ids).')
    259 ;';
    260       pwg_query($query);
    261    
    262       invalidate_user_cache();
    263     }
    264   }
    265  
    266   $page['thumbnails'] = array();
    267   foreach ($image_ids as $image_id)
    268   {
    269     // we could return the list of properties from the add_uploaded_file
    270     // function, but I like the "double check". And it costs nothing
    271     // compared to the upload process.
    272     $thumbnail = array();
    273      
    274     $query = '
    275 SELECT
    276     file,
    277     path,
    278     tn_ext
    279   FROM '.IMAGES_TABLE.'
    280   WHERE id = '.$image_id.'
    281 ;';
    282     $image_infos = pwg_db_fetch_assoc(pwg_query($query));
    283 
    284     $thumbnail['file'] = $image_infos['file'];
    285    
    286     $thumbnail['src'] = get_thumbnail_location(
    287       array(
    288         'path' => $image_infos['path'],
    289         'tn_ext' => $image_infos['tn_ext'],
    290         )
    291       );
    292 
    293     // TODO: when implementing this plugin in Piwigo core, we should have
    294     // a function get_image_name($name, $file) (if name is null, then
    295     // compute a temporary name from filename) that would be also used in
    296     // picture.php. UPDATE: in fact, "get_name_from_file($file)" already
    297     // exists and is used twice (batch_manager_unit + comments, but not in
    298     // picture.php I don't know why) with the same pattern if
    299     // (empty($name)) {$name = get_name_from_file($file)}, a clean
    300     // function get_image_name($name, $file) would be better
    301     $thumbnail['title'] = get_name_from_file($image_infos['file']);
    302 
    303     $thumbnail['link'] = PHPWG_ROOT_PATH.'admin.php?page=picture_modify'
    304       .'&amp;image_id='.$image_id
    305       .'&amp;cat_id='.$category_id
    306       ;
    307 
    308     array_push($page['thumbnails'], $thumbnail);
    309   }
    310  
    311   if (!empty($page['thumbnails']))
    312   {
    313     array_push(
    314       $page['infos'],
    315       sprintf(
    316         l10n('%d photos uploaded'),
    317         count($page['thumbnails'])
    318         )
    319       );
    320    
    321     if (0 != $_POST['level'])
    322     {
    323       array_push(
    324         $page['infos'],
    325         sprintf(
    326           l10n('Privacy level set to "%s"'),
    327           l10n(
    328             sprintf('Level %d', $_POST['level'])
    329             )
    330           )
    331         );
    332     }
    333 
    334     if ('existing' == $_POST['category_type'])
    335     {
    336       $query = '
    337 SELECT
    338     COUNT(*)
    339   FROM '.IMAGE_CATEGORY_TABLE.'
    340   WHERE category_id = '.$category_id.'
    341 ;';
    342       list($count) = pwg_db_fetch_row(pwg_query($query));
    343       $category_name = get_cat_display_name_from_id($category_id, 'admin.php?page=cat_modify&amp;cat_id=');
    344      
    345       // information
    346       array_push(
    347         $page['infos'],
    348         sprintf(
    349           l10n('Album "%s" now contains %d photos'),
    350           '<em>'.$category_name.'</em>',
    351           $count
    352           )
    353         );
    354     }
    355 
    356     $page['batch_link'] = PHOTOS_ADD_BASE_URL.'&batch='.implode(',', $image_ids);
    357   }
    358 }
     67include_once(PHPWG_ROOT_PATH.'admin/include/photos_add_direct_process.inc.php');
    35968
    36069// +-----------------------------------------------------------------------+
    361 // |                             template init                             |
     70// |                             prepare form                              |
    36271// +-----------------------------------------------------------------------+
    36372
    364 $uploadify_path = PHPWG_ROOT_PATH.'admin/include/uploadify';
    365 
    366 $template->assign(
    367     array(
    368       'F_ADD_ACTION'=> PHOTOS_ADD_BASE_URL,
    369       'uploadify_path' => $uploadify_path,
    370       'upload_max_filesize' => min(
    371         get_ini_size('upload_max_filesize'),
    372         get_ini_size('post_max_size')
    373         ),
    374     )
    375   );
    376 
    377 $upload_modes = array('html', 'multiple');
    378 $upload_mode = isset($conf['upload_mode']) ? $conf['upload_mode'] : 'multiple';
    379 
    380 if (isset($_GET['upload_mode']) and in_array($_GET['upload_mode'], $upload_modes))
    381 {
    382   $upload_mode = $_GET['upload_mode'];
    383   conf_update_param('upload_mode', $upload_mode);
    384 }
    385 
    386 // what is the upload switch mode
    387 $index_of_upload_mode = array_flip($upload_modes);
    388 $upload_mode_index = $index_of_upload_mode[$upload_mode];
    389 $upload_switch = $upload_modes[ ($upload_mode_index + 1) % 2 ];
    390 
    391 $template->assign(
    392     array(
    393       'upload_mode' => $upload_mode,
    394       'form_action' => PHOTOS_ADD_BASE_URL.'&amp;upload_mode='.$upload_mode.'&amp;processed=1',
    395       'switch_url' => PHOTOS_ADD_BASE_URL.'&amp;upload_mode='.$upload_switch,
    396       'upload_id' => md5(rand()),
    397       'session_id' => session_id(),
    398       'pwg_token' => get_pwg_token(),
    399       'another_upload_link' => PHOTOS_ADD_BASE_URL.'&amp;upload_mode='.$upload_mode,
    400     )
    401   );
    402 
    403 $template->append(
    404   'head_elements',
    405   '<link rel="stylesheet" type="text/css" href="'.$uploadify_path.'/uploadify.css">'."\n"
    406   );
    407 
    408 if (isset($page['thumbnails']))
    409 {
    410   $template->assign(
    411     array(
    412       'thumbnails' => $page['thumbnails'],
    413       )
    414     );
    415 
    416   // only display the batch link if we have more than 1 photo
    417   if (count($page['thumbnails']) > 1)
    418   {
    419     $template->assign(
    420       array(
    421         'batch_link' => $page['batch_link'],
    422         'batch_label' => sprintf(
    423           l10n('Manage this set of %d photos'),
    424           count($page['thumbnails'])
    425           ),
    426         )
    427       );
    428   }
    429 }
    430 
    431 // categories
    432 //
    433 // we need to know the category in which the last photo was added
    434 $selected_category = array();
    435 $selected_parent = array();
    436 
    437 $query = '
    438 SELECT
    439     category_id,
    440     id_uppercat
    441   FROM '.IMAGES_TABLE.' AS i
    442     JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON image_id = i.id
    443     JOIN '.CATEGORIES_TABLE.' AS c ON category_id = c.id
    444   ORDER BY i.id DESC
    445   LIMIT 1
    446 ;';
    447 $result = pwg_query($query);
    448 if (pwg_db_num_rows($result) > 0)
    449 {
    450   $row = pwg_db_fetch_assoc($result);
    451  
    452   $selected_category = array($row['category_id']);
    453 
    454   if (!empty($row['id_uppercat']))
    455   {
    456     $selected_parent = array($row['id_uppercat']);
    457   }
    458 }
    459 
    460 // existing album
    461 $query = '
    462 SELECT id,name,uppercats,global_rank
    463   FROM '.CATEGORIES_TABLE.'
    464 ;';
    465 
    466 display_select_cat_wrapper(
    467   $query,
    468   $selected_category,
    469   'category_options'
    470   );
    471 
    472 // new category
    473 display_select_cat_wrapper(
    474   $query,
    475   $selected_parent,
    476   'category_parent_options'
    477   );
    478 
    479 
    480 // image level options
    481 $selected_level = isset($_POST['level']) ? $_POST['level'] : 0;
    482 $template->assign(
    483     array(
    484       'level_options'=> get_privacy_level_options(),
    485       'level_options_selected' => array($selected_level)
    486     )
    487   );
    488 
    489 // +-----------------------------------------------------------------------+
    490 // |                         setup errors/warnings                         |
    491 // +-----------------------------------------------------------------------+
    492 
    493 // Errors
    494 $setup_errors = array();
    495 
    496 $error_message = ready_for_upload_message();
    497 if (!empty($error_message))
    498 {
    499   array_push($setup_errors, $error_message);
    500 }
    501 
    502 if (!function_exists('gd_info'))
    503 {
    504   array_push($setup_errors, l10n('GD library is missing'));
    505 }
    506 
    507 $template->assign(
    508   array(
    509     'setup_errors'=> $setup_errors,
    510     )
    511   );
    512 
    513 // Warnings
    514 if (isset($_GET['hide_warnings']))
    515 {
    516   $_SESSION['upload_hide_warnings'] = true;
    517 }
    518 
    519 if (!isset($_SESSION['upload_hide_warnings']))
    520 {
    521   $setup_warnings = array();
    522  
    523   if ($conf['use_exif'] and !function_exists('read_exif_data'))
    524   {
    525     array_push(
    526       $setup_warnings,
    527       l10n('Exif extension not available, admin should disable exif use')
    528       );
    529   }
    530 
    531   if (get_ini_size('upload_max_filesize') > get_ini_size('post_max_size'))
    532   {
    533     array_push(
    534       $setup_warnings,
    535       sprintf(
    536         l10n('In your php.ini file, the upload_max_filesize (%sB) is bigger than post_max_size (%sB), you should change this setting'),
    537         get_ini_size('upload_max_filesize', false),
    538         get_ini_size('post_max_size', false)
    539         )
    540       );
    541   }
    542 
    543   $template->assign(
    544     array(
    545       'setup_warnings' => $setup_warnings,
    546       'hide_warnings_link' => PHOTOS_ADD_BASE_URL.'&amp;upload_mode='.$upload_mode.'&amp;hide_warnings=1'
    547       )
    548     );
    549 }
     73include_once(PHPWG_ROOT_PATH.'admin/include/photos_add_direct_prepare.inc.php');
    55074
    55175// +-----------------------------------------------------------------------+
Note: See TracChangeset for help on using the changeset viewer.