Changeset 8734
- Timestamp:
- Jan 18, 2011, 3:03:00 PM (13 years ago)
- Location:
- trunk/admin
- Files:
-
- 2 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/admin/include/functions.php
r8728 r8734 1226 1226 'rank' => ++$current_rank, 1227 1227 'commentable' => boolean_to_string($conf['newcat_default_commentable']), 1228 'uploadable' => 'false',1229 1228 ); 1230 1229 … … 1277 1276 array( 1278 1277 'site_id', 'name', 'id_uppercat', 'rank', 'commentable', 1279 ' uploadable', 'visible', 'status', 'global_rank',1278 'visible', 'status', 'global_rank', 1280 1279 ), 1281 1280 array($insert) … … 1985 1984 { 1986 1985 case 'photos_add': 1987 case 'upload':1988 1986 case 'rating': 1989 1987 case 'tags': -
trunk/admin/photos_add_direct.php
r8728 r8734 3 3 // | Piwigo - a PHP based photo gallery | 4 4 // +-----------------------------------------------------------------------+ 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 | 6 8 // +-----------------------------------------------------------------------+ 7 9 // | This program is free software; you can redistribute it and/or modify | … … 63 65 // +-----------------------------------------------------------------------+ 64 66 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&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 .'&image_id='.$image_id 305 .'&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&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 } 67 include_once(PHPWG_ROOT_PATH.'admin/include/photos_add_direct_process.inc.php'); 359 68 360 69 // +-----------------------------------------------------------------------+ 361 // | template init|70 // | prepare form | 362 71 // +-----------------------------------------------------------------------+ 363 72 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.'&upload_mode='.$upload_mode.'&processed=1', 395 'switch_url' => PHOTOS_ADD_BASE_URL.'&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.'&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.'&upload_mode='.$upload_mode.'&hide_warnings=1' 547 ) 548 ); 549 } 73 include_once(PHPWG_ROOT_PATH.'admin/include/photos_add_direct_prepare.inc.php'); 550 74 551 75 // +-----------------------------------------------------------------------+
Note: See TracChangeset
for help on using the changeset viewer.