init_user(); # make sure the user is logged in before he has access to the # admin section if(!$page->user()->check_role('admin')) header('Location: login.php?message=1'); $page->attr('title','Administrate FTI: News'); // to make jquery be loaded first $page->useJSFile('jquery.min.js'); $page->addJSFile('admin.js'); $page->useCSSFile('admin.css'); $page->content('admin/news.php'); $page->layout('admin_layout.php'); $page->menu('admin/menu.php'); # get news posts $news = xml_get_from_file($FILES['news']); $newsItems = $news->xpath('newsitem'); $page->data('news',array_reverse($newsItems)); if(isset($_REQUEST['do'])) { if($_REQUEST['do'] == 'add' || $_REQUEST['do'] == 'edit') { $page->addJSFile('admin/textboxbuttons.js'); // this may be changed below, if the news post is not found $page->content('admin/news.add.edit.php'); if($_GET['do'] == 'edit') { $newsItem = FindNewsItem($newsItems,$_GET['id']); if(!is_null($newsItem)) { $page->data('newsitem',$newsItem); $page->data('editing',true); } else { $page->addError('News post does not exist. Please try again.'); $page->content('admin/news.php'); } } } else if($_REQUEST['do'] == 'delete') { $newsItem = FindNewsItem($newsItems,$_GET['id']); if(!is_null($newsItem)) { $page->content('admin/news.delete.php'); $page->data('newsitem',$newsItem); } else $page->addError('News post does not exist. Please try again.'); } else if($_REQUEST['do'] == 'reallyadd') { $newItem = $news->addChild('newsitem'); $newItem->addChild('title',stripslashes($_POST['title'])); $newItem->addChild('text',""); if(!empty($_POST['title']) && !empty($_POST['text'])) { $nextId = GetNextId($newsItems); $newItem->addAttribute('id',$nextId); if(file_put_contents($FILES['news'],xml_fix_cdata($news->asXML()))) { $page->addMessage('News item added.'); $page->data('news',array_reverse($news->xpath('newsitem'))); } else { $page->addError('Could not add news item. Please try again later.'); $page->data('newsitem',$newItem); $page->content('admin/news.add.edit.php'); } } else { $page->addError('Please enter a title and text.'); $page->data('newsitem',$newItem); $page->content('admin/news.add.edit.php'); } } else if($_REQUEST['do'] == 'reallyedit') { $newsItemIdx = FindNewsItem($newsItems,$_POST['id'],true); $page->data('editing',true); if(!is_null($newsItemIdx)) { $news->newsitem[$newsItemIdx]->title = stripslashes($_POST['title']); $news->newsitem[$newsItemIdx]->text = ""; if(!empty($_POST['title']) && !empty($_POST['text'])) { if(file_put_contents($FILES['news'],xml_fix_cdata($news->asXML()))) $page->addMessage('News item saved.'); else { $page->addError('Could not save news item. Please try again later.'); $page->data('newsitem',$news->newsitem[$newsItemIdx]); $page->content('admin/news.add.edit.php'); } } else { $page->addError('Please enter a title and text.'); $page->data('newsitem',$news->newsitem[$newsItemIdx]); $page->content('admin/news.add.edit.php'); } } else $page->addError('News item does not exit. Please try again.'); } else if($_REQUEST['do'] == 'reallydelete') { $newsItemIdx = FindNewsItem($newsItems,$_POST['id'],true); if(!is_null($newsItemIdx)) { unset($news->newsitem[$newsItemIdx]); if(file_put_contents($FILES['news'],xml_fix_cdata($news->asXML()))) { $page->addMessage('News item deleted.'); $page->data('news',array_reverse($news->xpath('newsitem'))); } else { $page->addError('Could not delete news item. Please try again later.'); $page->data('newsitem',$news->newsitem[$newsItemIdx]); $page->content('admin/news.delete.php'); } } else $page->addError('News item does not exist. Please try again.'); } } $page->process(); ################################################################# FindNewsItem # function FindNewsItem($items, $itemId, $returnIdx = false) { for($c = 0; $c < count($items); $c++) { if((int)$items[$c]['id'] === (int)$itemId) if($returnIdx) return $c; else return $items[$c]; } return NULL; } #################################################################### GetNextId # function GetNextId($items) { $largestId = 1; for($c = 0; $c < count($items); $c++) { if($largestId < (int)$items[$c]['id']) $largestId = (int)$items[$c]['id']; } return $largestId + 1; } ?>