diff options
Diffstat (limited to '')
-rw-r--r-- | include/ws_functions/pwg.php | 338 |
1 files changed, 338 insertions, 0 deletions
diff --git a/include/ws_functions/pwg.php b/include/ws_functions/pwg.php new file mode 100644 index 000000000..2fd69951e --- /dev/null +++ b/include/ws_functions/pwg.php @@ -0,0 +1,338 @@ +<?php +// +-----------------------------------------------------------------------+ +// | Piwigo - a PHP based photo gallery | +// +-----------------------------------------------------------------------+ +// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org | +// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | +// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | +// +-----------------------------------------------------------------------+ +// | 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. | +// +-----------------------------------------------------------------------+ + +/** + * API method + * Returns a list of missing derivatives (not generated yet) + * @param mixed[] $params + * @option string types (optional) + * @option int[] ids + * @option int max_urls + * @option int prev_page (optional) + */ +function ws_getMissingDerivatives($params, &$service) +{ + global $conf; + + if (empty($params['types'])) + { + $types = array_keys(ImageStdParams::get_defined_type_map()); + } + else + { + $types = array_intersect(array_keys(ImageStdParams::get_defined_type_map()), $params['types']); + if (count($types)==0) + { + return new PwgError(WS_ERR_INVALID_PARAM, "Invalid types"); + } + } + + $max_urls = $params['max_urls']; + $query = 'SELECT MAX(id)+1, COUNT(*) FROM '. IMAGES_TABLE .';'; + list($max_id, $image_count) = pwg_db_fetch_row(pwg_query($query)); + + if (0 == $image_count) + { + return array(); + } + + $start_id = $params['prev_page']; + if ($start_id<=0) + { + $start_id = $max_id; + } + + $uid = '&b='.time(); + + $conf['question_mark_in_urls'] = $conf['php_extension_in_urls'] = true; + $conf['derivative_url_style'] = 2; //script + + $qlimit = min(5000, ceil(max($image_count/500, $max_urls/count($types)))); + $where_clauses = ws_std_image_sql_filter( $params, '' ); + $where_clauses[] = 'id<start_id'; + + if (!empty($params['ids'])) + { + $where_clauses[] = 'id IN ('.implode(',',$params['ids']).')'; + } + + $query_model = ' +SELECT id, path, representative_ext, width, height, rotation + FROM '. IMAGES_TABLE .' + WHERE '. implode(' AND ', $where_clauses) .' + ORDER BY id DESC + LIMIT '. $qlimit .' +;'; + + $urls = array(); + do + { + $result = pwg_query(str_replace('start_id', $start_id, $query_model)); + $is_last = pwg_db_num_rows($result) < $qlimit; + + while ($row=pwg_db_fetch_assoc($result)) + { + $start_id = $row['id']; + $src_image = new SrcImage($row); + if ($src_image->is_mimetype()) + { + continue; + } + + foreach($types as $type) + { + $derivative = new DerivativeImage($type, $src_image); + if ($type != $derivative->get_type()) + { + continue; + } + if (@filemtime($derivative->get_path())===false) + { + $urls[] = $derivative->get_url().$uid; + } + } + + if (count($urls)>=$max_urls and !$is_last) + { + break; + } + } + if ($is_last) + { + $start_id = 0; + } + } while (count($urls)<$max_urls and $start_id); + + $ret = array(); + if ($start_id) + { + $ret['next_page'] = $start_id; + } + $ret['urls'] = $urls; + return $ret; +} + +/** + * API method + * Returns Piwigo version + * @param mixed[] $params + */ +function ws_getVersion($params, &$service) +{ + global $conf; + + if ($conf['show_version'] or is_admin()) + { + return PHPWG_VERSION; + } + else + { + return new PwgError(403, 'Forbidden'); + } +} + +/** + * API method + * Returns general informations about the installation + * @param mixed[] $params + */ +function ws_getInfos($params, &$service) +{ + $infos['version'] = PHPWG_VERSION; + + $query = 'SELECT COUNT(*) FROM '.IMAGES_TABLE.';'; + list($infos['nb_elements']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.CATEGORIES_TABLE.';'; + list($infos['nb_categories']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.CATEGORIES_TABLE.' WHERE dir IS NULL;'; + list($infos['nb_virtual']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.CATEGORIES_TABLE.' WHERE dir IS NOT NULL;'; + list($infos['nb_physical']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.IMAGE_CATEGORY_TABLE.';'; + list($infos['nb_image_category']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.TAGS_TABLE.';'; + list($infos['nb_tags']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.IMAGE_TAG_TABLE.';'; + list($infos['nb_image_tag']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.USERS_TABLE.';'; + list($infos['nb_users']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.GROUPS_TABLE.';'; + list($infos['nb_groups']) = pwg_db_fetch_row(pwg_query($query)); + + $query = 'SELECT COUNT(*) FROM '.COMMENTS_TABLE.';'; + list($infos['nb_comments']) = pwg_db_fetch_row(pwg_query($query)); + + // first element + if ($infos['nb_elements'] > 0) + { + $query = 'SELECT MIN(date_available) FROM '.IMAGES_TABLE.';'; + list($infos['first_date']) = pwg_db_fetch_row(pwg_query($query)); + } + + // unvalidated comments + if ($infos['nb_comments'] > 0) + { + $query = 'SELECT COUNT(*) FROM '.COMMENTS_TABLE.' WHERE validated=\'false\';'; + list($infos['nb_unvalidated_comments']) = pwg_db_fetch_row(pwg_query($query)); + } + + foreach ($infos as $name => $value) + { + $output[] = array( + 'name' => $name, + 'value' => $value, + ); + } + + return array('infos' => new PwgNamedArray($output, 'item')); +} + +/** + * API method + * Adds images to the caddie + * @param mixed[] $params + * @option int[] image_id + */ +function ws_caddie_add($params, &$service) +{ + global $user; + + $query = ' +SELECT id + FROM '. IMAGES_TABLE .' + LEFT JOIN '. CADDIE_TABLE .' + ON id=element_id AND user_id='. $user['id'] .' + WHERE id IN ('. implode(',',$params['image_id']) .') + AND element_id IS NULL +;'; + $result = array_from_query($query, 'id'); + + $datas = array(); + foreach ($result as $id) + { + $datas[] = array( + 'element_id' => $id, + 'user_id' => $user['id'], + ); + } + if (count($datas)) + { + mass_inserts( + CADDIE_TABLE, + array('element_id','user_id'), + $datas + ); + } + return count($datas); +} + +/** + * API method + * Deletes rates of an user + * @param mixed[] $params + * @option int user_id + * @option string anonymous_id (optional) + */ +function ws_rates_delete($params, &$service) +{ + $query = ' +DELETE FROM '. RATE_TABLE .' + WHERE user_id='. $params['user_id']; + + if (!empty($params['anonymous_id'])) + { + $query .= ' AND anonymous_id=\''.$params['anonymous_id'].'\''; + } + + $changes = pwg_db_changes(pwg_query($query)); + if ($changes) + { + include_once(PHPWG_ROOT_PATH.'include/functions_rate.inc.php'); + update_rating_score(); + } + return $changes; +} + +/** + * API method + * Performs a login + * @param mixed[] $params + * @option string username + * @option string password + */ +function ws_session_login($params, &$service) +{ + if (try_log_user($params['username'], $params['password'], false)) + { + return true; + } + return new PwgError(999, 'Invalid username/password'); +} + + +/** + * API method + * Performs a logout + * @param mixed[] $params + */ +function ws_session_logout($params, &$service) +{ + if (!is_a_guest()) + { + logout_user(); + } + return true; +} + +/** + * API method + * Returns info about the current user + * @param mixed[] $params + */ +function ws_session_getStatus($params, &$service) +{ + global $user; + + $res['username'] = is_a_guest() ? 'guest' : stripslashes($user['username']); + foreach ( array('status', 'theme', 'language') as $k ) + { + $res[$k] = $user[$k]; + } + $res['pwg_token'] = get_pwg_token(); + $res['charset'] = get_pwg_charset(); + + list($dbnow) = pwg_db_fetch_row(pwg_query('SELECT NOW();')); + $res['current_datetime'] = $dbnow; + + return $res; +} + +?>
\ No newline at end of file |