416 lines
14 KiB
PHP
416 lines
14 KiB
PHP
<?php
|
|
############################################################
|
|
# PODCAST GENERATOR
|
|
#
|
|
# Created by Alberto Betella
|
|
# http://www.podcastgenerator.net
|
|
#
|
|
# This is Free Software released under the GNU/GPL License.
|
|
############################################################
|
|
|
|
//THIS FILE IS SIMILAR to themes.php and is used instead of it when we
|
|
//have a new theme for version 2.0+
|
|
//The old themes.php is kept for retro-compatibility with old themes
|
|
//The choice between themes.php and templates.php is made in index.php
|
|
//and depends on the theme.xml file (a file that must be included
|
|
//in the main folder of each new theme for PG 2.0+
|
|
|
|
|
|
/*Common CSS classes to add to a PG theme:
|
|
|
|
active (menu active)
|
|
nav-header (titles in sidebar)
|
|
|
|
navbar-link (links in the navbar (e.g. log out)
|
|
|
|
*/
|
|
|
|
########### Security code, avoids cross-site scripting (Register Globals ON)
|
|
if (isset($_REQUEST['GLOBALS']) OR isset($_REQUEST['absoluteurl']) OR isset($_REQUEST['amilogged']) OR isset($_REQUEST['theme_path'])) { exit; }
|
|
########### End
|
|
|
|
|
|
if (isUserLogged()) {
|
|
$loginmenu = _("Hello").' '.$username.' (<a href="?p=admin" class="navbar-link">'._("Admin").'</a> - <a href="?p=admin&action=logout" class="navbar-link">'._("Log out").'</a>)';
|
|
} else {
|
|
//standard login menu item (replaced with the authenticated one if logged in
|
|
$loginmenu = '<a href="?p=admin" class="navbar-link">'._("Admin").'</a>';
|
|
}
|
|
|
|
if(($theme_file_contents = file_get_contents($theme_path."index.htm")) === FALSE) {
|
|
echo "<p class=\"error\">"._("Failed to open theme file")."</p>";
|
|
exit;
|
|
}
|
|
|
|
#Replace URLs
|
|
$theme_file_contents = str_replace("href=\"style/", "href=\"".$theme_path."style/", $theme_file_contents); // Replace CSS location
|
|
|
|
$theme_file_contents = str_replace("src=\"img/", "src=\"".$theme_path."img/", $theme_file_contents); // Replace image location
|
|
|
|
$theme_file_contents = str_replace("src=\"js/", "src=\"".$theme_path."js/", $theme_file_contents); // Replace js location
|
|
|
|
$theme_file_contents = str_replace("<param name=movie value=\"", "<param name=movie value=\"".$theme_path, $theme_file_contents); // Replace flash objects IE
|
|
|
|
$theme_file_contents = str_replace("<embed src=\"", "<embed src=\"".$theme_path, $theme_file_contents); // Replace flash objects embed
|
|
|
|
|
|
|
|
####### INCLUDE PHP FUNCTIONS SPECIFIED IN THE THEME (functions.php)
|
|
if (file_exists($theme_path."functions.php")) {
|
|
include ($theme_path."functions.php");
|
|
}
|
|
####### END INCLUDE PHP FUNCTIONS
|
|
|
|
|
|
#########################
|
|
# SET PAGE TITLE
|
|
|
|
$page_title_prefix = NULL;
|
|
|
|
//Show category name
|
|
if (isset($_GET['cat']) AND $_GET['cat'] != "all" AND !isset($_GET['action'])) {
|
|
$existingCategories = readPodcastCategories ($absoluteurl);
|
|
if (isset($existingCategories[avoidXSS($_GET['cat'])])) {
|
|
//URL depuration (avoidXSS)
|
|
$page_title_prefix .= $existingCategories[avoidXSS($_GET['cat'])]." - ";
|
|
}
|
|
}
|
|
//Show a generic "All episodes"
|
|
elseif (isset($_GET['p']) AND $_GET['p']=="archive") {
|
|
$page_title_prefix .= _("All Episodes")." - ";
|
|
}
|
|
|
|
|
|
//if is single episode, add title of episode to title of page
|
|
elseif (isset($_GET['name'])) {
|
|
|
|
$titleOfEpisode = showSingleEpisode(avoidXSS($_GET['name']),1); //the last parameter (1) requires just the title to that function
|
|
|
|
if ($titleOfEpisode != NULL) $page_title_prefix .= "$titleOfEpisode - ";
|
|
|
|
}
|
|
|
|
|
|
$page_title = $page_title_prefix.$podcast_title;
|
|
|
|
$theme_file_contents = str_replace("-----PG_PAGETITLE-----", $page_title, $theme_file_contents);
|
|
|
|
|
|
include($absoluteurl."core/admin/loadjavascripts.php");
|
|
|
|
$theme_file_contents = str_replace("-----PG_JSLOAD-----", $loadjavascripts, $theme_file_contents);
|
|
|
|
###############################
|
|
###############################
|
|
|
|
|
|
|
|
//LOAD A CSS WITH CLASSES COMMON TO ALL THE THEMES
|
|
$commonCSSurl = '<link href="themes/common.css" rel="stylesheet">';
|
|
//ADDING FONT AWESOME, FOR AWESOME ICONS
|
|
$commonCSSurl .= '<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">';
|
|
$theme_file_contents = str_replace("-----PG_COMMONCSSLOAD-----", $commonCSSurl, $theme_file_contents);
|
|
|
|
|
|
|
|
|
|
|
|
// SET PODCAST FEED custom or default URL
|
|
if (isset($feed_URL_replace) AND $feed_URL_replace != "") {
|
|
$podcastFeedURL = $feed_URL_replace;
|
|
$podcastFeedURLiTunes = str_replace("http://", "itpc://", $podcastFeedURL);
|
|
} else {
|
|
$podcastFeedURL = $url.$feed_dir.'feed.xml';
|
|
$podcastFeedURLiTunes = str_replace("http://", "itpc://", $podcastFeedURL);
|
|
}
|
|
|
|
// If a particular URL is specified for iTunes (e.g. direct link to store) use it
|
|
if (isset($feed_iTunes_URL_replace) AND $feed_iTunes_URL_replace != "") {
|
|
$podcastFeedURLiTunes = $feed_iTunes_URL_replace;
|
|
}
|
|
|
|
$rightboxcontent = '<div class="rightbox">
|
|
|
|
<span class="nav-header">'.$podcast_title.' '._("feed").'</span>
|
|
<p>'._("Copy the feed link and paste it into your aggregator").'<br /><br />
|
|
<a href="'.$podcastFeedURL.'"><img src="rss-podcast.gif" alt="'._("Copy the feed link and paste it into your aggregator").'" title="'._("Copy the feed link and paste it into your aggregator").'" border="0" /></a>
|
|
</p>
|
|
<p>'._("Subscribe to this podcast with iTunes").'<br /><br /><a href="'.$podcastFeedURLiTunes.'"><img src="podcast_itunes.jpg" alt="'._("Subscribe to this podcast with iTunes").'" title="'._("Subscribe to this podcast with iTunes").'" border="0" /></a></p>
|
|
|
|
|
|
</div>';
|
|
|
|
# If you are logged show right boxes
|
|
$adminrightboxcontent = NULL;
|
|
if(isUserLogged()) { //if admin page
|
|
|
|
//show donation box after 3 days from installation
|
|
if (isset($first_installation) and time()-$first_installation>259200) {//259200 seconds = 3 days
|
|
|
|
if (isset($author_name) and $author_name != NULL) $nameToAddressUser = $author_name.", ";
|
|
else $nameToAddressUser = NULL;
|
|
|
|
$adminrightboxcontent .= '
|
|
<div class="rightbox">
|
|
<span class="nav-header">'._("Support Podcast Generator").'</span>
|
|
<p>'.$nameToAddressUser._("if you like Podcast Generator please consider").' <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K6KLDE3KPP6VN" target="_blank"><strong>'._(" making a donation").'</strong></a>.
|
|
'._("No matter the amount you donate, your contribution will support future development and bug fixes. Thank you!").'</p>
|
|
<p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K6KLDE3KPP6VN" target="_blank">
|
|
<i class="fa fa-cc-paypal fa-2x"></i> <i class="fa fa-cc-visa fa-2x"></i> <i class="fa fa-cc-mastercard fa-2x"></i> <i class="fa fa-cc-amex fa-2x"></i>
|
|
</a>
|
|
</div>
|
|
';
|
|
}
|
|
|
|
|
|
//show PG box
|
|
$adminrightboxcontent .= '
|
|
<div class="rightbox">
|
|
<span class="nav-header">'._("Help").'</span>
|
|
<ul>
|
|
<li><a href="?p=admin&do=serverinfo">'._("Your server configuration").'</a></li>
|
|
<li><a href="http://www.podcastgenerator.net/checkforupdates.php?v='.$podcastgen_version.'" target="_blank">'._("Check for updates").'</a></li>
|
|
<li><a href="http://www.podcastgenerator.net/documentation/#faq?ref=local-admin" target="_blank">'._("Read Documentation").'</a></li>
|
|
<li><a href="http://www.podcastgenerator.net/support/?ref=local-admin" target="_blank">'._("Get Support").'</a></li>
|
|
</ul>
|
|
</div>
|
|
';
|
|
|
|
}
|
|
|
|
$theme_file_contents = str_replace("-----PG_RIGHTBOX-----", $rightboxcontent, $theme_file_contents);
|
|
|
|
$theme_file_contents = str_replace("-----PG2_ADMINRIGHTBOX-----", $adminrightboxcontent, $theme_file_contents);
|
|
|
|
|
|
# SET RIGHT OPTIONAL BOX ("freebox")
|
|
|
|
$freeboxcontent = NULL;
|
|
if ($freebox == "yes") { //if admin is logged do not display freebox - and freebox is enabled
|
|
|
|
if(file_exists($absoluteurl."freebox-content.txt")){
|
|
|
|
$freeboxcontenttodisplay = file_get_contents($absoluteurl."freebox-content.txt");
|
|
|
|
$freeboxcontent = '<div class="rightbox">
|
|
'.$freeboxcontenttodisplay.'
|
|
</div>';
|
|
}
|
|
|
|
$theme_file_contents = str_replace("-----PG_FREEBOX-----", $freeboxcontent, $theme_file_contents);
|
|
|
|
} else {
|
|
|
|
$freeboxcontent = NULL;
|
|
|
|
$theme_file_contents = str_replace("-----PG_FREEBOX-----", $freeboxcontent, $theme_file_contents);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Othere Theme elements replacing
|
|
$theme_file_contents = str_replace("-----PG_MAINBODY-----", $PG_mainbody, $theme_file_contents);
|
|
|
|
$theme_file_contents = str_replace("-----PG_PAGECHARSET-----", $feed_encoding, $theme_file_contents);
|
|
|
|
$theme_file_contents = str_replace("-----PG_PODCASTTITLE-----", $podcast_title, $theme_file_contents);
|
|
|
|
$theme_file_contents = str_replace("-----PG_PODCASTSUBTITLE-----", $podcast_subtitle, $theme_file_contents);
|
|
|
|
$theme_file_contents = str_replace("-----PG_PODCASTDESC-----", $podcast_description, $theme_file_contents);
|
|
|
|
|
|
$theme_file_contents = str_replace("-----PG2_URLRSSFEED-----", $podcastFeedURL, $theme_file_contents);
|
|
|
|
$theme_file_contents = str_replace("-----PG2_URLFORITUNES-----", $podcastFeedURLiTunes, $theme_file_contents);
|
|
|
|
|
|
|
|
#### MENU TOP
|
|
// Replace menu top (class active assigned to the active menu)
|
|
|
|
//home button
|
|
$contentmenuhome = '<li';
|
|
if (isset($_GET['p']) and $_GET['p'] == "home") $contentmenuhome .= ' class="active"';
|
|
$contentmenuhome .= '><a href="?p=home">'._("Home").'</a></li>';
|
|
|
|
$theme_file_contents = str_replace("-----PG_MENUHOME-----", $contentmenuhome, $theme_file_contents);
|
|
|
|
// end home button
|
|
|
|
|
|
|
|
|
|
//archive button
|
|
$contentmenuarchive = NULL; //DEFINE VARIABLE
|
|
|
|
|
|
if ($categoriesenabled == "yes") { //if categories are enabled
|
|
|
|
$contentmenuarchive .= '
|
|
<li class="dropdown">
|
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">'._("Archive").' <b class="caret"></b></a>
|
|
<ul class="dropdown-menu">';
|
|
|
|
|
|
// READ THE CATEGORIES
|
|
$existingCategories = readPodcastCategories ($absoluteurl);
|
|
//var_dump($existingCategories); //Debug
|
|
|
|
ksort($existingCategories); //sort array by key alphabetically
|
|
|
|
for ($i = 0; $i < count($existingCategories); $i++) {
|
|
$key=key($existingCategories);
|
|
$val=$existingCategories[$key];
|
|
if ($val<> ' ') {
|
|
$contentmenuarchive .= '<li><a href="?p=archive&cat='.$key.'">'.$val.'</a></li>';
|
|
}
|
|
next($existingCategories);
|
|
}
|
|
// END - READ THE CATEGORIES
|
|
|
|
$contentmenuarchive .= '
|
|
<li class="divider"></li>
|
|
<li><a href="?p=archive&cat=all">'._("All Episodes").'</a></li>
|
|
</ul></li>';
|
|
|
|
|
|
} else {
|
|
$contentmenuarchive = '<li';
|
|
if (isset($_GET['p']) and $_GET['p'] == "archive") $contentmenuarchive .= ' class="active"';
|
|
$contentmenuarchive .= '><a href="?p=archive">'._("All Episodes").'</a></li>';
|
|
}
|
|
|
|
|
|
|
|
$theme_file_contents = str_replace("-----PG_MENUARCHIVE-----", $contentmenuarchive, $theme_file_contents);
|
|
|
|
// end home button
|
|
|
|
|
|
|
|
// $theme_file_contents = str_replace("-----PG_MENUARCHIVE-----", _("Podcast Archive"), $theme_file_contents);
|
|
|
|
|
|
|
|
$theme_file_contents = str_replace("-----PG_MENUADMIN-----", $loginmenu, $theme_file_contents);
|
|
|
|
#FOOTER
|
|
|
|
$definefooter = _("Powered by").' <a href="http://www.podcastgenerator.net" title="'._("Podcast Generator")._(", an open source podcast publishing solution").'">'._("Podcast Generator").'</a>'._(", an open source podcast publishing solution");
|
|
|
|
$theme_file_contents = str_replace("-----PG_FOOTER-----", $definefooter, $theme_file_contents);
|
|
|
|
|
|
#########################
|
|
# META TAGS AND FEED LINK
|
|
|
|
//meta tags
|
|
//new meta tags HTML5 - deleted the obsolete
|
|
$metatagstoreplace = '
|
|
<meta name="Generator" content="Podcast Generator '.$podcastgen_version.'" />
|
|
<meta name="Author" content="'.depuratecontent($author_name).'" />
|
|
';
|
|
|
|
if (isset($_GET['p']) and $_GET['p'] == "admin" and isset($_GET['do']) and $_GET['do'] == "itunesimg") { // no cache in itunes image admin page
|
|
|
|
$metatagstoreplace .= '<meta http-equiv="expires" content="0" />
|
|
';
|
|
}
|
|
|
|
|
|
# define META KEYWORDS
|
|
|
|
// on single episode page (permalink), use itunes keywords and episode description as meta tags...
|
|
if (isset($_GET['p']) AND $_GET['p']=="episode" AND isset($episode_present) AND $episode_present == "yes") {
|
|
if ($text_keywordspg != NULL) { // ...if keywords exist
|
|
$metatagstoreplace .= '<meta name="Keywords" content="'.depuratecontent($text_keywordspg).'" />
|
|
';
|
|
}
|
|
$metatagstoreplace .= '<meta name="Description" content="'.depuratecontent($text_shortdesc).'" />
|
|
'; // use episode short description
|
|
}
|
|
else { // if not permalink page, use podcast general description as meta tag
|
|
$metatagstoreplace .= '<meta name="Description" content="'.depuratecontent($podcast_description).'" />
|
|
';
|
|
|
|
}
|
|
|
|
// on the home page (recent_list.php) use keywords of the most recent episode
|
|
if (isset($assignmetakeywords) AND $assignmetakeywords != NULL) { // the variable $assignmetakeywords is assigned in recent_list.php
|
|
$metatagstoreplace .= '<meta name="Keywords" content="'.depuratecontent($assignmetakeywords).'" />
|
|
';
|
|
}
|
|
|
|
|
|
// general XML feed of the podcast
|
|
$metatagstoreplace .= '
|
|
<link href="'.$podcastFeedURL.'" rel="alternate" type="application/rss+xml" title="'.$podcast_title.' RSS" />';
|
|
|
|
|
|
|
|
//CUSTOMIZE THE PAGES DEDICATED TO SINGLE EPISODES (with dedicated meta tags to increase SEO)
|
|
|
|
//reconstruct the full URL of the episode
|
|
|
|
if (isset($_GET['name'])) {
|
|
|
|
$episodeURLreconstructed = $url.'?name='.avoidXSS($_GET['name']);
|
|
|
|
// then ADD SOME OPEN GRAPH META TAGS
|
|
$metatagstoreplace .= '
|
|
<meta property="og:title" content="'.$titleOfEpisode.' « '.$podcast_title.'"/>
|
|
<meta property="og:url" content="'.$episodeURLreconstructed.'"/>
|
|
';
|
|
|
|
// and the canonical link
|
|
$metatagstoreplace .= '
|
|
<link rel="canonical" href="'.$episodeURLreconstructed.'" />
|
|
';
|
|
}
|
|
|
|
else { //IF IS HOME PAGE
|
|
|
|
$metatagstoreplace .= '
|
|
<meta property="og:title" content="'.$podcast_title.'"/>
|
|
<meta property="og:url" content="'.$url.'"/>
|
|
<meta property="og:image" content="'.$url.$img_dir.'itunes_image.jpg"/>
|
|
';
|
|
|
|
// and the canonical link
|
|
$metatagstoreplace .= '
|
|
<link rel="canonical" href="'.$url.'" />
|
|
';
|
|
}
|
|
|
|
|
|
$theme_file_contents = str_replace("-----PG_METATAGS-----", $metatagstoreplace, $theme_file_contents);
|
|
|
|
# END META TAGS DEFINITION
|
|
#########################
|
|
|
|
|
|
|
|
|
|
|
|
//INCLUDE LOADING INDICATOR IN ALL THE PAGES
|
|
//The indicator is included in all the pages just before closing the tag </html> so we are sure it is outside others relative containers (e.g. bootstrap theme). Otherwise it would be displayed relative to the main container, not to the body
|
|
|
|
if (isset($_GET['p']) AND $_GET['p']=="admin") { //all admin pages included login
|
|
|
|
//NB the closing body tag has been added below!
|
|
$loading_indicator_code = '
|
|
<div id="status_notification">Uploading...</div>
|
|
</body>
|
|
';
|
|
|
|
$theme_file_contents = str_replace("</body>", $loading_indicator_code, $theme_file_contents);
|
|
|
|
}
|
|
|
|
//END - INCLUDE LOADING INDICATOR IN ALL THE PAGES
|
|
|
|
?>
|