Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
executable file 443 lines (358 sloc) 11.3 KB
<?php
error_reporting(E_ALL);
// Sometimes, it can take very long
set_time_limit(30);
// plog-xml.php
// Generates Plogger content in XML for alternative interfaces.
require("plog-functions.php");
require("plog-globals.php");
require("plog-load_config.php");
header("Content-Type: text/xml");
// Put the config information at the top of the XML file
// if noconfig option is not specified
$xml = '<?xml version="1.0" standalone="yes" ?>';
$xml .= '<plogger name="'.htmlspecialchars($config["gallery_name"]).'">';
if (!isset($_GET["noconfig"]) || (!$_GET["noconfig"])){
$xml .= '<config>';
// Print out the config vars programmatically so that any future additions
// automatically get brought into the XML
// Unset any sensitive config information
unset($config["admin_username"]);
unset($config["admin_password"]);
unset($config["admin_email"]);
unset($config["basedir"]);
foreach ($config as $var => $val){
$xml .= '<'.$var.'>'.$val.'</'.$var.'>';
}
$xml .= '</config>';
}
// Now comes the fun
// There are 10 arguments that this file takes
//
// collections
// albums
// pictures
// comments
// all
// collection_id
// album_id
// picture_id
// comment_id
// limit
// all=1 is the same as collections=1&albums=1&pictures=1&comments=1
if (isset($_GET["all"]) && ($_GET["all"] == 1)){
$_GET["collections"] = 1;
$_GET["albums"] = 1;
$_GET["pictures"] = 1;
$_GET["comments"] = 1;
}
if (isset($_GET["limit"])){
$limit = intval($_GET["limit"]);
$limitType = "";
}
else {
$limit = 0;
$limitType = "";
}
// If any *_id arguments are set, the level arguments for that level and above
// must be unset to avoid showing the levels that do not eventually contain
// that *_id
if (isset($_GET["comment_id"])){
unset($_GET["collections"]);
unset($_GET["albums"]);
unset($_GET["pictures"]);
unset($_GET["comments"]);
$limit = 0;
$limitType = "";
} else if (isset($_GET["picture_id"])){
unset($_GET["collections"]);
unset($_GET["albums"]);
unset($_GET["pictures"]);
if ($limit > 0){
if (!empty($_GET["comments"])){
$limitType = "comments";
} else {
$limitType = '';
$limit = 0;
}
}
} else if (isset($_GET["album_id"])){
unset($_GET["collections"]);
unset($_GET["albums"]);
if ($limit > 0){
if (!empty($_GET["pictures"])){
$limitType = "pictures";
} else if (!empty($_GET["comments"])){
$limitType = "comments";
} else {
$limitType = '';
$limit = 0;
}
}
} else if (isset($_GET["collection_id"])){
unset($_GET["collections"]);
if ($limit > 0){
if (!empty($_GET["albums"])){
$limitType = "albums";
} else if (!empty($_GET["pictures"])){
$limitType = "pictures";
} else if (!empty($_GET["comments"])){
$limitType = "comments";
} else {
$limitType = '';
$limit = 0;
}
}
}
if (($limit > 0) && ($limitType == '')){
if ($limit > 0){
if (!empty($_GET["collections"])){
$limitType = "collections";
}
else if (!empty($_GET["albums"])){
$limitType = "albums";
}
else if (!empty($_GET["pictures"])){
$limitType = "pictures";
}
else if (!empty($_GET["comments"])){
$limitType = "comments";
}
else {
$limit = 0;
$limitType = '';
}
}
}
if (isset($_GET["collections"]) || isset($_GET["albums"]) || isset($_GET["pictures"]) || isset($_GET["comments"]) || isset($_GET["collection_id"]) || isset($_GET["album_id"]) || isset($_GET["picture_id"]) || isset($_GET["comment_id"])){
if (isset($_GET["collection_id"])){
$collections = array(get_collection_by_id($_GET["collection_id"]));
}
else if (isset($_GET["collections"])){
$collections = get_collections("mod","DESC");
}
else if (isset($_GET["albums"]) || isset($_GET["album_id"]) || isset($_GET["pictures"]) || isset($_GET["picture_id"]) || isset($_GET["comments"]) || isset($_GET["comment_id"])){
$collections = get_collection_ids("mod","DESC");
}
else {
$collections = array();
}
// $total counts the number of items that are being limited that have been returned.
// When total equals the limit, we're done.
$total = 0;
foreach ($collections as $collection){
// A collection's tag is only shown if all collections are being shown
// or if this specific collection was specified by collection_id
if ((isset($_GET["collections"]) && ($_GET["collections"] == 1)) ||
(isset($_GET["collection_id"]) && ($_GET["collection_id"] == $collection["id"]))){
if ($limitType == 'collections'){
if ($total == $limit){
break;
}
$total++;
}
$collection["thumb_path"] = "plog-thumb.php?id=".$collection["thumbnail_id"];
$xml .= '<collection';
// Put together the tag attributes
foreach ($collection as $var => $val){
$xml .= ' '.$var.'="'.htmlspecialchars($val).'"';
}
$xml .= '>';
}
if (isset($_GET["albums"]) || isset($_GET["album_id"])){
$albums = get_albums($collection["id"], "mod", "DESC");
}
else if (isset($_GET["pictures"]) || isset($_GET["picture_id"]) || isset($_GET["comments"]) || isset($_GET["comment_id"])){
$albums = get_album_ids($collection["id"],"mod","DESC");
}
else {
$albums = array();
}
foreach ($albums as $album){
if ((isset($_GET["collection_id"]) && ($_GET["collection_id"] == $album["collection_id"])) || !isset($_GET["collection_id"])){
if ((isset($_GET["albums"]) && ($_GET["albums"] == 1)) ||
(isset($_GET["album_id"]) && ($_GET["album_id"] == $album["album_id"]))){
if ($limitType == 'albums'){
if ($total == $limit){
break;
}
$total++;
}
$album["thumb_path"] = "plog-thumb.php?id=".$album["thumbnail_id"];
$xml .= '<album';
foreach ($album as $var => $val){
$xml .= ' '.$var.'="'.htmlspecialchars($val).'"';
}
$xml .= '>';
}
if (isset($_GET["pictures"])){
$pictures = get_pictures($album["album_id"], "mod", "DESC");
}
else if (isset($_GET["picture_id"])){
$pic = get_picture_by_id($_GET["picture_id"], $album["album_id"]);
if ($pic) {
$pictures = array($pic);
}
else {
$pictures = array();
}
}
else if (isset($_GET["comments"]) || isset($_GET["comment_id"])){
$pictures = get_picture_ids($album["album_id"], "mod", "DESC");
}
else {
$pictures = array();
}
foreach ($pictures as $picture){
if ((isset($_GET["album_id"]) && ($_GET["album_id"] == $picture["parent_album"])) || !isset($_GET["album_id"])){
if ((isset($_GET["pictures"]) && ($_GET["pictures"] == 1)) ||
(isset($_GET["picture_id"]) && ($_GET["picture_id"] == $picture["id"]))){
if ($limitType == 'pictures'){
if ($total == $limit){
break;
}
$total++;
}
$picture["sm_thumb_path"] = 'plog-thumb.php?id='.$picture["id"];
$picture["lg_thumb_path"] = 'plog-thumb.php?id='.$picture["id"].'&type=2';
$xml .= '<picture';
foreach ($picture as $var => $val){
$xml .= ' '.$var.'="'.htmlspecialchars($val).'"';
}
$xml .= '>';
}
if (isset($_GET["comments"]) || isset($_GET["comment_id"])){
$comments = get_comments($picture["id"], "mod", "DESC");
foreach ($comments as $comment){
if ((isset($_GET["picture_id"]) && ($_GET["picture_id"] == $comment["parent_id"])) || !isset($_GET["picture_id"])){
if ((isset($_GET["comments"]) && ($_GET["comments"] == 1)) ||
(isset($_GET["comment_id"]) && ($_GET["comment_id"] == $comment["id"]))){
if ($limitType == 'comments'){
if ($total == $limit){
break;
}
$total++;
}
$xml .= '<comment';
foreach ($comment as $var => $val){
$xml .= ' '.$var.'="'.htmlspecialchars($val).'"';
}
$xml .= '/>';
}
}
}
}
if ((isset($_GET["pictures"]) && ($_GET["pictures"] == 1)) ||
(isset($_GET["picture_id"]) && ($_GET["picture_id"] == $picture["id"]))){
$xml .= '</picture>';
}
}
}
if ((isset($_GET["albums"]) && ($_GET["albums"] == 1)) ||
(isset($_GET["album_id"]) && ($_GET["album_id"] == $album["album_id"]))){
$xml .= '</album>';
}
}
}
if ((isset($_GET["collections"]) && ($_GET["collections"] == 1)) ||
(isset($_GET["collection_id"]) && ($_GET["collection_id"] == $collection["id"]))){
$xml .= '</collection>';
}
}
}
$xml .= '</plogger>';
echo $xml;
exit;
function get_collection_ids($sort = "alpha", $order = "DESC") {
global $config;
if ($sort == "mod"){
$query = "SELECT
`c`.`id`
FROM `".TABLE_PREFIX."pictures` AS `i`
LEFT JOIN `".TABLE_PREFIX."collections` AS `c` ON `i`.`parent_collection`=`c`.`id`
GROUP BY `i`.`parent_collection`
ORDER BY `i`.`date_submitted` ";
if ($order == "ASC"){
$query .= " ASC ";
} else {
$query .= " DESC ";
}
} else {
$query = "SELECT
`c`.`id`
FROM `".TABLE_PREFIX."collections` AS `c`
ORDER BY `c`.`name` ";
if ($order == "ASC"){
$query .= " ASC ";
} else {
$query .= " DESC ";
}
}
$resultCollection = run_query($query);
$collections = array();
while ($collection = mysql_fetch_assoc($resultCollection)){
$collections[$collection["id"]] = $collection;
}
return $collections;
}
function get_album_ids($collection_id = null, $sort = "alpha", $order = "DESC") {
global $config;
$albums = array();
if ($sort == "mod"){
$query = "SELECT
`a`.`id` AS `album_id`
FROM `".TABLE_PREFIX."pictures` AS `i`
LEFT JOIN `".TABLE_PREFIX."albums` AS `a` ON `i`.`parent_album`=`a`.`id`";
if ($collection_id){
$query .= " WHERE `i`.`parent_collection`=".intval($collection_id);
}
$query .= "
GROUP BY `i`.`parent_album`
ORDER BY `i`.`date_submitted` ";
if ($order == "ASC"){
$query .= " ASC ";
} else {
$query .= " DESC ";
}
} else {
$query = "SELECT
`a`.`id` AS `album_id`
FROM `".TABLE_PREFIX."albums` AS `a`
LEFT JOIN `".TABLE_PREFIX."collections` AS `c` ON `a`.`parent_id`=`c`.`id`";
if ($collection_id){
$query .= " WHERE `c`.id=".intval($collection_id)." ";
}
$query .= " ORDER BY `c`.`name` ASC, `a`.`name` ASC";
}
$result = run_query($query);
while ($album = mysql_fetch_assoc($result)) {
$albums[$album["album_id"]] = $album;
}
return $albums;
}
function get_picture_ids($album_id, $order = "alpha", $sort = "DESC"){
global $config;
$query = "SELECT
`p`.`id`
FROM `".TABLE_PREFIX."pictures` AS `p`
LEFT JOIN `".TABLE_PREFIX."albums` AS `a` ON `p`.`parent_album`=`a`.`id`
WHERE `a`.`id`=".intval($album_id);
if ($order == "mod"){
$query .= " ORDER BY `p`.`date_submitted` ";
}
else {
$query .= " ORDER BY `p`.`caption` ";
}
if ($sort == "ASC"){
$query .= " ASC ";
} else {
$query .= " DESC ";
}
$result = run_query($query);
$pictures = array();
while ($row = mysql_fetch_assoc($result)){
$pictures[$row["id"]] = $row;
}
return $pictures;
}
?>