* @author Stephen Billard (sbillard) * @package plugins * @subpackage seo */ $plugin_is_filter = 5 | CLASS_PLUGIN; $plugin_description = gettext("Allows setting language locale through the URI."); $plugin_notice = gettext('<strong>Note:</strong> This plugin is not activated for <em>back‑end</em> (administrative) URLs. However, once activated, the language is remembered, even for the <em>back‑end</em>.'); $plugin_author = "Stephen Billard (sbillard)"; $plugin_disable = !MOD_REWRITE ? gettext('<em>mod_rewrite</em> must be enabled for this plugin to function.') : getOption('dynamic_locale_subdomain') && extensionEnabled('dynamic-locale') ? gettext('This plugin is not compatible with the <code>dynamic locale</code> <em>Use subdomains</em> option') : false; if ($plugin_disable) { enableExtension('seo_locale', 0); } else { zp_register_filter('load_request', 'seo_locale::load_request'); if (!defined('SEO_WEBPATH')) { define('SEO_WEBPATH', seo_locale::localePath()); define('SEO_FULLWEBPATH', seo_locale::localePath(true)); } } class seo_locale { static function load_request($allow) { $uri = getRequestURI(); $parts = explode('?', $uri); $uri = $parts[0]; $path = ltrim(substr($uri, strlen(WEBPATH) + 1), '/'); if (empty($path)) { return $allow; } else { $rest = strpos($path, '/'); if ($rest === false) {
/** * Returns either the rewrite path or the plain, non-mod_rewrite path * based on the mod_rewrite option. * The given paths can start /with or without a slash, it doesn't matter. * * IDEA: this function could be used to specially escape items in * the rewrite chain, like the # character (a bug in mod_rewrite). * * This is here because it's used in both template-functions.php and in the classes. * @param string $rewrite is the path to return if rewrite is enabled. (eg: "/myalbum") * @param string $plain is the path if rewrite is disabled (eg: "/?album=myalbum") * @param bool $webpath host path to be prefixed. If "false" is passed you will get a localized "WEBPATH" * @return string */ function rewrite_path($rewrite, $plain, $webpath = NULL) { if (is_null($webpath)) { if (class_exists('seo_locale')) { $webpath = seo_locale::localePath(); } else { $webpath = WEBPATH; } } if (MOD_REWRITE) { $path = $rewrite; } else { $path = $plain; } if ($path[0] == "/") { $path = substr($path, 1); } return $webpath . "/" . $path; }
/** * Prints html meta data to be used in the <head> section of a page * */ static function getHTMLMetaData() { global $_zp_gallery, $_zp_galley_page, $_zp_current_album, $_zp_current_image, $_zp_current_zenpage_news, $_zp_current_zenpage_page, $_zp_gallery_page, $_zp_current_category, $_zp_authority, $_zp_conf_vars, $_myFavorites, $htmlmetatags_need_cache, $_zp_page; zp_register_filter('image_processor_uri', 'htmlmetatags::ipURI'); $host = sanitize("http://" . $_SERVER['HTTP_HOST']); $url = $host . getRequestURI(); // Convert locale shorttag to allowed html meta format $locale = str_replace("_", "-", getUserLocale()); $canonicalurl = ''; // generate page title, get date $pagetitle = ""; // for gallery index setup below switch $date = strftime(DATE_FORMAT); // if we don't have a item date use current date $desc = getBareGalleryDesc(); $thumb = ''; if (getOption('htmlmeta_sitelogo')) { $thumb = getOption('htmlmeta_sitelogo'); } if (getOption('htmlmeta_og-image') || getOption('htmlmeta_twittercard')) { $ogimage_width = getOption('htmlmeta_ogimage_width'); $ogimage_height = getOption('htmlmeta_ogimage_height'); if (empty($ogimage_width)) { $ogimage_width = 1280; } if (empty($ogimage_height)) { $ogimage_height = 900; } } $type = 'article'; switch ($_zp_gallery_page) { case 'index.php': $desc = getBareGalleryDesc(); //$canonicalurl = $host . getGalleryIndexURL(); $canonicalurl = $host . getPageNumURL($_zp_page); $type = 'website'; break; case 'album.php': $pagetitle = getBareAlbumTitle() . " - "; $date = getAlbumDate(); $desc = getBareAlbumDesc(); $canonicalurl = $host . getPageNumURL($_zp_page); if (getOption('htmlmeta_og-image') || getOption('htmlmeta_twittercard')) { $thumbimg = $_zp_current_album->getAlbumThumbImage(); getMaxSpaceContainer($ogimage_width, $ogimage_height, $thumbimg, false); $thumb = $host . html_encode(pathurlencode($thumbimg->getCustomImage(NULL, $ogimage_width, $ogimage_height, NULL, NULL, NULL, NULL, false, NULL))); } break; case 'image.php': $pagetitle = getBareImageTitle() . " (" . getBareAlbumTitle() . ") - "; $date = getImageDate(); $desc = getBareImageDesc(); $canonicalurl = $host . getImageURL(); if (getOption('htmlmeta_og-image') || getOption('htmlmeta_twittercard')) { $thumb = $host . html_encode(pathurlencode(getCustomSizedImageMaxSpace($ogimage_width, $ogimage_height))); } break; case 'news.php': if (function_exists("is_NewsArticle")) { if (is_NewsArticle()) { $pagetitle = getBareNewsTitle() . " - "; $date = getNewsDate(); $desc = trim(getBare(getNewsContent())); $canonicalurl = $host . $_zp_current_zenpage_news->getLink(); } else { if (is_NewsCategory()) { $pagetitle = $_zp_current_category->getTitlelink() . " - "; $date = strftime(DATE_FORMAT); $desc = trim(getBare($_zp_current_category->getDesc())); $canonicalurl = $host . $_zp_current_category->getLink(); $type = 'category'; } else { $pagetitle = gettext('News') . " - "; $desc = ''; $canonicalurl = $host . getNewsIndexURL(); $type = 'website'; } } if ($_zp_page != 1) { $canonicalurl .= '/' . $_zp_page; } } break; case 'pages.php': $pagetitle = getBarePageTitle() . " - "; $date = getPageDate(); $desc = trim(getBare(getPageContent())); $canonicalurl = $host . $_zp_current_zenpage_page->getLink(); break; default: // for all other possible static custom pages $custompage = stripSuffix($_zp_gallery_page); $standard = array('contact' => gettext('Contact'), 'register' => gettext('Register'), 'search' => gettext('Search'), 'archive' => gettext('Archive view'), 'password' => gettext('Password required')); if (is_object($_myFavorites)) { $standard['favorites'] = gettext('My favorites'); } if (array_key_exists($custompage, $standard)) { $pagetitle = $standard[$custompage] . " - "; } else { $pagetitle = $custompage . " - "; } $desc = ''; $canonicalurl = $host . getCustomPageURL($custompage); if ($_zp_page != 1) { $canonicalurl .= '/' . $_zp_page; } break; } // shorten desc to the allowed 200 characters if necesssary. $desc = html_encode(trim(substr(getBare($desc), 0, 160))); $pagetitle = $pagetitle . getBareGalleryTitle(); // get master admin $admin = $_zp_authority->getMasterUser(); $author = $admin->getName(); $meta = ''; if (getOption('htmlmeta_http-equiv-cache-control')) { $meta .= '<meta http-equiv="Cache-control" content="' . getOption("htmlmeta_cache_control") . '">' . "\n"; } if (getOption('htmlmeta_http-equiv-pragma')) { $meta .= '<meta http-equiv="pragma" content="' . getOption("htmlmeta_pragma") . '">' . "\n"; } if (getOption('htmlmeta_name-keywords')) { $meta .= '<meta name="keywords" content="' . htmlmetatags::getMetaKeywords() . '">' . "\n"; } if (getOption('htmlmeta_name-description')) { $meta .= '<meta name="description" content="' . $desc . '">' . "\n"; } if (getOption('htmlmeta_name-page-topic')) { $meta .= '<meta name="page-topic" content="' . $desc . '">' . "\n"; } if (getOption('htmlmeta_name-robots')) { $meta .= '<meta name="robots" content="' . getOption("htmlmeta_robots") . '">' . "\n"; } if (getOption('htmlmeta_name-publisher')) { $meta .= '<meta name="publisher" content="' . FULLWEBPATH . '">' . "\n"; } if (getOption('htmlmeta_name-creator')) { $meta .= '<meta name="creator" content="' . FULLWEBPATH . '">' . "\n"; } if (getOption('htmlmeta_name-author')) { $meta .= '<meta name="author" content="' . $author . '">' . "\n"; } if (getOption('htmlmeta_name-copyright')) { $meta .= '<meta name="copyright" content=" (c) ' . FULLWEBPATH . ' - ' . $author . '">' . "\n"; } if (getOption('htmlmeta_name-rights')) { $meta .= '<meta name="rights" content="' . $author . '">' . "\n"; } if (getOption('htmlmeta_name-generator')) { $meta .= '<meta name="generator" content="Zenphoto ' . ZENPHOTO_VERSION . '">' . "\n"; } if (getOption('htmlmeta_name-revisit-after')) { $meta .= '<meta name="revisit-after" content="' . getOption("htmlmeta_revisit_after") . '">' . "\n"; } if (getOption('htmlmeta_name-expires')) { $expires = getOption("htmlmeta_expires"); if ($expires == (int) $expires) { $expires = preg_replace('|\\s\\-\\d+|', '', date('r', time() + $expires)) . ' GMT'; } $meta .= '<meta name="expires" content="' . $expires . '">' . "\n"; } // OpenGraph meta if (getOption('htmlmeta_og-title')) { $meta .= '<meta property="og:title" content="' . $pagetitle . '">' . "\n"; } if (getOption('htmlmeta_og-image') && !empty($thumb)) { $meta .= '<meta property="og:image" content="' . $thumb . '">' . "\n"; } if (getOption('htmlmeta_og-description')) { $meta .= '<meta property="og:description" content="' . $desc . '">' . "\n"; } if (getOption('htmlmeta_og-url')) { $meta .= '<meta property="og:url" content="' . html_encode($url) . '">' . "\n"; } if (getOption('htmlmeta_og-type')) { $meta .= '<meta property="og:type" content="' . $type . '">' . "\n"; } // Social network extras if (getOption('htmlmeta_name-pinterest')) { $meta .= '<meta name="pinterest" content="nopin">' . "\n"; } // dissalow users to pin images on Pinterest // Twitter card $twittername = getOption('htmlmeta_twittername'); if (getOption('htmlmeta_twittercard') || !empty($twittername)) { $meta .= '<meta property="twitter:creator" content="' . $twittername . '">' . "\n"; $meta .= '<meta property="twitter:site" content="' . $twittername . '">' . "\n"; $meta .= '<meta property="twitter:card" content="summary">' . "\n"; $meta .= '<meta property="twitter:title" content="' . $pagetitle . '">' . "\n"; $meta .= '<meta property="twitter:description" content="' . $desc . '">' . "\n"; if (!empty($thumb)) { $meta .= '<meta property="twitter:image" content="' . $thumb . '">' . "\n"; } } // Canonical url if (getOption('htmlmeta_canonical-url')) { $meta .= '<link rel="canonical" href="' . $canonicalurl . '">' . "\n"; if (METATAG_LOCALE_TYPE) { $langs = generateLanguageList(); if (count($langs) != 1) { foreach ($langs as $text => $lang) { $langcheck = zpFunctions::getLanguageText($lang, '-'); // for hreflang we need en-US if ($langcheck != $locale) { switch (METATAG_LOCALE_TYPE) { case 1: $altlink = seo_locale::localePath(true, $lang); break; case 2: $altlink = dynamic_locale::fullHostPath($lang); break; } switch ($_zp_gallery_page) { case 'index.php': $altlink .= '/'; break; case 'gallery.php': $altlink .= '/' . _PAGE_ . '/gallery'; break; case 'album.php': $altlink .= '/' . html_encode($_zp_current_album->name) . '/'; break; case 'image.php': $altlink .= '/' . html_encode($_zp_current_album->name) . '/' . html_encode($_zp_current_image->filename) . IM_SUFFIX; break; case 'news.php': if (function_exists("is_NewsArticle")) { if (is_NewsArticle()) { $altlink .= '/' . _NEWS_ . '/' . html_encode($_zp_current_zenpage_news->getTitlelink()); } else { if (is_NewsCategory()) { $altlink .= '/' . _NEWS_ . '/' . html_encode($_zp_current_category->getTitlelink()); } else { $altlink .= '/' . _NEWS_; } } } break; case 'pages.php': $altlink .= '/' . _PAGES_ . '/' . html_encode($_zp_current_zenpage_page->getTitlelink()); break; case 'archive.php': $altlink .= '/' . _ARCHIVE_; break; case 'search.php': $altlink .= '/' . _SEARCH_ . '/'; break; case 'contact.php': $altlink .= '/' . _CONTACT_ . '/'; break; default: // for all other possible none standard custom pages $altlink .= '/' . _PAGE_ . '/' . html_encode($pagetitle); break; } // switch //append page number if needed switch ($_zp_gallery_page) { case 'index.php': case 'album.php': if ($_zp_page != 1) { $altlink .= _PAGE_ . '/' . $_zp_page . '/'; } break; case 'gallery.php': case 'news.php': if ($_zp_page != 1) { $altlink .= '/' . $_zp_page; } break; } $meta .= '<link rel="alternate" hreflang="' . $langcheck . '" href="' . $altlink . '">' . "\n"; } // if lang } // foreach } // if count } // if option } // if canonical if (!empty($htmlmetatags_need_cache)) { $meta .= '<script type="text/javascript">' . "\n"; $meta .= 'var caches = ["' . implode('","', $htmlmetatags_need_cache) . '"];' . "\n"; $meta .= ' window.onload = function() { var index,value; for (index in caches) { value = caches[index]; $.ajax({ cache: false, type: "GET", url: value }); } } '; $meta .= '</script>' . "\n"; } zp_remove_filter('image_processor_uri', 'htmlmetatags::ipURI'); echo $meta; }
/** * Gets links to Zenpage news categories incl. pagination * * @return string */ function getSitemapZenpageNewsCategories() { global $_zp_zenpage, $sitemap_number; //TODO not splitted into several sitemaps yet if ($sitemap_number == 1) { $data = ''; $sitemap_locales = generateLanguageList(); $changefreq = getOption('sitemap_changefreq_newscats'); $newscats = $_zp_zenpage->getAllCategories(); if ($newscats) { $data .= sitemap_echonl('<?xml version="1.0" encoding="UTF-8"?>'); $data .= sitemap_echonl('<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'); foreach ($newscats as $newscat) { $catobj = new ZenpageCategory($newscat['titlelink']); if (!$catobj->isProtected()) { switch (SITEMAP_LOCALE_TYPE) { case 1: foreach ($sitemap_locales as $locale) { $url = seo_locale::localePath(true, $locale) . '/' . _CATEGORY_ . '/' . urlencode($catobj->getTitlelink()) . '/1'; $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); } break; case 2: foreach ($sitemap_locales as $locale) { $url = rewrite_path(_CATEGORY_ . '/' . urlencode($catobj->getTitlelink()) . '/1', '?p=news&category=' . urlencode($catobj->getTitlelink()) . '&page=1', dynamic_locale::fullHostPath($locale)); $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); } break; default: $url = rewrite_path(_CATEGORY_ . '/' . urlencode($catobj->getTitlelink()) . '/1', '?p=news&category=' . urlencode($catobj->getTitlelink()) . '&page=1', FULLWEBPATH); $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); break; } // getting pages for the categories /* if(!empty($articlesperpage)) { $zenpage_articles_per_page = sanitize_numeric($articlesperpage); } else { $zenpage_articles_per_page = ZP_ARTICLES_PER_PAGE; } */ $zenpage_articles_per_page = ZP_ARTICLES_PER_PAGE; $articlecount = count($catobj->getArticles()); $catpages = ceil($articlecount / $zenpage_articles_per_page); if ($catpages > 1) { for ($x = 2; $x <= $catpages; $x++) { switch (SITEMAP_LOCALE_TYPE) { case 1: foreach ($sitemap_locales as $locale) { $url = seo_locale::localePath(true, $locale) . '/' . _CATEGORY_ . '/' . urlencode($catobj->getTitlelink()) . '/' . $x; $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); } break; case 2: foreach ($sitemap_locales as $locale) { $url = rewrite_path(_CATEGORY_ . '/' . urlencode($catobj->getTitlelink()) . '/' . $x, '?p=news&category=' . urlencode($catobj->getTitlelink()) . '&page=' . $x, dynamic_locale::fullHostPath($locale)); $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); } break; default: $url = rewrite_path(_CATEGORY_ . '/' . urlencode($catobj->getTitlelink()) . '/' . $x, '?p=news&category=' . urlencode($catobj->getTitlelink()) . '&page=' . $x, FULLWEBPATH); $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); break; } } } } } $data .= sitemap_echonl('</urlset>'); // End off the <urlset> tag } return $data; } }
/** * prints a form for selecting a locale * The POST handling is by getUserLocale() called in functions.php * */ function printLanguageSelector($flags = NULL) { $localeOption = getOption('locale'); $languages = generateLanguageList(); if (isset($_REQUEST['locale'])) { $locale = sanitize($_REQUEST['locale']); if ($localeOption != $locale) { ?> <div class="errorbox"> <h2> <?php printf(gettext('<em>%s</em> is not available.'), html_encode($locale)); ?> <?php printf(gettext('The locale %s is not supported on your server.'), html_encode($locale)); ?> <br /> <?php echo gettext('You can use the <em>debug</em> plugin to see which locales your server supports.'); ?> </h2> </div> <?php } } if (is_null($flags)) { $flags = getOption('dynamic_locale_visual'); } if ($flags) { asort($languages); ?> <ul class="flags"> <?php $request = parse_url(getRequestURI()); $separator = '?'; if (isset($request['query'])) { $query = explode('&', $request['query']); $uri['query'] = ''; foreach ($query as $key => $str) { if (preg_match('/^locale\\s*=/', $str)) { unset($query[$key]); } } if (empty($query)) { unset($request['query']); } else { $request['query'] = implode('&', $query); $separator = '&'; } } $uri = $request['path']; if (isset($request['query'])) { $uri .= '?' . $request['query']; } foreach ($languages as $text => $lang) { ?> <li<?php if ($lang == $localeOption) { echo ' class="currentLanguage"'; } ?> > <?php switch (LOCALE_TYPE) { case 2: $path = dynamic_locale::fullHostPath($lang) . html_encode($uri); break; case 1: $path = seo_locale::localePath(false, $lang) . str_replace(WEBPATH, '', html_encode($uri)); break; default: $path = $uri . $separator . 'locale=' . $lang; break; } $flag = getLanguageFlag($lang); if ($lang != $localeOption) { ?> <a onclick="launchScript('<?php echo $path; ?> ', []);" > <?php } ?> <img src="<?php echo $flag; ?> " alt="<?php echo $text; ?> " title="<?php echo $text; ?> " /> <?php if ($lang != $localeOption) { ?> </a> <?php } ?> </li> <?php } ?> </ul> <?php } else { ?> <form action="#" method="post"> <input type="hidden" name="oldlocale" value="<?php echo getOption('locale'); ?> " /> <select id="dynamic-locale" class="languageselect" name="locale" onchange="this.form.submit()"> <?php foreach ($languages as $text => $lang) { echo '<option class="languageoption" value="' . html_encode($lang) . '"'; if ($lang == $localeOption) { echo ' selected="selected"'; } echo '>'; echo html_encode($text) . "</option>\n"; } ?> </select> </form> <?php } }
/** * prints a form for selecting a locale * The POST handling is by getUserLocale() called in functions.php * */ function printLanguageSelector($flags = NULL) { $languages = generateLanguageList(); if (isset($_REQUEST['locale'])) { $locale = sanitize($_REQUEST['locale']); if (getOption('locale') != $locale) { ?> <div class="errorbox"> <h2> <?php printf(gettext('<em>%s</em> is not available.'), html_encode($locale)); ?> <?php printf(gettext('The locale %s is not supported on your server.'), html_encode($locale)); ?> <br /> <?php echo gettext('See the troubleshooting guide on zenphoto.org for details.'); ?> </h2> </div> <?php } } if (is_null($flags)) { $flags = getOption('dynamic_locale_visual'); } if ($flags) { asort($languages); ?> <ul class="flags"> <?php $currentValue = getOption('locale'); $request = parse_url(getRequestURI()); $separator = '?'; if (isset($request['query'])) { $query = explode('&', $request['query']); $uri['query'] = ''; foreach ($query as $key => $str) { if (preg_match('/^locale\\s*=/', $str)) { unset($query[$key]); } } if (empty($query)) { unset($request['query']); } else { $request['query'] = implode('&', $query); $separator = '&'; } } $uri = $request['path']; if (isset($request['query'])) { $uri .= '?' . $request['query']; } foreach ($languages as $text => $lang) { ?> <li<?php if ($lang == $currentValue) { echo ' class="currentLanguage"'; } ?> > <?php if ($lang != $currentValue) { switch (LOCALE_TYPE) { case 2: ?> <a href="<?php echo dynamic_locale::fullHostPath($lang) . html_encode($uri); ?> " > <?php break; case 1: ?> <a href="<?php echo str_replace(WEBPATH, seo_locale::localePath(false, $lang), html_encode($uri)); ?> " > <?php break; default: ?> <a href="<?php echo $uri . $separator; ?> locale=<?php echo $lang; ?> " > <?php break; } } $flag = getLanguageFlag($lang); ?> <img src="<?php echo $flag; ?> " alt="<?php echo $text; ?> " title="<?php echo $text; ?> " /> <?php if ($lang != $currentValue) { ?> </a> <?php } ?> </li> <?php } ?> </ul> <?php } else { ?> <form action="#" method="post"> <input type="hidden" name="oldlocale" value="<?php echo getOption('locale'); ?> " /> <select id="dynamic-locale" class="languageselect" name="locale" onchange="this.form.submit()"> <?php $currentValue = getOption('locale'); foreach ($languages as $key => $item) { echo '<option class="languageoption" value="' . html_encode($item) . '"'; if ($item == $currentValue) { echo ' selected="selected"'; } echo ' >'; echo html_encode($key) . "</option>\n"; } ?> </select> </form> <?php } }
/** * Prints html meta data to be used in the <head> section of a page * */ static function getHTMLMetaData() { global $_zp_gallery, $_zp_page, $_zp_current_album, $_zp_current_image, $_zp_current_search, $_zp_current_article, $_zp_current_page, $_zp_gallery_page, $_zp_current_category, $_zp_authority, $_zp_conf_vars, $_myFavorites; $host = sanitize("http://" . $_SERVER['HTTP_HOST']); $url = $host . getRequestURI(); // Convert locale shorttag to allowed html meta format $locale_ = getUserLocale(); $locale = zpFunctions::getLanguageText($locale_, '-'); $canonicalurl = ''; // generate page title, get date $pagetitle = ""; // for gallery index setup below switch $date = strftime(DATE_FORMAT); // if we don't have a item date use current date $desc = getBareGalleryDesc(); $thumb = ''; if (getOption('htmlmeta_sitelogo')) { $thumb = getOption('htmlmeta_sitelogo'); } if (getOption('htmlmeta_og-image') || getOption('htmlmeta_twittercard')) { $ogimage_width = getOption('htmlmeta_ogimage_width'); $ogimage_height = getOption('htmlmeta_ogimage_height'); if (empty($ogimage_width)) { $ogimage_width = 1280; } if (empty($ogimage_height)) { $ogimage_height = 900; } $twittercard_type = 'summary'; } $type = 'article'; switch ($_zp_gallery_page) { case 'index.php': $desc = getBareGalleryDesc(); $canonicalurl = $host . $_zp_gallery->getLink($_zp_page); $type = 'website'; break; case 'album.php': case 'favorites.php': $pagetitle = getBareAlbumTitle() . " - "; $date = getAlbumDate(); $desc = getBareAlbumDesc(); $canonicalurl = $host . $_zp_current_album->getLink($_zp_page); if (getOption('htmlmeta_og-image') || getOption('htmlmeta_twittercard')) { $thumbimg = $_zp_current_album->getAlbumThumbImage(); getMaxSpaceContainer($ogimage_width, $ogimage_height, $thumbimg, false); $thumb = $host . html_encode(pathurlencode($thumbimg->getCustomImage(NULL, $ogimage_width, $ogimage_height, NULL, NULL, NULL, NULL, false, NULL))); $twittercard_type = 'summary_large_image'; } break; case 'image.php': $pagetitle = getBareImageTitle() . " (" . getBareAlbumTitle() . ") - "; $date = getImageDate(); $desc = getBareImageDesc(); $canonicalurl = $host . $_zp_current_image->getLink(); if (getOption('htmlmeta_og-image') || getOption('htmlmeta_twittercard')) { $thumb = $host . html_encode(pathurlencode(getCustomSizedImageMaxSpace($ogimage_width, $ogimage_height))); $twittercard_type = 'summary_large_image'; } break; case 'news.php': if (function_exists("is_NewsArticle")) { if (is_NewsArticle()) { $pagetitle = getBareNewsTitle() . " - "; $date = getNewsDate(); $desc = trim(getBare(getNewsContent())); $canonicalurl = $host . $_zp_current_article->getLink(); } else { if (is_NewsCategory()) { $pagetitle = $_zp_current_category->getTitlelink() . " - "; $date = strftime(DATE_FORMAT); $desc = trim(getBare($_zp_current_category->getDesc())); $canonicalurl = $host . $_zp_current_category->getLink($_zp_page); $type = 'category'; } else { $pagetitle = gettext('News') . " - "; $desc = ''; $canonicalurl = $host . getNewsPathNav($_zp_page); $type = 'website'; } } } break; case 'pages.php': $pagetitle = getBarePageTitle() . " - "; $date = getPageDate(); $desc = trim(getBare(getPageContent())); $canonicalurl = $host . $_zp_current_page->getLink(); break; default: // for all other possible static custom pages $custompage = stripSuffix($_zp_gallery_page); $standard = array('contact' => gettext('Contact'), 'register' => gettext('Register'), 'search' => gettext('Search'), 'archive' => gettext('Archive view'), 'password' => gettext('Password required')); if (is_object($_myFavorites)) { $standard['favorites'] = gettext('My favorites'); } if (array_key_exists($custompage, $standard)) { $pagetitle = $standard[$custompage] . " - "; } else { $pagetitle = $custompage . " - "; } $desc = ''; $canonicalurl = $host . getCustomPageURL($custompage); break; } // shorten desc to the allowed 200 characters if necesssary. $desc = html_encode(trim(substr(getBare($desc), 0, 160))); $pagetitle = $pagetitle . getBareGalleryTitle(); // get master admin $admin = $_zp_authority->getMasterUser(); $author = $admin->getName(); $meta = ''; if (getOption('htmlmeta_http-equiv-cache-control')) { $meta .= '<meta http-equiv="Cache-control" content="' . getOption("htmlmeta_cache_control") . '">' . "\n"; } if (getOption('htmlmeta_http-equiv-pragma')) { $meta .= '<meta http-equiv="pragma" content="' . getOption("htmlmeta_pragma") . '">' . "\n"; } if (getOption('htmlmeta_name-keywords')) { $meta .= '<meta name="keywords" content="' . htmlmetatags::getMetaKeywords() . '">' . "\n"; } if (getOption('htmlmeta_name-description')) { $meta .= '<meta name="description" content="' . $desc . '">' . "\n"; } if (getOption('htmlmeta_name-page-topic')) { $meta .= '<meta name="page-topic" content="' . $desc . '">' . "\n"; } if (getOption('htmlmeta_name-robots')) { $meta .= '<meta name="robots" content="' . getOption("htmlmeta_robots") . '">' . "\n"; } if (getOption('htmlmeta_name-publisher')) { $meta .= '<meta name="publisher" content="' . FULLWEBPATH . '">' . "\n"; } if (getOption('htmlmeta_name-creator')) { $meta .= '<meta name="creator" content="' . FULLWEBPATH . '">' . "\n"; } if (getOption('htmlmeta_name-author')) { $meta .= '<meta name="author" content="' . $author . '">' . "\n"; } if (getOption('htmlmeta_name-copyright')) { $meta .= '<meta name="copyright" content=" (c) ' . FULLWEBPATH . ' - ' . $author . '">' . "\n"; } if (getOption('htmlmeta_name-rights')) { $meta .= '<meta name="rights" content="' . $author . '">' . "\n"; } if (getOption('htmlmeta_name-generator')) { $meta .= '<meta name="generator" content="ZenPhoto20 ' . ZENPHOTO_VERSION . '">' . "\n"; } if (getOption('htmlmeta_name-revisit-after')) { $meta .= '<meta name="revisit-after" content="' . getOption("htmlmeta_revisit_after") . ' days">' . "\n"; } if (getOption('htmlmeta_name-expires')) { $expires = getOption("htmlmeta_expires"); if ($expires == (int) $expires) { $expires = preg_replace('|\\s\\-\\d+|', '', date('r', time() + $expires)) . ' GMT'; } $meta .= '<meta name="expires" content="' . $expires . '">' . "\n"; } // OpenGraph meta if (getOption('htmlmeta_opengraph')) { $meta .= '<meta property="og:title" content="' . $pagetitle . '">' . "\n"; if (!empty($thumb)) { $meta .= '<meta property="og:image" content="' . $thumb . '">' . "\n"; } $meta .= '<meta property="og:description" content="' . $desc . '">' . "\n"; $meta .= '<meta property="og:url" content="' . html_encode($url) . '">' . "\n"; $meta .= '<meta property="og:type" content="' . $type . '">' . "\n"; } // Social network extras if (getOption('htmlmeta_name-pinterest')) { $meta .= '<meta name="pinterest" content="nopin">' . "\n"; } // dissalow users to pin images on Pinterest // Twitter card $twittername = getOption('htmlmeta_twittername'); if (getOption('htmlmeta_twittercard') || !empty($twittername)) { $meta .= '<meta name="twitter:creator" content="' . $twittername . '">' . "\n"; $meta .= '<meta name="twitter:site" content="' . $twittername . '">' . "\n"; $meta .= '<meta name="twitter:card" content="' . $twittercard_type . '">' . "\n"; $meta .= '<meta name="twitter:title" content="' . $pagetitle . '">' . "\n"; $meta .= '<meta name="twitter:description" content="' . $desc . '">' . "\n"; if (!empty($thumb)) { $meta .= '<meta name="twitter:image" content="' . $thumb . '">' . "\n"; } } // Canonical url if (getOption('htmlmeta_canonical-url')) { $meta .= '<link rel="canonical" href="' . $canonicalurl . '">' . "\n"; if (METATAG_LOCALE_TYPE) { $langs = generateLanguageList(); if (count($langs) != 1) { if (METATAG_LOCALE_TYPE == 1) { $locallink = seo_locale::localePath(false, $locale_); } else { $locallink = ''; } foreach ($langs as $text => $lang) { $langcheck = zpFunctions::getLanguageText($lang, '-'); // for hreflang we need en-US if ($langcheck != $locale) { if (METATAG_LOCALE_TYPE == 1) { $altlink = seo_locale::localePath(true, $lang); } else { $altlink = dynamic_locale::fullHostPath($lang); } switch ($_zp_gallery_page) { case 'index.php': $altlink .= str_replace($locallink, '', $_zp_gallery->getLink($_zp_page)); break; case 'album.php': case 'favorites.php': $altlink .= str_replace($locallink, '', $_zp_current_album->getLink($_zp_page)); break; case 'image.php': $altlink .= str_replace($locallink, '', $_zp_current_image->getLink()); break; case 'news.php': if (function_exists("is_NewsArticle")) { if (is_NewsArticle()) { $altlink .= str_replace($locallink, '', $_zp_current_article->getLink()); } else { if (is_NewsCategory()) { $altlink .= str_replace($locallink, '', $_zp_current_category->getLink($_zp_page)); } else { $altlink .= getNewsPathNav($_zp_page); } } } break; case 'pages.php': $altlink .= str_replace($locallink, '', $_zp_current_page->getLink()); break; case 'archive.php': $altlink .= getCustomPageURL('archive'); break; case 'search.php': $searchwords = $_zp_current_search->codifySearchString(); $searchdate = $_zp_current_search->getSearchDate(); $searchfields = $_zp_current_search->getSearchFields(true); $searchpagepath = getSearchURL($searchwords, $searchdate, $searchfields, $_zp_page, array('albums' => $_zp_current_search->getAlbumList())); $altlink .= $searchpagepath; break; case 'contact.php': $altlink .= getCustomPageURL('contact'); break; default: // for all other possible none standard custom pages $altlink .= getCustomPageURL($pagetitle); break; } // switch $meta .= '<link rel="alternate" hreflang="' . $langcheck . '" href="' . html_encode($altlink) . '">' . "\n"; } // if lang } // foreach } // if count } // if option } // if canonical echo $meta; }
/** * Returns either the rewrite path or the plain, non-mod_rewrite path * based on the mod_rewrite option. * The given paths can start /with or without a slash, it doesn't matter. * * IDEA: this function could be used to specially escape items in * the rewrite chain, like the # character (a bug in mod_rewrite). * * This is here because it's used in both template-functions.php and in the classes. * @param string $rewrite is the path to return if rewrite is enabled. (eg: "/myalbum") * @param string $plain is the path if rewrite is disabled (eg: "/?album=myalbum") * @param bool $webpath host path to be prefixed. If "false" is passed you will get a localized "WEBPATH" * @return string */ function rewrite_path($rewrite, $plain, $webpath = NULL) { if (is_null($webpath)) { if (defined('LOCALE_TYPE') && LOCALE_TYPE == 1) { $webpath = seo_locale::localePath(); } else { $webpath = WEBPATH; } } if (MOD_REWRITE) { $path = $rewrite; } else { $path = $plain; } if ($path && $path[0] == "/") { $path = substr($path, 1); } return $webpath . "/" . $path; }
/** * * Returns a tiny URL to the object * @param $obj object */ static function getURL($obj, $page = NULL) { $asoc = array_flip(self::$tableAsoc); $tiny = $obj->getID() << 3 | $asoc[$obj->table]; if (MOD_REWRITE) { if ($page > 1) { $tiny .= '/' . $page; } if (class_exists('seo_locale')) { return seo_locale::localePath(false) . '/' . _TINY_ . $tiny; } else { return WEBPATH . '/' . _TINY_ . $tiny; } } else { if ($page > 1) { $tiny .= '&page=' . $page; } return WEBPATH . '/index.php?p=' . $tiny . '&t'; } }
/** * Gets links to Zenpage news categories incl. pagination * * @return string */ function getSitemapNewsCategories() { global $_zp_CMS, $sitemap_number; //TODO not splitted into several sitemaps yet if ($sitemap_number == 1) { $data = ''; $sitemap_locales = generateLanguageList(); $changefreq = getOption('sitemap_changefreq_newscats'); $newscats = $_zp_CMS->getAllCategories(); if ($newscats) { $data .= sitemap_echonl('<?xml version="1.0" encoding="UTF-8"?>'); $data .= sitemap_echonl('<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'); foreach ($newscats as $newscat) { $catobj = newCategory($newscat['titlelink']); if (!$catobj->isProtected()) { $base = $catobj->getLink(); switch (SITEMAP_LOCALE_TYPE) { case 1: foreach ($sitemap_locales as $locale) { $url = str_replace(WEBPATH, seo_locale::localePath(true, $locale), $base); $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); } break; case 2: foreach ($sitemap_locales as $locale) { $url = dynamic_locale::fullHostPath($locale) . $base; $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); } break; default: $url = FULLHOSTPATH . $base; $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); break; } // getting pages for the categories $zenpage_articles_per_page = ZP_ARTICLES_PER_PAGE; $articlecount = count($catobj->getArticles()); $catpages = ceil($articlecount / $zenpage_articles_per_page); if ($catpages > 1) { for ($x = 2; $x <= $catpages; $x++) { $base = $catobj->getLink($x); switch (SITEMAP_LOCALE_TYPE) { case 1: foreach ($sitemap_locales as $locale) { $url = str_replace(WEBPATH, seo_locale::localePath(true, $locale), $base); $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); } break; case 2: foreach ($sitemap_locales as $locale) { $url = dynamic_locale::fullHostPath($locale) . $base; $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); } break; default: $url = FULLHOSTPATH . $base; $data .= sitemap_echonl("\t<url>\n\t\t<loc>" . $url . "</loc>\n\t\t<changefreq>" . $changefreq . "</changefreq>\n\t\t<priority>0.9</priority>\n\t</url>"); break; } } } } } $data .= sitemap_echonl('</urlset>'); // End off the <urlset> tag } return $data; } }