'); 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 = "
" . $lang_comments . $com_counter . ""; $headerkommentar .= '' . $lang_add_kommentar . ''; $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; } ?>