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 @@ +'; +// print_r($_POST['selection']); +// echo ''; +// 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 '
'.$query.'
'; +$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 + + * 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.= ''; 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 @@
  • {L_WAITING}
  • {L_THUMBNAILS}
  • {L_COMMENTS}
  • +
  • Caddie
  • {L_IDENTIFY}
    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 @@ +

    Empty caddie

    + +
    + + associate to + + +
    dissociate from + + +
    target + all + selection + +
    + + + + + + + + + + +
    + {thumbnails.line.thumbnail.ALT} +
    +
    + + +
    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 @@
    +