diff options
author | plegall <plg@piwigo.org> | 2010-07-23 21:33:56 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2010-07-23 21:33:56 +0000 |
commit | 1448b42df0e076d09e8eb6c8bf9c8cebd212596a (patch) | |
tree | 1e13c16b1a59db81a524d3ed4bf53c3dd1812e2c /admin | |
parent | 361ef07c3cf12235cea64c5c9b3a3402623619cb (diff) |
feature 408: ability to automatically sort sub-categories. The number of SQL
queries is constant, no matter the deepth of your tree.
+ refactor to avoid duplicate code (ascending/desceding should be only a
single parameter in a function, not 20 lines of duplicated code)
git-svn-id: http://piwigo.org/svn/trunk@6698 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to 'admin')
-rw-r--r-- | admin/cat_list.php | 123 | ||||
-rw-r--r-- | admin/themes/default/default-layout.css | 5 | ||||
-rw-r--r-- | admin/themes/default/template/cat_list.tpl | 32 |
3 files changed, 102 insertions, 58 deletions
diff --git a/admin/cat_list.php b/admin/cat_list.php index 662edbc88..7afc21db4 100644 --- a/admin/cat_list.php +++ b/admin/cat_list.php @@ -55,11 +55,30 @@ if (!empty($_POST) or isset($_GET['delete'])) */ function save_categories_order($categories) { + $current_rank_for_id_uppercat = array(); $current_rank = 0; + $datas = array(); - foreach ($categories as $id) + foreach ($categories as $category) { - array_push($datas, array('id' => $id, 'rank' => ++$current_rank)); + if (is_array($category)) + { + $id = $category['id']; + $id_uppercat = $category['id_uppercat']; + + if (!isset($current_rank_for_id_uppercat[$id_uppercat])) + { + $current_rank_for_id_uppercat[$id_uppercat] = 0; + } + $current_rank = ++$current_rank_for_id_uppercat[$id_uppercat]; + } + else + { + $id = $category; + $current_rank++; + } + + array_push($datas, array('id' => $id, 'rank' => $current_rank)); } $fields = array('primary' => array('id'), 'update' => array('rank')); mass_updates(CATEGORIES_TABLE, $fields, $datas); @@ -111,59 +130,69 @@ else if (isset($_POST['submitAdd'])) // save manual category ordering else if (isset($_POST['submitOrder'])) { - asort($_POST['catOrd'], SORT_NUMERIC); - save_categories_order(array_keys($_POST['catOrd'])); + if ('manual' == $_POST['order_type']) + { + asort($_POST['catOrd'], SORT_NUMERIC); + save_categories_order(array_keys($_POST['catOrd'])); - array_push( - $page['infos'], - l10n('Categories manual order was saved') - ); -} -// sort categories alpha-numerically -else if (isset($_POST['submitOrderAlphaNum'])) -{ - $query = ' -SELECT id, name + array_push( + $page['infos'], + l10n('Categories manual order was saved') + ); + } + else + { + $query = ' +SELECT id FROM '.CATEGORIES_TABLE.' WHERE id_uppercat '. (!isset($_GET['parent_id']) ? 'IS NULL' : '= '.$_GET['parent_id']).' ;'; - $result = pwg_query($query); - while ($row = pwg_db_fetch_assoc($result)) - { - $categories[ $row['id'] ] = strtolower($row['name']); - } - - asort($categories, SORT_REGULAR); - save_categories_order(array_keys($categories)); - - array_push( - $page['infos'], - l10n('Categories ordered alphanumerically') - ); -} -// sort categories alpha-numerically reverse -else if (isset($_POST['submitOrderAlphaNumReverse'])) -{ - $query = ' -SELECT id, name + $category_ids = array_from_query($query, 'id'); + + if (isset($_POST['recursive'])) + { + $category_ids = get_subcat_ids($category_ids); + } + + $categories = array(); + $names = array(); + $id_uppercats = array(); + + $query = ' +SELECT id, name, id_uppercat FROM '.CATEGORIES_TABLE.' - WHERE id_uppercat '. - (!isset($_GET['parent_id']) ? 'IS NULL' : '= '.$_GET['parent_id']).' + WHERE id IN ('.implode(',', $category_ids).') ;'; - $result = pwg_query($query); - while ($row = pwg_db_fetch_assoc($result)) - { - $categories[ $row['id'] ] = strtolower($row['name']); + $result = pwg_query($query); + while ($row = pwg_db_fetch_assoc($result)) + { + array_push( + $categories, + array( + 'id' => $row['id'], + 'id_uppercat' => $row['id_uppercat'], + ) + ); + array_push( + $names, + $row['name'] + ); + } + + array_multisort( + $names, + SORT_REGULAR, + 'asc' == $_POST['ascdesc'] ? SORT_ASC : SORT_DESC, + $categories + ); + save_categories_order($categories); + + array_push( + $page['infos'], + l10n('Categories automatically sorted') + ); } - - arsort($categories, SORT_REGULAR); - save_categories_order(array_keys($categories)); - - array_push( - $page['infos'], - l10n('Categories ordered alphanumerically reverse') - ); } // +-----------------------------------------------------------------------+ diff --git a/admin/themes/default/default-layout.css b/admin/themes/default/default-layout.css index 344818541..7f44314c8 100644 --- a/admin/themes/default/default-layout.css +++ b/admin/themes/default/default-layout.css @@ -69,6 +69,11 @@ TABLE.plugins ul.pluginsActions { TABLE.plugins ul.pluginsActions li { display: inline; } /* categoryOrdering */ +FORM#categoryOrdering .orderParams { + line-height:30px; + margin-bottom:10px; +} + SELECT.categoryList { width: 100%; } diff --git a/admin/themes/default/template/cat_list.tpl b/admin/themes/default/template/cat_list.tpl index a1702a0d7..69e599502 100644 --- a/admin/themes/default/template/cat_list.tpl +++ b/admin/themes/default/template/cat_list.tpl @@ -18,6 +18,13 @@ document.getElementsByName('catOrd[' + cat[1] + ']')[0].value = i; } }); + + jQuery("input[name=order_type]").click(function () {ldelim} + jQuery("#automatic_order_params").hide(); + if (jQuery("input[name=order_type]:checked").val() == "automatic") {ldelim} + jQuery("#automatic_order_params").show(); + } + }); }); </script> @@ -39,12 +46,21 @@ {if count($categories) } <form id="categoryOrdering" action="{$F_ACTION}" method="post"> - <p> - <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> + <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> + + <div class="orderParams"> <input class="submit" name="submitOrder" type="submit" value="{'Save order'|@translate}" {$TAG_INPUT_ENABLED}> - <input class="submit" name="submitOrderAlphaNum" type="submit" value="{'Order alphanumerically'|@translate}" {$TAG_INPUT_ENABLED}> - <input class="submit" name="submitOrderAlphaNumReverse" type="submit" value="{'Order alphanumerically reverse'|@translate}" {$TAG_INPUT_ENABLED}> - </p> + <label><input type="radio" name="order_type" value="manual" checked="checked"> {'manual order'|@translate}</label> + <label><input type="radio" name="order_type" value="automatic"> {'automatic order'|@translate}</label> + <span id="automatic_order_params" style="display:none"> + <select name="ascdesc"> + <option value="asc">{'ascending'|@translate}</option> + <option value="desc">{'descending'|@translate}</option> + </select> + <label><input type="checkbox" name="recursive"> {'apply to sub-categories'|@translate}</label> + </span> + </div> + <ul class="categoryUl"> {foreach from=$categories item=category} @@ -85,11 +101,5 @@ </li> {/foreach} </ul> - <p> - <input class="submit" name="submitOrder" type="submit" value="{'Save order'|@translate}" {$TAG_INPUT_ENABLED}> - <input class="submit" name="submitOrderAlphaNum" type="submit" value="{'Order alphanumerically'|@translate}" {$TAG_INPUT_ENABLED}> - <input class="submit" name="submitOrderAlphaNumReverse" type="submit" value="{'Order alphanumerically reverse'|@translate}" {$TAG_INPUT_ENABLED}> - </p> - </form> {/if} |