aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2005-03-25 22:10:55 +0000
committerplegall <plg@piwigo.org>2005-03-25 22:10:55 +0000
commitef080278bf4d0e073daa5f6a6f6d3b8ae4c29d9c (patch)
tree243d94d5b810325c43ea9e6998b7929319bc1e3e
parent333d44c398e31dd7f24efbcf50d53c1ce2a754ba (diff)
- new feature : caddie. The purpose is batch management, especially
concerning elements to categories associations. This is the very first release, needs many improvements. - new function : array_from_query. Firstly used by "caddie" feature, it may be useful in many cases. git-svn-id: http://piwigo.org/svn/trunk@755 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r--admin.php7
-rw-r--r--admin/element_set_global.php241
-rw-r--r--category.php36
-rw-r--r--doc/ChangeLog5
-rw-r--r--include/constants.php3
-rw-r--r--include/functions.inc.php21
-rw-r--r--template/default/admin.tpl1
-rw-r--r--template/default/admin/element_set_global.tpl44
-rw-r--r--template/default/category.tpl1
9 files changed, 357 insertions, 2 deletions
diff --git a/admin.php b/admin.php
index 78050490f..c744201a6 100644
--- a/admin.php
+++ b/admin.php
@@ -149,6 +149,12 @@ switch ( $_GET['page'] )
$page_valide = true;
break;
}
+ case 'element_set_global' :
+ {
+ $title = 'batch management';
+ $page_valide = true;
+ break;
+ }
default:
$title = $lang['title_default']; break;
}
@@ -234,6 +240,7 @@ $template->assign_vars(array(
'U_CAT_UPDATE'=>add_session_id($link_start.'update'),
'U_WAITING'=>add_session_id($link_start.'waiting' ),
'U_COMMENTS'=>add_session_id($link_start.'comments' ),
+ 'U_SET'=>add_session_id($link_start.'element_set_global'),
'U_THUMBNAILS'=>add_session_id($link_start.'thumbnail' ),
'U_USERS'=>add_session_id($link_start.'profile' ),
'U_GROUPS'=>add_session_id($link_start.'group_list' ),
diff --git a/admin/element_set_global.php b/admin/element_set_global.php
new file mode 100644
index 000000000..ffd8c10fe
--- /dev/null
+++ b/admin/element_set_global.php
@@ -0,0 +1,241 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | PhpWebGallery - a PHP based picture gallery |
+// | Copyright (C) 2002-2003 Pierrick LE GALL - pierrick@phpwebgallery.net |
+// | Copyright (C) 2003-2005 PhpWebGallery Team - http://phpwebgallery.net |
+// +-----------------------------------------------------------------------+
+// | branch : BSF (Best So Far)
+// | file : $RCSfile$
+// | last update : $Date$
+// | last modifier : $Author$
+// | revision : $Revision$
+// +-----------------------------------------------------------------------+
+// | 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. |
+// +-----------------------------------------------------------------------+
+
+/**
+ * Management of elements set. Elements can belong to a category or to the
+ * user caddie.
+ *
+ */
+
+$user['nb_image_line'] = 6; // temporary
+
+if (!defined('PHPWG_ROOT_PATH'))
+{
+ die('Hacking attempt!');
+}
+include_once(PHPWG_ROOT_PATH.'admin/include/isadmin.inc.php');
+
+// +-----------------------------------------------------------------------+
+// | empty caddie |
+// +-----------------------------------------------------------------------+
+if (isset($_GET['empty']))
+{
+ $query = '
+DELETE FROM '.CADDIE_TABLE.'
+ WHERE user_id = '.$user['id'].'
+;';
+ pwg_query($query);
+}
+
+// +-----------------------------------------------------------------------+
+// | global mode form submission |
+// +-----------------------------------------------------------------------+
+$errors = array();
+
+if (isset($_POST['submit']))
+{
+ $collection = array();
+
+// echo '<pre>';
+// print_r($_POST['selection']);
+// echo '</pre>';
+// exit();
+
+ switch ($_POST['target'])
+ {
+ case 'all' :
+ {
+ $query = '
+SELECT element_id
+ FROM '.CADDIE_TABLE.'
+ WHERE user_id = '.$user['id'].'
+;';
+ $result = pwg_query($query);
+ while ($row = mysql_fetch_array($result))
+ {
+ array_push($collection, $row['element_id']);
+ }
+ break;
+ }
+ case 'selection' :
+ {
+ $collection = $_POST['selection'];
+ break;
+ }
+ }
+
+ if ($_POST['associate'] != 0)
+ {
+ $datas = array();
+
+ foreach ($collection as $item)
+ {
+ array_push($datas,
+ array('category_id'=>$_POST['associate'],
+ 'image_id'=>$item));
+ }
+
+ // TODO : inserting an existing PK will fail
+ mass_inserts(IMAGE_CATEGORY_TABLE, array('image_id', 'category_id'), $datas);
+ update_category(array($_POST['associate']));
+ }
+
+ if ($_POST['dissociate'] != 0)
+ {
+ // physical links must be broken, so we must first retrieve image_id
+ // which create virtual links with the category to "dissociate from".
+ $query = '
+SELECT id
+ FROM '.IMAGE_CATEGORY_TABLE.' INNER JOIN '.IMAGES_TABLE.' ON image_id = id
+ WHERE category_id = '.$_POST['dissociate'].'
+ AND category_id != storage_category_id
+ AND id IN ('.implode(',', $collection).')
+;';
+ $dissociables = array_from_query($query, 'id');
+
+ $query = '
+DELETE FROM '.IMAGE_CATEGORY_TABLE.'
+ WHERE category_id = '.$_POST['dissociate'].'
+ AND image_id IN ('.implode(',', $dissociables).')
+';
+ pwg_query($query);
+
+ update_category(array($_POST['dissociate']));
+ }
+}
+
+// +-----------------------------------------------------------------------+
+// | template init |
+// +-----------------------------------------------------------------------+
+$template->set_filenames(
+ array('element_set_global' => 'admin/element_set_global.tpl'));
+
+$form_action = PHPWG_ROOT_PATH.'admin.php?page=element_set_global';
+
+$template->assign_vars(
+ array(
+ 'L_SUBMIT'=>$lang['submit'],
+
+ 'U_EMPTY_CADDIE'=>add_session_id($form_action.'&amp;empty=1'),
+
+ 'F_ACTION'=>add_session_id($form_action)
+ )
+ );
+// +-----------------------------------------------------------------------+
+// | global mode form |
+// +-----------------------------------------------------------------------+
+
+// Virtualy associate a picture to a category
+$blockname = 'associate_option';
+
+$template->assign_block_vars(
+ $blockname,
+ array('SELECTED' => '',
+ 'VALUE'=> 0,
+ 'OPTION' => '------------'
+ ));
+
+$query = '
+SELECT id,name,uppercats,global_rank
+ FROM '.CATEGORIES_TABLE.'
+;';
+display_select_cat_wrapper($query, array(), $blockname, true);
+
+// Dissociate from a category : categories listed for dissociation can
+// only represent virtual links. Links to physical categories can't be
+// broken
+$blockname = 'dissociate_option';
+
+$template->assign_block_vars(
+ $blockname,
+ array('SELECTED' => '',
+ 'VALUE'=> 0,
+ 'OPTION' => '------------'
+ ));
+
+$query = '
+SELECT DISTINCT(category_id) AS id, c.name, uppercats, global_rank
+ FROM '.IMAGE_CATEGORY_TABLE.' AS ic,
+ '.CADDIE_TABLE.' AS caddie,
+ '.CATEGORIES_TABLE.' AS c,
+ '.IMAGES_TABLE.' AS i
+ WHERE ic.image_id = caddie.element_id
+ AND ic.category_id = c.id
+ AND ic.image_id = i.id
+ AND ic.category_id != i.storage_category_id
+ AND caddie.user_id = '.$user['id'].'
+;';
+display_select_cat_wrapper($query, array(), $blockname, true);
+
+// +-----------------------------------------------------------------------+
+// | global mode thumbnails |
+// +-----------------------------------------------------------------------+
+
+$query = '
+SELECT element_id,path,tn_ext
+ FROM '.IMAGES_TABLE.' INNER JOIN '.CADDIE_TABLE.' ON id=element_id
+ WHERE user_id = '.$user['id'].'
+ '.$conf['order_by'].'
+;';
+//echo '<pre>'.$query.'</pre>';
+$result = pwg_query($query);
+
+// template thumbnail initialization
+if (mysql_num_rows($result) > 0)
+{
+ $template->assign_block_vars('thumbnails', array());
+ // first line
+ $template->assign_block_vars('thumbnails.line', array());
+ // current row displayed
+ $row_number = 0;
+}
+
+while ($row = mysql_fetch_array($result))
+{
+ $src = get_thumbnail_src($row['path'], @$row['tn_ext']);
+
+ $template->assign_block_vars(
+ 'thumbnails.line.thumbnail',
+ array(
+ 'ID' => $row['element_id'],
+ 'SRC' => $src,
+ 'ALT' => 'TODO',
+ 'TITLE' => 'TODO'
+ )
+ );
+
+ // create a new line ?
+ if (++$row_number == $user['nb_image_line'])
+ {
+ $template->assign_block_vars('thumbnails.line', array());
+ $row_number = 0;
+ }
+}
+
+//----------------------------------------------------------- sending html code
+$template->assign_var_from_handle('ADMIN_CONTENT', 'element_set_global');
+?>
diff --git a/category.php b/category.php
index 09decc08a..7de82f31c 100644
--- a/category.php
+++ b/category.php
@@ -75,6 +75,39 @@ if ( isset( $_GET['num'] )
initialize_category();
+// caddie filling :-)
+if (isset($_GET['caddie']))
+{
+ include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
+ // You can't add in caddie elements that are already in !
+
+ $query = '
+SELECT DISTINCT(id)
+ FROM '.IMAGES_TABLE.' AS i
+ INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
+ '.$page['where'].'
+;';
+ $ids = array_from_query($query, 'id');
+
+ $query = '
+SELECT element_id
+ FROM '.CADDIE_TABLE.'
+ WHERE user_id = '.$user['id'].'
+;';
+ $in_caddie = array_from_query($query, 'element_id');
+
+ $caddiables = array_diff($ids, $in_caddie);
+
+ $datas = array();
+
+ foreach ($caddiables as $caddiable)
+ {
+ array_push($datas, array('element_id' => $caddiable,
+ 'user_id' => $user['id']));
+ }
+ mass_inserts(CADDIE_TABLE, array('element_id','user_id'), $datas);
+}
+
// creation of the array containing the cat ids to expand in the menu
// $page['tab_expand'] contains an array with the category ids
// $page['expand'] contains the string to display in URL with comma
@@ -157,7 +190,8 @@ $template->assign_vars(array(
'U_REGISTER' => add_session_id( PHPWG_ROOT_PATH.'register.php' ),
'U_LOGOUT' => PHPWG_ROOT_PATH.'category.php?act=logout',
'U_ADMIN'=>add_session_id( PHPWG_ROOT_PATH.'admin.php' ),
- 'U_PROFILE'=>add_session_id(PHPWG_ROOT_PATH.'profile.php?'.str_replace( '&', '&amp;', $_SERVER['QUERY_STRING'] ))
+ 'U_PROFILE'=>add_session_id(PHPWG_ROOT_PATH.'profile.php?'.str_replace( '&', '&amp;', $_SERVER['QUERY_STRING'] )),
+ 'U_CADDIE'=>add_session_id(PHPWG_ROOT_PATH.'category.php'.get_query_string_diff(array('caddie')).'&amp;caddie=1')
)
);
//---------------------------------------------------------- special categories
diff --git a/doc/ChangeLog b/doc/ChangeLog
new file mode 100644
index 000000000..fbdc518d2
--- /dev/null
+++ b/doc/ChangeLog
@@ -0,0 +1,5 @@
+2005-03-25 Pierrick LE GALL <pierrick at phpwebgallery dot net>
+
+ * new feature : caddie. The purpose is batch management,
+ especially concerning elements to categories associations.This is
+ the very first release, needs many improvements.
diff --git a/include/constants.php b/include/constants.php
index 944bacca6..c47ecf9a2 100644
--- a/include/constants.php
+++ b/include/constants.php
@@ -26,7 +26,7 @@
// +-----------------------------------------------------------------------+
// Default settings
-define('PHPWG_VERSION', '1.4.0RC3');
+define('PHPWG_VERSION', '1.4.0');
define('PHPWG_URL', 'http://www.phpwebgallery.net');
define('PHPWG_FORUM_URL', 'http://forum.phpwebgallery.net');
@@ -58,4 +58,5 @@ define('WAITING_TABLE', $prefixeTable.'waiting');
define('IMAGE_METADATA_TABLE', $prefixeTable.'image_metadata');
define('RATE_TABLE', $prefixeTable.'rate');
define('USER_FORBIDDEN_TABLE', $prefixeTable.'user_forbidden');
+define('CADDIE_TABLE', $prefixeTable.'caddie');
?>
diff --git a/include/functions.inc.php b/include/functions.inc.php
index edc9f2062..282c196ac 100644
--- a/include/functions.inc.php
+++ b/include/functions.inc.php
@@ -618,4 +618,25 @@ function my_error($header)
$error.= '</pre>';
die ($error);
}
+
+/**
+ * creates an array based on a query, this function is a very common pattern
+ * used here
+ *
+ * @param string $query
+ * @param string $fieldname
+ * @return array
+ */
+function array_from_query($query, $fieldname)
+{
+ $array = array();
+
+ $result = pwg_query($query);
+ while ($row = mysql_fetch_array($result))
+ {
+ array_push($array, $row[$fieldname]);
+ }
+
+ return $array;
+}
?>
diff --git a/template/default/admin.tpl b/template/default/admin.tpl
index 50e2e581a..953e15f80 100644
--- a/template/default/admin.tpl
+++ b/template/default/admin.tpl
@@ -49,6 +49,7 @@
<li><a class="adminMenu" href="{U_WAITING}">{L_WAITING}</a></li>
<li><a class="adminMenu" href="{U_THUMBNAILS}">{L_THUMBNAILS}</a></li>
<li><a class="adminMenu" href="{U_COMMENTS}">{L_COMMENTS}</a></li>
+ <li><a class="adminMenu" href="{U_SET}">Caddie</a></li>
</ul>
</div>
<div class="titreMenu">{L_IDENTIFY}</div>
diff --git a/template/default/admin/element_set_global.tpl b/template/default/admin/element_set_global.tpl
new file mode 100644
index 000000000..c693ff53a
--- /dev/null
+++ b/template/default/admin/element_set_global.tpl
@@ -0,0 +1,44 @@
+<p style="text-align:center"><a href="{U_EMPTY_CADDIE}">Empty caddie</a></p>
+
+<form action="{F_ACTION}" method="post">
+
+ associate to
+ <select style="width:400px" name="associate" size="1">
+ <!-- BEGIN associate_option -->
+ <option {associate_option.SELECTED} value="{associate_option.VALUE}">{associate_option.OPTION}</option>
+ <!-- END associate_option -->
+ </select>
+
+ <br />dissociate from
+ <select style="width:400px" name="dissociate" size="1">
+ <!-- BEGIN dissociate_option -->
+ <option {dissociate_option.SELECTED} value="{dissociate_option.VALUE}">{dissociate_option.OPTION}</option>
+ <!-- END dissociate_option -->
+ </select>
+
+ <br />target
+ <input type="radio" name="target" value="all" /> all
+ <input type="radio" name="target" value="selection" /> selection
+
+ <br /><input type="submit" value="{L_SUBMIT}" name="submit" class="bouton" />
+
+ <!-- BEGIN thumbnails -->
+ <table valign="top" align="center" class="thumbnail">
+ <!-- BEGIN line -->
+ <tr>
+ <!-- BEGIN thumbnail -->
+ <td class="thumbnail"
+ onmousedown="document.getElementById('selection_{thumbnails.line.thumbnail.ID}').checked = (document.getElementById('selection_{thumbnails.line.thumbnail.ID}').checked ? false : true);">
+ <img src="{thumbnails.line.thumbnail.SRC}"
+ alt="{thumbnails.line.thumbnail.ALT}"
+ title="{thumbnails.line.thumbnail.TITLE}"
+ class="thumbLink" />
+ <br /><input type="checkbox" name="selection[]" value="{thumbnails.line.thumbnail.ID}" id="selection_{thumbnails.line.thumbnail.ID}" />
+ </td>
+ <!-- END thumbnail -->
+ </tr>
+ <!-- END line -->
+ </table>
+ <!-- END thumbnails -->
+
+</form>
diff --git a/template/default/category.tpl b/template/default/category.tpl
index 00f95181d..0f503b0af 100644
--- a/template/default/category.tpl
+++ b/template/default/category.tpl
@@ -93,6 +93,7 @@
</table>
<!-- END thumbnails -->
<br />
+ <div class="navigationBar"><a href="{U_CADDIE}">add to caddie</a></div>
<!-- BEGIN cat_infos -->
<!-- BEGIN navigation -->
<div class="navigationBar">{cat_infos.navigation.NAV_BAR}</div>