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. git-svn-id: http://piwigo.org/svn/trunk@8734 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
parent
447bc41f71
commit
69ce218575
4 changed files with 549 additions and 485 deletions
|
@ -1225,7 +1225,6 @@ SELECT MAX(rank)
|
|||
'name' => $category_name,
|
||||
'rank' => ++$current_rank,
|
||||
'commentable' => boolean_to_string($conf['newcat_default_commentable']),
|
||||
'uploadable' => 'false',
|
||||
);
|
||||
|
||||
if ($parent_id != 'NULL')
|
||||
|
@ -1276,7 +1275,7 @@ SELECT id, uppercats, global_rank, visible, status
|
|||
CATEGORIES_TABLE,
|
||||
array(
|
||||
'site_id', 'name', 'id_uppercat', 'rank', 'commentable',
|
||||
'uploadable', 'visible', 'status', 'global_rank',
|
||||
'visible', 'status', 'global_rank',
|
||||
),
|
||||
array($insert)
|
||||
);
|
||||
|
@ -1984,7 +1983,6 @@ function get_active_menu($menu_page)
|
|||
switch ($menu_page)
|
||||
{
|
||||
case 'photos_add':
|
||||
case 'upload':
|
||||
case 'rating':
|
||||
case 'tags':
|
||||
case 'picture_modify':
|
||||
|
|
222
admin/include/photos_add_direct_prepare.inc.php
Normal file
222
admin/include/photos_add_direct_prepare.inc.php
Normal file
|
@ -0,0 +1,222 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org |
|
||||
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
|
||||
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | This program is free software; you can redistribute it and/or modify |
|
||||
// | it under the terms of the GNU General Public License as published by |
|
||||
// | the Free Software Foundation |
|
||||
// | |
|
||||
// | This program is distributed in the hope that it will be useful, but |
|
||||
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
||||
// | General Public License for more details. |
|
||||
// | |
|
||||
// | You should have received a copy of the GNU General Public License |
|
||||
// | along with this program; if not, write to the Free Software |
|
||||
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
|
||||
// | USA. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Uploaded photos |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
if (isset($page['thumbnails']))
|
||||
{
|
||||
$template->assign(
|
||||
array(
|
||||
'thumbnails' => $page['thumbnails'],
|
||||
)
|
||||
);
|
||||
|
||||
// only display the batch link if we have more than 1 photo
|
||||
if (count($page['thumbnails']) > 1)
|
||||
{
|
||||
$template->assign(
|
||||
array(
|
||||
'batch_link' => $page['batch_link'],
|
||||
'batch_label' => sprintf(
|
||||
l10n('Manage this set of %d photos'),
|
||||
count($page['thumbnails'])
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Photo selection |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
$uploadify_path = PHPWG_ROOT_PATH.'admin/include/uploadify';
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'F_ADD_ACTION'=> PHOTOS_ADD_BASE_URL,
|
||||
'uploadify_path' => $uploadify_path,
|
||||
'upload_max_filesize' => min(
|
||||
get_ini_size('upload_max_filesize'),
|
||||
get_ini_size('post_max_size')
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
$upload_modes = array('html', 'multiple');
|
||||
$upload_mode = isset($conf['upload_mode']) ? $conf['upload_mode'] : 'multiple';
|
||||
|
||||
if (isset($_GET['upload_mode']) and in_array($_GET['upload_mode'], $upload_modes))
|
||||
{
|
||||
$upload_mode = $_GET['upload_mode'];
|
||||
conf_update_param('upload_mode', $upload_mode);
|
||||
}
|
||||
|
||||
// what is the upload switch mode
|
||||
$index_of_upload_mode = array_flip($upload_modes);
|
||||
$upload_mode_index = $index_of_upload_mode[$upload_mode];
|
||||
$upload_switch = $upload_modes[ ($upload_mode_index + 1) % 2 ];
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'upload_mode' => $upload_mode,
|
||||
'form_action' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode.'&processed=1',
|
||||
'switch_url' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_switch,
|
||||
'upload_id' => md5(rand()),
|
||||
'session_id' => session_id(),
|
||||
'pwg_token' => get_pwg_token(),
|
||||
'another_upload_link' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode,
|
||||
)
|
||||
);
|
||||
|
||||
$template->append(
|
||||
'head_elements',
|
||||
'<link rel="stylesheet" type="text/css" href="'.$uploadify_path.'/uploadify.css">'."\n"
|
||||
);
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Categories |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
// we need to know the category in which the last photo was added
|
||||
$selected_category = array();
|
||||
$selected_parent = array();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
category_id,
|
||||
id_uppercat
|
||||
FROM '.IMAGES_TABLE.' AS i
|
||||
JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON image_id = i.id
|
||||
JOIN '.CATEGORIES_TABLE.' AS c ON category_id = c.id
|
||||
ORDER BY i.id DESC
|
||||
LIMIT 1
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
if (pwg_db_num_rows($result) > 0)
|
||||
{
|
||||
$row = pwg_db_fetch_assoc($result);
|
||||
|
||||
$selected_category = array($row['category_id']);
|
||||
|
||||
if (!empty($row['id_uppercat']))
|
||||
{
|
||||
$selected_parent = array($row['id_uppercat']);
|
||||
}
|
||||
}
|
||||
|
||||
// existing album
|
||||
$query = '
|
||||
SELECT id,name,uppercats,global_rank
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
;';
|
||||
|
||||
display_select_cat_wrapper(
|
||||
$query,
|
||||
$selected_category,
|
||||
'category_options'
|
||||
);
|
||||
|
||||
// new category
|
||||
display_select_cat_wrapper(
|
||||
$query,
|
||||
$selected_parent,
|
||||
'category_parent_options'
|
||||
);
|
||||
|
||||
|
||||
// image level options
|
||||
$selected_level = isset($_POST['level']) ? $_POST['level'] : 0;
|
||||
$template->assign(
|
||||
array(
|
||||
'level_options'=> get_privacy_level_options(),
|
||||
'level_options_selected' => array($selected_level)
|
||||
)
|
||||
);
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Setup errors/warnings |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
// Errors
|
||||
$setup_errors = array();
|
||||
|
||||
$error_message = ready_for_upload_message();
|
||||
if (!empty($error_message))
|
||||
{
|
||||
array_push($setup_errors, $error_message);
|
||||
}
|
||||
|
||||
if (!function_exists('gd_info'))
|
||||
{
|
||||
array_push($setup_errors, l10n('GD library is missing'));
|
||||
}
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'setup_errors'=> $setup_errors,
|
||||
)
|
||||
);
|
||||
|
||||
// Warnings
|
||||
if (isset($_GET['hide_warnings']))
|
||||
{
|
||||
$_SESSION['upload_hide_warnings'] = true;
|
||||
}
|
||||
|
||||
if (!isset($_SESSION['upload_hide_warnings']))
|
||||
{
|
||||
$setup_warnings = array();
|
||||
|
||||
if ($conf['use_exif'] and !function_exists('read_exif_data'))
|
||||
{
|
||||
array_push(
|
||||
$setup_warnings,
|
||||
l10n('Exif extension not available, admin should disable exif use')
|
||||
);
|
||||
}
|
||||
|
||||
if (get_ini_size('upload_max_filesize') > get_ini_size('post_max_size'))
|
||||
{
|
||||
array_push(
|
||||
$setup_warnings,
|
||||
sprintf(
|
||||
l10n('In your php.ini file, the upload_max_filesize (%sB) is bigger than post_max_size (%sB), you should change this setting'),
|
||||
get_ini_size('upload_max_filesize', false),
|
||||
get_ini_size('post_max_size', false)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'setup_warnings' => $setup_warnings,
|
||||
'hide_warnings_link' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode.'&hide_warnings=1'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
?>
|
320
admin/include/photos_add_direct_process.inc.php
Normal file
320
admin/include/photos_add_direct_process.inc.php
Normal file
|
@ -0,0 +1,320 @@
|
|||
<?php
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org |
|
||||
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
|
||||
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | This program is free software; you can redistribute it and/or modify |
|
||||
// | it under the terms of the GNU General Public License as published by |
|
||||
// | the Free Software Foundation |
|
||||
// | |
|
||||
// | This program is distributed in the hope that it will be useful, but |
|
||||
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
||||
// | General Public License for more details. |
|
||||
// | |
|
||||
// | You should have received a copy of the GNU General Public License |
|
||||
// | along with this program; if not, write to the Free Software |
|
||||
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
|
||||
// | USA. |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
|
||||
if (isset($_GET['processed']))
|
||||
{
|
||||
// echo '<pre>POST'."\n"; print_r($_POST); echo '</pre>';
|
||||
// echo '<pre>FILES'."\n"; print_r($_FILES); echo '</pre>';
|
||||
// echo '<pre>SESSION'."\n"; print_r($_SESSION); echo '</pre>';
|
||||
// exit();
|
||||
|
||||
// sometimes, you have submitted the form but you have nothing in $_POST
|
||||
// and $_FILES. This may happen when you have an HTML upload and you
|
||||
// exceeded the post_max_size (but not the upload_max_size)
|
||||
if (!isset($_POST['submit_upload']))
|
||||
{
|
||||
array_push(
|
||||
$page['errors'],
|
||||
sprintf(
|
||||
l10n('The uploaded files exceed the post_max_size directive in php.ini: %sB'),
|
||||
ini_get('post_max_size')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$category_id = null;
|
||||
if (!isset($_POST['category_type']))
|
||||
{
|
||||
// nothing to do, we certainly have the post_max_size issue
|
||||
}
|
||||
elseif ('existing' == $_POST['category_type'])
|
||||
{
|
||||
$category_id = $_POST['category'];
|
||||
}
|
||||
elseif ('new' == $_POST['category_type'])
|
||||
{
|
||||
$output_create = create_virtual_category(
|
||||
$_POST['category_name'],
|
||||
(0 == $_POST['category_parent'] ? null : $_POST['category_parent'])
|
||||
);
|
||||
|
||||
$category_id = $output_create['id'];
|
||||
|
||||
if (isset($output_create['error']))
|
||||
{
|
||||
array_push($page['errors'], $output_create['error']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$category_name = get_cat_display_name_from_id($category_id, 'admin.php?page=cat_modify&cat_id=');
|
||||
// information
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n('Album "%s" has been added'),
|
||||
'<em>'.$category_name.'</em>'
|
||||
)
|
||||
);
|
||||
// TODO: add the onclick="window.open(this.href); return false;"
|
||||
// attribute with jQuery on upload.tpl side for href containing
|
||||
// "cat_modify"
|
||||
}
|
||||
}
|
||||
|
||||
$image_ids = array();
|
||||
|
||||
if (isset($_FILES) and !empty($_FILES['image_upload']))
|
||||
{
|
||||
$starttime = get_moment();
|
||||
|
||||
foreach ($_FILES['image_upload']['error'] as $idx => $error)
|
||||
{
|
||||
if (UPLOAD_ERR_OK == $error)
|
||||
{
|
||||
$images_to_add = array();
|
||||
|
||||
$extension = pathinfo($_FILES['image_upload']['name'][$idx], PATHINFO_EXTENSION);
|
||||
if ('zip' == strtolower($extension))
|
||||
{
|
||||
$upload_dir = $conf['upload_dir'].'/buffer';
|
||||
prepare_directory($upload_dir);
|
||||
|
||||
$temporary_archive_name = date('YmdHis').'-'.generate_key(10);
|
||||
$archive_path = $upload_dir.'/'.$temporary_archive_name.'.zip';
|
||||
|
||||
move_uploaded_file(
|
||||
$_FILES['image_upload']['tmp_name'][$idx],
|
||||
$archive_path
|
||||
);
|
||||
|
||||
define('PCLZIP_TEMPORARY_DIR', $upload_dir.'/');
|
||||
include(PHPWG_ROOT_PATH.'admin/include/pclzip.lib.php');
|
||||
$zip = new PclZip($archive_path);
|
||||
if ($list = $zip->listContent())
|
||||
{
|
||||
$indexes_to_extract = array();
|
||||
|
||||
foreach ($list as $node)
|
||||
{
|
||||
if (1 == $node['folder'])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_valid_image_extension(pathinfo($node['filename'], PATHINFO_EXTENSION)))
|
||||
{
|
||||
array_push($indexes_to_extract, $node['index']);
|
||||
|
||||
array_push(
|
||||
$images_to_add,
|
||||
array(
|
||||
'source_filepath' => $upload_dir.'/'.$temporary_archive_name.'/'.$node['filename'],
|
||||
'original_filename' => basename($node['filename']),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (count($indexes_to_extract) > 0)
|
||||
{
|
||||
$zip->extract(
|
||||
PCLZIP_OPT_PATH, $upload_dir.'/'.$temporary_archive_name,
|
||||
PCLZIP_OPT_BY_INDEX, $indexes_to_extract,
|
||||
PCLZIP_OPT_ADD_TEMP_FILE_ON
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif (is_valid_image_extension($extension))
|
||||
{
|
||||
array_push(
|
||||
$images_to_add,
|
||||
array(
|
||||
'source_filepath' => $_FILES['image_upload']['tmp_name'][$idx],
|
||||
'original_filename' => $_FILES['image_upload']['name'][$idx],
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($images_to_add as $image_to_add)
|
||||
{
|
||||
$image_id = add_uploaded_file(
|
||||
$image_to_add['source_filepath'],
|
||||
$image_to_add['original_filename'],
|
||||
array($category_id),
|
||||
$_POST['level']
|
||||
);
|
||||
|
||||
array_push($image_ids, $image_id);
|
||||
|
||||
// TODO: if $image_id is not an integer, something went wrong
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$error_message = file_upload_error_message($error);
|
||||
|
||||
array_push(
|
||||
$page['errors'],
|
||||
sprintf(
|
||||
l10n('Error on file "%s" : %s'),
|
||||
$_FILES['image_upload']['name'][$idx],
|
||||
$error_message
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$endtime = get_moment();
|
||||
$elapsed = ($endtime - $starttime) * 1000;
|
||||
// printf('%.2f ms', $elapsed);
|
||||
|
||||
} // if (!empty($_FILES))
|
||||
|
||||
if (isset($_POST['upload_id']))
|
||||
{
|
||||
// we're on a multiple upload, with uploadify and so on
|
||||
if (isset($_SESSION['uploads_error'][ $_POST['upload_id'] ]))
|
||||
{
|
||||
foreach ($_SESSION['uploads_error'][ $_POST['upload_id'] ] as $error)
|
||||
{
|
||||
array_push($page['errors'], $error);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_SESSION['uploads'][ $_POST['upload_id'] ]))
|
||||
{
|
||||
$image_ids = $_SESSION['uploads'][ $_POST['upload_id'] ];
|
||||
|
||||
associate_images_to_categories(
|
||||
$image_ids,
|
||||
array($category_id)
|
||||
);
|
||||
|
||||
$query = '
|
||||
UPDATE '.IMAGES_TABLE.'
|
||||
SET level = '.$_POST['level'].'
|
||||
WHERE id IN ('.implode(', ', $image_ids).')
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
invalidate_user_cache();
|
||||
}
|
||||
}
|
||||
|
||||
$page['thumbnails'] = array();
|
||||
foreach ($image_ids as $image_id)
|
||||
{
|
||||
// we could return the list of properties from the add_uploaded_file
|
||||
// function, but I like the "double check". And it costs nothing
|
||||
// compared to the upload process.
|
||||
$thumbnail = array();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
file,
|
||||
path,
|
||||
tn_ext
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id = '.$image_id.'
|
||||
;';
|
||||
$image_infos = pwg_db_fetch_assoc(pwg_query($query));
|
||||
|
||||
$thumbnail['file'] = $image_infos['file'];
|
||||
|
||||
$thumbnail['src'] = get_thumbnail_location(
|
||||
array(
|
||||
'path' => $image_infos['path'],
|
||||
'tn_ext' => $image_infos['tn_ext'],
|
||||
)
|
||||
);
|
||||
|
||||
// TODO: when implementing this plugin in Piwigo core, we should have
|
||||
// a function get_image_name($name, $file) (if name is null, then
|
||||
// compute a temporary name from filename) that would be also used in
|
||||
// picture.php. UPDATE: in fact, "get_name_from_file($file)" already
|
||||
// exists and is used twice (batch_manager_unit + comments, but not in
|
||||
// picture.php I don't know why) with the same pattern if
|
||||
// (empty($name)) {$name = get_name_from_file($file)}, a clean
|
||||
// function get_image_name($name, $file) would be better
|
||||
$thumbnail['title'] = get_name_from_file($image_infos['file']);
|
||||
|
||||
$thumbnail['link'] = PHPWG_ROOT_PATH.'admin.php?page=picture_modify'
|
||||
.'&image_id='.$image_id
|
||||
.'&cat_id='.$category_id
|
||||
;
|
||||
|
||||
array_push($page['thumbnails'], $thumbnail);
|
||||
}
|
||||
|
||||
if (!empty($page['thumbnails']))
|
||||
{
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n('%d photos uploaded'),
|
||||
count($page['thumbnails'])
|
||||
)
|
||||
);
|
||||
|
||||
if (0 != $_POST['level'])
|
||||
{
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n('Privacy level set to "%s"'),
|
||||
l10n(
|
||||
sprintf('Level %d', $_POST['level'])
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if ('existing' == $_POST['category_type'])
|
||||
{
|
||||
$query = '
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE category_id = '.$category_id.'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
$category_name = get_cat_display_name_from_id($category_id, 'admin.php?page=cat_modify&cat_id=');
|
||||
|
||||
// information
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n('Album "%s" now contains %d photos'),
|
||||
'<em>'.$category_name.'</em>',
|
||||
$count
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$page['batch_link'] = PHOTOS_ADD_BASE_URL.'&batch='.implode(',', $image_ids);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -2,7 +2,9 @@
|
|||
// +-----------------------------------------------------------------------+
|
||||
// | Piwigo - a PHP based photo gallery |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | Copyright(C) 2010 Pierrick LE GALL http://piwigo.org |
|
||||
// | Copyright(C) 2008-2011 Piwigo Team http://piwigo.org |
|
||||
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
|
||||
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | This program is free software; you can redistribute it and/or modify |
|
||||
// | it under the terms of the GNU General Public License as published by |
|
||||
|
@ -62,491 +64,13 @@ DELETE FROM '.CADDIE_TABLE.'
|
|||
// | process form |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
if (isset($_GET['processed']))
|
||||
{
|
||||
// echo '<pre>POST'."\n"; print_r($_POST); echo '</pre>';
|
||||
// echo '<pre>FILES'."\n"; print_r($_FILES); echo '</pre>';
|
||||
// echo '<pre>SESSION'."\n"; print_r($_SESSION); echo '</pre>';
|
||||
// exit();
|
||||
|
||||
// sometimes, you have submitted the form but you have nothing in $_POST
|
||||
// and $_FILES. This may happen when you have an HTML upload and you
|
||||
// exceeded the post_max_size (but not the upload_max_size)
|
||||
if (!isset($_POST['submit_upload']))
|
||||
{
|
||||
array_push(
|
||||
$page['errors'],
|
||||
sprintf(
|
||||
l10n('The uploaded files exceed the post_max_size directive in php.ini: %sB'),
|
||||
ini_get('post_max_size')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$category_id = null;
|
||||
if (!isset($_POST['category_type']))
|
||||
{
|
||||
// nothing to do, we certainly have the post_max_size issue
|
||||
}
|
||||
elseif ('existing' == $_POST['category_type'])
|
||||
{
|
||||
$category_id = $_POST['category'];
|
||||
}
|
||||
elseif ('new' == $_POST['category_type'])
|
||||
{
|
||||
$output_create = create_virtual_category(
|
||||
$_POST['category_name'],
|
||||
(0 == $_POST['category_parent'] ? null : $_POST['category_parent'])
|
||||
);
|
||||
|
||||
$category_id = $output_create['id'];
|
||||
|
||||
if (isset($output_create['error']))
|
||||
{
|
||||
array_push($page['errors'], $output_create['error']);
|
||||
}
|
||||
else
|
||||
{
|
||||
$category_name = get_cat_display_name_from_id($category_id, 'admin.php?page=cat_modify&cat_id=');
|
||||
// information
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n('Album "%s" has been added'),
|
||||
'<em>'.$category_name.'</em>'
|
||||
)
|
||||
);
|
||||
// TODO: add the onclick="window.open(this.href); return false;"
|
||||
// attribute with jQuery on upload.tpl side for href containing
|
||||
// "cat_modify"
|
||||
}
|
||||
}
|
||||
|
||||
$image_ids = array();
|
||||
|
||||
if (isset($_FILES) and !empty($_FILES['image_upload']))
|
||||
{
|
||||
$starttime = get_moment();
|
||||
|
||||
foreach ($_FILES['image_upload']['error'] as $idx => $error)
|
||||
{
|
||||
if (UPLOAD_ERR_OK == $error)
|
||||
{
|
||||
$images_to_add = array();
|
||||
|
||||
$extension = pathinfo($_FILES['image_upload']['name'][$idx], PATHINFO_EXTENSION);
|
||||
if ('zip' == strtolower($extension))
|
||||
{
|
||||
$upload_dir = $conf['upload_dir'].'/buffer';
|
||||
prepare_directory($upload_dir);
|
||||
|
||||
$temporary_archive_name = date('YmdHis').'-'.generate_key(10);
|
||||
$archive_path = $upload_dir.'/'.$temporary_archive_name.'.zip';
|
||||
|
||||
move_uploaded_file(
|
||||
$_FILES['image_upload']['tmp_name'][$idx],
|
||||
$archive_path
|
||||
);
|
||||
|
||||
define('PCLZIP_TEMPORARY_DIR', $upload_dir.'/');
|
||||
include(PHPWG_ROOT_PATH.'admin/include/pclzip.lib.php');
|
||||
$zip = new PclZip($archive_path);
|
||||
if ($list = $zip->listContent())
|
||||
{
|
||||
$indexes_to_extract = array();
|
||||
|
||||
foreach ($list as $node)
|
||||
{
|
||||
if (1 == $node['folder'])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_valid_image_extension(pathinfo($node['filename'], PATHINFO_EXTENSION)))
|
||||
{
|
||||
array_push($indexes_to_extract, $node['index']);
|
||||
|
||||
array_push(
|
||||
$images_to_add,
|
||||
array(
|
||||
'source_filepath' => $upload_dir.'/'.$temporary_archive_name.'/'.$node['filename'],
|
||||
'original_filename' => basename($node['filename']),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (count($indexes_to_extract) > 0)
|
||||
{
|
||||
$zip->extract(
|
||||
PCLZIP_OPT_PATH, $upload_dir.'/'.$temporary_archive_name,
|
||||
PCLZIP_OPT_BY_INDEX, $indexes_to_extract,
|
||||
PCLZIP_OPT_ADD_TEMP_FILE_ON
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
elseif (is_valid_image_extension($extension))
|
||||
{
|
||||
array_push(
|
||||
$images_to_add,
|
||||
array(
|
||||
'source_filepath' => $_FILES['image_upload']['tmp_name'][$idx],
|
||||
'original_filename' => $_FILES['image_upload']['name'][$idx],
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($images_to_add as $image_to_add)
|
||||
{
|
||||
$image_id = add_uploaded_file(
|
||||
$image_to_add['source_filepath'],
|
||||
$image_to_add['original_filename'],
|
||||
array($category_id),
|
||||
$_POST['level']
|
||||
);
|
||||
|
||||
array_push($image_ids, $image_id);
|
||||
|
||||
// TODO: if $image_id is not an integer, something went wrong
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$error_message = file_upload_error_message($error);
|
||||
|
||||
array_push(
|
||||
$page['errors'],
|
||||
sprintf(
|
||||
l10n('Error on file "%s" : %s'),
|
||||
$_FILES['image_upload']['name'][$idx],
|
||||
$error_message
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$endtime = get_moment();
|
||||
$elapsed = ($endtime - $starttime) * 1000;
|
||||
// printf('%.2f ms', $elapsed);
|
||||
|
||||
} // if (!empty($_FILES))
|
||||
|
||||
if (isset($_POST['upload_id']))
|
||||
{
|
||||
// we're on a multiple upload, with uploadify and so on
|
||||
if (isset($_SESSION['uploads_error'][ $_POST['upload_id'] ]))
|
||||
{
|
||||
foreach ($_SESSION['uploads_error'][ $_POST['upload_id'] ] as $error)
|
||||
{
|
||||
array_push($page['errors'], $error);
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_SESSION['uploads'][ $_POST['upload_id'] ]))
|
||||
{
|
||||
$image_ids = $_SESSION['uploads'][ $_POST['upload_id'] ];
|
||||
|
||||
associate_images_to_categories(
|
||||
$image_ids,
|
||||
array($category_id)
|
||||
);
|
||||
|
||||
$query = '
|
||||
UPDATE '.IMAGES_TABLE.'
|
||||
SET level = '.$_POST['level'].'
|
||||
WHERE id IN ('.implode(', ', $image_ids).')
|
||||
;';
|
||||
pwg_query($query);
|
||||
|
||||
invalidate_user_cache();
|
||||
}
|
||||
}
|
||||
|
||||
$page['thumbnails'] = array();
|
||||
foreach ($image_ids as $image_id)
|
||||
{
|
||||
// we could return the list of properties from the add_uploaded_file
|
||||
// function, but I like the "double check". And it costs nothing
|
||||
// compared to the upload process.
|
||||
$thumbnail = array();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
file,
|
||||
path,
|
||||
tn_ext
|
||||
FROM '.IMAGES_TABLE.'
|
||||
WHERE id = '.$image_id.'
|
||||
;';
|
||||
$image_infos = pwg_db_fetch_assoc(pwg_query($query));
|
||||
|
||||
$thumbnail['file'] = $image_infos['file'];
|
||||
|
||||
$thumbnail['src'] = get_thumbnail_location(
|
||||
array(
|
||||
'path' => $image_infos['path'],
|
||||
'tn_ext' => $image_infos['tn_ext'],
|
||||
)
|
||||
);
|
||||
|
||||
// TODO: when implementing this plugin in Piwigo core, we should have
|
||||
// a function get_image_name($name, $file) (if name is null, then
|
||||
// compute a temporary name from filename) that would be also used in
|
||||
// picture.php. UPDATE: in fact, "get_name_from_file($file)" already
|
||||
// exists and is used twice (batch_manager_unit + comments, but not in
|
||||
// picture.php I don't know why) with the same pattern if
|
||||
// (empty($name)) {$name = get_name_from_file($file)}, a clean
|
||||
// function get_image_name($name, $file) would be better
|
||||
$thumbnail['title'] = get_name_from_file($image_infos['file']);
|
||||
|
||||
$thumbnail['link'] = PHPWG_ROOT_PATH.'admin.php?page=picture_modify'
|
||||
.'&image_id='.$image_id
|
||||
.'&cat_id='.$category_id
|
||||
;
|
||||
|
||||
array_push($page['thumbnails'], $thumbnail);
|
||||
}
|
||||
|
||||
if (!empty($page['thumbnails']))
|
||||
{
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n('%d photos uploaded'),
|
||||
count($page['thumbnails'])
|
||||
)
|
||||
);
|
||||
|
||||
if (0 != $_POST['level'])
|
||||
{
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n('Privacy level set to "%s"'),
|
||||
l10n(
|
||||
sprintf('Level %d', $_POST['level'])
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if ('existing' == $_POST['category_type'])
|
||||
{
|
||||
$query = '
|
||||
SELECT
|
||||
COUNT(*)
|
||||
FROM '.IMAGE_CATEGORY_TABLE.'
|
||||
WHERE category_id = '.$category_id.'
|
||||
;';
|
||||
list($count) = pwg_db_fetch_row(pwg_query($query));
|
||||
$category_name = get_cat_display_name_from_id($category_id, 'admin.php?page=cat_modify&cat_id=');
|
||||
|
||||
// information
|
||||
array_push(
|
||||
$page['infos'],
|
||||
sprintf(
|
||||
l10n('Album "%s" now contains %d photos'),
|
||||
'<em>'.$category_name.'</em>',
|
||||
$count
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$page['batch_link'] = PHOTOS_ADD_BASE_URL.'&batch='.implode(',', $image_ids);
|
||||
}
|
||||
}
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/photos_add_direct_process.inc.php');
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | template init |
|
||||
// | prepare form |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
$uploadify_path = PHPWG_ROOT_PATH.'admin/include/uploadify';
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'F_ADD_ACTION'=> PHOTOS_ADD_BASE_URL,
|
||||
'uploadify_path' => $uploadify_path,
|
||||
'upload_max_filesize' => min(
|
||||
get_ini_size('upload_max_filesize'),
|
||||
get_ini_size('post_max_size')
|
||||
),
|
||||
)
|
||||
);
|
||||
|
||||
$upload_modes = array('html', 'multiple');
|
||||
$upload_mode = isset($conf['upload_mode']) ? $conf['upload_mode'] : 'multiple';
|
||||
|
||||
if (isset($_GET['upload_mode']) and in_array($_GET['upload_mode'], $upload_modes))
|
||||
{
|
||||
$upload_mode = $_GET['upload_mode'];
|
||||
conf_update_param('upload_mode', $upload_mode);
|
||||
}
|
||||
|
||||
// what is the upload switch mode
|
||||
$index_of_upload_mode = array_flip($upload_modes);
|
||||
$upload_mode_index = $index_of_upload_mode[$upload_mode];
|
||||
$upload_switch = $upload_modes[ ($upload_mode_index + 1) % 2 ];
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'upload_mode' => $upload_mode,
|
||||
'form_action' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode.'&processed=1',
|
||||
'switch_url' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_switch,
|
||||
'upload_id' => md5(rand()),
|
||||
'session_id' => session_id(),
|
||||
'pwg_token' => get_pwg_token(),
|
||||
'another_upload_link' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode,
|
||||
)
|
||||
);
|
||||
|
||||
$template->append(
|
||||
'head_elements',
|
||||
'<link rel="stylesheet" type="text/css" href="'.$uploadify_path.'/uploadify.css">'."\n"
|
||||
);
|
||||
|
||||
if (isset($page['thumbnails']))
|
||||
{
|
||||
$template->assign(
|
||||
array(
|
||||
'thumbnails' => $page['thumbnails'],
|
||||
)
|
||||
);
|
||||
|
||||
// only display the batch link if we have more than 1 photo
|
||||
if (count($page['thumbnails']) > 1)
|
||||
{
|
||||
$template->assign(
|
||||
array(
|
||||
'batch_link' => $page['batch_link'],
|
||||
'batch_label' => sprintf(
|
||||
l10n('Manage this set of %d photos'),
|
||||
count($page['thumbnails'])
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// categories
|
||||
//
|
||||
// we need to know the category in which the last photo was added
|
||||
$selected_category = array();
|
||||
$selected_parent = array();
|
||||
|
||||
$query = '
|
||||
SELECT
|
||||
category_id,
|
||||
id_uppercat
|
||||
FROM '.IMAGES_TABLE.' AS i
|
||||
JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON image_id = i.id
|
||||
JOIN '.CATEGORIES_TABLE.' AS c ON category_id = c.id
|
||||
ORDER BY i.id DESC
|
||||
LIMIT 1
|
||||
;';
|
||||
$result = pwg_query($query);
|
||||
if (pwg_db_num_rows($result) > 0)
|
||||
{
|
||||
$row = pwg_db_fetch_assoc($result);
|
||||
|
||||
$selected_category = array($row['category_id']);
|
||||
|
||||
if (!empty($row['id_uppercat']))
|
||||
{
|
||||
$selected_parent = array($row['id_uppercat']);
|
||||
}
|
||||
}
|
||||
|
||||
// existing album
|
||||
$query = '
|
||||
SELECT id,name,uppercats,global_rank
|
||||
FROM '.CATEGORIES_TABLE.'
|
||||
;';
|
||||
|
||||
display_select_cat_wrapper(
|
||||
$query,
|
||||
$selected_category,
|
||||
'category_options'
|
||||
);
|
||||
|
||||
// new category
|
||||
display_select_cat_wrapper(
|
||||
$query,
|
||||
$selected_parent,
|
||||
'category_parent_options'
|
||||
);
|
||||
|
||||
|
||||
// image level options
|
||||
$selected_level = isset($_POST['level']) ? $_POST['level'] : 0;
|
||||
$template->assign(
|
||||
array(
|
||||
'level_options'=> get_privacy_level_options(),
|
||||
'level_options_selected' => array($selected_level)
|
||||
)
|
||||
);
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | setup errors/warnings |
|
||||
// +-----------------------------------------------------------------------+
|
||||
|
||||
// Errors
|
||||
$setup_errors = array();
|
||||
|
||||
$error_message = ready_for_upload_message();
|
||||
if (!empty($error_message))
|
||||
{
|
||||
array_push($setup_errors, $error_message);
|
||||
}
|
||||
|
||||
if (!function_exists('gd_info'))
|
||||
{
|
||||
array_push($setup_errors, l10n('GD library is missing'));
|
||||
}
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'setup_errors'=> $setup_errors,
|
||||
)
|
||||
);
|
||||
|
||||
// Warnings
|
||||
if (isset($_GET['hide_warnings']))
|
||||
{
|
||||
$_SESSION['upload_hide_warnings'] = true;
|
||||
}
|
||||
|
||||
if (!isset($_SESSION['upload_hide_warnings']))
|
||||
{
|
||||
$setup_warnings = array();
|
||||
|
||||
if ($conf['use_exif'] and !function_exists('read_exif_data'))
|
||||
{
|
||||
array_push(
|
||||
$setup_warnings,
|
||||
l10n('Exif extension not available, admin should disable exif use')
|
||||
);
|
||||
}
|
||||
|
||||
if (get_ini_size('upload_max_filesize') > get_ini_size('post_max_size'))
|
||||
{
|
||||
array_push(
|
||||
$setup_warnings,
|
||||
sprintf(
|
||||
l10n('In your php.ini file, the upload_max_filesize (%sB) is bigger than post_max_size (%sB), you should change this setting'),
|
||||
get_ini_size('upload_max_filesize', false),
|
||||
get_ini_size('post_max_size', false)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$template->assign(
|
||||
array(
|
||||
'setup_warnings' => $setup_warnings,
|
||||
'hide_warnings_link' => PHOTOS_ADD_BASE_URL.'&upload_mode='.$upload_mode.'&hide_warnings=1'
|
||||
)
|
||||
);
|
||||
}
|
||||
include_once(PHPWG_ROOT_PATH.'admin/include/photos_add_direct_prepare.inc.php');
|
||||
|
||||
// +-----------------------------------------------------------------------+
|
||||
// | sending html code |
|
||||
|
|
Loading…
Reference in a new issue