', $gzip );
}
function out_xml($xml, $gzip)
{
global $file;
if ($gzip)
fwrite($file, gzencode($xml, 9) );
else
fwrite($file, $xml);
}
function end_xml($gzip)
{
global $file;
out_xml('',$gzip );
fclose( $file );
}
function add_url($url, $lastmod=null, $changefreq=null, $priority=null, $images_xml=null)
{
$xml=
'
'.$url.'';
if ( isset($lastmod) and strlen($lastmod)>0 )
{
if (strlen($lastmod)>11)
{
$lastmod[10] = 'T';
if (strlen($lastmod)==19)
$lastmod .= '-05:00';
}
$xml.='
'.$lastmod.'';
}
if ( isset($changefreq) and $changefreq!='' ) $xml.='
'.$changefreq.'';
if ( isset($priority) and $priority!='' ) $xml.='
'.$priority.'';
if ( isset($images_xml) )
$xml .= "\n".$images_xml;
$xml .= '
';
global $gzip,$url_count;
$url_count++;
out_xml($xml, $gzip);
}
include_once(PHPWG_ROOT_PATH.'admin/include/functions.php');
check_status(ACCESS_ADMINISTRATOR);
$frequenciesT = array(
'',
l10n('always'),
l10n('hourly'),
l10n('daily'),
l10n('weekly'),
l10n('monthly'),
l10n('yearly'),
l10n('never'),
);
$frequencies = array(
'',
'always',
'hourly',
'daily',
'weekly',
'monthly',
'yearly',
'never',
);
$specials = array(
'categories' => array('L'=>l10n('Home'), 'P'=>0.9),
'best_rated' => array('L'=>l10n('Best rated'), 'P'=>0.8 ) ,
'most_visited' => array('L'=>l10n('Most visited'), 'P'=>0.8 ),
'recent_pics' => array('L'=>l10n('Recent photos'), 'P'=>0.8, 'F'=>'weekly' ),
'tags' => array('L'=>l10n('Tags'), 'PAGE'=>'tags.php' , 'P'=>0.8 ),
);
$url_count=0;
// BEGIN AS GUEST
$save_user = $user;
$user = build_user( $conf['guest_id'], true);
$query = '
SELECT id, name, permalink, uppercats, global_rank, IFNULL(date_last, max_date_last) AS date_last
FROM '.CATEGORIES_TABLE.' INNER JOIN '.USER_CACHE_CATEGORIES_TABLE.'
ON id = cat_id AND user_id = '.$conf['guest_id'].'
WHERE max_date_last IS NOT NULL
ORDER BY global_rank';
$categories = array_from_query($query);
usort($categories, 'global_rank_compare');
$tags = get_available_tags();
usort($tags, 'name_compare');
if ( isset($_POST['submit']) )
{
// echo(''.var_export($_POST,true).'
' );
if ( $_POST['filename'] != '' )
$filename = $_POST['filename'];
$gzip = @$_POST['gzip']=='on' ? true : false;
$selected_specials = array();
foreach ($specials as $key=>$value)
{
if ( @$_POST['special_'.$key]=='on' )
array_push( $selected_specials, $key );
$specials[$key]['P'] = $_POST['special_prio_'.$key];
$specials[$key]['F'] = $_POST['special_freq_'.$key];
}
if ( isset($_POST['categories']) )
$selected_categories = $_POST['categories'];
else
$selected_categories = array();
$prio_categories = $_POST['prio_categories'];
$freq_categories = $_POST['freq_categories'];
if ( isset($_POST['tags']) )
$selected_tags = $_POST['tags'];
else
$selected_tags = array();
$prio_tags = $_POST['prio_tags'];
$freq_tags = $_POST['freq_tags'];
$photo_count = intval($_POST['photo_count']);
set_make_full_url();
start_xml($filename, $gzip);
$r_selected_specials = array_flip($selected_specials);
foreach ($specials as $key=>$value)
{
if (! isset ($r_selected_specials[$key]) )
continue;
if ( isset($value['PAGE']) )
$url = get_root_url().$value['PAGE'];
else
$url = make_index_url( array('section'=>$key) );
add_url($url, null, $value['F'], $value['P'] );
}
$r_selected_categories = array_flip($selected_categories);
foreach ($categories as $cat)
{
if (! isset ($r_selected_categories[$cat['id']]) )
continue;
$url = make_index_url(
array(
'category'=>$cat
)
);
add_url($url, $cat['date_last'], $freq_categories, $prio_categories);
}
$r_selected_tags = array_flip($selected_tags);
if ( !empty($selected_tags) )
{
$query = 'SELECT tag_id, MAX(date_available) AS da, MAX(date_creation) AS dc, MAX(date_metadata_update) AS dm
FROM '.IMAGE_TAG_TABLE.' INNER JOIN '.IMAGES_TABLE.' ON image_id=id
WHERE tag_id IN ('.implode(',',$selected_tags).')
GROUP BY tag_id';
$result = pwg_query($query);
$tag_infos = array();
while ($row = pwg_db_fetch_assoc($result))
{
$tag_infos[$row['tag_id']]= max( $row['da'],$row['dc'],$row['dm']);
}
foreach( $tags as $tag)
{
if (!isset($r_selected_tags[ $tag['id'] ] ) )
continue;
$url = make_index_url(
array(
'section'=>'tags',
'tags'=> array( $tag )
)
);
add_url($url, $tag_infos[ $tag['id'] ], $freq_tags, $prio_tags);
}
}
$selected_derivatives = array();
if ($photo_count > 0)
{
if (isset($_POST['selected_derivatives']))
$selected_derivatives = $_POST['selected_derivatives'];
$selected_derivatives_params = array();
foreach($selected_derivatives as $type)
$selected_derivatives_params[] = ImageStdParams::get_by_type($type);
$query = 'SELECT DISTINCT i.* FROM '.IMAGES_TABLE.' i
INNER JOIN '.IMAGE_CATEGORY_TABLE.' on i.id=image_id
'.get_sql_condition_FandF( array('forbidden_categories' => 'category_id', 'forbidden_images'=>'i.id'), 'WHERE ' ).'
ORDER BY date_available DESC
LIMIT '.$photo_count;
$result = pwg_query($query);
while ($row = pwg_db_fetch_assoc($result))
{
$url = make_picture_url( array(
'image_id' => $row['id'],
'image_file' => $row['file'],
) );
$src_image = new SrcImage($row);
$images_xml = '';
$done_iurls=array();
foreach( $selected_derivatives_params as $params )
{
$deriv_url = DerivativeImage::url($params, $src_image);
if (!isset($done_iurls[$deriv_url]))
{
$done_iurls[$deriv_url] = 1;
$images_xml .= ''.$deriv_url.'';
}
}
add_url($url, $row['date_available'], null, null, $images_xml);
}
}
unset_make_full_url();
end_xml($gzip);
$page['infos'][] = $url_count.' urls saved';
// save the data for future use
$selected_tag_urls = array();
foreach( $tags as $tag)
{
if (isset($r_selected_tags[ $tag['id'] ] ) )
array_push($selected_tag_urls, $tag['url_name']);
}
$x = compact( 'filename', 'selected_tag_urls', 'prio_tags', 'freq_tags',
'selected_categories', 'prio_categories', 'freq_categories',
'selected_specials', 'photo_count', 'selected_derivatives' );
$file = fopen( sitemaps_get_config_file_name(), 'w' );
fwrite($file, serialize($x) );
fclose( $file );
}
else
{
$filename = 'sitemap.xml';
$gzip = false;
$selected_specials = 'all';
$prio_categories = 0.5;
$prio_tags = 0.6;
$freq_categories = 'monthly';
$freq_tags = 'monthly';
$photo_count = 0;
$selected_derivatives = array();
$conf_file_name = sitemaps_get_config_file_name();
$old_file = dirname(__FILE__).'/_sitemap.dat';
if (file_exists($old_file) and !file_exists($conf_file_name) )
{
copy($old_file, $conf_file_name);
unlink($old_file);
}
$x = @file_get_contents( $conf_file_name );
if ($x!==false)
{
$x = unserialize($x);
extract($x);
$selected_tags = array();
if (isset($selected_tag_urls))
{
foreach($tags as $tag)
{
if ( in_array($tag['url_name'], $selected_tag_urls ) )
array_push($selected_tags, $tag['id']);
}
unset($selected_tag_urls);
}
}
if (!is_array(@$selected_categories)) $selected_categories = array();
if (!is_array(@$selected_tags)) $selected_tags = array();
}
// END AS GUEST
$user = $save_user;
$template->assign( array(
'FILENAME' => $filename,
'U_FILENAME' => get_root_url().$filename.($gzip?'.gz':''),
'GZIP_CHECKED' => $gzip ? 'checked="checked"' : '',
'PRIO_CATEGORIES' => $prio_categories,
'PRIO_TAGS' => $prio_tags,
'PHOTO_COUNT' => $photo_count,
)
);
foreach( $specials as $key=>$value)
{
$checked='';
if ($selected_specials=='all' or in_array($key, $selected_specials) )
$checked = 'checked="checked"';
$template->append( 'specials',
array(
'NAME' => $key,
'LABEL' => $value['L'],
'CHECKED' => $checked,
'PRIO' => $value['P'],
'FREQ' => isset($value['F']) ? $value['F'] : 'monthly',
)
);
}
display_select_categories($categories, $selected_categories, 'categories', false );
$template->assign('freq_categories_selected', $freq_categories);
foreach( $tags as $tag)
$template->append( 'tags', array($tag['id']=>$tag['name']), true );
$template->assign('tags_selected', $selected_tags);
$template->assign('freq_tags_selected', $freq_tags);
$template->assign('frequencies', $frequencies);
$template->assign('frequenciesT', $frequenciesT);
$available_derivatives = array();
foreach(array_keys(ImageStdParams::get_defined_type_map()) as $type)
{
$available_derivatives[$type] = l10n($type);
}
$template->assign( array('available_derivatives'=>$available_derivatives, 'selected_derivatives' => $selected_derivatives));
$template->set_filename('sitemap', dirname(__FILE__).'/sitemap.tpl');
$template->assign_var_from_handle('ADMIN_CONTENT', 'sitemap');
?>