aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--admin/include/functions.php89
-rw-r--r--include/ws_functions.inc.php49
-rw-r--r--ws.php4
3 files changed, 75 insertions, 67 deletions
diff --git a/admin/include/functions.php b/admin/include/functions.php
index 41dadfdcb..4f3ea2e7a 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'