diff options
author | plegall <plg@piwigo.org> | 2005-03-25 22:10:55 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2005-03-25 22:10:55 +0000 |
commit | ef080278bf4d0e073daa5f6a6f6d3b8ae4c29d9c (patch) | |
tree | 243d94d5b810325c43ea9e6998b7929319bc1e3e | |
parent | 333d44c398e31dd7f24efbcf50d53c1ce2a754ba (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.php | 7 | ||||
-rw-r--r-- | admin/element_set_global.php | 241 | ||||
-rw-r--r-- | category.php | 36 | ||||
-rw-r--r-- | doc/ChangeLog | 5 | ||||
-rw-r--r-- | include/constants.php | 3 | ||||
-rw-r--r-- | include/functions.inc.php | 21 | ||||
-rw-r--r-- | template/default/admin.tpl | 1 | ||||
-rw-r--r-- | template/default/admin/element_set_global.tpl | 44 | ||||
-rw-r--r-- | template/default/category.tpl | 1 |
9 files changed, 357 insertions, 2 deletions
@@ -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.'&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( '&', '&', $_SERVER['QUERY_STRING'] )) + 'U_PROFILE'=>add_session_id(PHPWG_ROOT_PATH.'profile.php?'.str_replace( '&', '&', $_SERVER['QUERY_STRING'] )), + 'U_CADDIE'=>add_session_id(PHPWG_ROOT_PATH.'category.php'.get_query_string_diff(array('caddie')).'&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> |