################################################# # podblogger 0.5 # # author: Christian Rotzoll # # co author: Hagen Toennies # # # # christian.rotzoll@medien.uni-weimar.de # # Doku unter http://www.rotzoll.de/podblogger # ################################################# # ADMINBEREICH-Script # ################################################# /** * Needed files: * * require('include/funktions_sammlung.inc.php'); * require('include/bbcode.inc.php'); * require('include/LogFile.class.php'); * require('include/smarty/Smarty.class.php'); * require('include/ID3v1x.class.php'); * require('include/article.class.php'); * require('include/layout.class.php'); * require('include/podbloggerservices.inc.php'); * require('include/ticketmanager.inc.php'); * require('include/audiomailimport.class.inc.php'); */ ini_set( 'include_path', ini_get( 'include_path' ) . PATH_SEPARATOR . '/include' ); require_once('include/funktions_sammlung.inc.php'); require_once('include/bbcode.inc.php'); require_once('include/LogFile.class.php'); require_once('include/smarty/Smarty.class.php'); require_once('include/ID3v1x.class.php'); require_once('include/article.class.php'); require_once('include/layout.class.php'); require_once('include/podbloggerservices.inc.php'); require_once('include/ticketmanager.inc.php'); require_once('include/audiomailimport.class.inc.php'); require_once("include/testServerPath.inc.php"); // starting the php-session // because there is stored if the user is ADMIN or not session_start(); # security access on article if ((isset($RESTRICTED_ACCESS)) && ($RESTRICTED_ACCESS=="YES") ) { // check if server is able to provide dynamic access to files require_once("include/testServerPath.inc.php"); if (testServerPath()) { // make sure that directory publicData is protected if (!file_exists("publicData/.htaccess")) { @copy("podbloggerData/.htaccess","publicData/.htaccess"); } } else { $RESTRICTED_ACCESS="disabled"; $GLOBALS['reply_on_admin_menu']="".get_lang("RESTRICTED_ACCESS_NOT_WORKING").""; } } else { if (file_exists("publicData/.htaccess")) { @unlink("publicData/.htaccess"); } } if (!isset($_SESSION['admin'])) { $_SESSION['admin'] = "notADMIN"; } // try to read the action parameter if (issetPostGet('aktion')) {$aktion=getPostGetText('aktion');} else {$aktion="";} // ## Quickdeletecode - AKTION ## // the quickdelete code allows to delete comments an trackbacks with a hyperlink // and without ADMIN-LogIn.Note the comment musst be younger than 3 days if ($aktion=="commentQuickDelete") { if (issetPostGet('articleID')) {$articleID=getPostGetText('articleID');} else {die("FEHLER: Parameter fehlt. / parameter is missing");} if (issetPostGet('commentID')) {$commentID=getPostGetText('commentID');} else {die("FEHLER: Parameter fehlt. / parameter is missing");} if (issetPostGet('quickDeleteCode')) {$quickDeleteCode=getPostGetText('quickDeleteCode');} else {die("FEHLER: Parameter fehlt. / parameter is missing");} $deleted = FALSE; if (file_exists("publicData/".$articleID.".article")) { $artikel = article::loadArticleFromFile("publicData/".$articleID.".article"); if ($obj = $artikel->getCommentByTimeID($commentID)) { $articleTitle = $artikel->getTitle(); $commentAuthor = $obj->getAuthorName(); $deleted = $artikel->tryQuickDeleteComment($commentID, $quickDeleteCode); $artikel->save("publicData"); print ""; } else {print "";} } else {print "";} ?>
".$artikel->getCategory().": '".$artikel->getTitle()."' | ||
| ".get_lang('file').": | ||
| "; $space=FALSE;
foreach ($artikel->getAllAppendantFiles() as $file)
{
if ($space) {print " ";} else {$space=TRUE;} print "publicData/".$file." (ca. ".$size."MB)"; if (!file_exists("publicData/".$file)) {print " !!not found!!";} } print " | ||
| ".get_lang('description')." | ||
| ". bbcode_inc::renderBBCode($artikel->getDescription()). " | ||
| ".get_lang('admin_menu_moreinfo')." | ||
| ".get_lang('date').": ".date("j.n.y - H:i",$artikel->getUnixTime())." id:".$artikel->getID();
if ( (strlen($artikel->getAuthorName()) > 2) || (strlen($artikel->getAuthorMail()) > 2)) print " ".get_lang('author').": ".$artikel->getAuthorName()." / ".$artikel->getAuthorMail(); if (strlen($artikel->getAuthorXtra()) > 2) print ", ".$artikel->getAuthorXtra(); // if necessary.show comments if ( $artikel->gotComments() ) { print " | ||
| ".get_lang('comments').":"; print " | ||
";
foreach ($artikel->getComments() as $comment)
{
// check if comment is younger than 3 days
if ($comment->getPublishedUnixtime()>(time()-(3*24*60*60))) {$neu = TRUE;}
else {$neu = FALSE;}
print "
"; } } print " |
"); } $host = $url_data['host']; // prime the data $blogname = $GLOBALS['PODCAST_NAME']; $title = $artikel->getTitle(); $link = "http://".HTTP_BASISADRESSE."index.php?permalink=".$artikel->getID(); $excerpt = ""; // no support in this podbloggerversion (excerpt is optional in th trackbacks spec) $data = "title=".urlencode($title)."&url=".urlencode($link)."&excerpt=".urlencode($excerpt)."&blog_name=".urlencode($blogname); // send trackback Ping // http://unblogbar.com/weblog/262/trackback-mit-php-realisieren/ $fp = @fsockopen($host, 80); @fputs($fp, "POST ".$trackback_url." HTTP/1.1\r\n"); @fputs($fp, "Host: ".$host."\r\n"); @fputs($fp, "Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n"); @fputs($fp, "Content-length: ".strlen($data)."\r\n"); @fputs($fp, "Connection: close\r\n\r\n"); @fputs($fp, $data); @fclose($fp); print("
");
}
else
{
die("ERROR: Unvalid value of parameter 'schritt'.");
}
exit();
}
//dowload a audio file in the admin section from the save upload-data folder
// ----------------------------------------------------------------------------
else if ($aktion == "download")
{
if (issetPostGet('dat')) {$dat=getPostGetText('dat');}
else {die("FEHLER: Parameter dat fehlt.");}
$artikel = article::loadArticleFromFile('uploadData/'.$dat);
$dat = $artikel->getFile();
//cease Header for download
if (getDateiEndung($dat) == "mp3") {header("Content-type: audio/mpeg");}
else if (getDateiEndung($dat) == "ogg") {header("Content-type: audio");}
else if (getDateiEndung($dat) == "avi") {header("Content-type: video/x-msvideo");}
else if (getDateiEndung($dat) == "mov") {header("Content-type: video/quicktime");}
else {header("Content-type: audio");}
header("Content-Disposition: attachment; filename=".$dat);
// the original file
readfile('uploadData/'.$dat);
}
// ------ delete files
// -------------------------------------------------
else if ($aktion == "delete")
{
if (issetPostGet('dat')) {$dat=getPostGetText('dat');}
else {die("FEHLER: Parameter dat fehlt. / parameter is missing");}
if (issetPostGet('verzeichnis')) {$verzeichnis=getPostGetText('verzeichnis');}
else {die("FEHLER: Parameter verzeichnis fehlt./ parameter 'verzeichnis' is missing");}
// see function at the end of this file
private_delete_article($verzeichnis.'/'.$dat);
}
// --- edit article informations
// -------------------------------------------------
else if ($aktion == "edit")
{
if (issetPostGet('dat')) {$dat=getPostGetText('dat');}
else {die("FEHLER: Parameter dat fehlt. / parameter 'dat' is missing");}
if (issetPostGet('verzeichnis')) {$verzeichnis=getPostGetText('verzeichnis');}
else {die("FEHLER: Parameter verzeichnis fehlt. / parameter 'verzeichnis' is missing");}
if (issetPostGet('schritt')) {$schritt=getPostGetInt('schritt');}
else {die("FEHLER: Parameter schritt fehlt. / parameter 'schritt' is missing");}
if ($schritt==1)
{
// 1.display the edit site with SMARTY
// instance and configure a new SMARTY Template data object
$smarty = new Smarty;
$smarty->template_dir = 'htmlContent/system_templates/';
$smarty->compile_dir = SMARTYPATH_COMPILE;
$smarty->config_dir = SMARTYPATH_CONFIG;
$smarty->cache_dir = SMARTYPATH_CACHE;
$artikel = article::loadArticleFromFile($verzeichnis."/".$dat);
if ((is_object($artikel)) && ($artikel->checkValid()))
{
$show_menu = FALSE;
// delete file suffix
$namensteile = explode(".",stripslashes($artikel->getFile()));
array_pop($namensteile);
$dateinameOhneEndung = implode(".",$namensteile);
// define SMARTY values ##
// language fragments in the SMARTY template
$smarty->assign('text_back' ,get_lang('back'));
$smarty->assign('text_programmedby' ,get_lang('programmedby'));
$smarty->assign('text_hmtltitle' ,get_lang('ADMINAREA'));
$smarty->assign('text_fileinfo' ,get_lang('admin_text_fileinfo'));
$smarty->assign('text_filename1' ,get_lang('admin_text_filename1'));
$smarty->assign('text_filename2' ,get_lang('admin_text_filename2'));
$smarty->assign('text_filetitle' ,get_lang('admin_text_filetitle'));
$smarty->assign('text_filecategory' ,get_lang('admin_text_filecategory'));
$smarty->assign('text_filedescript1' ,get_lang('admin_text_filedescript1'));
$smarty->assign('text_filedescript2' ,get_lang('admin_text_filedescript2'));
$smarty->assign('text_fileauthorname' ,get_lang('admin_text_fileauthorname'));
$smarty->assign('text_fileauthormail' ,get_lang('admin_text_fileauthormail'));
$smarty->assign('text_filepubdate' ,get_lang('admin_text_filepubdate'));
$smarty->assign('text_filesend' ,get_lang('admin_text_filesend'));
$smarty->assign('text_deleteoption' ,get_lang('admin_text_deleteoption'));
if ( ($GLOBALS['TRACKBACKS']=="AN") && ($verzeichnis=="publicData") ) {
$smarty->assign('text_addtrackbacklink' ,"[ ".get_lang('admin_text_addtrackback')." ] (?)");
} else {
$smarty->assign('text_addtrackbacklink' ,"");
}
if ( (isset($GLOBALS['RESTRICTED_ACCESS'])) && ($GLOBALS['RESTRICTED_ACCESS']=="YES") )
{
$pub = get_lang('fileaccess_public');
$res = get_lang('fileaccess_restricted');
$pri = get_lang('fileaccess_private');
if (isset($GLOBALS['ACCESS_OPTIONNAME_PUBLIC'])) {$pub = $GLOBALS['ACCESS_OPTIONNAME_PUBLIC'];}
if (isset($GLOBALS['ACCESS_OPTIONNAME_RESTRICTED'])) {$res = $GLOBALS['ACCESS_OPTIONNAME_RESTRICTED'];}
if (isset($GLOBALS['ACCESS_OPTIONNAME_PRIVATE'])) {$pri = $GLOBALS['ACCESS_OPTIONNAME_PRIVATE'];}
$access_options_intern = array("PUBLIC","RESTRICTED_ACCESS","NOT_PUBLISHED");
$access_options_extern = array($pub,$res,$pri);
$set = $artikel->getRightsData('fileaccess'); if ($set==FALSE) {$set=$access_options_intern[0];}
$smarty->assign('text_fileaccess' ,get_lang('admin_text_fileaccess'));
$smarty->assign('access_option_intern' ,$access_options_intern);
$smarty->assign('access_option_extern' ,$access_options_extern);
$smarty->assign('access_option_set' ,$set);
}
// SMARTY datafields
$smarty->assign('article_file', $dateinameOhneEndung);
$smarty->assign('article_title', $artikel->getTitle());
$smarty->assign('article_description', $artikel->getDescription());
$smarty->assign('article_category', $artikel->getCategory());
$smarty->assign('article_category_array', $PODCAST_CATEGORY);
$smarty->assign('article_authorName', $artikel->getAuthorName());
$smarty->assign('article_authorMail', $artikel->getAuthorMail());
$smarty->assign('article_date', date("d.m.Y;H:i",$artikel->getUnixTime()));
$smarty->assign('article_articlefile', $artikel->getID().".article");
$smarty->assign('article_id', $artikel->getID());
$smarty->assign('article_time', $artikel->getUnixTime());
$smarty->assign('article_dir', $verzeichnis);
// make xtrafileds in article editible
$furtherfields = array();
// check if article got already al xtrafields of the actual layout
$i=1; $xtrafieldnames = array();
while (isset($GLOBALS['xtra_field'.$i]))
{
array_push($xtrafieldnames, trim($GLOBALS['xtra_field'.$i]));
$i++;
}
foreach ($artikel->getExtendedData() as $key=>$value)
{
if ( (strlen($key)>1) && (in_array($key,$xtrafieldnames)) )
{
$field=array();
$field['text'] = $key;
$field['value'] = $value;
$field['formtagname'] = "more_".md5($key);
$furtherfields[$key] = $field;
}
}
// check if article got already al xtrafields of the actual layout
$i=1; while (isset($GLOBALS['xtra_field'.$i]))
{
$key = trim($GLOBALS['xtra_field'.$i]);
if ( (!array_key_exists($key,$artikel->getExtendedData())) && (strlen($key)>1) )
{
$field=array();
$field['text'] = $key;
$field['value'] = "";
$field['formtagname'] = "more_".md5($key);
$furtherfields[$key] = $field;
}
$i++;
}
// autodefine length of audio
$key = "";
if (isset($furtherfields["Dauer"])) {$key="Dauer";}
if (isset($furtherfields["Length"])) {$key="Length";}
if (isset($furtherfields["length"])) {$key="length";}
if ( ($key!="") && ($furtherfields[$key]['value']=="") )
{
// try to autodefine length of file
if ( strtoupper(getDateiEndung($artikel->getFile())) == "MP3" )
{
include_once("include/mp3Info.class.php");
$file = "";
if (file_exists("publicData/".$artikel->getFile())) {$file = "publicData/".$artikel->getFile();}
if (file_exists("uploadData/".$artikel->getFile())) {$file = "uploadData/".$artikel->getFile();}
if ($file!="")
{
$info = new mp3Info($file,FALSE);
$furtherfields[$key]['value']=$info->getLength();
}
}
}
// Assign fields for the smarty template
$smarty->assign('article_furtherfields', $furtherfields);
if ((isset($GLOBALS['INTERNAL_ARCHIVE_MODE'])) && ($GLOBALS['INTERNAL_ARCHIVE_MODE']=="ON"))
{
$smarty->assign('article_deletenotice_option', "ON");
$value = $artikel->getRightsData('deletenotice');
if ($value==FALSE) {$value="CONSULTATION";}
$intern_array = array(
"DELETEONNEXTSWEEP",
"3",
"7",
"14",
"31",
"92",
"189",
"365",
"2190",
"CONSULTATION",
"NEVERDELETE"
);
$extern_array = array(
get_lang("delOption_DELETEONNEXTSWEEP"),
get_lang("delOption_3"),
get_lang("delOption_7"),
get_lang("delOption_14"),
get_lang("delOption_31"),
get_lang("delOption_92"),
get_lang("delOption_189"),
get_lang("delOption_365"),
get_lang("delOption_2190"),
get_lang("delOption_CONSULTATION"),
get_lang("delOption_NEVERDELETE")
);
$smarty->assign('article_deletenotice_array_intern', $intern_array);
$smarty->assign('article_deletenotice_array_extern', $extern_array);
$smarty->assign('article_deletenotice_array_value' , $value);
}
else
{ $smarty->assign('article_deletenotice_option', "OFF"); }
// display template site
$smarty->display('system_article_edit.htm');
}
} // End if Step == 1
else if ($schritt==2)
{
// 2.save changes
if (issetPostGet('dat'))
{$filename = getPostGetText('dat');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter");}
if (issetPostGet('articleid'))
{$articleid = getPostGetText('articleid');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter");}
$artikel = article::loadArticleFromFile($verzeichnis."/".$dat);
// ---- deliver parameter
$orgFilename = $artikel->getFile();
$orgEndung = getDateiEndung($artikel->getFile());
if (issetPostGet('neuerdateiname'))
{$neuerdateiname = getPostGetText('neuerdateiname');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter");}
$neuerdateiname = stripslashes($neuerdateiname);
$neuerdateiname = strip_tags($neuerdateiname);
if (strlen($neuerdateiname) > 0)
{
$neuerdateiname = $neuerdateiname.".".$orgEndung;
if ( file_exists($verzeichnis."/".$neuerdateiname) )
{
$ausgabe = get_lang('admin_note_fileexists');
$neuerdateiname = $orgFilename;
}
}
else
{
$ausgabe = get_lang('admin_note_namelength');
$neuerdateiname = $orgFilename;
}
if (issetPostGet('titel'))
{$titel = getPostGetText('titel');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter ");}
$titel = strip_tags($titel);
if (issetPostGet('zeit'))
{$zeit = getPostGetInt('zeit');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter ");}
if (issetPostGet('beschreibung'))
{$beschreibung = getPostGetText('beschreibung');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter ");}
$beschreibung = str_replace("\n\r","\n",$beschreibung);
$beschreibung = str_replace("\r\n","\n",$beschreibung);
if (issetPostGet('autor_name'))
{$autor_name = getPostGetText('autor_name');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter");}
$autor_name = strip_tags($autor_name);
if (issetPostGet('autor_mail'))
{$autor_mail = getPostGetText('autor_mail');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter");}
$autor_mail = strip_tags($autor_mail);
if (issetPostGet('kategorie'))
{$kategorie = getPostGetText('kategorie');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter");}
if (issetPostGet('date'))
{$date = getPostGetText('date');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter");}
//check if the publication date is valid
if (!$unixdate = getUnixTimeFromStr($date))
{
$unixdate = $artikel->getUnixTime();
}
$autor_telefon = $artikel->getAuthorXtra();
$autor_bemerkung = $artikel->getAuthorComment();
if ($titel != "")
{
// ---- save input
$artikel = article::loadArticleFromFile($verzeichnis."/".$articleid.".article");
$artikel->setUnixTime($unixdate);
$artikel->setFile($neuerdateiname);
$artikel->setTitle($titel);
$artikel->setDescription($beschreibung);
$artikel->setAuthorName($autor_name);
$artikel->setAuthorMail($autor_mail);
$artikel->setAuthorXtra($autor_telefon);
$artikel->setAuthorComment($autor_bemerkung);
$artikel->setCategory($kategorie);
// check extended metadata
foreach ($artikel->getExtendedData() as $key=>$value)
{
if (issetPostGet("more_".md5($key)))
{
$value = getPostGetText("more_".md5($key));
$artikel->setExtendedData($key,$value);
}
}
// check if article got already al xtrafields of the actual layout
$i=1; while (isset($GLOBALS['xtra_field'.$i]))
{
$key = $GLOBALS['xtra_field'.$i];
if ( (!array_key_exists($key,$artikel->getExtendedData())) && (issetPostGet("more_".md5($key))) )
{
$value = getPostGetText("more_".md5($key));
$artikel->setExtendedData($key,$value);
}
$i++;
}
// maybe set fileaccess rights
if ( (isset($GLOBALS['RESTRICTED_ACCESS'])) && ($GLOBALS['RESTRICTED_ACCESS']=="YES") )
{
if (issetPostGet("fileaccess"))
{
$value = getPostGetText('fileaccess');
$artikel->setRightsData('fileaccess',$value);
}
}
// maybe set deleteoption
if (issetPostGet("deleteoption"))
{
$value = getPostGetText('deleteoption');
$artikel->setRightsData('deletenotice',$value);
}
if ($orgFilename != $neuerdateiname)
{
// rename MP3 files
rename($verzeichnis."/".$orgFilename,$verzeichnis."/".$neuerdateiname);
// move further fileformats, if existing
if ($files = $artikel->moreFiles())
{
foreach ($files as $file)
{
// HIER noCH SAUBER IMPLEMENTIEREN
#rename($verzeichnis."/".$orgFilename,$verzeichnis."/".$neuerdateiname);
}
}
}
// VORSICHT: Wenn Artikel nicht gespeichert werden kann, dann ist das renaming rückgängig zu machen !!!!!
if (!$artikel->save($verzeichnis))
{ die("\nFEHLER: In Verzeichnis '$verzeichnis' koennen keine Dateien angelegt werden. Bitte Schreibrechte pruefen. / in directory '$verzeichnis' no files can be written. check write permissions on server.");}
// ---- MP3 ID-Tag Edit
// has problems if server has set writing limit (www.attrax-online.de)
$ID3 = new ID3v1x($verzeichnis."/".$neuerdateiname);
@$ID3->write_tag(1, strip_tags($titel), strip_tags($PODCAST_NAME), strip_tags($kategorie), date("Y",time()), substr(HTTP_BASISADRESSE,0,strlen(HTTP_BASISADRESSE)-1), "0", "37");
} // end if titel != ""
} // end step == 2
} // end aktion == edit
// --- Autodelete / Cleansweep Archive -------------
// -------------------------------------------------
// this feature allows to delete all articles with an outdated delete notice
// at one time. the INTERNAL_ARCHIVE_MODE needs to be ON for this
else if ($aktion == "autodelete")
{
if (issetPostGet('schritt'))
{$schritt = getPostGetInt('schritt');}
else { die("FEHLER: Es fehlen Parameter! / missing parameter");}
if ((isset($GLOBALS['INTERNAL_ARCHIVE_MODE'])) && ($GLOBALS['INTERNAL_ARCHIVE_MODE']=="ON"))
{
if ($schritt==1)
{
// make a list of files that can be deleteted
$Dateien = getFilesFromDirWithEnding("publicData","article");
// build Array with articles that are free to delete
$delArray = array();
foreach ($Dateien as $datei)
{
$artikel = article::loadArticleFromFile("publicData/".$datei);
if ($artikel->getFile()!="")
{
// calculate how old the file is (in days)
$daysold = floor((time()-$artikel->getUnixTime())/(24*60*60));
$deletnotice = $artikel->getRightsData('deletenotice');
if ($deletnotice)
{
if ((is_int(intval($deletnotice))) && (intval($deletnotice)>0))
{
$protectiondays = intval($deletnotice);
if ($protectiondays < $daysold)
{
array_push($delArray, $artikel);
}
}
elseif ($deletnotice=="DELETEONNEXTSWEEP")
{
array_push($delArray, $artikel);
}
}
}
}
if (count($delArray)>0)
{
$idArray = array();
$i=1;
$code = "";
foreach( $delArray as $delartikel)
{
array_push($idArray,$delartikel->getID());
$name = $delartikel->getTitle();
$size = 0; foreach ($delartikel->getAllAppendantFiles() as $file)
{ $size += filesize("publicData/".$file); }
$size = floor($size/(1024*1024))+1;
$id = $delartikel->getID();
$author = $delartikel->getAuthorName(); if ($author=="") {$author="-";}
$code .= ' '.$name.' ('.$size.'MB / '.$author.')'."
\n";
$i++;
}
$code = '
'; ?>