');
if ($pos === false) { // before 1.7
$pos = strpos($xml_data, '');
}
return substr($xml_data, 0, $pos + 15);
}
function readXMLFile($xml_filename, $nr)
{
global $cache_dirs, $enhanced_debug, $mem_limit;
if ($enhanced_debug) {
debug ("readXMLFile: Loading xml file: " . $xml_filename);
if ($mem_limit) {
debug ("readXMLFile: Memory status: " . round(memory_get_usage() / 1024) . "k/" . $mem_limit . "k");
}
}
if (!(isset($_SESSION['xmlcache_' . remove_trailing_rel_path($xml_filename)]) && $cache_dirs)) {
if ($enhanced_debug) {
debug ("readXMLFile: reading from hd: " . $xml_filename);
}
$retarray = array();
$xml_parser_handle = xml_parser_create();
$xml_data = get_xml_data($xml_filename);
if (rand(0, 9) == 5) { // we check xml files one in a while...
$xml_data = fixXML($xml_data);
}
if (0 == xml_parse_into_struct($xml_parser_handle, $xml_data, $retarray[0], $retarray[1])) {
//
// below here is some basic xml error handling if xml files seem to be bad
// I do replace some chars in the xml that should not be there
// I think this is a problem of php not syncronizing the writing of files properly.
//
$xml_data = get_xml_data($xml_filename);
// backup reading - everything until the last
$xml_data = fixXML($xml_data);
xml_parser_free($xml_parser_handle);
$xml_parser_handle = xml_parser_create();
if (0 == xml_parse_into_struct($xml_parser_handle, $xml_data, $retarray[0], $retarray[1])) {
sleep(3); // we retry 2 times read failes - maybe the file was not completely written before
$timestamp = date("YmdHis");
$xml_data = get_xml_data($xml_filename);
$xml_data = str_replace(">>", ">", $xml_data); // we do a replace I have found that is bad >>
$xml_data = fixXML($xml_data);
xml_parser_free($xml_parser_handle);
$xml_parser_handle = xml_parser_create();
if (0 == xml_parse_into_struct($xml_parser_handle, $xml_data, $retarray[0], $retarray[1])) { // retry!
$out = sprintf('XML error %s: %s at line %d (%s was renamed to %s - please check this file if you want to restore your data)',
$nr , xml_error_string(xml_get_error_code($xml_parser_handle)),
xml_get_current_line_number($xml_parser_handle), $xml_filename, $xml_filename . '_' . $timestamp . '.bak');
debug($out . " - DATA:" . $xml_data);
xml_parser_free($xml_parser_handle);
@copy($xml_filename, $xml_filename . '_' . $timestamp . '.bak');
@unlink(realpath($xml_filename));
die();
}
}
//
// End error handling
//
}
xml_parser_free($xml_parser_handle);
if ($enhanced_debug) {
if ($mem_limit) {
debug ("readXMLFile: Memory status after loading: " . round(memory_get_usage() / 1024) . "k/" . $mem_limit . "k");
}
}
// now we check if we can store it in the session !
if ($mem_limit && function_exists("memory_get_usage")) {
$usage = round(memory_get_usage() / 1024);
$left = $mem_limit - $usage;
if (($usage / $mem_limit) < 0.8 && ($left > 25000)) { // want either 80% min 25MB free memory
$_SESSION['xmlcache_' . remove_trailing_rel_path($xml_filename)] = $retarray ;
} else {
if ($enhanced_debug) {
debug ("readXMLFile: Not enough memory (" . round($usage / $mem_limit, 2) * 100 . "% used.) for session caching left");
}
}
} else {
$_SESSION['xmlcache_' . remove_trailing_rel_path($xml_filename)] = $retarray ;
}
return $retarray;
} else {
if ($enhanced_debug) {
debug ("readXMLFile: reading from memory: " . $xml_filename);
}
return $_SESSION['xmlcache_' . remove_trailing_rel_path($xml_filename)];
}
}
function loadXMLFiles($album_url)
{
global $basedir, $werte, $kwerte, $index, $kindex, $xmldir, $store_xml_in_picfolders;
global $readonlycomment;
if ($album_url) {
$album_path = $basedir . "/" . $album_url;
} else {
$album_path = $basedir;
$album_url = "";
}
if (!file_exists($album_path)) {
if ($album_path != $basedir . "/test") {
// debug("Check encoding " . $album_path);
}
return;
}
if (isset($_SESSION['werte'])) {
$werte = $_SESSION['werte'];
$index = $_SESSION['index'];
}
if (isset($_SESSION['kwerte'])) {
$kwerte = $_SESSION['kwerte'];
$kindex = $_SESSION['kindex'];
}
if ((!isset($_SESSION["actalbum"])) || ($_SESSION["actalbum"] != $album_url) || $werte == false || $werte == null) {
$xml_dummy_string = '<'."?xml version='1.0'?".">\n\n \n";
// load captions to session
$ret_data = get_xml_data_mig($album_url, "/_caption.xml", "_image_text.xml", $xml_dummy_string, "read caption");
$_SESSION['werte'] = $ret_data['werte'];
$_SESSION['index'] = $ret_data['index'];
$werte = $_SESSION['werte'];
$index = $_SESSION['index'];
// load comments to session
$ret_data = get_xml_data_mig($album_url, "/_comment.xml", "_kommentar_text.xml", $xml_dummy_string, "read comment");
$_SESSION['kwerte'] = $ret_data['werte'];
$_SESSION['kindex'] = $ret_data['index'];
$kwerte = $_SESSION['kwerte'];
$kindex = $_SESSION['kindex'];
// delete the xml folder if empty !
if (file_exists($xmldir) && $store_xml_in_picfolders) {
$keep = false;
$handle = opendir ($xmldir);
while (false !== ($file = readdir ($handle))) {
$pos = strpos ($file, "xml");
if ($pos === false) {
// nicht gefunden...
} else {
$keep = true;
break;
}
}
closedir($handle);
if (!$keep) {
set_error_handler("on_error_no_output"); // we don t care if cleanup does not work
@unlink($xmldir . "/index.htm");
@rmdir($xmldir);
set_error_handler("on_error");
clearstatcache ();
}
}
$_SESSION["actalbum"] = $album_url;
}
}
// get beschreibung for images
function getBeschreibung($image, $werte, $index)
{
global $autodetect_filenames_as_captions;
$i = 0;
foreach (((array)($index["NAME"])) as $band) {
if (urldecode($werte[$band]["value"]) == urldecode($image)) { // encoding has to be done twice to get a match ! - some
return urldecode($werte[$index["WERT"][$i]]["value"]);
} else {
$i = $i + 1;
}
}
if (!$autodetect_filenames_as_captions) {
return "";
}
// we haven t found a valid name - therefore we return the filename without extension if we
// have less than 4 numbers in it (no camera name)
return getCaptionByFilename($image);
}
function getCaptionByFilename($image)
{
global $autodetect_filenames_as_captions;
global $autodetect_filenames_as_captions_number;
global $remove_x_chars_from_filename, $charset;
global $filesystem_encoding;
$image = urldecode($image);
if ($remove_x_chars_from_filename > 0) {
$cut = $remove_x_chars_from_filename + 4;
} else {
$cut = 4; // remove only the extension!
}
$name = substr($image, $remove_x_chars_from_filename , strlen($image) - $cut);
$name = removePrefix($name);
if (!(strpos ($name, "/") === false)) { // fix for php 5.1.6! - but needed for remote images ;).
$name = basename($name);
}
$countNum = 0;
$result = count_chars($name, 0);
for ($i = 0; $i < count($result); $i++) {
if ($result[$i] != 0) {
if (is_numeric(chr($i))) {
$countNum += $result[$i];
}
}
}
if (isset($charset) && strtolower($charset) == "utf-8") {
$name = ($filesystem_encoding == '') ? utf8_encode($name) : iconv($filesystem_encoding, 'UTF-8', $name);
}
if ($countNum > $autodetect_filenames_as_captions_number) {
return "";
} else {
if (strpos($name, '___') && (strlen($name) > 25)) { // if it's really long AND it seems to be a livestream!
$name = substr($name, 0, strpos($name, '___'));
}
return $name;
}
}
// get kommentare for images
function getKommentar($image, $twg_album, $kwerte, $kindex, $isiframe)
{
global $login_edit,$install_dir,$lang_add_kommentar;
global $show_enter_comment_at_bottom,$default_is_fullscreen,$lang_comments, $lang_height_comment;
global $twg_standalone, $show_comments_in_layer, $show_number_of_comments, $enable_comments_only_registered, $login_edit;
$kommentar = "";
$i = 0;
$hits = 0;
$install_save = $install_dir;
if ($isiframe) {
$install_dir_com = "../" ;
$install_dir = "../";
} else {
$install_dir_com = $install_dir;
}
if ($kindex == false) {
$kwerte = $_SESSION['kwerte'];
$kindex = $_SESSION['kindex'];
}
$ip = "";
if (isset($kindex["NAME"])) {
foreach ($kindex["NAME"] as $band) {
if (isset($kwerte[$band]["value"])) {
// echo debug($image . ":" . urldecode($kwerte[$band]["value"] ));
if (urldecode($kwerte[$band]["value"]) == $image) {
$hits++;
$line = urldecode($kwerte[$kindex["WERT"][$i]]["value"]);
list ($datum, $name, $komment) = explode("=||=", $line);
$nameid = explode("-||-", $name);
$name = $nameid[0];
if (count($nameid) > 1) {
$ip = " - " . $nameid[1];
}
// fix for 1.2 !!
$pos = strpos ($datum, ".");
if ($pos === false) {
$datum = date("j.n.Y G:i", $datum);
}
$name = replacesmilies($name);
$komment = replacesmilies($komment);
$kommentar .= " " . $name . " (" . $datum . $ip . ")";
if ($login_edit) {
$kommentar .= "
";
}
$kommentar .= "
" . $komment . "
\n";
}
}
$i++;
}
}
$install_dir = $install_save; // not nice - change if time !
if ($show_number_of_comments) {
$com_counter = " (" . $hits . ")";
} else {
$com_counter = "";
}
$headerkommentar = "";
if (!$show_comments_in_layer) {
if ($show_enter_comment_at_bottom && !$default_is_fullscreen && (($enable_comments_only_registered && $login_edit) || !$enable_comments_only_registered)) {
$headerkommentar = "
";
} else {
if ($kommentar <> "") {
$headerkommentar = "" . $lang_comments . $com_counter . "
";
}
}
}
return sprintf("%10s", $hits) . $headerkommentar . $kommentar;
}
// get kommentare for images
function getKommentarCount($image, $twg_album, $kwerte, $kindex)
{
global $install_dir;
$i = 0;
$counter = 0;
if (!isset($_SESSION['kwerte'])) {
return 0;
}
if ($kindex == false) {
$kwerte = $_SESSION['kwerte'];
$kindex = $_SESSION['kindex'];
}
if (isset($kindex["NAME"])) {
foreach ($kindex["NAME"] as $band) {
if (isset($kwerte[$band]["value"])) {
if (urldecode($kwerte[$band]["value"]) == urldecode($image)) {
$counter++;
}
}
$i++;
}
}
return $counter;
}
// every entry of the $werte is stored. Each time it is checked
// if we already have this value - if yes we replace - if no we
// add at the end
function saveBeschreibung($titel, $twg_album, $image, $werte, $index)
{
global $xmldir, $basedir, $store_xml_in_picfolders;
$isnew = true;
$xml_filename = get_xml_file_name($twg_album, "/_caption.xml", "_image_text.xml");
// we reload because someone else has maybe modified the file!
$_SESSION["actalbum"] = '_RELOAD_';
unset($_SESSION['xmlcache_' . remove_trailing_rel_path ($xml_filename)]);
loadXMLFiles($twg_album);
$xml_file = fopen($xml_filename, 'w');
fputs($xml_file, '<'."?xml version='1.0'?".">\n");
$i = 0;
foreach ($index["NAME"] as $band) {
// $imageName = urldecode(urldecode($werte[$band]["value"]));
$imageName = urldecode($werte[$band]["value"]);
if (urlencode($imageName) == urlencode(urldecode($image))) {
$oldtitel = urlencode($titel);
$isnew = false;
} else {
$oldtitel = $werte[$index["WERT"][$i]]["value"];
}
$i = $i + 1;
if (trim($imageName) != "") {
$xml_string = "" . urlencode($imageName) . "" . $oldtitel . "\n";
fputs($xml_file, $xml_string);
}
}
if ($isnew && $image != "") {
$xml_string = "" . urlencode($image) . "" . urlencode($titel) . "\n";
fputs($xml_file, $xml_string);
}
fputs($xml_file, "");
fclose($xml_file);
clearstatcache ();
// we reload
$_SESSION["actalbum"] = '_RELOAD_';
unset($_SESSION['xmlcache_' . remove_trailing_rel_path ($xml_filename)]);
loadXMLFiles($twg_album);
}
// every entry of the $kwerte is stored.
function saveKommentar($titel, $name, $twg_album, $image, $kwerte, $kindex, $image_orig)
{
global $xmldir, $basedir, $store_xml_in_picfolders, $add_new_comments_on_top,$show_comments_ip;
if ($kindex == false) {
if (!isset($_SESSION['kwerte'])) {
loadXMLFiles($twg_album);
}
if (!isset($_SESSION['kwerte'])) {
debug("Error save comment: " . $titel . " : " . $name . " : " . $twg_album . " : " . $image);
}
$kwerte = $_SESSION['kwerte'];
$kindex = $_SESSION['kindex'];
}
$xml_filename = get_xml_file_name($twg_album, "/_comment.xml", "_kommentar_text.xml");
// we reload because someone else has maybe modified the file!
$_SESSION["actalbum"] = '_RELOAD_';
unset($_SESSION['xmlcache_' . remove_trailing_rel_path ($xml_filename)]);
loadXMLFiles($twg_album);
$now = time(); // = date("j.n.Y G:i");
if ($show_comments_ip) {
$name .= "-||-" . $_SERVER['REMOTE_ADDR'];
}
$titel = $now . "=||=" . $name . "=||=" . $titel;
$xml_file = fopen($xml_filename, 'w');
fputs($xml_file, '<'."?xml version='1.0'?".">\n");
if ($add_new_comments_on_top && $image != "") {
// new comments on top !!
$xml_string = "" . urlencode($image) . "" . urlencode($titel) . "\n";
fputs($xml_file, $xml_string);
}
$i = 0;
if (isset($kindex["NAME"])) {
foreach ($kindex["NAME"] as $band) {
$imageName = $kwerte[$band]["value"];
$oldtitel = $kwerte[$kindex["WERT"][$i]]["value"];
$i = $i + 1;
if (trim($imageName) != "") {
$xml_string = "" . $imageName . "" . $oldtitel . "\n";
fputs($xml_file, $xml_string);
}
}
}
if (!$add_new_comments_on_top && $image != "") {
// new comments on bottom !!
$xml_string = "" . urlencode($image) . "" . urlencode($titel) . "\n";
fputs($xml_file, $xml_string);
}
fputs($xml_file, "");
fclose($xml_file);
clearstatcache ();
deleteThumb($twg_album, $image_orig);
// we reload
$_SESSION["actalbum"] = '_RELOAD_';
unset($_SESSION['xmlcache_' . remove_trailing_rel_path ($xml_filename)]);
loadXMLFiles($twg_album);
}
// every entry of the $kwerte is stored.
function deleteKommentar($komment, $twg_album, $image, $kwerte, $kindex)
{
global $xmldir, $basedir, $store_xml_in_picfolders;
if ($kindex == false) {
$kwerte = $_SESSION['kwerte'];
$kindex = $_SESSION['kindex'];
}
$xml_filename = get_xml_file_name($twg_album, "/_comment.xml", "_kommentar_text.xml");
$xml_file = fopen($xml_filename, 'w');
fputs($xml_file, '<'."?xml version='1.0'?".">\n");
$i = 0;
foreach ($kindex["NAME"] as $band) {
$imageName = $kwerte[$band]["value"];
$oldtitel = $kwerte[$kindex["WERT"][$i]]["value"];
$i = $i + 1;
// echo urldecode($oldtitel) . ' : ' . urldecode($komment);
if (strcmp(trim(urldecode(urldecode($oldtitel))), trim(urldecode(urldecode($komment)))) != 0) { // wir schreiben alle ausser dem zu löschenden !!
if (trim($imageName) != "") {
$xml_string = "" . $imageName . "" . $oldtitel . "\n";
fputs($xml_file, $xml_string);
}
}
}
fputs($xml_file, '');
fclose($xml_file);
clearstatcache ();
deleteThumb($twg_album, $image);
$_SESSION["actalbum"] = '_RELOAD_';
unset($_SESSION['xmlcache_' . remove_trailing_rel_path ($xml_filename)]);
loadXMLFiles($twg_album);
// we reload
}
function deleteThumb($twg_album, $image)
{
global $extension_thumb;
$thumbimage = create_thumb_image($twg_album, $image);
$thumb = dirname(__FILE__) . "/." . create_cache_file($thumbimage,$extension_thumb);
if (file_exists($thumb)) {
unlink($thumb);
clearstatcache ();
}
}
function getDownloadCount($album_url, $image)
{
return getCount($album_url, $image, "DOWNLOAD");
}
function getVotesCount($album_url, $image)
{
return getCount($album_url, $image, "VOTES");
}
function getCount($album_url, $image, $type)
{
global $xmldir, $lang_rating_vote, $enhanced_debug, $basedir, $store_xml_in_picfolders;
$xml_filename = get_xml_file_name($album_url, "/_counter.xml", "_image_counter.xml");
if ((!isset($_SESSION["twg_count_actalbum"])) || ($_SESSION["twg_count_actalbum"] != $album_url)) {
$returncount = 1;
if (!file_exists($xml_filename)) {
return 0;
} else {
// we kill the caching because we need the current data
unset($_SESSION['xmlcache_' . remove_trailing_rel_path ($xml_filename)]);
$xml_data = readXMLFile($xml_filename, "3");
$werte = $xml_data[0];
$index = $xml_data[1];
}
$_SESSION["twg_count_actalbum"] = $album_url;
$_SESSION["twg_count_werte"] = $werte;
$_SESSION["twg_count_index"] = $index;
} else {
// load session variables
$werte = $_SESSION["twg_count_werte"];
$index = $_SESSION["twg_count_index"];
}
$i = 0;
if (!$image) {
return;
} // we only cache
foreach ($index["NAME"] as $band) {
if (isset($werte[$band]["value"])) {
$imageName = $werte[$band]["value"];
if (urldecode($imageName) == $image) { // we have to decode because in the xml we encoded already
if ($type == "DOWNLOAD") {
$count = $werte[$index["DOWNLOAD"][$i]]["value"];
return $count;
} else {
$votes = $werte[$index["VOTES"][$i]]["value"];
$average = $werte[$index["AVERAGE"][$i]]["value"];
return trim(sprintf("%1.2f", $average)) . " (" . $votes . " " . $lang_rating_vote . ")";
}
}
$i = $i + 1;
} else {
if ($enhanced_debug) {
debug("getCount: Index not found in xml file '" . $xml_filename . "' - entry " . $i);
debug(print_r($index, true));
debug(print_r($werte, true));
}
}
}
// if not we return 0
return 0;
}
function increaseImageCount($album_url, $image)
{
return increaseCount($album_url, $image, "WERT", 1);
}
function increaseDownloadCount($album_url, $image)
{
increaseCount($album_url, $image, "DOWNLOAD", 1);
}
function increaseVotesCount($album_url, $image, $rating)
{
return increaseCount($album_url, $image, "VOTES", $rating);
}
function increaseCount($album_url, $image, $type, $count)
{
global $xmldir, $basedir, $store_xml_in_picfolders;
global $enhanced_debug;
$top_count=array();
$returncount = 1;
$xml_dummy_string = '<'."?xml version='1.0'?".">\n" . urlencode($image) . "0000\n";
$ret_data = get_xml_data_mig($album_url, "/_counter.xml", "_image_counter.xml", $xml_dummy_string, "increaseCount", true);
$werte = $ret_data['werte'];
$index = $ret_data['index'];
$xml_filename = $ret_data["xml_filename"];
$reload = false;
if (isset($_SESSION['lastimage' . $type])) {
if ($_SESSION['lastimage' . $type] == ($album_url . $image)) { // we check if we have a reload ;).
if ($type == "VOTES" || $type == "DOWNLOAD") {
return false;
}
$reload = true;
}
}
$isnew = true;
$i = 0;
$xml_file = fopen($xml_filename, 'w');
if ($xml_file !== false) {
fputs($xml_file, '<'."?xml version='1.0'?".">\n");
$_SESSION['lastimage' . $type] = ($album_url . $image);
foreach ($index["NAME"] as $band) {
if (isset($werte[$band]["value"])) {
$imageName = $werte[$band]["value"];
if (isset($werte[$index["WERT"][$i]]["value"])) {
$oldcount = $werte[$index["WERT"][$i]]["value"];
} else {
$oldcount = 0;
}
if (isset($werte[$index["DOWNLOAD"][$i]]["value"])) {
$olddownload = $werte[$index["DOWNLOAD"][$i]]["value"];
} else {
$olddownload = 0;
}
if (isset($werte[$index["VOTES"][$i]]["value"])) {
$oldvotes = $werte[$index["VOTES"][$i]]["value"];
} else {
$oldvotes = 0;
}
if (isset($werte[$index["VOTES"][$i]]["value"])) {
$oldaverage = $werte[$index["AVERAGE"][$i]]["value"];
} else {
$oldaverage = 0;
}
if (urldecode($imageName) == $image) { // we have to decode because in the xml we encoded already
if ($reload) {
$newcount = $oldcount;
$newdownload = $olddownload;
$newvotes = $oldvotes;
$newaverage = $oldaverage;
} else {
if ($type == "WERT") {
$newcount = $oldcount + 1;
$newdownload = $olddownload;
$newvotes = $oldvotes;
$newaverage = $oldaverage;
} else if ($type == "DOWNLOAD") {
$newcount = $oldcount;
$newdownload = $olddownload + 1;
$newvotes = $oldvotes;
$newaverage = $oldaverage;
} else { // votes
$newcount = $oldcount;
$newdownload = $olddownload;
$newaverage = (($oldaverage * $oldvotes) + $count) / ($oldvotes + 1) ;
$newvotes = $oldvotes + 1;
}
}
$returncount = $newcount; // we only return the viewcounter - the rest is called seperately !
$isnew = false;
} else {
$newcount = $oldcount;
$newdownload = $olddownload;
$newvotes = $oldvotes;
$newaverage = $oldaverage;
}
$i = $i + 1;
$xml_string = "" . $imageName . "" . $newcount . "" . $newdownload . "" . $newvotes . "" . $newaverage . "\n";
fputs($xml_file, $xml_string);
} else {
if ($enhanced_debug) {
debug("increaseCount: Index not found in xml file '" . $xml_filename . "' - entry " . $i);
debug(print_r($index, true));
debug(print_r($werte, true));
}
}
}
if ($isnew) {
$newcount = 0;
$newdownload = 0;
$newvotes = 0;
$newaverage = 0;
if ($type == "WERT") {
$newcount = 1;
}
if ($type == "DOWNLOAD") {
$newdownload = 1;
}
if ($type == "RATE") {
$newvotes = 1;
$newaverage = $count;
}
$xml_string = "" . urlencode($image) . "" . $newcount . "" . $newdownload . "" . $newvotes . "" . $newaverage . "\n";
fputs($xml_file, $xml_string);
}
fputs($xml_file, "");
fclose($xml_file);
clearstatcache ();
} else {
debug('Please check the file: ' . $xml_filename . '. Seems php cannot read/write/create it properly. TWG tries to rename the file to ' . $xml_filename . '.bak');
rename ($xml_filename, $xml_filename . '.bak');
}
$_SESSION["twg_count_actalbum"] = $album_url;
$_SESSION["twg_count_werte"] = $werte;
$_SESSION["twg_count_index"] = $index;
return $returncount;
}
function getTopXViews($dirs)
{
return getTopX($dirs, 'WERT');
}
function getTopXDownloads($dirs)
{
return getTopX($dirs, 'DOWNLOAD');
}
function getTopXAverage($dirs)
{
return getTopX($dirs, 'AVERAGE');
}
function getTopXVotes($dirs)
{
return getTopX($dirs, 'VOTES');
}
function getTopXViewsImage($dir, $nr = 0) {
global $autocreate_folder_image_recursive,$privatelogin,$basedir;
if ($autocreate_folder_image_recursive) {
if ($dir) {
$dirs = get_view_dirs($basedir . "/" . $dir, $privatelogin);
} else {
$dirs = get_view_dirs($basedir, $privatelogin);
}
$top = getTopX($dirs, 'WERT');
if (!$top || count($top) == 0) {
// we try to use the first image from the first folder.
if (isset($dirs[0])) {
$first = get_first($dirs[0]);
$idir = substr($dirs[0], (strlen($dir) + 1));
if ($idir != "") { $idir .= '/'; }
return ($first) ? $idir . $first : false;
} else {
return false;
}
}
$image = urldecode(substr (strrchr ($top[$nr], '='), 1 ));
$idir = strstr ($top[$nr], '=');
$idir = urldecode(substr($idir,1,strpos($idir, '&')-1));
if ($dir != "") {
$idir = substr($idir, (strlen($dir) + 1));
}
if ($idir != "") {
return $idir . "/" . $image;
} else {
return $image;
}
} else {
$dirs = array();
$dirs[] = $dir;
$top = getTopX($dirs, 'WERT');
if (!$top || count($top) == 0) {
// default image is used.
return false;
}
return urldecode(substr (strrchr ($top[$nr], '='), 1 ));
}
}
function getTopX($dirs, $type)
{
global $cachedir, $xmldir, $install_dir, $twg_standalone;
global $basedir, $store_xml_in_picfolders, $is_cache_call;
global $enhanced_debug, $install_dir_save, $number_top10,$cache_dirs,$precache_main_top_x_limit;
$min_value = -1;
if (isset($install_dir_save)) {
$install_dir = $install_dir_save;
}
$overlimit = false;
if (isset($_SESSION["count_treec" . $install_dir . $basedir])) {
$overlimit = $_SESSION["count_treec" . $install_dir . $basedir] > $precache_main_top_x_limit;
}
$doserialize = $cache_dirs && $overlimit;
if ($doserialize) {
$dirhash = sha1(implode("",$dirs));
$cachename = $cachedir . "/_t_" . $type . "_" . $dirhash . $GLOBALS["standalone"] . ".tmp.php" ;
if (file_exists($cachename)) {
if ($is_cache_call) {
return true;
}
$data = getFileContent($cachename,"");
return unserialize($data);
}
}
$topx = array();
for($ii = 0; $ii < count($dirs); $ii++) {
$returncount = 1;
$xml_filename = get_xml_file_name($dirs[$ii], "/_counter.xml", "_image_counter.xml");
if (file_exists($xml_filename)) {
$xml_data = readXMLFile($xml_filename, "5");
$werte = $xml_data[0];
$index = $xml_data[1];
$i = 0;
foreach ($index["NAME"] as $band) {
if (isset($werte[$band]["value"])) {
$imageName = $werte[$band]["value"];
// echo "
" . $imageName;
if (isset($index[$type])) {
if (isset($werte[$index[$type][$i]]["value"])) {
$counter = $werte[$index[$type][$i]]["value"];
} else {
if ($enhanced_debug) {
debug("getTopX: Index not found in xml file '" . $xml_filename . "' - entry " . $i . " - " . $type . " - " . $imageName);
debug(print_r($index, true));
debug(print_r($werte, true));
}
$counter = 0;
}
} else {
$counter = 0;
}
// echo "
" . urldecode($imageName) . ":" . $counter . "
";
$i++;
if ($counter != 0) {
if ($type == "AVERAGE") {
$counter = trim(sprintf("%1.2f", $counter));
}
// test if the image still exists!
$remote_image = twg_checkurl($basedir . "/" . $dirs[$ii]);
$ilist = get_image_list($dirs[$ii]);
if ($remote_image) {
$remote_image_exists = in_array(urldecode($imageName), get_image_list($dirs[$ii]));
} else {
$remote_image_exists = false;
}
if (file_exists($basedir . "/" . $dirs[$ii] . "/" . urldecode($imageName)) || $remote_image_exists) {
// the decode at the end is important - if you remove them images with hard filenames are not displayed :).
$compare = sprintf("%010s", $counter) . "_" . $install_dir . "image.php?twg_album=" . urlencode($dirs[$ii]) . "&twg_type=thumb&twg_show=" . $imageName . $twg_standalone;
if ($counter >= $min_value) {
$topx[] = $compare;
if (count($topx) > 100) { // we shrink the topx
rsort($topx);
reset($topx);
$topx = array_slice ($topx, 0, ($number_top10 + 10));
$last_entry = array_pop($topx);
$min_value = sprintf('%d', substr($last_entry, 0, 10)) + 0 ;
}
}
}
}
} else {
if ($enhanced_debug) {
debug("getTopX: Error in xml file '" . $xml_filename . "' - entry " . $i);
debug(print_r($index, true));
debug(print_r($werte, true));
}
}
}
}
}
rsort($topx);
reset($topx);
// we only transfer the topx + 10 for display filling
$ret_val = array_slice ($topx, 0, ($number_top10 + 10));
// we serialize the data
if ($doserialize) {
$ser_file = fopen($cachename, 'w');
fputs($ser_file, serialize($ret_val));
fclose($ser_file);
}
if ($is_cache_call) return false;
return $ret_val;
}
function getLatestKomments($dirs)
{
global $xmldir,$cache_dirs,$cachedir, $is_cache_call, $number_top10, $charset,$basedir;
global $install_dir,$twg_standalone, $install_dir, $install_dir_save, $basedir, $store_xml_in_picfolders,$precache_main_top_x_limit;
$id = "";
if (isset($install_dir_save)) {
$install_dir = $install_dir_save;
}
if (!isset($_SESSION["count_treec" . $install_dir . $basedir])) {
// if not set we cache because most of the time this is disabled for big galleries.
$_SESSION["count_treec" . $install_dir . $basedir] = $precache_main_top_x_limit+1;
}
$doserialize = $cache_dirs && ($_SESSION["count_treec" . $install_dir . $basedir] > $precache_main_top_x_limit);
if ($doserialize) {
$dirhash = sha1(implode("",$dirs));
$cachename = $cachedir . "/_t_COM_" . $dirhash . $GLOBALS["standalone"] . ".tmp.php" ;
if (file_exists($cachename)) {
if ($is_cache_call) {
return true;
}
$data = getFileContent($cachename,"");
return unserialize($data);
}
}
$type = "WERT";
$topx = array();
for($ii = 0; $ii < count($dirs); $ii++) {
$returncount = 1;
$xml_filename = get_xml_file_name($dirs[$ii], "/_comment.xml", "_kommentar_text.xml");
if (file_exists($xml_filename)) {
$xml_data = readXMLFile($xml_filename, "6");
$werte = $xml_data[0];
$index = $xml_data[1];
$i = 0;
$map = array();
foreach ($index["NAME"] as $band) {
$imageName = $werte[$band]["value"];
$line = urldecode($werte[$index["WERT"][$i]]["value"]);
$i++;
if (!(trim($line) == "")) {
list ($datum, $name, $komment) = explode("=||=", $line);
if (true) { // !isset($map[$imageName]) - if you add this every picture does only appear once!
$map[$imageName] = "set";
$name = replacesmilies($name);
$komment = replacesmilies($komment);
$pos = strpos ($datum, ".");
if ($pos) {
$ttime = split("[.: ]" , $datum);
$datum = strtotime($ttime[1] . "/" . $ttime[0] . "/" . $ttime[2] . " " . $ttime[3] . ":" . $ttime[4]); // default for old formats!
}
$line = $datum . "=||=" . ($name) . "=||=" . ($komment);
$line = html_entity_decode_fixed ($line, ENT_COMPAT, $charset);
$remote_image = twg_checkurl($basedir . "/" . $dirs[$ii]);
if ($remote_image) {
$remote_image_exists = in_array(urldecode($imageName), get_image_list($dirs[$ii]));
} else {
$remote_image_exists = false;
}
if (file_exists($basedir . "/" . $dirs[$ii] . "/" . urldecode($imageName)) || $remote_image_exists) {
// the decode at the end is important - if you remove them images with hard filenames are not displayed :).
$compare = $line . "=||=" . $install_dir . "image.php?twg_album=" . urlencode($dirs[$ii]) . "&twg_type=thumb&twg_show=" . $imageName . $twg_standalone;
// echo $compare;
$topx[] = $compare;
}
}
}
}
}
}
rsort($topx);
reset ($topx);
$ret_val = array_slice ($topx, 0, ($number_top10 + 10));
if ($doserialize) {
$ser_file = fopen($cachename, 'w');
fputs($ser_file, serialize($ret_val));
fclose($ser_file);
}
if ($is_cache_call) return false;
return $ret_val;
}
function searchComments($dirs, $searchstring)
{
global $xmldir;
global $install_dir;
global $twg_standalone;
global $basedir;
global $basedir, $store_xml_in_picfolders, $charset;
$type = "WERT";
$topx = array();
if ($searchstring == "") {
return $topx;
}
for($ii = 0; $ii < count($dirs); $ii++) {
$returncount = 1;
$xml_filename = get_xml_file_name($dirs[$ii], "/_comment.xml", "_kommentar_text.xml");
if (file_exists($xml_filename)) {
$xml_data = readXMLFile($xml_filename, "7");
$werte = $xml_data[0];
$index = $xml_data[1];
$i = 0;
$map = array();
foreach ($index["NAME"] as $band) {
$imageName = $werte[$band]["value"];
$line = urldecode($werte[$index["WERT"][$i]]["value"]);
$i++;
if (!(trim($line) == "")) {
list ($datum, $name, $komment) = explode("=||=", $line);
if (false) { // this is a easy extension of the comment search for a 2.nd parameter
$value2 = true; // do something real !
} else {
$value2 = true;
}
if (stristr(html_entity_decode_fixed($name, ENT_COMPAT, $charset), $searchstring) || (stristr(html_entity_decode ($komment, ENT_COMPAT, $charset), $searchstring) && $value2)) {
$name = replacesmilies($name);
$komment = replacesmilies($komment);
$pos = strpos ($datum, ".");
if ($pos) {
$ttime = split("[.: ]" , $datum);
$datum = strtotime($ttime[1] . "/" . $ttime[0] . "/" . $ttime[2] . " " . $ttime[3] . ":" . $ttime[4]); // default for old formats!
}
$komment = html_entity_decode_fixed ($komment, ENT_COMPAT, $charset);
if (isset($charset) && ($charset == "utf-8")) {
$line = $datum . "=||=" . $name . "=||=" . utf8_decode($komment); // fix für html chars im input
} else {
$line = $datum . "=||=" . $name . "=||=" . $komment;
}
$remote_image = twg_checkurl($basedir . "/" . $dirs[$ii]);
if ($remote_image) {
$remote_image_exists = in_array(urldecode($imageName), get_image_list($dirs[$ii]));
} else {
$remote_image_exists = false;
}
if (file_exists($basedir . "/" . $dirs[$ii] . "/" . urldecode($imageName)) || $remote_image_exists) {
// the decode at the end is important - if you remove them images with hard filenames are not displayed :).
$compare = $line . "=||=" . $install_dir . "image.php?twg_album=" . urlencode($dirs[$ii]) . "&twg_type=thumb&twg_show=" . $imageName . $twg_standalone;
// echo $compare;
$topx[] = $compare;
}
}
}
}
}
}
rsort($topx);
reset ($topx);
return $topx;
}
function searchCaption($dirs, $searchstring)
{
global $xmldir, $charset;
global $install_dir;
global $twg_standalone;
global $basedir, $store_xml_in_picfolders;
$type = "WERT";
$topx = array();
if ($searchstring == "") {
return $topx;
}
for($ii = 0; $ii < count($dirs); $ii++) {
$returncount = 1;
$xml_filename = get_xml_file_name($dirs[$ii], "/_caption.xml", "_image_text.xml");
if (file_exists($xml_filename)) {
$xml_data = readXMLFile($xml_filename, "8");
$werte = $xml_data[0];
$index = $xml_data[1];
$i = 0;
$map = array();
foreach ($index["NAME"] as $band) {
$imageName = $werte[$band]["value"];
$line = urldecode($werte[$index["WERT"][$i]]["value"]);
$i++;
if (!(trim($line) == "")) {
$datum = ""; // we want to have the same display for all results - therefore some dummys here!
$name = $line;
$comment = "";
if (!isset($map[$imageName])) {
$map[$imageName] = "set";
if (stristr(html_entity_decode_fixed ($name, ENT_COMPAT, $charset), $searchstring)) {
$name = replacesmilies($name);
$komment = htmlentities ($dirs[$ii]);
$line = $datum . "=||=" . $name . "=||=" . $komment ;
$remote_image = twg_checkurl($basedir . "/" . $dirs[$ii]);
if ($remote_image) {
$remote_image_exists = in_array(urldecode($imageName), get_image_list($dirs[$ii]));
} else {
$remote_image_exists = false;
}
if (file_exists($basedir . "/" . $dirs[$ii] . "/" . urldecode($imageName)) || $remote_image_exists) {
// the decode at the end is important - if you remove them images with hard filenames are not displayed :).
$compare = $line . "=||=" . $install_dir . "image.php?twg_album=" . urlencode($dirs[$ii]) . "&twg_type=thumb&twg_show=" . $imageName . $twg_standalone;
// echo $compare;
$topx[] = $compare;
}
}
}
}
}
}
}
return $topx;
}
function getItpcBeschreibung($album_url, $image)
{
global $xmldir, $basedir, $store_xml_in_picfolders;
global $iptc_fields_for_caption, $exif_field_for_caption, $charset;
global $iptc_fields_for_caption_add,$iptc_fields_for_caption_add_style;
global $filesystem_encoding;
$retValue = null;
$xml_filename = get_xml_file_name($album_url, "/_caption.xml", "_image_text.xml");
if (file_exists($xml_filename)) {
$xml_data = readXMLFile($xml_filename, "getItpcBeschreibung");
$werte = $xml_data[0];
$index = $xml_data[1];
$i = 0;
foreach ($index["NAME"] as $band) {
if (isset($werte[$band]["value"])) {
$imageName = $werte[$band]["value"];
if (urldecode($imageName) == $image) { // we have to decode because in the xml we encoded already
$retValue = $werte[$index["WERT"][$i]]["value"];
}
$i++;
}
}
} else {
$xml_dummy_string = '<'."?xml version='1.0'?".">\n\n \n";
$ret_data = get_xml_data_mig($album_url, "/_caption.xml", "_image_text.xml", $xml_dummy_string, "read caption");
$werte = $_SESSION['werte'] = $ret_data['werte'];
$index = $_SESSION['index'] = $ret_data['index'];
}
$save = false;
// now we read the image tags !
if (!isset($retValue)) {
$retValue = get_iptc_data($album_url, $image, $iptc_fields_for_caption, true);
if (isset($retValue) && $retValue != '') {
$save = true;
}
// now we read the 2nd iptc tag!
if (count($iptc_fields_for_caption_add) > 0) {
$retValue2 = get_iptc_data($album_url, $image, $iptc_fields_for_caption_add, true);
if (isset($retValue2) && $retValue2 != '') {
if ($save) {
// we join
$retValue .= sprintf($iptc_fields_for_caption_add_style, $retValue2);
} else {
$retValue = $retValue2;
$save = true;
}
}
}
// end 2nd iptc tag
}
// we read the exif data!
if (!$save) {
$retValue = get_exif_data($album_url, $image, $exif_field_for_caption);
if (isset($retValue)) {
$save = true;
}
}
if ($save) {
if (isset($charset) && (strtolower($GLOBALS["charset"]) == "utf-8" || strtolower($charset) == "utf-8")) {
$retValue = ($filesystem_encoding == '') ? utf8_encode($retValue) : iconv($filesystem_encoding, 'UTF-8', $retValue);
}
saveBeschreibung(urldecode($retValue), $album_url, $image, $werte, $index);
return $retValue;
}
return getCaptionByFilename($image);
}
/*
TAGS
*/
function getTags($album_url, $image)
{
global $xmldir, $basedir, $store_xml_in_picfolders, $charset;
global $iptc_fields_for_imagetags, $iptc_fields_for_dirtags;
$retArray = array();
$xml_filename = get_xml_file_name($album_url, "/_tags.xml", "_tags.xml");
if (file_exists($xml_filename)) {
$xml_data = readXMLFile($xml_filename, "getTags");
$werte = $xml_data[0];
$index = $xml_data[1];
$i = 0;
foreach ($index["NAME"] as $band) {
if (isset($werte[$band]["value"])) {
$imageName = $werte[$band]["value"];
if (urldecode($imageName) == "dir") { // dir tag!
if (isset($werte[$index["WERT"][$i]]["value"])) {
$retArray["dir"] = $werte[$index["WERT"][$i]]["value"];
}
} else if (urldecode($imageName) == $image) { // we have to decode because in the xml we encoded already
if (isset($werte[$index["WERT"][$i]]["value"])) {
$retArray["image"] = $werte[$index["WERT"][$i]]["value"];
}
}
$i++;
}
}
}
$save = false;
$savedir = false;
// now we read the image tags !
if (!isset($retArray["dir"])) {
$retArray["dir"] = get_iptc_data($album_url, $image, $iptc_fields_for_dirtags);
if (isset($retArray["dir"])) $savedir = true;
}
if (!isset($retArray["image"])) {
$retArray["image"] = get_iptc_data($album_url, $image, $iptc_fields_for_imagetags);
if (isset($retArray["image"])) $save = true;
}
if ($save) {
$ret_dir = urldecode($retArray["dir"]);
if (!$savedir && isset($charset) && ($charset == "utf-8")) {
$ret_dir = utf8_decode($ret_dir);
}
saveTags($album_url, $image, urldecode($retArray["image"]), $ret_dir);
}
return $retArray;
}
function get_iptc_data($twg_album, $image, $iptc_array, $stOnly = false)
{
global $basedir, $use_iptc_tags, $charset;
$keywords = null;
if ($use_iptc_tags) {
$remote_image = twg_checkurl($basedir . "/" . $twg_album);
if ($remote_image) {
$filename = getRemoteImagePath($remote_image, $image);
} else {
$filename = $basedir . "/" . $twg_album . "/" . $image;
}
set_error_handler("on_error_no_output"); // images with errors are ignored
$oldsize = @getimagesize($filename, $info);
set_error_handler("on_error");
if (isset($info["APP13"])) {
$iptc = iptcparse($info["APP13"]);
if (is_array($iptc)) {
foreach($iptc_array as $key) {
if (isset($iptc[$key])) {
$keywordcount = count($iptc[$key]);
for ($i = 0; $i < $keywordcount; $i++) $keywords .= $iptc[$key][$i] . ",";
if ($stOnly) {
break;
}
}
}
}
}
if (isset($keywords)) {
$keywords = substr($keywords, 0, -1);
}
}
if (isset($charset) && strtolower($charset) == "utf-8") {
$keywords = utf8_encode($keywords);
}
return $keywords;
}
function get_exif_data($twg_album, $image, $exif_field)
{
global $basedir, $use_iptc_tags;
set_error_handler("on_error_no_output"); // 4.x gives depreciated errors here but if I change it it does only work with 5.x - therefore I don't show any errors here !
include_once dirname(__FILE__) . "/exifReader.inc.php";
set_error_handler("on_error");
if ($use_iptc_tags && $exif_field != "") {
$remote_image = twg_checkurl($basedir . "/" . $twg_album);
if ($remote_image) {
$filename = getRemoteImagePath($remote_image, $image);
} else {
$filename = $basedir . "/" . $twg_album . "/" . $image;
}
set_error_handler("on_error_no_output"); // images with errors are ignored
$er = new phpExifReader($filename);
$er->processFile();
$exif_info = $er->getImageInfo();
set_error_handler("on_error");
// shows all tags in the debug file - use this to find out all possible keys
// debug(print_r ($exif_info,true ));
if (isset($exif_info[$exif_field])) {
$value = trim($exif_info[$exif_field]);
if ($value != "") {
return $value;
}
}
}
return;
}
function saveTags($album_url, $image, $tags_image, $tags_dir)
{
global $xmldir, $basedir, $store_xml_in_picfolders, $enhanced_debug, $charset;
$v_array = array();
$tags_image = trim_elements($tags_image);
$tags_dir = trim_elements($tags_dir);
$xml_dummy_string = '<'."?xml version='1.0'?".">\n \n";
$ret_data = get_xml_data_mig($album_url, "/_tags.xml", "_tags.xml", $xml_dummy_string, "increaseCount", true);
$werte = $ret_data['werte'];
$index = $ret_data['index'];
$xml_filename = $ret_data["xml_filename"];
$xml_file = fopen($xml_filename, 'w');
fputs($xml_file, '<'."?xml version='1.0'?".">\n");
$i = 0;
$isnew = true;
// we add the directory tag
$xml_string = "dir" . urlencode($tags_dir) . "\n";
fputs($xml_file, $xml_string);
if ($tags_dir != "") {
$v_array = countTags($v_array, $tags_dir, 5);
}
foreach ($index["NAME"] as $band) {
$imageName = urldecode($werte[$band]["value"]);
if ($imageName != "dir") {
if (urlencode($imageName) == urlencode(urldecode($image))) {
$oldtitel = urlencode($tags_image);
$isnew = false;
} else {
$oldtitel = $werte[$index["WERT"][$i]]["value"];
}
if (trim($imageName) != "") {
$v_array = countTags($v_array, urldecode($oldtitel), 1);
$xml_string = "" . urlencode($imageName) . "" . $oldtitel . "\n";
fputs($xml_file, $xml_string);
}
}
$i = $i + 1;
}
if ($isnew && $image != "") {
if ($tags_image) {
$v_array = countTags($v_array, $tags_image, 1);
$xml_string = "" . urlencode($image) . "" . urlencode($tags_image) . "\n";
fputs($xml_file, $xml_string);
}
}
fputs($xml_file, "");
fclose($xml_file);
clearstatcache ();
// debug("save:");
// debug(print_r ($v_array,true));
create_topx_xml($album_url, "_top_tag.xml", $v_array);
// we reload the file from the hd - maybe it was modified by someone else! + topx are refreshed
unset($_SESSION['xmlcache_' . remove_trailing_rel_path ($xml_filename)]);
unset($_SESSION['xmlcache_xml' . $album_url . '_top_tagxml']);
// we delete the session TT data because it is not up to date anymore.
unset($_SESSION['TWG_TT']);
}
/**
* Gets the xml filename - topx are treated differently!
*/
function get_xml_file_name($twg_album, $name1, $name2)
{
global $basedir, $xmldir, $store_xml_in_picfolders, $autocreate_folder_id;
if ($twg_album || $twg_album == "") {
$album_path = $basedir . "/" . $twg_album;
} else {
$album_path = $basedir;
}
$twg_album_u = str_replace("/", "_", $twg_album);
$xml_filename_old = "./" . $xmldir . "/" . $twg_album_u . $name2;
if ($store_xml_in_picfolders && is_writable($album_path)) {
$xml_filename = $album_path . $name1;
if (file_exists($xml_filename_old)) {
copy($xml_filename_old, $xml_filename);
unlink($xml_filename_old);
$xml_filename_old_top = "./" . $xmldir . "/" . $twg_album_u . "_top_tag.xml";
if ($name1 == "/_tags.xml" && file_exists($xml_filename_old_top)) { // we copy the topx as well!
$xml_filename_top = $album_path . "/_top_tag.xml";
copy($xml_filename_old_top, $xml_filename_top);
unlink($xml_filename_old_top);
}
}
} else {
// we check if there is a folder.id
$fid = $album_path .'/folder.id';
if (file_exists($fid)) {
$prefix = './' . $xmldir . '/' . trim(file_get_contents($fid));
$xml_filename= $prefix . ltrim($name2 , '/');
} else {
if ($autocreate_folder_id && is_writable($album_path) && $twg_album_u !='') {
file_put_contents($fid, $twg_album_u);
}
$xml_filename = $xml_filename_old;
}
}
return $xml_filename;
}
function get_xml_data_mig($album_url, $name1, $name2, $xml_dummy_string, $error_tag, $nocache = false)
{
global $store_xml_in_picfolders, $xmldir, $basedir, $autocreate_folder_id;
$returnArray = array();
$album_path = $basedir . "/" . $album_url;
$migration = false;
if ($store_xml_in_picfolders && is_writeable($album_path)) {
$xml_filename_new = $album_path . $name1;
if (file_exists($xmldir)) { // we check for migration
$xml_filename = $xmldir . "/" . str_replace("/", "_", $album_url) . $name2;
if (file_exists($xml_filename)) {
$migration = true;
} else {
$xml_filename = $xml_filename_new;
}
} else {
$xml_filename = $xml_filename_new;
}
} else {
$fid = $album_path .'/folder.id';
if (file_exists($fid)) {
// $xml_filename= $xml_filename_new = './' . $xmldir . '/' . trim(file_get_contents($fid)) . ltrim($name1 , '/');
$prefix = './' . $xmldir . '/' . trim(file_get_contents($fid));
$xml_filename= $xml_filename_new = $prefix . ltrim($name2 , '/');
} else {
$album_url = str_replace("/", "_", $album_url);
if ($autocreate_folder_id && is_writable($album_path) && $album_url !='') {
file_put_contents($fid, $album_url);
}
$xml_filename = $xml_filename_new = $xmldir . "/" . $album_url . $name2;
}
}
if (!file_exists($xml_filename)) {
$xml_filename = $xml_filename_new;
// we create an empty one
set_error_handler("on_error_no_output"); // we do error handling below
$xml_file = fopen($xml_filename, 'w');
set_error_handler("on_error");
if (!$xml_file) {
return startErrorHandling($xml_filename,"created");
}
fputs($xml_file, $xml_dummy_string);
fclose($xml_file);
}
if ($nocache) {
// we kill the caching because we need the current data
unset($_SESSION['xmlcache_' . remove_trailing_rel_path ($xml_filename)]);
}
$xml_data = readXMLFile($xml_filename, $error_tag);
$returnArray["xml_filename"] = $xml_filename_new;
$returnArray['werte'] = $xml_data[0];
$returnArray['index'] = $xml_data[1];
if ($migration) {
// we copy the file!
copy($xml_filename, $xml_filename_new);
// and delete the old one
unlink($xml_filename);
}
return $returnArray;
}
/**
* * Formats the tags how we need it!
*/
function trim_elements($str)
{
return implode(",", array_unique(array_filter(array_map("trim", explode(",", $str)), "not_empty")));
}
function not_empty ($var)
{
return (strlen($var) > 0);
}
function countTags($v_array, $tags_str, $value)
{
$tags_array = explode(",", $tags_str);
foreach ($tags_array as $tag) {
$tag = trim($tag);
if (isset($v_array[$tag])) {
$v_array[$tag] += $value;
} else {
$v_array[$tag] = $value;
}
}
return $v_array;
}
function create_topx_xml($album, $file_prefix, $v_array)
{
global $number_of_top_tags;
global $xmldir, $basedir, $store_xml_in_picfolders;
$t_array = array();
$i = 0;
arsort($v_array, SORT_NUMERIC);
reset ($v_array);
foreach ($v_array as $tag => $counter) {
$t_array[$tag] = $counter;
if ($i++ >= $number_of_top_tags) {
break;
}
}
$v_array = $t_array;
$xml_filename = get_xml_file_name($album, "/" . $file_prefix, $file_prefix);
// we go one step higher!!
// $album = substr($dir, 0, strrpos ($album, "/"));
// we save the whole array!
$xml_file = fopen($xml_filename, 'w');
fputs($xml_file, '<'."?xml version='1.0'?".">\n");
foreach ($v_array as $tag => $counter) {
$xml_string = "" . urlencode($tag) . "" . $counter . "\n";
fputs($xml_file, $xml_string);
}
fputs($xml_file, "");
fclose($xml_file);
clearstatcache ();
if (function_exists('get_view_dirs')) { // This is not done during batch upload.
create_top_tags($album);
}
}
/*
We create an array of the topx tags!
*/
function create_top_tags($album_url)
{
global $basedir, $number_of_top_tags, $privatelogin, $cache_dirs;
$key = $privatelogin .'/' . $album_url;
if ($cache_dirs && isset($_SESSION['TWG_TT']) && isset($_SESSION['TWG_TT'][$key] )) {
return $_SESSION['TWG_TT'][$key];
}
if ($album_url) {
$dirs = get_view_dirs($basedir . "/" . $album_url, $privatelogin);
} else {
$dirs = get_view_dirs($basedir, $privatelogin);
}
$v_array = array();
foreach ($dirs as $album) {
$xml_filename = get_xml_file_name($album, "/_top_tag.xml", "_top_tag.xml");
if (file_exists($xml_filename)) {
$xml_data = readXMLFile($xml_filename, "create_top_tags");
$werte = $xml_data[0];
$index = $xml_data[1];
$i = 0;
if (isset($index["NAME"])) {
foreach ($index["NAME"] as $band) {
$tag = $werte[$band]["value"];
$wert = $werte[$index["WERT"][$i]]["value"];
$v_array = countTags($v_array, $tag, $wert);
$i++;
}
}
}
}
$t_array = array();
arsort($v_array, SORT_NUMERIC);
reset ($v_array);
foreach ($v_array as $tag => $counter) {
$t_array[$tag] = $counter;
if ($i++ >= $number_of_top_tags) {
break;
}
}
$v_array = $t_array;
if ($cache_dirs) {
if (!isset($_SESSION['TWG_TT'])) {
$_SESSION['TWG_TT'] = array();
}
$_SESSION['TWG_TT'][$key] = $v_array;
}
// here we save it later to disk as well!
return $v_array;
}
function search_tags($dirs, $searchstring, $exact = false)
{
global $xmldir;
global $install_dir;
global $twg_standalone;
global $basedir, $store_xml_in_picfolders, $charset;
global $skip_thumbnail_page, $auto_skip_thumbnail_page, $numberofpics;
$numberpics = $numberofpics * 2 + 1;
$auto_skip_thumbnail_page = true;
$type = "WERT";
$topx = array();
$topxalb = array();
if ($searchstring == "") {
return $topx;
}
for($ii = 0; $ii < count($dirs); $ii++) {
$returncount = 1;
$xml_filename = get_xml_file_name($dirs[$ii], "/_tags.xml", "_tags.xml");
if (file_exists($xml_filename)) {
$xml_data = readXMLFile($xml_filename, "searchTags");
$werte = $xml_data[0];
$index = $xml_data[1];
$i = 0;
$map = array();
foreach ($index["NAME"] as $band) {
$isdirtag = false;
$imageName = $werte[$band]["value"];
if (isset($werte[$index["WERT"][$i]]["value"])) { // dirtags can be empty!
$line = urldecode($werte[$index["WERT"][$i]]["value"]);
} else {
$i++;
continue;
}
$i++;
if (!(trim($line) == "")) {
$datum = ""; // we want to have the same display for all results - therefore some dummys here!
$name = $line;
$comment = "";
if ($exact) {
$tags_array = explode(",", html_entity_decode_fixed($name, ENT_COMPAT, $charset));
$res = in_array(html_entity_decode_fixed ($searchstring, ENT_COMPAT, $charset), $tags_array);
} else {
$res = stristr(html_entity_decode_fixed ($name, ENT_COMPAT, $charset), html_entity_decode_fixed ($searchstring, ENT_COMPAT, $charset));
}
if ($res) {
if ($imageName == "dir") { // this is a dir tag - we show a link to the folder
$isdirtag = true;
}
$name = replacesmilies($name);
$name = str_replace(",", ", ", $name);
$komment = htmlentities ($dirs[$ii]);
$line = $datum . "=||=" . $name . "=||=" . $komment ;
$remote_image = twg_checkurl($basedir . "/" . $dirs[$ii]);
if ($remote_image) {
$remote_image_exists = in_array(urldecode($imageName), get_image_list($dirs[$ii]));
} else {
$remote_image_exists = false;
}
if (file_exists($basedir . "/" . $dirs[$ii] . "/" . urldecode($imageName)) || $remote_image_exists || $isdirtag) {
// the decode at the end is important - if you remove them images with hard filenames are not displayed :).
if ($isdirtag) {
$addon = "";
if ($skip_thumbnail_page) {
$addon = "&twg_show=x";
} else if ($auto_skip_thumbnail_page) {
$counter = get_image_count($dirs[$ii]);
if ($counter <= $numberpics) {
$addon = "&twg_show=x";
}
}
$compare = $line . "=||=" . $install_dir . "image.php?twg_album=" . urlencode($dirs[$ii]) . "&twg_type=isalbum" . $twg_standalone . $addon;
$topxalb[] = $compare;
} else {
$compare = $line . "=||=" . $install_dir . "image.php?twg_album=" . urlencode($dirs[$ii]) . "&twg_type=thumb&twg_show=" . $imageName . $twg_standalone;
$topx[] = $compare;
}
}
}
}
}
}
}
$topx = array_merge ($topxalb, $topx);
return $topx;
}
?>