From 2c24b0b38ae678a0269b308ddf03ab1bc85630d2 Mon Sep 17 00:00:00 2001 From: plegall Date: Thu, 30 Aug 2012 12:52:40 +0000 Subject: bug 2733 fixed: when creating a sub-album in a private album with pwg.categories.add, it is automatically private too. git-svn-id: http://piwigo.org/svn/branches/2.4@17668 68402e56-0260-453c-a942-63ccdbb3a9ee --- admin/include/functions.php | 89 ++++++++++++++++++++++++++------------------ include/ws_functions.inc.php | 49 ++++++++++-------------- ws.php | 4 +- 3 files changed, 75 insertions(+), 67 deletions(-) diff --git a/admin/include/functions.php b/admin/include/functions.php index cb735d70f..3c9f15e35 100644 --- a/admin/include/functions.php +++ b/admin/include/functions.php @@ -1196,7 +1196,7 @@ DELETE FROM '.$table.' * @param int parent category id * @return array with ('info' and 'id') or ('error') key */ -function create_virtual_category($category_name, $parent_id=null) +function create_virtual_category($category_name, $parent_id=null, $options=array()) { global $conf, $user; @@ -1205,16 +1205,54 @@ function create_virtual_category($category_name, $parent_id=null) { return array('error' => l10n('The name of an album must not be empty')); } - - $parent_id = !empty($parent_id) ? $parent_id : 'NULL'; - + $insert = array( 'name' => $category_name, 'rank' => 0, - 'commentable' => boolean_to_string($conf['newcat_default_commentable']), + 'global_rank' => 0, ); - if ($parent_id != 'NULL') + // is the album commentable? + if (isset($options['commentable']) and is_bool($options['commentable'])) + { + $insert['commentable'] = $options['commentable']; + } + else + { + $insert['commentable'] = $conf['newcat_default_commentable']; + } + $insert['commentable'] = boolean_to_string($insert['commentable']); + + // is the album temporarily locked? (only visible by administrators, + // whatever permissions) (may be overwritten if parent album is not + // visible) + if (isset($options['visible']) and is_bool($options['visible'])) + { + $insert['visible'] = $options['visible']; + } + else + { + $insert['visible'] = $conf['newcat_default_visible']; + } + $insert['visible'] = boolean_to_string($insert['visible']); + + // is the album private? (may be overwritten if parent album is private) + if (isset($options['status']) and 'private' == $options['status']) + { + $insert['status'] = 'private'; + } + else + { + $insert['status'] = $conf['newcat_default_status']; + } + + // any description for this album? + if (isset($options['comment'])) + { + $insert['comment'] = strip_tags($options['comment']); + } + + if (!empty($parent_id) and is_numeric($parent_id)) { $query = ' SELECT id, uppercats, global_rank, visible, status @@ -1233,10 +1271,6 @@ SELECT id, uppercats, global_rank, visible, status { $insert['visible'] = 'false'; } - else - { - $insert['visible'] = boolean_to_string($conf['newcat_default_visible']); - } // at creation, must a category be public or private ? Warning : if the // parent category is private, the category is automatically create @@ -1245,40 +1279,23 @@ SELECT id, uppercats, global_rank, visible, status { $insert['status'] = 'private'; } - else - { - $insert['status'] = $conf['newcat_default_status']; - } + + $uppercats_prefix = $parent['uppercats'].','; } else { - $insert['visible'] = boolean_to_string($conf['newcat_default_visible']); - $insert['status'] = $conf['newcat_default_status']; - $insert['global_rank'] = $insert['rank']; + $uppercats_prefix = ''; } // we have then to add the virtual category - mass_inserts( - CATEGORIES_TABLE, - array( - 'site_id', 'name', 'id_uppercat', 'rank', 'commentable', - 'visible', 'status', 'global_rank', - ), - array($insert) - ); - + single_insert(CATEGORIES_TABLE, $insert); $inserted_id = pwg_db_insert_id(CATEGORIES_TABLE); - $query = ' -UPDATE - '.CATEGORIES_TABLE.' - SET uppercats = \''. - (isset($parent) ? $parent{'uppercats'}.',' : ''). - $inserted_id. - '\' - WHERE id = '.$inserted_id.' -;'; - pwg_query($query); + single_update( + CATEGORIES_TABLE, + array('uppercats' => $uppercats_prefix.$inserted_id), + array('id' => $inserted_id) + ); update_global_rank(); diff --git a/include/ws_functions.inc.php b/include/ws_functions.inc.php index 4e9d8d3fb..4e439af88 100644 --- a/include/ws_functions.inc.php +++ b/include/ws_functions.inc.php @@ -2302,46 +2302,37 @@ function ws_categories_add($params, &$service) include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); - $creation_output = create_virtual_category( - $params['name'], - $params['parent'] - ); - - if (isset($creation_output['error'])) + $options = array(); + if (!empty($params['status']) and in_array($params['status'], array('private','public'))) { - return new PwgError(500, $creation_output['error']); + $options['status'] = $params['status']; } - $updates = array(); - if ( !empty($params['status']) and in_array($params['status'], array('private','public')) ) + if (!empty($params['visible']) and in_array($params['visible'], array('true','false'))) { - $updates['status'] = $params['status']; + $options['visible'] = get_boolean($params['visible']); } - if ( !empty($params['visible']) and in_array($params['visible'], array('true','false')) ) - { - $updates['visible'] = $params['visible']; - } - if ( !empty($params['commentable']) and in_array($params['commentable'], array('true','false')) ) - { - $updates['commentable'] = $params['commentable']; - } - if ( !empty($params['comment']) ) + + if (!empty($params['commentable']) and in_array($params['commentable'], array('true','false')) ) { - $updates['comment'] = strip_tags($params['comment']); + $options['commentable'] = get_boolean($params['commentable']); } - - if (!empty($updates)) + + if (!empty($params['comment'])) { - single_update( - CATEGORIES_TABLE, - $updates, - array('id'=>$creation_output['id']) - ); + $options['comment'] = $params['comment']; } - if ( isset($updates['status']) and 'private' == $updates['status'] ) + + $creation_output = create_virtual_category( + $params['name'], + $params['parent'], + $options + ); + + if (isset($creation_output['error'])) { - add_permission_on_category($creation_output['id'], get_admins()); + return new PwgError(500, $creation_output['error']); } invalidate_user_cache(); diff --git a/ws.php b/ws.php index c0081cf77..86c7df21a 100644 --- a/ws.php +++ b/ws.php @@ -309,8 +309,8 @@ function ws_addDefaultMethods( $arr ) 'name' => array(), 'parent' => array('default' => null), 'comment' => array('default' => null), - 'visible' => array('default' => boolean_to_string($conf['newcat_default_visible'])), - 'status' => array('default' => $conf['newcat_default_status']), + 'visible' => array('default' => null), + 'status' => array('default' => null), 'commentable' => array('default' => 'true'), ), 'administration method only' -- cgit v1.2.3