Created
December 15, 2010 20:05
-
-
Save skian/742521 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /*------------------------------------------------------------------------------ | |
| sNews Version: 1.7.1 | |
| Issue Date: October 22.10 (keyrocks) | |
| Copyright (C): Solucija.com | |
| Licence: sNews is licensed under a Creative Commons License. | |
| -------------------------------------------------------------------------------- | |
| PATCHES: | |
| For a list of all patches and bug fixes applied to this Download package, | |
| please view the patch-log_snews1.7.txt (notepad) file located in the | |
| Patches Log folder. | |
| --------------------------------------------------------------------------------*/ | |
| // Start sNews session | |
| session_start(); | |
| /*------------------------------------------------------------ | |
| To enable Error Reporting, un-comment string #1 | |
| and comment-out string #2, which turns Error Reporting off. | |
| ------------------------------------------------------------*/ | |
| //error_reporting(E_ALL ^ E_NOTICE); // #1 Report all Errors | |
| error_reporting(0); // #2 No Error Reporting | |
| // CONFIGURE DATABASE VARIABLES | |
| function db($variable) { | |
| $db = array( | |
| # Edit database connection information only | |
| 'dbhost' => 'localhost', // MySQL host | |
| 'dbname' => 'snews17', // Database name | |
| 'dbuname' => 'root', // Database Username | |
| 'dbpass' => '', // Database password | |
| // Table prefix for multiple sNews systems on one database. Leave it blank if not used. | |
| 'prefix' => '' | |
| ); | |
| return $db[$variable]; | |
| } | |
| //SITE - Automatically detects the scripts location. | |
| function site() { | |
| $host = 'http://'.$_SERVER['HTTP_HOST']; | |
| $directory = dirname($_SERVER['SCRIPT_NAME']); | |
| $website = $directory == '/' ? $host.'/' : $host.$directory.'/'; | |
| return $website; | |
| } | |
| // Language Variables | |
| function l($var) { | |
| global $l; | |
| return $l[$var]; | |
| } | |
| // INFO LINE TAGS (readmore, comments, date) | |
| $tags = array( | |
| 'infoline' => '<p class="date">,readmore,comments,date,edit,</p>', | |
| 'comments' => '<p class="meta">,name, '.l('on').' ,date,edit,</p>,<p class="comment">,comment,</p>' | |
| ); | |
| function tags($tag) { | |
| global $tags; | |
| return $tags[$tag]; | |
| } | |
| // Constants | |
| // Website | |
| define('_SITE',site()); | |
| // Prefix | |
| define('_PRE',db('prefix')); | |
| // Set login constant | |
| define('_ADMIN',isset($_SESSION[_SITE.'Logged_In']) && $_SESSION[_SITE.'Logged_In'] == token()); | |
| // SITE SETTINGS - grab site settings from database | |
| function s($var) { | |
| global $site_settings; | |
| if (!$site_settings){ | |
| $query = 'SELECT name,value FROM '._PRE.'settings'; | |
| $result = mysql_query($query); | |
| while ($r = mysql_fetch_assoc($result)) { | |
| $site_settings[$r['name']] = $r['value']; | |
| } | |
| } | |
| $value = $site_settings[$var]; | |
| return $value; | |
| } | |
| // SESSION TOKEN | |
| function token() { | |
| $a = md5(substr(session_id(), 2, 7)); | |
| $b = $_SERVER['HTTP_USER_AGENT']; | |
| $token = md5($a.$b._SITE); | |
| return $token; | |
| } | |
| // STARTUP | |
| connect_to_db(); | |
| // LANGUAGE VARIABLES | |
| s('language') != 'EN' && file_exists('lang/'.s('language').'.php') == true ? include('lang/'.s('language').'.php') : include('lang/EN.php'); | |
| // SYSTEM VARIABLES (not to be translated) | |
| //SEF links of the hardcoded items - RESERVED WORDS - will clash if using for article/category seftitles. | |
| $l['cat_listSEF'] = 'archive,contact,sitemap,login'; | |
| if (_ADMIN) {$l['cat_listSEF'] .= ',administration,admin_category,admin_article,article_new,extra_new,page_new,snews_categories,snews_articles,extra_contents,snews_pages,snews_settings,snews_files,logout,groupings,admin_groupings';} | |
| //divider character | |
| $l['divider'] = '·'; | |
| // used in article pagination links | |
| $l['paginator'] = 'p_'; | |
| $l['comment_pages'] = 'c_'; | |
| // list of files & folders ignored by upload/file list routine | |
| $l['ignored_items'] = '.,..,cgi-bin,.htaccess,Thumbs.db,snews.php,index.php,lib.php,style.css,admin.js,'.s('language').'.php'; | |
| if(isset($_POST['Loginform']) && !_ADMIN) { | |
| $user = checkUserPass($_POST['uname']); | |
| $pass = checkUserPass($_POST['pass']); | |
| unset($_POST['uname'],$_POST['pass']); | |
| // Patch #18 - 1.7.1 - revised string by KikkoMax | |
| if (checkMathCaptcha() && md5($user) === s('username') && md5($pass) === s('password')) { | |
| //if (md5($user) === s('username') && md5($pass) === s('password') && checkMathCaptcha()) { | |
| $_SESSION[_SITE.'Logged_In'] = token(); | |
| notification(2,'','administration'); | |
| } else { die( notification(2,l('err_Login'),'login')); } | |
| } | |
| if($_POST['submit_text'] && !_ADMIN){ | |
| die (notification(2,l('error_not_logged_in'),'home')); | |
| } | |
| if (!empty($_GET['category'])) { // Patch #7 - 1.7.0 | |
| $url = explode('/', clean($_GET['category'])); | |
| $categorySEF = $url[0]; | |
| if (isset($url[1])) $subcatSEF = $url[1]; | |
| if (substr($url[1], 0, 1) == l('comment_pages') && is_numeric(substr($url[1], 1, 1))) $commentsPage = $url[1]; | |
| if (isset($url[2])) $articleSEF= $url[2]; | |
| if (isset($url[3])) $commentsPage = $url[3]; | |
| if (check_category($categorySEF)) { $_catID = 0; return; } | |
| // Admin content | |
| if (_ADMIN) { | |
| $pub_a = ''; $pub_c = ''; $pub_x = ''; | |
| } else { | |
| $pub_a = ' AND a.published = 1'; | |
| $pub_c = ' AND c.published =\'YES\''; | |
| $pub_x = ' AND x.published =\'YES\''; | |
| } | |
| // Query for / Category / subcategory / article / | |
| if ($articleSEF && substr( $articleSEF, 0, 2) != l('paginator') && substr( $articleSEF, 0, 2) != l('comment_pages')) { | |
| $MainQuery = 'SELECT | |
| a.id AS id, title, position, description_meta, keywords_meta, | |
| c.id AS catID, c.name AS name, c.description, x.name AS xname | |
| FROM '._PRE.'articles'.' AS a, | |
| '._PRE.'categories'.' AS c | |
| LEFT JOIN '._PRE.'categories'.' AS x | |
| ON c.subcat=x.id | |
| WHERE a.category=c.id | |
| '.$pub_a.$pub_c.$pub_x.' | |
| AND x.seftitle="'.$categorySEF.'" | |
| AND c.seftitle="'.$subcatSEF.'" | |
| AND a.seftitle="'.$articleSEF.'" | |
| '; | |
| } | |
| // Two queries for / Category / subcategory / OR / Category / article / | |
| elseif ($subcatSEF && substr( $subcatSEF, 0, 2) != l('paginator') && substr( $subcatSEF, 0,2) != l('comment_pages')) { | |
| $Try_Article = mysql_query('SELECT | |
| a.id AS id, title, position, description_meta, keywords_meta, | |
| c.id as catID, name, description, subcat | |
| FROM '._PRE.'articles'.' AS a | |
| LEFT JOIN '._PRE.'categories'.' AS c | |
| ON category = c.id | |
| WHERE c.seftitle = "'.$categorySEF.'" | |
| AND a.seftitle ="'.$subcatSEF.'" | |
| '.$pub_a.$pub_c.' | |
| AND subcat = 0 | |
| '); | |
| $R = mysql_fetch_assoc($Try_Article); | |
| // query for / category / article / | |
| if(empty($R)) { | |
| $MainQuery = 'SELECT | |
| c.id AS catID, c.name AS name, c.description, c.subcat, | |
| x.name AS xname | |
| FROM '._PRE.'categories'.' AS x | |
| LEFT JOIN '._PRE.'categories'.' AS c | |
| ON c.subcat = x.id | |
| WHERE x.seftitle = "'.$categorySEF.'" | |
| AND c.seftitle = "'.$subcatSEF.'" | |
| '.$pub_c.$pub_x ; | |
| } | |
| } else { | |
| switch(true): | |
| case (substr( $categorySEF, 0, 2) == l('paginator')) : | |
| break; | |
| case (false !== strpos($categorySEF, 'rss-')) : | |
| die(rss_contents($categorySEF)); // Patch #17A - 1.7.1 removed: , $articleSEF (redundant) | |
| // Two queries for / Category / OR /Page/ | |
| default: | |
| $Try_Page = mysql_query('SELECT | |
| id, title, category, description_meta, keywords_meta, position | |
| FROM '._PRE.'articles'.' AS a | |
| WHERE seftitle = "'.$categorySEF.'" | |
| '.$pub_a.' | |
| AND position = 3'); | |
| // query for category | |
| $R = mysql_fetch_assoc($Try_Page); | |
| if (!$R) { | |
| $MainQuery ='SELECT | |
| id AS catID, name, description | |
| FROM '._PRE.'categories'.' AS c | |
| WHERE seftitle = "'.$categorySEF.'" | |
| AND subcat = 0 | |
| '.$pub_c; | |
| } | |
| endswitch; | |
| } | |
| if (!empty($MainQuery)){ | |
| $Mainresult = mysql_query($MainQuery); | |
| if (mysql_num_rows($Mainresult) === 1 ){ | |
| $R = mysql_fetch_assoc($Mainresult); | |
| } else if(!in_array($_GET['action'],explode(',',l('cat_listSEF')))){ // Patch #7 - 1.7.0 | |
| $categorySEF = '404'; | |
| header('HTTP/1.1 404 Not Found'); | |
| unset($subcatSEF,$articleSEF); } | |
| update_articles(); | |
| } | |
| // globals | |
| } else { | |
| // ID for 'home' | |
| if (s('display_page') !== 0) $_ID = s('display_page'); | |
| } | |
| if(!empty($R['category'])) $_CAT = $R['category']; | |
| if(!empty($R['id'])) $_ID = $R['id']; | |
| if(!empty($R['title'])) $_TITLE = $R['title']; | |
| if(!empty($R['position'])) $_POS = $R['position']; | |
| if(!empty($R['catID'])) $_catID = $R['catID']; | |
| if(!empty($R['name'])) $_NAME = $R['name']; | |
| if(!empty($R['xname'])) $_XNAME = $R['xname']; | |
| if(!empty($R['keywords_meta'])) $_KEYW = $R['keywords_meta']; | |
| if(!empty($R['description_meta'])) $_DESCR = $R['description_meta']; else $_DESCR = $R['description']; | |
| // set comments page for / category / article / | |
| if (isset($url[3]) && !$_XNAME) $commentsPage = $url[2]; | |
| //TITLE | |
| function title() { | |
| global $categorySEF, $_DESCR, $_KEYW, $_TITLE, $_NAME, $_XNAME; | |
| echo '<base href="'._SITE.'" />'; | |
| $title = $_TITLE ? $_TITLE.' - ' : ''; | |
| $title .= $_NAME ? $_NAME.' - ' : ''; | |
| $title .= $_XNAME ? $_XNAME.' - ' : ''; | |
| if (check_category($categorySEF) == true && $categorySEF != 'administration' && $categorySEF) | |
| $title .= l($categorySEF).' - '; | |
| $title .= s('website_title'); | |
| echo ' | |
| <title>'.$title.'</title> | |
| <meta http-equiv="Content-Type" content="text/html; charset='.s('charset').'" /> | |
| <meta name="description" content="'.(!empty($_DESCR) ? $_DESCR : s('website_description')).'" /> | |
| <meta name="keywords" content="'.(!empty($_KEYW) ? $_KEYW : s('website_keywords')).'" />'; | |
| if (_ADMIN) { | |
| echo '<script type="text/javascript">'; | |
| include('js/admin.js'); | |
| echo '</script>'; | |
| } | |
| } | |
| //BREADCRUMBS | |
| function breadcrumbs() { | |
| global $categorySEF, $subcatSEF, $_POS, $_TITLE, $_NAME, $_XNAME; | |
| $link = '<a href="'._SITE.''; | |
| if (_ADMIN) { | |
| echo $link.'administration/" title="'.l('administration').'">'.l('administration').'</a> '.l('divider').' '; | |
| } | |
| echo (!empty($categorySEF) ? $link.'">'.l('home').'</a>' : l('home')); | |
| if (!empty($categorySEF) && check_category($categorySEF) == false) { | |
| echo (!empty($subcatSEF) ? ' '.l('divider').' '.$link.$categorySEF.'/"> | |
| '.(!empty($_XNAME) ? $_XNAME : $_NAME).'</a>' : | |
| (!empty($_NAME) ? ' '.l('divider').' '.$_NAME:'')); | |
| if (!empty($subcatSEF) && $_XNAME) { | |
| echo ($_POS==1 ? ' '.l('divider').' '.$link.$categorySEF.'/'.$subcatSEF.'/">'.$_NAME.'</a>' : ' '.l('divider').' '.$_NAME); | |
| } | |
| echo (!empty($_TITLE)? ' '.l('divider').' '.$_TITLE : ''); | |
| } | |
| if (check_category($categorySEF) == true && $categorySEF != 'administration' && $categorySEF) { | |
| echo ' '.l('divider').' '.l($categorySEF);} | |
| } | |
| // LOGIN LOGOUT LINK | |
| function login_link() { | |
| $login = '<a href="'._SITE; | |
| $login .= _ADMIN ? 'administration/" title="'.l('administration').'">'.l('administration').'</a> '.l('divider').' <a href="'._SITE.'logout/" title="'.l('logout').'">'.l('logout') : | |
| 'login/" title="'.l('login').'">'.l('login').''; | |
| $login .= '</a>'; | |
| echo $login; | |
| } | |
| // DISPLAY CATEGORIES | |
| function categories() { | |
| global $categorySEF; | |
| $qwr = !_ADMIN ? ' AND a.visible=\'YES\'' : ''; | |
| if (s('num_categories') == 'on') { | |
| $count = ', COUNT(DISTINCT a.id) as total'; | |
| $join = 'LEFT OUTER JOIN '._PRE.'articles'.' AS a | |
| ON (a.category = c.id AND a.position = 1 AND a.published = 1'.$qwr.')'; | |
| } else { | |
| $count =''; | |
| $join=''; | |
| } | |
| $result = mysql_query('SELECT | |
| c.seftitle, c.name, description, c.id AS parent'.$count.' | |
| FROM '._PRE.'categories'.' AS c '.$join.' | |
| WHERE c.subcat = 0 AND c.published = \'YES\' | |
| GROUP BY c.id | |
| ORDER BY c.catorder,c.id'); | |
| if (mysql_num_rows($result) > 0){ | |
| while ($r = mysql_fetch_array($result)) { | |
| $category_title = $r['seftitle']; | |
| $r['name'] = (s('language')!='EN' && $r['name'] == 'Uncategorized' && $r['parent']==1) ? l('uncategorised') : $r['name']; | |
| $class = $category_title == $categorySEF ? ' class="current"' : ''; | |
| if (isset($r['total'])) { $num='('.$r['total'].')'; } | |
| echo '<li><a'.$class.' href="'._SITE.$category_title.'/" title="'.$r['name'].' - '.$r['description'].'">'.$r['name'].$num.'</a>'; | |
| $parent = $r['parent']; | |
| if ($category_title == $categorySEF) { subcategories($parent); } | |
| echo '</li>'; | |
| } | |
| } else { | |
| echo '<li>'.l('no_categories').'</li>'; | |
| } | |
| } | |
| function subcategories($parent) { | |
| global $categorySEF, $subcatSEF; | |
| $qwr = !_ADMIN ? ' AND a.visible=\'YES\'' : ''; | |
| if (s('num_categories') == 'on') { | |
| $count = ', COUNT(DISTINCT a.id) AS total'; | |
| $join ='LEFT OUTER JOIN '._PRE.'articles'.' AS a | |
| ON (a.category = c.id AND a.position = 1 AND a.published = 1'.$qwr.')'; | |
| } else { | |
| $count =''; | |
| $join=''; | |
| } | |
| $subresult = mysql_query('SELECT c.seftitle AS subsef, description, name'.$count.' | |
| FROM '._PRE.'categories'.' AS c '.$join.' | |
| WHERE c.subcat = '.$parent.' AND c.published = \'YES\' | |
| GROUP BY c.id | |
| ORDER BY c.catorder,c.id'); | |
| if (mysql_num_rows($subresult) !== 0) { | |
| echo '<ul>'; | |
| while ($s = mysql_fetch_array($subresult)) { | |
| $subSEF = $s['subsef']; | |
| $class = $subSEF == $subcatSEF ? ' class="current"' : ''; | |
| if (isset($s['total'])) { | |
| $num=' ('.$s['total'].')'; | |
| } | |
| echo '<li class="subcat"> | |
| <a'.$class.' href="'._SITE.$categorySEF.'/'.$subSEF.'/" title="'.$s['description'].'"> | |
| '.$s['name'].$num.'</a></li>'; | |
| } | |
| echo '</ul>'; | |
| } | |
| } | |
| // DISPLAY PAGES | |
| function pages() { | |
| function pages_li($url, $text) { | |
| global $categorySEF; | |
| $class = ($categorySEF == $url) ? ' class="current"': ''; | |
| if (!empty($url)) $url .= '/'; | |
| echo '<li><a'.$class.' href="'._SITE.$url.'">'.$text.'</a></li>'; | |
| } | |
| pages_li('', l('home')); | |
| pages_li('archive', l('archive')); | |
| $qwr = !_ADMIN ? ' AND visible=\'YES\'' : ''; | |
| $query = "SELECT id, seftitle, title FROM "._PRE.'articles'." WHERE position = 3 $qwr ORDER BY artorder ASC, id"; | |
| $result = mysql_query($query); | |
| while ($r = mysql_fetch_array($result)) { | |
| if ($r['id'] != s('display_page')) { | |
| pages_li($r['seftitle'], $r['title']); | |
| } | |
| } | |
| pages_li('contact', l('contact')); | |
| pages_li('sitemap', l('sitemap')); | |
| } | |
| //EXTRA CONTENT | |
| function extra($mode='', $styleit = 0, $classname = '', $idname= '') { | |
| global $categorySEF, $subcatSEF, $articleSEF, $_ID, $_catID; | |
| if (empty($mode)) { | |
| $mode = retrieve('seftitle', 'extras','id',1); | |
| } | |
| if (!_ADMIN) $qwr = ' AND visible=\'YES\''; else $qwr = ''; | |
| $mode = strtolower($mode); | |
| $getExtra = retrieve('id', 'extras', 'seftitle', $mode); | |
| $subCat = retrieve('subcat', 'categories', 'id', $_catID); | |
| if (!empty( $_ID)) { | |
| $getArt = $_ID; | |
| } | |
| if (!empty($subcatSEF)) { | |
| $catSEF = $subcatSEF; | |
| } | |
| $url = $categorySEF.(!empty($subcatSEF)? '/'.$subcatSEF:'').(!empty($articleSEF)?'/'.$articleSEF :''); | |
| $sql = 'SELECT | |
| id,title,seftitle,text,category,extraid,page_extra, | |
| position,displaytitle,show_in_subcats,visible | |
| FROM '._PRE.'articles'.' | |
| WHERE published = 1 | |
| AND position = 2 '; | |
| $query = $sql.(!empty($getExtra) ? ' AND extraid = '.$getExtra : ' AND extraid = 1'); | |
| $query = $query.$qwr.' ORDER BY artorder ASC,id ASC'; | |
| $result = mysql_query($query) or die(mysql_error()); | |
| while ($r = mysql_fetch_array($result)) { | |
| $category = $r['category']; | |
| $page = $r['page_extra']; | |
| switch (true) { | |
| case ($category == 0 && $page<1): | |
| $print = false; | |
| break; | |
| case ($category == 0 && empty($_catID) && $page!=''): | |
| $print = check_category($catSEF) != true? true : false; | |
| break; | |
| case ($category == $_catID || ($category == $subCat && $r['show_in_subcats'] == 'YES')): | |
| $print = true; | |
| break; | |
| case ($category == -3 && $getArt == $page): | |
| $print = true; | |
| break; | |
| case ($category == -3 && $_catID == 0 && $getArt != $page && $page == 0 | |
| && $categorySEF !='' && !in_array($categorySEF,explode(',',l('cat_listSEF'))) | |
| && substr( $categorySEF, 0, 2) != l('paginator') ): | |
| $print = true; | |
| break; | |
| // To show up on all pages only | |
| case ($category == -1 && $_catID == 0 && $getArt != $page && $page == 0): | |
| $print = true; | |
| break; | |
| // To show up on all categories and pages | |
| case ($category == -1): | |
| $print = true; | |
| break; | |
| default: | |
| $print = false; | |
| } | |
| if ($print == true) { | |
| if ($styleit == 1) { | |
| $container ='<div'; | |
| $container .= !empty($classname) ? ' class="'.$classname.'"' : ''; | |
| $container .= !empty($idname) ? ' id="'.$idname.'"' : ''; | |
| $container .= '>'; | |
| echo $container; | |
| } | |
| if ($r['displaytitle'] == 'YES') { | |
| echo '<h3>'. $r['title'] .'</h3>'; | |
| } | |
| file_include($r['text'], 9999000); | |
| $visiblity = $r['visible'] == 'YES' ? | |
| '<a href="'._SITE.'?action=process&task=hide&item=snews_articles&id='.$r['id'].'&back='.$url.'">'.l('hide').'</a>' : | |
| l('hidden').' ( <a href="'._SITE.'?action=process&task=show&item=snews_articles&id='.$r['id'].'&back='.$url.'">'.l('show').'</a> )'; | |
| echo _ADMIN ? '<p><a href="'._SITE.'?action=admin_article&id='.$r['id'].'" title="'.l('edit').' '.$r['seftitle'].'"> | |
| '.l('edit').'</a>'.' '.l('divider').' '.$visiblity.'</p>' : ''; | |
| if ($styleit == 1) { | |
| echo '</div>'; | |
| } | |
| } | |
| } | |
| } | |
| // PAGINATOR | |
| function paginator($pageNum, $maxPage, $pagePrefix) { | |
| global $categorySEF,$subcatSEF, $articleSEF,$_ID, $_catID,$_POS, $_XNAME; | |
| switch (true){ | |
| case !$_ID && !$_catID : | |
| $uri =''; | |
| break; | |
| case $_ID && $_XNAME : | |
| $uri = $categorySEF.'/'.$subcatSEF.'/'.$articleSEF.'/'; | |
| break; | |
| case $_POS == 1 || $_XNAME : | |
| $uri = $categorySEF.'/'.$subcatSEF.'/'; | |
| break; | |
| default : | |
| $uri = $categorySEF.'/'; | |
| } | |
| $link = '<a href="'._SITE.$uri ; | |
| $prefix = !empty($pagePrefix) ? $pagePrefix : ''; | |
| if ($pageNum > 1) { | |
| $goTo = $link; | |
| $prev = (($pageNum-1)==1 ? $goTo : | |
| $link.$prefix.($pageNum - 1).'/').'" title="'.l('page').' '.($pageNum - 1).'"> | |
| < '.l('previous_page').'</a> '; | |
| $first = $goTo.'" title="'.l('first_page').' '.l('page').'"> | |
| << '.l('first_page').'</a>'; | |
| } else { | |
| $prev = '< '.l('previous_page'); | |
| $first = '<< '.l('first_page'); | |
| } | |
| if ($pageNum < $maxPage) { | |
| $next = $link.$prefix.($pageNum + 1).'/" title="'.l('page').' '.($pageNum + 1).'"> | |
| '.l('next_page').' ></a> '; | |
| $last = $link.$prefix.$maxPage.'/" title="'.l('last_page').' '.l('page').'"> | |
| '.l('last_page').' >></a> '; | |
| } else { | |
| $next = l('next_page').' > '; | |
| $last = l('last_page').' >>'; | |
| } | |
| echo ' | |
| <div class="paginator"> | |
| '.$first.' '.$prev.' | |
| <strong>['.$pageNum.'</strong> / <strong>'.$maxPage.']</strong> | |
| '.$next.' '.$last.' | |
| </div>'; | |
| } | |
| // CENTER | |
| function center() { | |
| // fatal session produced on failed login, and will display error message. | |
| if (isset($_SESSION[_SITE.'fatal'])) { | |
| echo $_SESSION[_SITE.'fatal']; | |
| unset($_SESSION[_SITE.'fatal']); | |
| } else { | |
| global $categorySEF, $subcatSEF, $articleSEF; | |
| switch(true) { | |
| case isset($_GET['category']): | |
| $action = $categorySEF; | |
| break; | |
| case isset($_GET['action']): // Patch #7 - 1.7.0 | |
| $action = $categorySEF == '404' ? $categorySEF : clean(cleanXSS($_GET['action'])); | |
| break; | |
| } | |
| switch(true) { | |
| case isset($_POST['search_query']): | |
| search(); return; break; | |
| case isset($_POST['comment']): | |
| comment('comment_posted'); return; break; | |
| case isset($_POST['contactform']): | |
| contact(); return; break; | |
| case isset($_POST['Loginform']): | |
| administration(); return; break; | |
| case isset($_POST['submit_text']): | |
| processing(); return; break; | |
| } | |
| if (_ADMIN) { | |
| switch ($action) { | |
| case 'administration': | |
| administration(); return; break; | |
| case 'snews_settings': | |
| settings(); return; break; | |
| case 'snews_categories': | |
| admin_categories(); return; break; | |
| case 'admin_category': | |
| form_categories(); return; break; | |
| case 'admin_subcategory': | |
| form_categories('sub'); return; break; | |
| case 'groupings': | |
| admin_groupings(); return; break; | |
| case 'admin_groupings': | |
| form_groupings(); return; break; | |
| case 'snews_articles': | |
| admin_articles('article_view'); return; break; | |
| case 'extra_contents': | |
| admin_articles('extra_view'); return; break; | |
| case 'snews_pages': | |
| admin_articles('page_view'); return; break; | |
| case 'admin_article': | |
| form_articles(''); return; break; | |
| case 'article_new': | |
| form_articles('article_new'); return; break; | |
| case 'extra_new': | |
| form_articles('extra_new'); return; break; | |
| case 'page_new': | |
| form_articles('page_new'); return; break; | |
| case 'editcomment': | |
| edit_comment(); return; break; | |
| case 'snews_files': | |
| files(); return; break; | |
| case 'process': | |
| processing(); return; break; | |
| case 'logout': | |
| session_destroy(); | |
| echo '<meta http-equiv="refresh" content="2; url='._SITE.'">'; | |
| echo '<h2>'.l('log_out').'</h2>'; | |
| return; break; | |
| } | |
| } | |
| switch ($action) { | |
| case 'archive': | |
| archive(); break; | |
| case 'sitemap': | |
| sitemap(); break; | |
| case 'contact': | |
| contact(); break; | |
| case 'login': | |
| login(); break; | |
| case '404': | |
| echo '<p class="warning">'.l('error_404').'</p>'; // Patch #404 - 1.7.1 - message string revised. | |
| sitemap(); break; // Patch #404 - 1.7.1 - show sitemap with message. | |
| default: | |
| articles(); break; | |
| } | |
| } | |
| } | |
| // ARTICLES | |
| function articles() { | |
| global $categorySEF, $subcatSEF, $articleSEF, $_ID, $_POS, $_catID, $_XNAME; | |
| $frontpage = s('display_page'); | |
| $title_not_found = '<h2>'.l('none_yet').'</h2>'; | |
| if (_ADMIN) { | |
| $visible=''; | |
| $title_not_found .= '<p>'.l('create_new').' | |
| <a href="'._SITE.'administration/" title="'.l('administration').'">'.l('administration').'</a></p>'; | |
| } else { | |
| $visible =' AND a.visible=\'YES\' '; | |
| } | |
| if ($_ID || (!$_catID && $frontpage != 0)) { | |
| if (!$_ID) $_ID = $frontpage; | |
| // article or page, id as indentifier | |
| $query_articles = 'SELECT | |
| a.id AS aid,title,a.seftitle AS asef,text,a.date, | |
| a.displaytitle,a.displayinfo,a.commentable,a.visible | |
| FROM '._PRE.'articles'.' AS a | |
| WHERE id ='.$_ID.$visible; | |
| } else { | |
| if (s('display_pagination') == 'on') $on = true; else $on = false; | |
| if ($on == true) { | |
| if ($articleSEF) { | |
| $SEF = $articleSEF; | |
| } elseif ($subcatSEF) { | |
| $SEF = $subcatSEF; | |
| } else { | |
| $SEF = $categorySEF; | |
| } | |
| // pagination | |
| $currentPage = strpos($SEF, l('paginator')) === 0 ? str_replace(l('paginator'), '', $SEF) : ''; | |
| if ($_catID) { | |
| $count = 'SELECT COUNT(a.id) AS num | |
| FROM '._PRE.'articles'.' AS a | |
| WHERE position = 1 | |
| AND a.published =1 | |
| AND category = '.$_catID.$visible.' | |
| GROUP BY category'; | |
| } else { | |
| $count = 'SELECT COUNT(a.id) AS num | |
| FROM '._PRE.'articles'.' AS a | |
| LEFT OUTER JOIN '._PRE.'categories'.' as c | |
| ON category = c.id | |
| LEFT OUTER JOIN '._PRE.'categories'.' as x | |
| ON c.subcat = x.id AND (x.published =\'YES\') | |
| WHERE show_on_home = \'YES\' '.$visible.' | |
| AND position = 1 | |
| AND a.published =1 | |
| AND c.published =\'YES\' | |
| GROUP BY show_on_home'; | |
| } | |
| $count = mysql_query($count); | |
| if ($count) { | |
| $r = mysql_fetch_array($count); | |
| $num = $r['num']; | |
| } | |
| } | |
| if ($num === 0 ) { | |
| echo $title_not_found; | |
| } else { | |
| $articleCount = s('article_limit'); | |
| $article_limit = (empty($articleCount) || $articleCount < 1) ? 100 : $articleCount; | |
| $totalPages = ceil($num/$article_limit); | |
| if (!isset($currentPage) || !is_numeric($currentPage) || $currentPage < 1) { | |
| $currentPage = 1; | |
| } | |
| // get the rows for category | |
| if ($_catID) { | |
| $query_articles = 'SELECT | |
| a.id AS aid,title,a.seftitle AS asef,text,a.date, | |
| a.displaytitle,a.displayinfo,a.commentable,a.visible | |
| FROM '._PRE.'articles'.' AS a | |
| WHERE position = 1 | |
| AND a.published =1 | |
| AND category = '.$_catID.$visible.' | |
| ORDER BY artorder ASC,date DESC | |
| LIMIT '.($currentPage - 1) * $article_limit.','.$article_limit; | |
| } else { | |
| $query_articles = 'SELECT | |
| a.id AS aid,title,a.seftitle AS asef,text,a.date, | |
| displaytitle,displayinfo,commentable,a.visible, | |
| c.name AS name,c.seftitle AS csef, | |
| x.name AS xname,x.seftitle AS xsef | |
| FROM '._PRE.'articles'.' AS a | |
| LEFT OUTER JOIN '._PRE.'categories'.' as c | |
| ON category = c.id | |
| LEFT OUTER JOIN '._PRE.'categories'.' as x | |
| ON c.subcat = x.id AND x.published =\'YES\' | |
| WHERE show_on_home = \'YES\' | |
| AND position = 1 | |
| AND a.published =1 | |
| AND c.published =\'YES\''.$visible.' | |
| ORDER BY date DESC | |
| LIMIT '.($currentPage - 1) * $article_limit.','.$article_limit; | |
| } | |
| } | |
| } | |
| $result = mysql_query($query_articles); | |
| $numrows = mysql_num_rows($result); | |
| if (!$result || !$numrows) { | |
| if (_ADMIN) { | |
| echo $title_not_found; | |
| } | |
| echo '<ul class="vertical">'; | |
| menu_articles(0,10,1); | |
| echo '</ul>'; | |
| } else { | |
| $link = '<a href="'._SITE; | |
| while ($r = mysql_fetch_array($result)) { | |
| $infoline = $r['displayinfo'] == 'YES' ? true : false; | |
| $text = stripslashes($r['text']); | |
| if (!empty($currentPage)) { | |
| $short_display = strpos($text, '[break]'); | |
| $shorten = $short_display == 0 ? 9999000 : $short_display; | |
| } else { | |
| $shorten = 9999000; | |
| } | |
| $comments_query = 'SELECT id FROM '._PRE.'comments'.' | |
| WHERE articleid = '.$r['aid'].' AND approved = \'True\''; | |
| $comments_result = mysql_query($comments_query); | |
| $comments_num = mysql_num_rows($comments_result); | |
| $a_date_format = date(s('date_format'), strtotime($r['date'])); | |
| if ($r['csef']) $uri = $r['xsef'] ? $r['xsef'].'/'.$r['csef'] : $r['csef']; | |
| elseif ($_XNAME) $uri = $categorySEF.'/'.$subcatSEF; | |
| else $uri = $categorySEF; | |
| $title = $r['title']; | |
| if ($r['displaytitle'] == 'YES') { | |
| if (!$_ID) { | |
| echo '<h2 class="big">'.$link.$uri.'/'.$r['asef'].'/">'.$title.'</a></h2>'; | |
| } else { | |
| echo '<h2>'.$title.'</h2>'; | |
| } | |
| } | |
| file_include(str_replace('[break]', '',$text), $shorten); | |
| $commentable = $r['commentable']; | |
| $visiblity = $r['visible'] == 'YES' ? | |
| '<a href="'._SITE.'?action=process&task=hide&item=snews_articles&id='.$r['aid'].'&back='.$uri.'">'.l('hide').'</a>' : | |
| l('hidden').' ( <a href="'._SITE.'?action=process&task=show&item=snews_articles&id='.$r['aid'].'&back='.$uri.'">'.l('show').'</a> )' ; | |
| $edit_link = $link.'?action=admin_article&id='.$r['aid'].'" title="'.$title.'">'.l('edit').'</a> '; | |
| $edit_link.= ' '.l('divider').' '.$visiblity; | |
| if (!empty($currentPage)) { | |
| if ($infoline == true) { | |
| $tag = explode(',', tags('infoline')); | |
| foreach ($tag as $tag) { | |
| switch (true) { | |
| case ($tag == 'date'): | |
| echo $a_date_format; | |
| break; | |
| case ($tag == 'readmore' && strlen($r['text']) > $shorten): | |
| echo $link.$uri.'/'.$r['asef'].'/">'.l('read_more').'</a> '; | |
| break; | |
| case ($tag == 'comments' && ($commentable == 'YES' || $commentable == 'FREEZ')): | |
| echo $link.$uri.'/'.$r['asef'].'/#'.l('comment').'1"> | |
| '.l('comments').' ('.$comments_num.')</a> '; | |
| break; | |
| case ($tag == 'edit' && _ADMIN): | |
| echo ' '.$edit_link; | |
| break; | |
| case ($tag != 'readmore' && $tag != 'comments' && $tag != 'edit'): | |
| echo $tag; | |
| break; | |
| } | |
| } | |
| } else if (_ADMIN) { | |
| echo '<p>'.$edit_link.'</p>'; | |
| } | |
| } else if (empty($currentPage)) { | |
| if ($infoline == true) { | |
| $tag = explode(',', tags('infoline')); | |
| foreach ($tag as $tag ) { | |
| switch ($tag) { | |
| case 'date': | |
| echo $a_date_format; | |
| break; | |
| case 'readmore': | |
| case 'comments': ; | |
| break; | |
| case 'edit': | |
| if (_ADMIN) { | |
| echo ' '.$edit_link; | |
| } | |
| break; | |
| default: | |
| echo $tag; | |
| } | |
| } | |
| } else if (_ADMIN) { | |
| echo '<p>'.$edit_link.'</p>'; | |
| } | |
| } | |
| } | |
| if (!empty($currentPage) && ($num> $article_limit) && $on) { | |
| paginator( $currentPage, $totalPages, l('paginator')); | |
| } | |
| if (!empty($_POS) && empty($currentPage) && $infoline == true) { | |
| if ($commentable == 'YES') { | |
| comment('unfreezed'); | |
| } else if ($commentable == 'FREEZ') { | |
| comment('freezed'); | |
| } | |
| } | |
| } | |
| } | |
| // COMMENTS | |
| function comment($freeze_status) { | |
| echo '<h3>Comments</h3>'; | |
| global $categorySEF, $subcatSEF, $articleSEF, $_ID, $commentsPage; | |
| if (isset($commentsPage)) { | |
| $commentsPage = str_replace(l('comment_pages'),'',$commentsPage); | |
| } | |
| if (strpos($articleSEF, l('paginator')) === 0) { | |
| $articleSEF = str_replace(l('paginator'), '', $articleSEF); | |
| } | |
| if (!isset($commentsPage) || !is_numeric($commentsPage) || $commentsPage < 1) { | |
| $commentsPage = 1; | |
| } | |
| $comments_order = s('comments_order'); | |
| if (isset($_POST['comment'])) { | |
| $comment = cleanWords(trim($_POST['text'])); | |
| $comment = strlen($comment) > 4 ? clean(cleanXSS($comment)) : null; | |
| $name = trim($_POST['name']); | |
| $name = preg_replace('/[^a-zA-Z0-9_\s-]/', '', $name); // Patch #15 - 1.7.0 | |
| if (empty($name)) { $name = 'Anonymous'; } // Patch #15 - 1.7.0 | |
| $name = strlen($name) > 1 ? clean(cleanXSS($name)) : null; | |
| $url = trim($_POST['url']); | |
| $url = preg_replace('/[^a-zA-Z0-9_:\/\.-]/', '', $url); // Patch #15 - 1.7.0 | |
| $url = (strlen($url) > 8 && strpos($url, '?') === false) ? clean(cleanXSS($url)) : null; | |
| $post_article_id = (is_numeric($_POST['id']) && $_POST['id'] > 0) ? $_POST['id'] : null; | |
| $ip = (strlen($_POST['ip']) < 16) ? clean(cleanXSS($_POST['ip'])) : null; | |
| if (_ADMIN) { | |
| $doublecheck = 1; | |
| $ident=1; | |
| } else { | |
| $contentCheck = retrieve('id', 'comments', 'comment', $comment); | |
| $ident = !$contentCheck || (time() - $_SESSION[_SITE.'poster']['time']) > s('comment_repost_timer') || | |
| $_SESSION[_SITE.'poster']['ip'] !== $ip ? 1 : 0; | |
| $doublecheck = $_SESSION[_SITE.'poster']['article'] === "$comment:|:$post_article_id" && | |
| (time()-$_SESSION[_SITE.'poster']['time']) < s('comment_repost_timer') ? 0 : 1; | |
| } | |
| if ($ip == $_SERVER['REMOTE_ADDR'] && $comment && $name && $post_article_id && | |
| checkMathCaptcha() && $doublecheck == 1 && $ident == 1) { | |
| $url = preg_match('/((http)+(s)?:(\/\/)|(www\.))([a-z0-9_\-]+)/', $url) ? $url : ''; | |
| $url = substr($url, 0, 3) == 'www' ? 'http://'.$url : $url; | |
| $time = date('Y-m-d H:i:s'); | |
| unset($_SESSION[_SITE.'poster']); | |
| $approved = s('approve_comments') != 'on'|| _ADMIN ? 'True' : ''; | |
| $query = 'INSERT INTO '._PRE.'comments'.'(articleid, name, url, comment, time, approved) VALUES'. | |
| "('$post_article_id', '$name', '$url', '$comment', '$time', '$approved')"; | |
| mysql_query($query); | |
| $_SESSION[_SITE.'poster']['article']="$comment:|:$post_article_id"; | |
| $_SESSION[_SITE.'poster']['time'] = time(); | |
| // this is to set session for checking multiple postings. | |
| $_SESSION[_SITE.'poster']['ip'] = $ip; | |
| $commentStatus = s('approve_comments') == 'on'&& !_ADMIN ? l('comment_sent_approve') : l('comment_sent'); | |
| // eMAIL COMMENTS | |
| if (s('mail_on_comments') == 'on' && !_ADMIN) { | |
| if (s('approve_comments') == 'on') { | |
| $status = l('approved_text'); | |
| $subject =l('subject_a'); | |
| } else { | |
| $status = l('not_waiting_approved'); | |
| $subject =l('subject_b'); | |
| } | |
| $to = s('website_email'); | |
| $send_array = array( | |
| 'to'=>$to, | |
| 'name'=>$name, | |
| 'comment'=>$comment, | |
| 'ip'=>$ip, | |
| 'url'=>$url, | |
| 'subject'=>$subject, | |
| 'status'=>$status); | |
| send_email($send_array); | |
| } | |
| // End of Mail | |
| } else { | |
| $commentStatus = l('comment_error'); | |
| $commentReason = l('ce_reasons'); | |
| $fail = true; | |
| $_SESSION[_SITE.'comment']['name'] = $name; | |
| $_SESSION[_SITE.'comment']['comment'] = br2nl($comment); | |
| $_SESSION[_SITE.'comment']['url'] = $url; | |
| $_SESSION[_SITE.'comment']['fail'] = $fail; | |
| } | |
| echo '<h2>'.$commentStatus.'</h2>'; | |
| if (!empty($commentReason)) { | |
| echo '<p>'.$commentReason.'</p>'; | |
| } | |
| $postArt = clean(cleanXSS($_POST['article'])); | |
| $postArtID = retrieve('category','articles','id',$post_article_id); | |
| if ($postArtID == 0) { | |
| $postCat = '' ; | |
| } else { | |
| $postCat = cat_rel($postArtID, 'seftitle').'/'; | |
| } | |
| if ($fail){ | |
| $back_link = _SITE.$postCat.$postArt; | |
| echo '<a href="'.$back_link.'/">'.l('back').'</a>'; | |
| } else { | |
| echo '<meta http-equiv="refresh" content="1; url='._SITE.$postCat.$postArt.'/">'; | |
| } | |
| } else { | |
| $commentCount = s('comment_limit'); | |
| $comment_limit = (empty($commentCount) || $commentCount < 1) ? 100 : $commentCount; | |
| if (isset($commentsPage)) { | |
| $pageNum = $commentsPage; | |
| } | |
| $offset = ($pageNum - 1) * $comment_limit; | |
| $totalrows = 'SELECT count(id) AS num FROM '._PRE.'comments'.' | |
| WHERE articleid = '.$_ID.' AND approved = \'True\';'; | |
| $rowsresult = mysql_query($totalrows); | |
| $numrows = mysql_fetch_array($rowsresult); | |
| $numrows = $numrows['num']; | |
| // Patch #8 - 1.7.0 - redundant section removed | |
| if ($numrows > 0) { | |
| $query = 'SELECT | |
| id,articleid,name,url,comment,time,approved | |
| FROM '._PRE.'comments'.' | |
| WHERE articleid = '.$_ID.' | |
| AND approved = \'True\' | |
| ORDER BY id '.$comments_order.' | |
| LIMIT '."$offset, $comment_limit"; | |
| $result = mysql_query($query) or die(l('dberror')); | |
| $ordinal = 1; | |
| $date_format = s('date_format'); | |
| $edit_link = ' <a href="'._SITE.'?action='; | |
| while ($r = mysql_fetch_array($result)) { | |
| $date = date($date_format, strtotime($r['time'])); | |
| $commentNum = $offset + $ordinal; | |
| $tag = explode(',', tags('comments')); | |
| foreach ($tag as $tag) { | |
| switch (true) { | |
| case ($tag == 'date'): | |
| echo '<a id="'.l('comment').$commentNum.'" | |
| name="'.l('comment').$commentNum.'"></a>'.$date; | |
| break; | |
| case ($tag == 'name'): | |
| $name = $r['name']; | |
| echo !empty($r['url']) ? | |
| '<a href="'.$r['url'].'" title="'.$r['url'].'" rel="nofollow"> | |
| '.$name.'</a> ' : $name; | |
| break; | |
| case ($tag == 'comment'): | |
| echo $r['comment']; | |
| break; | |
| case ($tag == 'edit' && _ADMIN): | |
| echo $edit_link.'editcomment&commentid='.$r['id'].'" | |
| title="'.l('edit').' '.l('comment').'">'.l('edit').'</a> '; | |
| echo $edit_link.'process&task=deletecomment&commentid='.$r['id'].'" | |
| title="'.l('delete').' '.l('comment').'" onclick="return pop()">'.l('delete').'</a>'; | |
| break; | |
| case ($tag == 'edit'): ; | |
| break; | |
| default: | |
| echo $tag; | |
| } | |
| } | |
| $ordinal++; | |
| } | |
| $maxPage = ceil($numrows / $comment_limit); | |
| $back_to_page = ceil(($numrows + 1) / $comment_limit); | |
| if ($maxPage > 1) { | |
| paginator($pageNum, $maxPage,l('comment_pages')); | |
| } | |
| } | |
| if ($freeze_status != 'freezed' && s('freeze_comments') != 'YES') { | |
| if ($numrows == 0) {echo '<p>'.l('no_comment').'</p>';} // Patch #8 - 1.7.0 - new line added | |
| // recall and set vars for reuse when botched post | |
| if($_SESSION[_SITE.'comment']['fail'] == true) { | |
| $name = $_SESSION[_SITE.'comment']['name']; | |
| $comment = $_SESSION[_SITE.'comment']['comment']; | |
| $url = $_SESSION[_SITE.'comment']['url']; | |
| unset($_SESSION[_SITE.'comment']); | |
| } else { | |
| $url = $name = $comment = ''; | |
| } | |
| // end var retrieval | |
| $art_value = empty($articleSEF) ? $subcatSEF : $articleSEF; | |
| echo '<div class="commentsbox"><h2>'.l('addcomment').'</h2>'."\r\n"; | |
| echo '<p>'.l('required').'</p>'."\r\n"; | |
| echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', _SITE, '')."\r\n"; | |
| echo html_input('text', 'name', 'name', $name, '* '.l('name'), 'text', '', '', '', '', '', '', '', '', '')."\r\n"; | |
| echo html_input('text', 'url', 'url', $url, l('url'), 'text', '', '', '', '', '', '', '', '', '')."\r\n"; | |
| echo html_input('textarea', 'text', 'text', $comment, '* '.l('comment'), '', '', '', '', '', '5', '5', '', '', '')."\r\n"; | |
| echo mathCaptcha()."\r\n"; | |
| echo '<p>'; | |
| echo html_input('hidden', 'category', 'category', $categorySEF, '', '', '', '', '', '', '', '', '', '', '')."\r\n"; | |
| echo html_input('hidden', 'id', 'id', $_ID, '', '', '', '', '', '', '', '', '', '', '')."\r\n"; | |
| echo html_input('hidden', 'article', 'article', $art_value, '', '', '', '', '', '', '', '', '', '', '')."\r\n"; | |
| echo html_input('hidden', 'commentspage', 'commentspage', $back_to_page, '', '', '', '', '', '', '', '', '', '', '')."\r\n"; | |
| echo html_input('hidden', 'ip', 'ip', $_SERVER['REMOTE_ADDR'], '', '', '', '', '', '', '', '', '', '', '')."\r\n"; | |
| echo html_input('hidden', 'time', 'time', time(), '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', 'comment', 'comment', l('submit'), '', 'button', '', '', '', '', '', '', '', '', '')."\r\n"; | |
| echo '</p></form></div>'; | |
| } else { | |
| echo '<p>'.l('frozen_comments').'</p>'; | |
| } | |
| } | |
| } | |
| // ARCHIVE | |
| function archive($start = 0, $size = 200) { | |
| echo '<h2>'.l('archive').'</h2>'; | |
| $query = 'SELECT | |
| title,a.seftitle AS asef,a.date AS date, | |
| c.name AS name,c.seftitle AS csef, | |
| x.name AS xname,x.seftitle AS xsef | |
| FROM '._PRE.'articles'.' AS a | |
| LEFT OUTER JOIN '._PRE.'categories'.' as c | |
| ON category = c.id | |
| LEFT OUTER JOIN '._PRE.'categories'.' as x | |
| ON c.subcat = x.id | |
| WHERE position = 1 | |
| AND a.published = 1 | |
| AND c.published =\'YES\' | |
| AND (x.published =\'YES\' || x.published IS NULL) | |
| ORDER BY date DESC | |
| LIMIT '."$start, $size"; | |
| $result = mysql_query($query); | |
| $count = mysql_num_rows($result); | |
| if ($count === 0) { | |
| echo '<p>'.l('no_articles').'</p>'; | |
| } else { | |
| $month_names = explode(', ', l('month_names')); | |
| $dot = l('divider'); | |
| echo '<p>'; | |
| while ($r = mysql_fetch_array($result)) { | |
| $year = substr($r['date'], 0, 4); | |
| $month = substr($r['date'], 5, 2) -1; | |
| $month_name = (substr($month, 0, 1) == 0) ? $month_names[substr($month, 1, 1)] : $month_names[$month]; | |
| if ($last <> $year.$month) { | |
| echo '<strong>'.$month_name.', '.$year.'</strong><br />'; | |
| } | |
| $last = $year.$month; | |
| $link = isset($r['xsef']) ? $r['xsef'].'/'.$r['csef'] : $r['csef']; | |
| echo $dot.' <a href="'._SITE.$link.'/'.$r['asef'].'/"> | |
| '.$r['title'].' ('.$r['name'].')</a><br />'; | |
| } | |
| echo'</p>'; | |
| } | |
| } | |
| // SITEMAP | |
| function sitemap() { | |
| echo '<h2>'.l('sitemap').'</h2> | |
| <h3><strong>'.l('pages').'</strong></h3> | |
| <ul>'; | |
| $link = '<li><a href="'._SITE; | |
| echo $link.'">'.l('home').'</a></li>'; | |
| echo $link.'archive/">'.l('archive').'</a></li>'; | |
| // Patch #16 - 1.7.1 | |
| // added id to SELECT it, and filter out page if selected as Home with: AND id <> '".s('display_page')."' | |
| // selects only IDs that are less or more than ID of the designated home page. | |
| $query = "SELECT id,title,seftitle | |
| FROM "._PRE.'articles'." | |
| WHERE position = 3 | |
| AND published = 1 | |
| AND visible = 'YES' | |
| AND id <> '".s('display_page')."' | |
| ORDER BY artorder ASC, date, id"; | |
| $result = mysql_query($query); | |
| while ($r = mysql_fetch_array($result)) { | |
| echo $link.$r['seftitle'].'/">'.$r['title'].'</a></li>'; | |
| } | |
| echo $link.'contact/">'.l('contact').'</a></li>'; | |
| echo $link.'sitemap/">'.l('sitemap').'</a></li>'; | |
| echo '</ul> | |
| <h3><strong>'.l('articles').'</strong></h3> | |
| <ul>'; | |
| $art_query = 'SELECT title, seftitle, date | |
| FROM '._PRE.'articles'.' | |
| WHERE position = 1 | |
| AND published = 1 | |
| AND visible = \'YES\''; | |
| $cat_query = 'SELECT id, name, seftitle, description, subcat | |
| FROM '._PRE.'categories'.' | |
| WHERE published = \'YES\' | |
| AND subcat = 0 | |
| ORDER BY catorder,id'; | |
| $cat_result = mysql_query($cat_query); | |
| if (mysql_num_rows($cat_result) == 0) { | |
| echo '<li>'.l('no_articles').'</li></ul>'; | |
| } else { | |
| while ($c = mysql_fetch_array($cat_result)) { | |
| $category_title = $c['seftitle']; | |
| echo '<li><strong><a href="'._SITE.$category_title.'/" title="'.$c['description'].'"> | |
| '.$c['name'].'</a></strong>'; | |
| $catid = $c['id']; | |
| $query = $art_query.' AND category = '.$catid.' ORDER BY id DESC'; | |
| $result = mysql_query($query); | |
| if (mysql_num_rows($result) > 0) { | |
| echo '<ul>'; | |
| } | |
| while ($r = mysql_fetch_array($result)) { | |
| echo '<li>'.l('divider').' <a href="'._SITE.$category_title.'/'.$r['seftitle'].'/"> | |
| '.$r['title'].'</a></li>'; | |
| } | |
| if (mysql_num_rows($result) > 0) { | |
| echo '</ul>'; | |
| } | |
| $subcat_result = mysql_query('SELECT id, name, seftitle, description, subcat | |
| FROM '._PRE.'categories'.' | |
| WHERE published = \'YES\' | |
| AND subcat = '.$c['id'].' | |
| ORDER BY catorder ASC'); | |
| if (mysql_num_rows($subcat_result) > 0) { | |
| echo '<ul>'; | |
| } | |
| while ($s = mysql_fetch_array($subcat_result)) { | |
| $subcat_title = $s['seftitle']; | |
| $subcat_name = $s['name']; | |
| echo '<li class="subcat"><strong><a href="'. | |
| _SITE.$category_title.'/'.$subcat_title.'/" title="'.$s['description'].'">'.$subcat_name.'</a></strong>'; | |
| $subcatid = $s['id']; | |
| $query = $art_query.' AND category = '.$subcatid.' ORDER BY id DESC'; | |
| $artresult = mysql_query($query); | |
| if (mysql_num_rows($artresult) > 0) { | |
| echo '<ul>'; | |
| } | |
| while ($r = mysql_fetch_array($artresult)) { | |
| echo '<li class="subcat">'.l('divider').' | |
| <a href="'._SITE.$category_title.'/'.$subcat_title.'/'.$r['seftitle'].'/"> | |
| '.$r['title'].'</a></li>'; | |
| } | |
| if (mysql_num_rows($artresult) > 0) { | |
| echo '</ul>'; | |
| } | |
| echo '</li>'; | |
| } | |
| if (mysql_num_rows($subcat_result) > 0) { | |
| echo '</ul>'; | |
| } | |
| echo '</li>'; | |
| } | |
| echo '</ul>'; | |
| } | |
| } | |
| // CONTACT FORM - // Patch #12 - 1.7.1 - security patch added | |
| function contact() { | |
| if (!isset($_POST['contactform'])) { | |
| $_SESSION[_SITE.'time'] = $time = time(); | |
| echo | |
| '<div class="commentsbox"><h2>'.l('contact').'</h2> | |
| <p>'.l('required').'</p> | |
| <form method="post" action="'._SITE.'" id="post" accept-charset="UTF-8"> | |
| <p><label for="name">* ',l('name'),'</label>:<br /> | |
| <input type="text" name="name" id="name" maxlength="100" class="text" value="" /></p> | |
| <p><label for="email">* ',l('email'),'</label>:<br /> | |
| <input type="text" name="email" id="email" maxlength="320" class="text" value="" /></p> | |
| <p><label for="weblink">',l('url'),'</label>:<br /> | |
| <input type="text" name="weblink" id="weblink" maxlength="160" class="text" value="" /></p> | |
| <p><label for="message">* ',l('message'),'</label>:<br /> | |
| <textarea name="message" rows="5" cols="5" id="message"></textarea></p> | |
| ',mathCaptcha(),' | |
| <p><input type="hidden" name="ip" id="ip" value="',$_SERVER['REMOTE_ADDR'],'" /> | |
| <input type="hidden" name="time" id="time" value="',time(),'" /> | |
| <input type="submit" name="contactform" id="contactform" class="button" value="',l('submit'),'" /></p> | |
| </form> | |
| </div>'; | |
| } elseif( isset( $_SESSION[_SITE.'time'] ) ) { | |
| $count = $magic = 0; | |
| if( get_magic_quotes_gpc() ){ $magic = 1; } | |
| foreach($_POST as $k => $v){ | |
| if($count === 8 ) die; | |
| if( $magic ) $$k = stripslashes($v); | |
| else $$k = $v; | |
| ++$count; | |
| } | |
| $to = s('website_email'); | |
| $subject = s('contact_subject'); | |
| $name = (isset($name[0]) && ! isset($name[300]) ) ? trim($name) : null; | |
| $name = ! preg_match('/[\\n\\r]/', $name) ? $name : die; | |
| $mail = (isset($email[6]) && ! isset($email[320]) ) ? trim($email) : null; | |
| $mail = ! preg_match('/[\\n\\r]/', $mail) ? $mail : die; | |
| $url = (isset($weblink[4]) && ! isset($weblink[160]) ) ? trim($weblink) : null; | |
| $url = ( strpos($url, '?') === false && ! preg_match('/[\\n\\r]/', $url)) ? $url : null; | |
| $message = (isset($message[10]) && ! isset($message[6000]) ) ? strip_tags($message) : null; | |
| $time = ( isset($_SESSION[_SITE.'time']) && $_SESSION[_SITE.'time'] === (int)$time && (time() - $time) > 10) ? $time : null ; | |
| if ( isset($ip) && $ip === $_SERVER['REMOTE_ADDR'] && $time | |
| && $name && $mail && $message && checkMathCaptcha()) { | |
| unset($_SESSION[_SITE.'time']); | |
| echo notification(0,l('contact_sent'),'home'); | |
| $send_array = array( | |
| 'to'=>$to, | |
| 'name'=>$name, | |
| 'email'=>$mail, | |
| 'message'=>$message, | |
| 'ip'=>$ip, | |
| 'url'=>$url, | |
| 'subject'=>$subject); | |
| send_email($send_array); | |
| } else { | |
| echo notification(1,l('contact_not_sent'),'contact'); | |
| } | |
| } | |
| } | |
| // MENU ARTICLES | |
| function menu_articles($start = 0, $size = 5, $cat_specific = 0) { | |
| global $categorySEF, $_catID,$subcatSEF; | |
| switch ($cat_specific){ | |
| case 1 : | |
| $subcat = !empty($_catID) && empty($subcatSEF) ? 'AND c.subcat = '.$_catID : ''; | |
| break; | |
| case 2 : | |
| $subcat = !empty($_catID) ? 'AND c.subcat = '.$_catID : ''; | |
| break; | |
| default: | |
| $subcat = ''; | |
| } | |
| $query = 'SELECT | |
| title,a.seftitle AS asef,date, | |
| c.name AS name,c.seftitle AS csef, | |
| x.name AS xname,x.seftitle AS xsef | |
| FROM '._PRE.'articles'.' AS a | |
| LEFT OUTER JOIN '._PRE.'categories'.' as c | |
| ON category = c.id | |
| LEFT OUTER JOIN '._PRE.'categories'.' as x | |
| ON c.subcat = x.id AND x.published =\'YES\' | |
| WHERE position = 1 | |
| AND a.published = 1 | |
| AND c.published =\'YES\' | |
| AND a.visible = \'YES\' | |
| '.$subcat.' | |
| ORDER BY date DESC | |
| LIMIT '."$start, $size"; | |
| $result = mysql_query($query); | |
| $count = mysql_num_rows($result); | |
| if ( $count === 0) { | |
| echo '<li>'.l('no_articles').'</li>'; | |
| } else { | |
| while ($r = mysql_fetch_array($result)) { | |
| $name = s('show_cat_names') == 'on' ? ' ('.$r['name'].')' : ''; | |
| $date = date(s('date_format'), strtotime($r['date'])); | |
| $link = isset($r['xsef']) ? $r['xsef'].'/'.$r['csef'] : $r['csef']; | |
| echo '<li><a href="'._SITE.$link.'/'.$r['asef'].'/" | |
| title="'.$r['name'].' / '.$r['title'].' ('.$date.')">'.$r['title'].$name.'</a> | |
| </li>'; | |
| } | |
| } | |
| } | |
| // NEW COMMENTS // Patch #1 - 1.7.0 - WHERE string updated in the query below | |
| function new_comments($number = 5, $stringlen = 30) { | |
| $query = 'SELECT | |
| a.id AS aid,title,a.seftitle AS asef, | |
| category,co.id,articleid,co.name AS coname,comment, | |
| c.name,c.seftitle AS csef,c.subcat, | |
| x.name,x.seftitle AS xsef | |
| FROM '._PRE.'comments'.' AS co | |
| LEFT OUTER JOIN '._PRE.'articles'.' AS a | |
| ON articleid = a.id | |
| LEFT OUTER JOIN '._PRE.'categories'.' AS c | |
| ON category = c.id AND c.published =\'YES\' | |
| LEFT OUTER JOIN '._PRE.'categories'.' AS x | |
| ON c.subcat = x.id AND x.published =\'YES\' | |
| WHERE a.published = 1 AND (a.commentable = \'YES\' || a.commentable = \'FREEZ\' ) | |
| AND approved = \'True\' | |
| ORDER BY co.id DESC LIMIT '.$number; | |
| $result = mysql_query($query); | |
| if (mysql_num_rows($result) === 0) { | |
| echo '<li>'.l('no_comments').'</li>'; | |
| } else { | |
| $comlim = s('comment_limit'); | |
| $comment_limit = $comlim < 1 ? 1 : $comlim; | |
| $comments_order = s('comments_order'); | |
| while ($r = mysql_fetch_array($result)) { | |
| $loopr = mysql_query("SELECT id FROM "._PRE.'comments'." | |
| WHERE articleid = '$r[articleid]' | |
| AND approved = 'True' | |
| ORDER BY id $comments_order"); | |
| $num = 1; | |
| while ($r_art = mysql_fetch_array($loopr)) { | |
| if ($r_art['id'] == $r['id']) { | |
| $ordinal = $num; | |
| } | |
| $num++; | |
| } | |
| $name = $r['coname']; | |
| $comment = strip_tags($r['comment']); | |
| $page = ceil($ordinal / $comment_limit); | |
| $ncom = $name.' ('.$comment; | |
| $ncom = strlen($ncom) > $stringlen ? substr($ncom, 0, $stringlen - 3).'...' : $ncom; | |
| $ncom.= strlen($name) < $stringlen ? ')' : ''; | |
| $ncom = str_replace(' ...', '...', $ncom); | |
| $paging = $page > 1 ? '/'.l('comment_pages').$page : ''; // Patch #1 - 1.7.0 | |
| unset($link); // Patch #10 - 1.7.0 - 4 strings | |
| if (isset($r['xsef'])) { $link = $r['xsef'].'/'; } | |
| if (isset($r['csef'])) { $link .= $r['csef'].'/'; } | |
| $link .= $r['asef']; // end Patch #10 - 1.7.0 | |
| echo '<li><a href="'._SITE.$link.$paging.'/#'.l('comment').$ordinal.'" | |
| title="'.l('comment_info').' '.$r['title'].'">'.$ncom.'</a> | |
| </li>'; | |
| } | |
| } | |
| } | |
| // SEARCH FORM | |
| function searchform() { ?> | |
| <form id="search_engine" method="post" action="<?php echo _SITE; ?>" accept-charset="<?php echo s('charset');?>"> | |
| <p><input class="searchfield" name="search_query" type="text" id="keywords" value="<?php echo l('search_keywords'); | |
| ?>" onfocus="document.forms['search_engine'].keywords.value='';" onblur="if (document.forms['search_engine'].keywords.value == '') document.forms['search_engine'].keywords.value='<?php echo l('search_keywords'); ?>';" /> | |
| <input class="searchbutton" name="submit" type="submit" value="<?php echo l('search_button')?>" /></p> | |
| </form> | |
| <?php } | |
| //SEARCH ENGINE | |
| function search($limit = 20) { | |
| $search_query = clean(cleanXSS($_POST['search_query'])); | |
| echo '<h2>'.l(search_results).'</h2>'; | |
| if (strlen($search_query) < 4 || $search_query == l('search_keywords')) { | |
| echo '<p>'.l('charerror').'</p>'; | |
| } else { | |
| $keywords = explode(' ', $search_query); | |
| $keyCount = count($keywords); | |
| $query = 'SELECT a.id | |
| FROM '._PRE.'articles'.' AS a | |
| LEFT OUTER JOIN '._PRE.'categories'.' as c | |
| ON category = c.id AND c.published =\'YES\' | |
| LEFT OUTER JOIN '._PRE.'categories'.' as x | |
| ON c.subcat = x.id AND x.published =\'YES\' | |
| WHERE position != 2 | |
| AND a.published = 1 | |
| AND'; | |
| if(!_ADMIN){ | |
| $query = $query.' a.visible = \'YES\' AND '; | |
| } | |
| if ($keyCount > 1) { | |
| for ($i = 0; $i < $keyCount - 1; $i++) { | |
| $query = $query.' (title LIKE "%'.$keywords[$i].'%" || | |
| text LIKE "%'.$keywords[$i].'%" || | |
| keywords_meta LIKE "%'.$keywords[$i].'%") &&'; | |
| } | |
| $j = $keyCount - 1; | |
| $query = $query.'(title LIKE "%'.$keywords[$j].'%" || | |
| text LIKE "%'.$keywords[$j].'%" || | |
| keywords_meta LIKE "%'.$keywords[$j].'%")'; | |
| } else { | |
| $query = $query.'(title LIKE "%'.$keywords[0].'%" || | |
| text LIKE "%'.$keywords[0].'%" || | |
| keywords_meta LIKE "%'.$keywords[0].'%")'; | |
| } | |
| $query = $query.' ORDER BY id DESC LIMIT '.$limit; | |
| $result = mysql_query($query); | |
| $numrows = mysql_num_rows($result); | |
| if (!$numrows) { | |
| echo '<p>'.l('noresults').' | |
| <strong>'.stripslashes($search_query).'</strong>.</p>'; | |
| } else { | |
| echo '<p><strong>'.$numrows.'</strong> '.l('resultsfound').' <strong>'. | |
| stripslashes($search_query).'</strong>.</p>'; | |
| while ($r = mysql_fetch_array($result)) { | |
| $Or_id[] = 'a.id ='.$r['id']; | |
| } | |
| $Or_id = implode(' OR ',$Or_id); | |
| $query = 'SELECT | |
| title,a.seftitle AS asef,a.date AS date, | |
| c.name AS name,c.seftitle AS csef, | |
| x.name AS xname,x.seftitle AS xsef | |
| FROM '._PRE.'articles'.' AS a | |
| LEFT OUTER JOIN '._PRE.'categories'.' as c | |
| ON category = c.id | |
| LEFT OUTER JOIN '._PRE.'categories'.' as x | |
| ON c.subcat = x.id | |
| WHERE '.$Or_id; | |
| $result = mysql_query($query); | |
| while ($r = mysql_fetch_array($result)) { | |
| $date = date(s('date_format'), strtotime($r['date'])); | |
| if ($r['name']) $name = ' ('.$r['name'].')'; | |
| if (isset($r['xsef'])) $link = $r['xsef'].'/'.$r['csef'].'/'; | |
| else $link = isset($r['csef']) ? $r['csef'].'/' : ''; | |
| echo '<p><a href="'._SITE.$link.$r['asef'].'/">'.$r['title'].$name.'</a> - '.$date.'</p>'; | |
| } | |
| } | |
| } | |
| echo '<p><br /><a href="'._SITE.'">'.l('backhome').'</a></p>'; | |
| } | |
| // RSS FEED - ARTICLES/PAGES/COMMENTS | |
| function rss_contents($rss_item){ // Patch #17A - 1.7.1 - removed: , $artSEF='' (redundant) | |
| header('Content-type: text/xml; charset='.s('charset').''); | |
| $limit = s('rss_limit'); | |
| switch($rss_item) { | |
| case 'rss-articles': | |
| $heading = l('articles'); | |
| $query = _PRE.'articles'.' WHERE position = 1 AND visible = \'YES\' AND published = 1 ORDER BY date'; | |
| break; | |
| case 'rss-pages': | |
| $heading = l('pages'); | |
| $query = _PRE.'articles'.' WHERE position = 3 AND visible = \'YES\' AND published = 1 ORDER BY date'; | |
| break; | |
| case 'rss-comments': | |
| $heading = l('comments'); | |
| $query = _PRE.'comments'." WHERE approved = 'True' ORDER BY id"; | |
| break; | |
| } | |
| echo '<?xml version="1.0" encoding="'.s('charset').'"?> | |
| <rss version="2.0"><channel> | |
| <title><![CDATA['.s('website_title').']]></title> | |
| <description><![CDATA['.$heading.']]></description> | |
| <link>'._SITE.'</link> | |
| <copyright><![CDATA[Copyright '.s('website_title').']]></copyright> | |
| <generator>sNews CMS</generator>'; | |
| $result = mysql_query("SELECT * FROM $query DESC LIMIT $limit"); | |
| $numrows = mysql_num_rows($result); | |
| $comments_order = s('comments_order'); | |
| $ordinal = $comments_order == 'DESC' ? 1 : $numrows; | |
| $comment_limit = s('comment_limit') < 1 ? 1 : s('comment_limit'); | |
| $comments_order = s('comments_order'); | |
| while ($r = mysql_fetch_assoc($result)) { | |
| switch($rss_item) { | |
| case 'rss-articles': | |
| case 'rss-pages': | |
| $date = date('D, d M Y H:i:s +0000', strtotime($r['date'])); | |
| if ($r['category'] == 0) { | |
| $categorySEF = ''; | |
| } else { | |
| $categorySEF = cat_rel($r['category'], 'seftitle').'/'; | |
| } | |
| $articleSEF = $r['seftitle']; | |
| $title = $r['title']; | |
| $text = $r['text']; | |
| break; | |
| case 'rss-comments': | |
| $subquery = "SELECT id FROM "._PRE.'comments'." | |
| WHERE articleid = ".$r['articleid']." | |
| ORDER BY id $comments_order"; | |
| $subresult = mysql_query($subquery); | |
| $num = 1; | |
| while ($subr = mysql_fetch_array($subresult)) { | |
| if ($subr['id'] == $r['id']) { | |
| $ordinal = $num; | |
| } | |
| $num++; | |
| } | |
| $page = ceil($ordinal / $comment_limit); | |
| $articleSEF = retrieve('seftitle', 'articles', 'id', $r['articleid']); | |
| $articleCat = retrieve('category', 'articles', 'id', $r['articleid']); | |
| $articleTitle = retrieve('title', 'articles', 'id', $r['articleid']); | |
| if ($articleCat == 0) { | |
| $categorySEF = ''; | |
| } else { | |
| $categorySEF = cat_rel($articleCat, 'seftitle').'/'; | |
| } | |
| if (!empty($articleSEF)) { | |
| $paging = $page > 1 ? $page.'/' : ''; | |
| $comment_link = 'c_'.$paging.'#'.l('comment').$ordinal; // Patch #14 - 1.7.0 | |
| } | |
| $date = date('D, d M Y H:i:s +0000', strtotime($r['time'])); | |
| $title = $articleTitle.' - '.$r['name']; | |
| $text = $r['comment']; | |
| break; | |
| } | |
| $link = _SITE.$categorySEF.$articleSEF.'/'.$comment_link; | |
| $item = | |
| '<item> | |
| <title><![CDATA['.strip($title).']]></title> | |
| <description> | |
| <![CDATA[ | |
| '.strip($text).' | |
| ]]> | |
| </description> | |
| <pubDate>'.$date.'</pubDate> | |
| <link>'.$link.'</link> | |
| <guid>'.$link.'</guid> | |
| </item>'; | |
| echo $item; | |
| } | |
| echo '</channel></rss>'; | |
| exit; | |
| } | |
| // RSS FEED - LINK BUILDER - Patch #17B - 1.7.1 - revised function: no globals, 1 query | |
| function rss_links() { | |
| $query = 'SELECT COUNT(id) as articles_count, | |
| (SELECT COUNT(id) FROM '._PRE.'articles WHERE position = 3 AND published = 1) as pages_count, | |
| (SELECT COUNT(id) FROM '._PRE.'comments WHERE approved = "True" ) as comments_count | |
| FROM '._PRE.'articles WHERE position = 1 AND published = 1'; | |
| $result = mysql_query( $query ); | |
| $l_error = array(); // catch any errors | |
| while ($r = mysql_fetch_assoc($result )) { | |
| foreach ($r as $k => $v) { | |
| if ( $v > 0 ) { | |
| $l = explode('_', $k); | |
| echo '<li><a href="rss-'.$l[0].'/">'.l( 'rss_'.$l[0] ).'</a></li>'; | |
| } else { | |
| $l_error[] = $k; | |
| } | |
| } | |
| } | |
| if (count($l_error) == 3) { | |
| echo '<li>'.l('no_rss').'</li>'; | |
| } | |
| } | |
| /*** ADMINISTRATIVE FUNCTIONS ***/ | |
| // LOGIN | |
| function login() { | |
| if (!_ADMIN) { | |
| echo '<div class="adminpanel"> | |
| <h2>'.l('login').'</h2>'; | |
| echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', _SITE.'administration/', ''); | |
| echo '<p>'.l('login_limit').'</p>'; | |
| echo html_input('text', 'uname', 'uname', '', l('username'), 'text', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('password', 'pass', 'pass', '', l('password'), 'text', '', '', '', '', '', '', '', '', ''); | |
| echo mathCaptcha(); | |
| echo '<p>'; | |
| echo html_input('hidden', 'Loginform', 'Loginform', 'True', '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', 'submit', 'submit', l('login'), '', 'button', '', '', '', '', '', '', '', '', ''); | |
| echo '</p></form></div>'; | |
| } else { | |
| echo '<h2>'.l('logged_in').'</h2> | |
| <p><a href="'._SITE.'logout/" title="'.l('logout').'">'.l('logout').'</a></p>'; | |
| } | |
| } | |
| //CONTENTS COUNTER | |
| function stats($field, $position) { | |
| if (!empty($position)) { | |
| $pos = " WHERE position = $position"; | |
| } else { | |
| $pos = ''; | |
| } | |
| $query = 'SELECT id FROM '._PRE.$field.$pos; | |
| $result = mysql_query($query); | |
| $numrows = mysql_num_rows($result); | |
| return $numrows; | |
| } | |
| // FORM GENERATOR | |
| function html_input($type, $name, $id, $value, $label, $css, $script1, $script2, $script3, $checked, $rows, $cols, $method, $action, $legend) { | |
| $lbl = !empty($label) ? '<label for="'.$id.'">'.$label.'</label>' : ''; | |
| $ID = !empty($id) ? ' id="'.$id.'"' : ''; | |
| $style = !empty($css) ? ' class="'.$css.'"' : ''; | |
| $js1 = !empty($script1) ? ' '.$script1 : ''; | |
| $js2 = !empty($script2) ? ' '.$script2 : ''; | |
| $js3 = !empty($script3) ? ' '.$script3 : ''; | |
| $attribs = $ID.$style.$js1.$js2.$js3; | |
| $val = ' value="'.$value.'"'; | |
| $input = '<input type="'.$type.'" name="'.$name.'"'.$attribs; | |
| switch($type) { | |
| case 'form': $output = (!empty($method) && $method != 'end') ? | |
| '<form method="'.$method.'" action="'.$action.'"'.$attribs.' accept-charset="'.s('charset').'">' : '</form>'; break; | |
| case 'fieldset': $output = (!empty($legend) && $legend != 'end') ? | |
| '<fieldset><legend'.$attribs.'>'.$legend.'</legend>' : '</fieldset>'; break; | |
| case 'text': | |
| case 'password': $output = '<p>'.$lbl.':<br />'.$input.$val.' /></p>'; break; | |
| case 'checkbox': | |
| case 'radio': $check = $checked == 'ok' ? ' checked="checked"' : ''; $output = '<p>'.$input.$check.' /> '.$lbl.'</p>'; break; | |
| case 'hidden': | |
| case 'submit': | |
| case 'reset': | |
| case 'button': $output = $input.$val.' />'; break; | |
| case 'textarea': | |
| $output = '<p>'.$lbl.':<br /> | |
| <textarea name="'.$name.'" rows="'.$rows.'" cols="'.$cols.'"'.$attribs.'>'.$value. | |
| '</textarea></p>'; break; | |
| } | |
| return $output; | |
| } | |
| // ADMINISTRATION | |
| function administration() { # Patch #19 - 1.7.1 - replaces fieldset strings function-wide. | |
| if (!_ADMIN) { echo( notification(1,l('error_not_logged_in'),'login')); } | |
| else { | |
| $catnum = mysql_fetch_assoc(mysql_query("SELECT COUNT(id) as catnum FROM "._PRE.'categories'."")); | |
| foreach ($_POST as $key) {unset($_POST[$key]);} | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle"><a href="http://snewscms.com/" title="sNews CMS">sNews</a> '.l('administration').'</p>'; | |
| echo '<p>'.l('categories').': <a href="admin_category/">'.l('add_new').'</a>'; | |
| $link = ' '.l('divider').' <a href="'; | |
| if (stats('categories','') > 0) { | |
| echo $link.'snews_categories/">'.l('view').'</a>'; | |
| } | |
| echo '</p><p>'.l('articles').': '; | |
| $art_new = $catnum['catnum'] > 0 ? '<a href="article_new/">'.l('add_new').'</a>' : l('create_cat'); | |
| echo $art_new; | |
| if (stats('articles','1') > 0) { | |
| echo $link.'snews_articles/">'.l('view').'</a>'; | |
| } | |
| echo '</p><p>'.l('pages').': <a href="page_new/">'.l('add_new').'</a>'; | |
| if (stats('articles','3') > 0) { | |
| echo $link.'snews_pages/">'.l('view').'</a>'; | |
| } | |
| echo '</p>'; | |
| if (s('enable_extras') == 'YES') { | |
| echo '<p class="admintitle">'.l('extra_contents').'</p>'; | |
| echo '<p>'.l('groupings').': <a href="admin_groupings/">'.l('add_new').'</a>'; | |
| if (stats('extras','') > 0) { | |
| echo $link.'groupings/">'.l('view').'</a>'; | |
| } | |
| echo '</p>'; | |
| } | |
| echo '<p>'.l('extra_contents').': <a href="extra_new/">'.l('add_new').'</a>'; | |
| if (stats('articles','2') > 0) { | |
| echo $link.'extra_contents/">'.l('view').'</a>'; | |
| } | |
| echo '</p>'; | |
| echo '</div>'; | |
| $query_comm = 'SELECT id,articleid,name FROM '._PRE.'comments'.' WHERE approved != \'True\''; | |
| $result_comm = mysql_query($query_comm); | |
| $unapproved = mysql_num_rows($result_comm); | |
| if ($unapproved > 0) { | |
| echo '<div class="adminpanel"><p class="admintitle">'.l('comments').'</p>'; | |
| echo '<p><a onclick="toggle(\'sub1\')" style="cursor: pointer;" title="'.l('unapproved').'"> | |
| '.$unapproved.' '.l('wait_approval').'</a></p>'; | |
| echo '<div id="sub1" class="innerpanel" style="display: none;">'; | |
| while ($r = mysql_fetch_array($result_comm)) { | |
| $articleTITLE = retrieve('title', 'articles', 'id', $r['articleid']); | |
| echo '<p class="spacelink">'.$r['name'].' (<strong>'.$articleTITLE.'</strong>) '.l('divider').' | |
| <a href="'._SITE.'?action=editcomment&commentid='.$r['id'].'">'.l('edit').'</a></p>'; | |
| } | |
| echo '</div></div>'; | |
| } | |
| echo '<div class="message"><p class="admintitle">'.l('site_settings').'</p>'; | |
| echo '<p><a href="snews_settings/">'.l('settings').'</a> | | |
| <a href="snews_files/">'.l('files').'</a></p></div>'; | |
| echo '<div class="message"><p class="admintitle">'.l('login_status').'</p>'; | |
| echo '<p><a href="logout/">'.l('logout').'</a></p></div>'; | |
| } | |
| } | |
| // SETTINGS FORM | |
| function settings() { # Patch #19 - 1.7.1 - reduced to 1 adminpanel div. replaces fieldset strings function-wide. | |
| echo '<div class="adminpanel"><p class="admintitle">'.l('settings_title').'</p>'; | |
| echo html_input('form','','','','','','','','','','','','post', '?action=process&task=save_settings',''); | |
| # Expandable Settings | |
| echo '<p><a onclick="toggle(\'sub1\')" style="cursor: pointer;" title="'.l('a_openclose').''.l('settings').'">'.l('settings').'</a></p>'; | |
| echo '<div id="sub1" style="display: none;">'; | |
| echo html_input('text', 'website_title', 'webtitle', s('website_title'), l('a_website_title'),'','','','','','','','','',''); | |
| echo html_input('text', 'home_sef', 'webSEF', s('home_sef') == '' ? l('home_sef') : s('home_sef'), l('a_home_sef'), '', 'onkeypress="return SEFrestrict(event);"','','','','','','','',''); | |
| echo html_input('text', 'website_description', 'wdesc', s('website_description'), l('a_description'),'','','','','','','','','',''); | |
| echo html_input('text', 'website_keywords', 'wkey', s('website_keywords'), l('a_keywords'),'','','','','','','','','',''); | |
| echo '</div>'; # Expandable Contact | |
| echo '<p><a onclick="toggle(\'sub2\')" style="cursor: pointer;" title="'.l('a_openclose').''.l('a_contact_info').'">'.l('a_contact_info').'</a></p>'; | |
| echo '<div id="sub2" style="display: none;">'; | |
| echo html_input('text', 'website_email', 'we', s('website_email'), l('a_website_email'),'','','','','','','','','',''); | |
| echo html_input('text', 'contact_subject', 'cs', s('contact_subject'), l('a_contact_subject'),'','','','','','','','','',''); | |
| echo '</div>'; # Expandable Time & Locale | |
| echo '<p><a onclick="toggle(\'sub3\')" style="cursor: pointer;" title="'.l('a_openclose').''.l('a_time_settings').'">'.l('a_time_settings').'</a></p>'; | |
| echo '<div id="sub3" style="display: none;">'; | |
| echo html_input('text', 'language', 'lang', s('language') == '' ? 'EN' : s('language'), l('a_language'),'','','','','','','','','',''); | |
| echo html_input('text', 'charset', 'char', s('charset') == '' ? 'UTF-8' : s('charset'), l('charset'),'','','','','','','','','',''); | |
| echo html_input('text', 'date_format', 'dt', s('date_format'), l('a_date_format'),'','','','','','','','','',''); | |
| echo '</div>'; # Expandable Contents | |
| echo '<p><a onclick="toggle(\'sub4\')" style="cursor: pointer;" title="'.l('a_openclose').''.l('contents').'">'.l('contents').'</a></p>'; | |
| echo '<div id="sub4" style="display: none;">'; | |
| echo html_input('text', 'article_limit', 'artl', s('article_limit'), l('a_article_limit'),'','','','','','','','','',''); | |
| echo html_input('text', 'rss_limit', 'rssl', s('rss_limit'), l('a_rss_limit'),'','','','','','','','','',''); | |
| echo '<p><label for="dp">'.l('a_display_page').':</label><br /> <select name="display_page" id="dp">'; | |
| echo '<option value="0"'.(s('display_page') == 0 ? ' selected="selected"' : '').'>'.l('none').'</option>'; | |
| $query = 'SELECT id,title FROM '._PRE.'articles'.' WHERE position = 3 ORDER BY id ASC'; | |
| $result = mysql_query($query); | |
| while ($r = mysql_fetch_array($result)) { | |
| echo '<option value="'.$r['id'].'"'; | |
| if (s('display_page') == $r['id']) { echo ' selected="selected"'; } | |
| echo '>'.$r['title'].'</option>'; | |
| } | |
| echo '</select></p>'; | |
| echo html_input('checkbox','display_new_on_home','dnoh','',l('a_display_new_on_home'),'','','','',(s('display_new_on_home') == 'on' ? 'ok' : ''),'','','','',''); | |
| echo html_input('checkbox','display_pagination','dpag','',l('a_display_pagination'),'','','','',(s('display_pagination') == 'on' ? 'ok' : ''),'','','','',''); | |
| echo html_input('checkbox','num_categories','nc','',l('a_num_categories'),'','','','',(s('num_categories') == 'on' ? 'ok' : ''),'','','','',''); | |
| echo html_input('checkbox','show_cat_names','scn','',l('a_show_category_name'),'','','','',(s('show_cat_names') == 'on' ? 'ok' : ''),'','','','',''); | |
| echo html_input('checkbox','enable_extras','ee','',l('enable_extras'),'','','','',(s('enable_extras') == 'YES' ? 'ok' : ''),'','','','',''); | |
| echo html_input('text','file_ext','fileext',s('file_extensions'),l('file_extensions'),'','','','','','','','','',''); | |
| echo html_input('text','allowed_file','all_file',s('allowed_files'),l('allowed_files'),'','','','','','','','','',''); | |
| echo html_input('text','allowed_img','all_img',s('allowed_images'),l('allowed_images'),'','','','','','','','','',''); | |
| echo '</div>'; # Expandable Comments | |
| echo '<p><a onclick="toggle(\'sub5\')" style="cursor: pointer;" title="'.l('a_openclose').''.l('comments').'">'.l('comments').'</a></p>'; | |
| echo '<div id="sub5" style="display: none;">'; | |
| echo html_input('checkbox','approve_comments','ac','',l('a_approve_comments'),'','','','',(s('approve_comments') == 'on' ? 'ok' : ''),'','','','',''); | |
| echo html_input('text','comment_repost_timer','crt',s('comment_repost_timer'),l('comment_repost_timer'),'','','','','','','','','',''); | |
| echo html_input('checkbox','mail_on_comments','mc','',l('a_mail_on_comments'),'','','','',(s('mail_on_comments') == 'on' ? 'ok' : ''),'','','','',''); | |
| echo html_input('checkbox','enable_comments','ec','',l('enable_comments'),'','','','',(s('enable_comments') == 'YES' ? 'ok' : ''),'','','','',''); | |
| echo html_input('checkbox','freeze_comments','dc','',l('freeze_comments'),'','','','',(s('freeze_comments') == 'YES' ? 'ok' : ''),'','','','',''); | |
| echo '<p><label for="co">'.l('a_comments_order').':</label><br /><select id="co" name="comments_order">'; | |
| echo '<option value="DESC"'.(s('comments_order') == 'DESC' ? ' selected="selected"' : '').'>'.l('newer_top').'</option>'; | |
| echo '<option value="ASC"'.(s('comments_order') == 'ASC' ? ' selected="selected"' : '').'>'.l('newer_bottom').'</option></select>'; | |
| echo '</p>'; | |
| echo html_input('text','comment_limit','cl',s('comment_limit'),l('a_comment_limit'),'','','','','','','','','',''); | |
| echo html_input('checkbox','word_filter_enable','wfe','',l('a_word_filter_enable'),'','','','',(s('word_filter_enable') == 'on' ? 'ok' : ''),'','','','',''); | |
| echo html_input('text','word_filter_file','wff',s('word_filter_file'),l('a_word_filter_file'),'','','','','','','','','',''); | |
| echo html_input('text','word_filter_change','wfc',s('word_filter_change'),l('a_word_filter_change'),'','','','','','','','','',''); | |
| echo '</div>'; | |
| echo '<p>'; # Save Settings button | |
| echo html_input('submit','save','save',l('save'),'','button','','','','','','','','',''); | |
| echo '</p>'; | |
| echo '</form>'; | |
| echo '</div>'; # Change Password panel | |
| echo html_input('form','','','','','','','','','','','','post','?action=process&task=changeup',''); | |
| echo '<div class="adminpanel">'; | |
| echo '<p><a onclick="toggle(\'sub6\')" style="cursor: pointer;" title="'.l('a_openclose').''.l('change_up').'">'.l('change_up').'</a>'; | |
| echo '<div id="sub6" style="display: none;">'; | |
| echo '<p>'.l('login_limit').'</p>'; | |
| echo html_input('text','uname','uname','',l('a_username'),'','','','','','','','','',''); | |
| echo html_input('password','pass1','pass1','',l('a_password'),'','','','','','','','','',''); | |
| echo html_input('password','pass2','pass2','',l('a_password2'),'','','','','','','','','',''); | |
| echo '<p>'; # Save Password Change button | |
| echo html_input('hidden','task','task','changeup','','','','','','','','','','',''); | |
| echo html_input('submit','submit_pass','submit_pass',l('save'),'','button','','','','','','','','',''); | |
| echo '</p></div>'; | |
| echo '</div>'; | |
| echo '</form>'; | |
| } | |
| // LISTS CATEGORIES | |
| function category_list($id) { | |
| if (isset($_GET['id']) && is_numeric($_GET['id']) && !is_null($_GET['id'])) { | |
| $var = $id; | |
| } | |
| echo '<select name="subcat" id="subcat">'; | |
| $selected =' selected="selected"'; | |
| $result = mysql_query('SELECT id,name FROM '._PRE.'categories'.' | |
| WHERE subcat = 0 ORDER BY catorder, id'); | |
| if (!empty($var)) { | |
| $parent_selection = $selected; | |
| } | |
| echo '<option value="0"'.$parent_selection.'>'.l('not_sub').'</option>'; | |
| while ($r = mysql_fetch_array($result)) { | |
| $child = retrieve('subcat','categories','id',$var); | |
| if ($r['id'] == $child) { | |
| echo '<option value="'.$r['id'].'"'.$selected.'>'.$r['name'].'</option>'; | |
| } elseif ($id!=$r['id']){ | |
| echo '<option value="'.$r['id'].'">'.$r['name'].'</option>'; | |
| } | |
| } | |
| echo '</select>'; | |
| } | |
| // CATEGORIES FORM | |
| function form_categories($subcat='cat') { | |
| if (isset($_GET['id']) && is_numeric($_GET['id']) && !is_null($_GET['id'])) { | |
| $categoryid = $_GET['id']; | |
| $query = mysql_query('SELECT id,name,seftitle,published,description,subcat,catorder FROM '._PRE.'categories'.' WHERE id='.$categoryid); | |
| $r = mysql_fetch_array($query); | |
| $jresult = mysql_query("select name from "._PRE.'categories'." | |
| where id = ".$r['subcat']); | |
| while($j = mysql_fetch_array($jresult)) { | |
| $name = $j['name']; | |
| } | |
| $frm_action = _SITE.'?action=process&task=admin_category&id='.$categoryid; | |
| $frm_add_edit = $r['subcat'] == '0' ? l('edit').' '.l('category') : l('edit').' '.l('subcategory').' '.$name ; | |
| $frm_name = $r['name']; | |
| $subcat = $r['subcat'] == 0 ? 'cat' : 'subcat'; | |
| $frm_sef_title = $r['seftitle']; | |
| $frm_description = $r['description']; | |
| $frm_publish = $r['published'] == 'YES' ? 'ok' : ''; | |
| $catorder = $r['catorder']; | |
| $frm_task = 'edit_category'; | |
| $frm_submit = l('edit_button'); // Patch #11 - 1.7.0 | |
| } else { | |
| $sub_cat = isset($_GET['sub_id']) ? $_GET['sub_id'] : '0'; | |
| if ($sub_cat!='cat') { | |
| $jresult = mysql_query('SELECT name FROM '._PRE.'categories'.' WHERE id = '.$sub_cat); | |
| while($j = mysql_fetch_array($jresult)) { | |
| $name = $j['name']; | |
| } | |
| } | |
| $frm_action = _SITE.'?action=process&task=admin_category'; | |
| $frm_add_edit = empty($sub_cat) ? l('add_category') : l('add_subcategory').' ('.$name.')'; | |
| $frm_sef_title = $_POST['name'] == '' ? cleanSEF($_POST['name']) : cleanSEF($_POST['seftitle']); | |
| $frm_description = ''; | |
| $frm_publish = 'ok'; | |
| $frm_task = 'add_category'; | |
| $frm_submit = l('add_category'); | |
| } | |
| echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', $frm_action, ''); | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle">'.$frm_add_edit.'</p>'; # Patch #19 - 1.7.1 - replaces fieldset string | |
| echo html_input('text', 'name', 't', $frm_name, l('name'), '', 'onchange="genSEF(this,document.forms[\'post\'].seftitle)"', 'onkeyup="genSEF(this,document.forms[\'post\'].seftitle)"', '', '', '', '', '', '', ''); | |
| echo html_input('text', 'seftitle', 's', $frm_sef_title, l('sef_title_cat'), '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('text', 'description', 'desc', $frm_description, l('description'), '', '', '', '', '', '', '', '', '', ''); | |
| if (empty($sub_cat)) { | |
| echo '<p>'.l('subcategory').': <br />'; category_list($categoryid); echo '</p>'; | |
| } | |
| $publish = $subcat == 'cat' ? l('publish_category') : l('publish_subcategory'); | |
| echo html_input('checkbox', 'publish', 'pub', 'YES', $publish, '', '', '', '', $frm_publish, '', '', '', '', ''); | |
| echo '</div><p>'; // echo '</fieldset></div><p>'; # Patch #19 - 1.7.1 | |
| if ($sub_cat) { | |
| echo html_input('hidden', 'subcat', 'subcat', $sub_cat, '', '', '', '', '', '', '', '', '', '', ''); | |
| } | |
| echo html_input('hidden', 'catorder', 'catorder', $catorder, '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('hidden', 'task', 'task', 'admin_category', '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', $frm_task, $frm_task, $frm_submit, '', 'button', '', '', '', '', '', '', '', '', ''); | |
| if (!empty($categoryid)) { | |
| echo ' '; | |
| echo html_input('hidden', 'id', 'id', $categoryid, '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', 'delete_category', 'delete_category', l('delete'), '', 'button', 'onclick="javascript: return pop()"', '', '', '', '', '', '', '', ''); | |
| } | |
| echo '</p></form>'; | |
| } | |
| // CATEGORIES - ADMIN LIST | |
| function admin_categories() { # Patch #19 - 1.7.1 - replaces fieldset string | |
| $add = ' - <a href="admin_category/">'.l('add_new').'</a>'; | |
| $link = '?action=admin_category'; | |
| $tab = 1; | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle">'.l('categories').$add.'</p>'; | |
| echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', '?action=process&task=reorder', ''); | |
| echo '<p><input type="hidden" name="order" id="order" value="snews_categories" /></p>'; | |
| $query = 'SELECT id, name, description, published, catorder FROM '._PRE.'categories'.' WHERE subcat = 0 ORDER BY catorder,id ASC'; | |
| $result = mysql_query($query); | |
| if (!$result || !mysql_num_rows($result)) { | |
| echo '<p>'.l('category_not_exist').'</p>'; | |
| } else { | |
| while ($r = mysql_fetch_array($result)) { | |
| $cat_input = '<input type="text" name="cat_'.$r['id'].'" value="'.$r['catorder'].'" size="1" tabindex="'.$tab.'" /> '; | |
| echo '<p>'.$cat_input.'<strong>'.$r['name'].'</strong> | |
| '.l('divider').' <a href="'._SITE.$link.'&id='.$r['id'].'" title="'.$r['description'].'">'.l('edit').'</a> '; | |
| echo $r['published'] != 'YES' ? ' '.l('divider').' ['.l('status').' '.l('unpublished').']' : ''; | |
| echo ' '.l('divider').' <a href="'._SITE.$link.'&sub_id='.$r['id'].'" title="'.$r['description'].'">'.l('add_subcategory').'</a></p>'; | |
| $subquery = 'SELECT id,name,description,published,catorder FROM '._PRE.'categories'.' WHERE subcat = '.$r['id'].' ORDER BY catorder,id ASC'; | |
| $subresult = mysql_query($subquery); $tab2 = 1; | |
| while ($sub = mysql_fetch_array($subresult)) { | |
| $subcat_input = '<input type="text" name="cat_'.$sub['id'].'" value="'.$sub['catorder'].'" size="1" tabindex="'.$tab2.'" /> '; | |
| echo '<p class="subcat">'.$subcat_input.'<strong>'.$sub['name'].'</strong>'.l('divider').' <a href="'._SITE.$link.'&id='.$sub['id'].'" title="'.$sub['description'].'">'.l('edit').'</a> '; | |
| echo ($sub['published'] != 'YES' ? ' '.l('divider').' ['.l('status').' '.l('unpublished').']' : ''); | |
| echo '</p>'; $tab2++; | |
| } | |
| $tab++; | |
| } | |
| } | |
| echo '<p>'.html_input('submit', 'reorder', 'reorder', l('order_content'), '', 'button', '', '', '', '', '', '', '', '', ''); | |
| echo '</p></form>'; | |
| echo '</div>'; | |
| } | |
| // DELETE CATEGORY BY ID | |
| function delete_cat($id){ | |
| $delQuery = "DELETE FROM "._PRE."categories WHERE id = $id LIMIT 1"; | |
| mysql_query( $delQuery ); | |
| $upQuery = "UPDATE "._PRE."categories | |
| SET catorder = catorder - 1 | |
| WHERE catorder > ( | |
| SELECT catorder | |
| FROM "._PRE.'categories'." | |
| WHERE id = $id) | |
| AND subcat = ( | |
| SELECT subcat | |
| FROM "._PRE.'categories'." | |
| WHERE id = $id)"; | |
| mysql_query( $upQuery ); | |
| } | |
| // ARTICLES - POSTING TIME | |
| function posting_time($time='') { | |
| echo '<p>'.l('day').': <select name="fposting_day">'; | |
| $thisDay = !empty($time) ? substr($time, 8, 2) : intval(date('d')); | |
| for($i = 1; $i < 32; $i++) { | |
| echo '<option value="'.$i.'"'; | |
| if($i == $thisDay) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>'.$i.'</option>'; | |
| } | |
| echo '</select> '.l('month').': <select name="fposting_month">'; | |
| $thisMonth = !empty($time) ? substr($time, 5, 2) : intval(date('m')); | |
| for($i = 1; $i < 13; $i++) { | |
| echo '<option value="'.$i.'"'; | |
| if($i == $thisMonth) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>'. $i .'</option>'; | |
| } | |
| echo '</select> '.l('year').': <select name="fposting_year">'; | |
| $PresentYear = intval(date('Y')); | |
| $thisYear = !empty($time) ? substr($time, 0, 4) : $PresentYear; | |
| for($i = $thisYear-3; $i < $PresentYear + 3; $i++) { | |
| echo '<option value="'.$i.'"'; | |
| if($i == $thisYear) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>'.$i.'</option>'; | |
| } | |
| echo '</select> '.l('hour').': <select name="fposting_hour">'; | |
| $thisHour = !empty($time) ? substr($time, 11, 2) : intval(date('H')); | |
| for($i = 0; $i < 24; $i++) { | |
| echo '<option value="'.$i.'"'; | |
| if($i == $thisHour) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>'.$i.'</option>'; | |
| } | |
| echo '</select> '.l('minute').': <select name="fposting_minute">'; | |
| $thisMinute = !empty($time) ? substr($time, 14, 2) : intval(date('i')); | |
| for($i = 0; $i < 60; $i++) { | |
| echo '<option value="'.$i.'"'; | |
| if($i == $thisMinute) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>'.$i.'</option>'; | |
| } | |
| echo '</select></p>'; | |
| return; | |
| } | |
| // ARTICLES FORM | |
| function form_articles($contents) { | |
| if (is_numeric($_GET['id']) && !is_null($_GET['id'])) { | |
| $id = $_GET['id']; | |
| $query = mysql_query('SELECT * FROM '._PRE.'articles'.' WHERE id='.$id); | |
| $r = mysql_fetch_array($query); | |
| $article_category = $r['category']; | |
| $edit_option = $r['position']==0 ? 1 : $r['position']; | |
| $edit_page = $r['page_extra']; | |
| $extraid = $r['extraid']; | |
| switch ($edit_option) { | |
| case 1: | |
| $frm_fieldset = l('edit').' '.l('article'); | |
| $toggle_div='show'; | |
| $frm_position1 = 'selected="selected"'; | |
| break; | |
| case 2: | |
| $frm_fieldset = l('edit').' '.l('extra_contents'); | |
| $toggle_div='show'; | |
| $frm_position2 = 'selected="selected"'; | |
| break; | |
| case 3: | |
| $frm_fieldset = l('edit').' '.l('page'); | |
| $toggle_div='show'; | |
| $frm_position3 = 'selected="selected"'; | |
| break; | |
| } | |
| $frm_action = _SITE.'?action=process&task=admin_article&id='.$id; | |
| $frm_title = $_SESSION[_SITE.'temp']['title'] ? $_SESSION[_SITE.'temp']['title'] : $r['title']; | |
| $frm_sef_title = $_SESSION[_SITE.'temp']['seftitle'] ? cleanSEF($_SESSION[_SITE.'temp']['seftitle']) : $r['seftitle']; | |
| $frm_text = str_replace('&', '&', $_SESSION[_SITE.'temp']['text'] ? $_SESSION[_SITE.'temp']['text'] : $r['text']); | |
| $frm_meta_desc = $_SESSION[_SITE.'temp']['description_meta'] ? | |
| cleanSEF($_SESSION[_SITE.'temp']['description_meta']) : $r['description_meta']; | |
| $frm_meta_key = $_SESSION[_SITE.'temp']['keywords_meta'] ? | |
| cleanSEF($_SESSION[_SITE.'temp']['keywords_meta']) : $r['keywords_meta']; | |
| $frm_display_title = $r['displaytitle'] == 'YES' ? 'ok' : ''; | |
| $frm_display_info = $r['displayinfo'] == 'YES' ? 'ok' : ''; | |
| $frm_publish = $r['published'] == 1 ? 'ok' : ''; | |
| $show_in_subcats = $r['show_in_subcats'] == 'YES' ? 'ok' : ''; | |
| $frm_showonhome = $r['show_on_home'] == 'YES' ? 'ok' : ''; | |
| $frm_commentable = ($r['commentable'] == 'YES' || $r['commentable'] == 'FREEZ') ? 'ok' : ''; | |
| $frm_task = 'edit_article'; | |
| $frm_submit = l('edit_button'); // Patch #11 - 1.7.0 | |
| } else { | |
| switch ($contents) { | |
| case 'article_new': | |
| $frm_fieldset = l('article_new'); | |
| $toggle_div=''; | |
| $pos = 1; | |
| $frm_position1 = 'selected="selected"'; | |
| break; | |
| case 'extra_new': | |
| $frm_fieldset = l('extra_new'); | |
| $toggle_div=''; | |
| $pos = 2; | |
| $frm_position2 = 'selected="selected"'; | |
| break; | |
| case 'page_new': | |
| $frm_fieldset = l('page_new'); | |
| $toggle_div=''; | |
| $pos = 3; | |
| $frm_position3 = 'selected="selected"'; | |
| break; | |
| } | |
| if (empty($frm_fieldset)) { | |
| $frm_fieldset = l('article_new'); | |
| } | |
| $frm_action = _SITE.'?action=process&task=admin_article'; | |
| $frm_title = $_SESSION[_SITE.'temp']['title']; | |
| $frm_sef_title = cleanSEF($_SESSION[_SITE.'temp']['seftitle']); | |
| $frm_text = $_SESSION[_SITE.'temp']['text']; | |
| $frm_meta_desc = cleanSEF($_SESSION[_SITE.'temp']['description_meta']); | |
| $frm_meta_key = cleanSEF($_SESSION[_SITE.'temp']['keywords_meta']); | |
| $frm_display_title = 'ok'; | |
| $frm_display_info = ($contents == 'extra_new') ? '' : 'ok'; | |
| $frm_publish = 'ok'; | |
| $show_in_subcats = 'ok'; | |
| $frm_showonhome = s('display_new_on_home') == 'on' ? 'ok' : ''; | |
| $frm_commentable = ($contents == 'extra_new' || $contents == 'page_new' || s('enable_comments') != 'YES') ? '' : 'ok'; | |
| $frm_task = 'add_article'; | |
| $frm_submit = l('submit'); | |
| } | |
| $catnum = mysql_fetch_assoc(mysql_query("SELECT COUNT(id) as catnum FROM "._PRE.'categories'."")); | |
| if ($contents == 'article_new' && $catnum['catnum'] < 1) { | |
| echo l('create_cat'); | |
| } else { | |
| echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', $frm_action, ''); | |
| echo '<div class="adminpanel">'; | |
| if ($toggle_div=='show') { | |
| # Patch #19 - 1.7.1 - replaces fieldset string | |
| echo '<p class="admintitle"><a onclick="toggle(\'edit_article\')" style="cursor: pointer;" title="'.$frm_fieldset.'">'.$frm_fieldset.'</a></p>'; | |
| echo '<div id="edit_article" style="display: none;">'; | |
| } else { | |
| echo '<p class="admintitle">'.$frm_fieldset.'</p>'; # Patch #19 - 1.7.1 - replaces fieldset string | |
| } | |
| echo html_input('text', 'title', 'at', $frm_title, l('title'), '', 'onchange="genSEF(this,document.forms[\'post\'].seftitle)"', 'onkeyup="genSEF(this,document.forms[\'post\'].seftitle)"', '', '', '', '', '', '', ''); | |
| if ($contents == 'extra_new' || $edit_option == 2) { | |
| echo '<div style="display: none;">'; | |
| echo html_input('text', 'seftitle', 'as', $frm_sef_title, l('sef_title'), '', '', '', '', '', '', '', '', '', ''); | |
| echo '</div>'; | |
| } else { | |
| echo html_input('text', 'seftitle', 'as', $frm_sef_title, l('sef_title'), '', '', '', '', '', '', '', '', '', ''); | |
| } | |
| echo html_input('textarea', 'text', 'txt', $frm_text, l('text'), '', '', '', '', '', '2', '100', '', '', ''); | |
| buttons(); | |
| if ($contents != 'page_new' && $edit_option != 3) { | |
| echo '<p><label for="cat">'; | |
| echo ($contents == 'extra_new' || $edit_option == 2) ? l('appear_category') : l('category'); | |
| if ($contents == 'extra_new' || $edit_option == 2) { | |
| echo ':</label><br /><select name="define_category" id="cat" onchange="dependancy(\'extra\');">'; | |
| echo '<option value="-1"'.($article_category == -1 ? ' selected="selected"' : '').'>'.l('all').'</option>'; | |
| echo '<option value="-3"'.($article_category == -3 ? ' selected="selected"' : '').'>'.l('page_only').'</option>'; | |
| } else | |
| echo ':</label><br /><select name="define_category" id="cat" onchange="dependancy(\'snews_articles\');">'; | |
| $category_query = 'SELECT id,name,subcat FROM '._PRE.'categories'.' | |
| WHERE published = \'YES\' AND subcat = 0 ORDER BY catorder,id ASC'; | |
| $category_result = mysql_query($category_query); | |
| while ($cat = mysql_fetch_array($category_result)) { | |
| echo '<option value="'.$cat['id'].'"'; | |
| if ($article_category == $cat['id']) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>'.$cat['name'].'</option>'; | |
| $subquery = 'SELECT id,name,subcat FROM '._PRE.'categories'.' | |
| WHERE subcat = '.$cat['id'].' ORDER BY catorder,id ASC'; | |
| $subresult = mysql_query($subquery); | |
| while ($s = mysql_fetch_array($subresult)) { | |
| echo '<option value="'.$s['id'].'"'; | |
| if ($article_category == $s['id']) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>--'.$s['name'].'</option>'; | |
| } | |
| } | |
| echo '</select></p>'; | |
| if ($contents == 'extra_new' || $edit_option == 2) { | |
| $none_display = $article_category == -1 ? 'none' : 'inline'; | |
| echo '<div id="def_page" style="display:'.$none_display.';"><p><label for="dp">'.l('appear_page').':</label> | |
| <br /><select name="define_page" id="dp">'; | |
| echo '<option value="0"'.($edit_option != '2' ? ' selected="selected"' : '').'>'.l('all').'</option>'; | |
| $query = 'SELECT id,title FROM '._PRE.'articles'.' WHERE position = 3 ORDER BY id ASC'; | |
| $result = mysql_query($query); | |
| while ($r = mysql_fetch_array($result)) { | |
| echo '<option value="'.$r['id'].'"'; | |
| if ($edit_page == $r['id']) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>'.$r['title'].'</option>'; | |
| } | |
| echo '</select><br />'. | |
| html_input('checkbox', 'show_in_subcats', 'asc', 'YES', l('show_in_subcats'), '', '', '', '', $show_in_subcats, '', '', '', '', '').'</p></div>'; | |
| } | |
| } | |
| if ($contents == 'article_new' || $edit_option == 1) { | |
| echo html_input('checkbox', 'show_on_home', 'sho', 'YES', l('show_on_home'), '', '', '', '', $frm_showonhome, '', '', '', '', ''); | |
| } | |
| echo html_input('checkbox', 'publish_article', 'pu', 'YES', l('publish_article'), '', '', '', '', $frm_publish, '', '', '', '', ''); | |
| if ($toggle_div=='show') { | |
| echo '</div>'; | |
| } | |
| echo '</div>'; //echo '</fieldset></div>'; # Patch #19 - 1.7.1 | |
| echo '<div class="adminpanel">'; | |
| # Patch #19 - 1.7.1 - replaces fieldset string | |
| echo '<p class="admintitle"><a onclick="toggle(\'preview\')" style="cursor: pointer;" title="'.l('preview').'">'.l('preview').'</a></p>'; | |
| echo '<div id="preview" style="display: none;"></div>'; | |
| echo '</div>'; //echo '</fieldset></div>'; # Patch #19 - 1.7.1 | |
| echo '<div class="adminpanel">'; | |
| # Patch #19 - 1.7.1 - replaces fieldset string | |
| echo '<p class="admintitle"><a onclick="toggle(\'customize\')" style="cursor: pointer;" title="'.l('customize').'">'.l('customize').'</a></p>'; | |
| echo '<div id="customize" style="display: none;">'; | |
| if ($contents == 'extra_new' || $edit_option == 2) { | |
| if (s('enable_extras') == 'YES') { | |
| echo '<p><label for="ext">'.l('define_extra').'</label><br />'; | |
| echo '<select name="define_extra" id="ext">'; | |
| $extra_query = 'SELECT id,name FROM '._PRE.'extras'.' ORDER BY id ASC'; | |
| $extra_result = mysql_query($extra_query); | |
| while ($ex = mysql_fetch_array($extra_result)) { | |
| echo '<option value="'.$ex['id'].'"'; | |
| if ($extraid == $ex['id']) { | |
| echo ' selected="selected"'; | |
| } | |
| echo '>'.$ex['name'].'</option>'; | |
| } | |
| echo '</select></p>'; | |
| } else { | |
| echo html_input('hidden', 'define_extra', 'ext', 1, '', '', '', '', '', '', '', '', '', '', ''); | |
| } | |
| } | |
| if (!empty($id)) { | |
| echo '<p><label for="pos">'.l('position').':</label> | |
| <br /><select name="position" id="pos">'; | |
| echo '<option value="1"'.$frm_position1.'>'.l('center').'</option>'; | |
| echo '<option value="2"'.$frm_position2.'>'.l('side').'</option>'; | |
| echo '<option value="3"'.$frm_position3.'>'.l('display_page').'</option>'; | |
| echo '</select></p>'; | |
| } else { | |
| echo html_input('hidden', 'position', 'position', $pos, '', '', '', '', '', '', '', '', '', '', ''); | |
| } | |
| if ($contents != 'extra_new' && $edit_option != '2') { | |
| echo html_input('text', 'description_meta', 'dm', $frm_meta_desc, l('description_meta'), '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('text', 'keywords_meta', 'km', $frm_meta_key, l('keywords_meta'), '', '', '', '', '', '', '', '', '', ''); | |
| } | |
| echo html_input('checkbox', 'display_title', 'dti', 'YES', l('display_title'), '', '', '', '', $frm_display_title, '', '', '', '', ''); // Patch #2 - 1.7.0 | |
| if ($contents != 'extra_new' && $edit_option != '2') { | |
| echo html_input('checkbox', 'display_info', 'di', 'YES', l('display_info'), '', '', '', '', $frm_display_info, '', '', '', '', ''); | |
| echo html_input('checkbox', 'commentable', 'ca', 'YES', l('enable_commenting'), '', '', '', '', $frm_commentable, '', '', '', '', ''); | |
| if (!empty($id)) { | |
| echo '<p><input name="freeze" type="checkbox" id="fc"'; | |
| if ($r['commentable'] == 'FREEZ') { | |
| echo ' checked="checked" />'; | |
| } else if ($r['commentable'] == 'YES') { | |
| echo ' />'; | |
| } else { | |
| echo ' />'; | |
| } | |
| echo ' <label for="fc"> '.l('freeze_comments').'</label></p>'; | |
| } | |
| } | |
| echo '</div></div>'; //echo '</div></fieldset></div>'; # Patch #19 - 1.7.1 | |
| if ($contents == 'article_new' || $edit_option == 1) { | |
| echo '<div class="adminpanel">'; | |
| # Patch #19 - 1.7.1 - replaces fieldset string | |
| echo '<p class="admintitle"><a onclick="toggle(\'admin_publish_date\')" style="cursor: pointer;" title="'.l('publish_date').'">'.l('publish_date').'</a></p>'; | |
| echo '<div id="admin_publish_date" style="display: none;">'; | |
| # Patch Nov.22.09 - 1 new string, defines check-box status. | |
| $onoff_status = $r['published'] == '2' ? 'ok' : ''; // Variable inserted in check-box string show is as checked if enabled. | |
| echo html_input('checkbox', 'fposting', 'fp', 'YES', l('enable'), '', '', '', '', $onoff_status, '', '', '', '', ''); | |
| echo '<p>'.l('server_time').': '.date('d.m.Y. H:i:s').'</p>'; | |
| echo '<p>'.l('article_date').'</p>'; | |
| !empty($id) ? posting_time($r['date']) : posting_time(); | |
| echo '</div></div>'; //echo '</div></fieldset></div>'; # Patch #19 - 1.7.1 | |
| } | |
| echo '<p>'; | |
| echo html_input('hidden', 'task', 'task', 'admin_article', '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', $frm_task, $frm_task, $frm_submit, '', 'button', '', '', '', '', '', '', '', '', ''); | |
| if (!empty($id)) { | |
| echo html_input('hidden', 'article_category', 'article_category', $article_category, '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('hidden', 'id', 'id', $id, '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', 'delete_article', 'delete_article', l('delete'), '', | |
| 'button', 'onclick="javascript: return pop()"', '', '', '', '', '', '', '', ''); | |
| } | |
| echo '</p></form>'; | |
| }} | |
| // ARTICLES - ADMIN LIST - Patch #19 - 1.7.1 - in 5 locations | |
| function admin_articles($contents) { | |
| global $categorySEF, $subcatSEF; | |
| $link = '<a href="'._SITE.$categorySEF.'/'; | |
| switch ($contents) { | |
| case 'article_view': | |
| $title = l('articles'); | |
| $sef = 'article_new'; | |
| $goto = 'snews_articles'; | |
| $p = 1; | |
| $qw = 'position < 2 AND position >-1 '; | |
| break; | |
| case 'extra_view': | |
| $title = l('extra_contents'); | |
| $sef = 'extra_new'; | |
| $goto = 'extra_contents';$p = '2'; | |
| $qw = 'position = 2 '; | |
| break; | |
| case 'page_view': | |
| $title = l('pages'); | |
| $sef = 'page_new'; | |
| $p = '3'; | |
| $goto = 'snews_pages'; | |
| $qw = 'position = 3 '; | |
| break; | |
| } | |
| $subquery = 'AND '.$qw; | |
| if (stats('articles',$p) > 0) { | |
| $add = ' - <a href="'.$sef.'/" title="'.l('add_new').'"> | |
| '.l('add_new').'</a> - '.l('see').' ('.$link.'">'.l('all').'</a>) - | |
| '.l('filter').' ('.$link.l('year').'">'.l('year').'</a> / '.$link.l('month').'"> | |
| '.l('month').'</a>)'; | |
| } else { | |
| $add = ''; | |
| } | |
| $tab = 1; | |
| if ($subcatSEF == l('year') || $subcatSEF == l('month')) { | |
| $query = 'SELECT DISTINCT(YEAR(date)) AS dyear FROM '._PRE.'articles'.' WHERE '.$qw.' ORDER BY date DESC'; | |
| $result = mysql_query($query); | |
| $month_names = explode(', ', l('month_names')); | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle">'.l('articles').'</p>'; // Patch #19 - 1.7.1 - replaces fieldset string | |
| echo ' - '.l('filter').' <span style="color: #0000FF">'.$subcatSEF.'</span> - '.l('see').' ('.$link.'">'.l('all').'</a>) - '.l('filter').' ('.$link.l('year').'">'.l('year').'</a> / '.$link.l('month').'">'.l('month').'</a>)</legend>'; | |
| if ($result){ | |
| while ($r = mysql_fetch_array($result)) { | |
| $ryear = $r['dyear']; | |
| echo ($subcatSEF == l('month') ? '<span style="color: #0000FF">'.$r['dyear'].'</span>' : $link.l('year').'='.$r['dyear'].'">'.$r['dyear'].'</a> '); | |
| if ($subcatSEF == l('month')) { | |
| $qx = "SELECT DISTINCT(MONTH(date)) AS dmonth FROM "._PRE.'articles'." WHERE $qw AND YEAR(date)=$ryear ORDER BY date ASC"; | |
| $rqx = mysql_query($qx); | |
| while ($rx = mysql_fetch_array($rqx)){ | |
| $m = $rx['dmonth'] - 1; | |
| echo ' '.l('divider').' '.$link.l('year').'='.$r['dyear'].';'.l('month').'='.$rx['dmonth'].'">'.$month_names[$m].'</a> '; | |
| } | |
| } | |
| echo '<br />'; | |
| } | |
| } | |
| echo '</div>'; | |
| return; | |
| } | |
| $txtYear = l('year'); | |
| $txtMonth = l('month'); | |
| if (substr($subcatSEF, 0, strlen($txtYear)) == $txtYear) { | |
| $year = substr($subcatSEF, strlen($txtYear)+1, 4); | |
| } | |
| $find = strpos($subcatSEF,l('month')); | |
| if ($find > 0) { | |
| $month = substr($subcatSEF, $find + strlen($txtMonth) + 1, 2); | |
| } | |
| $filterquery = !empty($year) ? "AND YEAR(date)='".$year."' " : ''; | |
| $filterquery .= !empty($month) ? "AND MONTH(date)='".$month."' " : ''; | |
| $no_content = !empty($filterquery) ? '<p>'.l('no_content_for_filter').'</p>' : '<p>'.l('article_not_exist').'</p>'; | |
| echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', '?action=process&task=reorder', ''); | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle">'.$title.$add.'</p>'; // Patch #19 - 1.7.1 - replaces fieldset string | |
| echo '<p><input type="hidden" name="order" id="order" value="'.$goto.'" /></p>'; | |
| if ($contents == 'extra_view') { | |
| $cat_array_irregular = array('-1','-3'); | |
| foreach ($cat_array_irregular as $cat_value) { | |
| $legend_label = $cat_value == -3 ? l('pages') : l('all'); | |
| $page_only_xsql = $cat_value == -3 ? 'page_extra ASC,' : ''; | |
| $sql = "SELECT id, title, seftitle, date, published, artorder, visible, default_page, page_extra | |
| FROM "._PRE.'articles'." | |
| WHERE category = $cat_value | |
| AND position = $p $filterquery | |
| ORDER BY $page_only_xsql artorder ASC, date DESC "; | |
| $query = mysql_query($sql) or die(mysql_error()); | |
| $num_rows = mysql_num_rows($query); | |
| $tab=1; | |
| echo '<div class="innerpanel">'; | |
| echo '<p class="admintitle">'.$legend_label.'</p>'; // Patch #19 - 1.7.1 - replaces fieldset string | |
| if ($num_rows == 0) { | |
| echo $no_content; | |
| } else { | |
| $lbl_filter = -5; | |
| while ($r = mysql_fetch_array($query)) { | |
| if ($cat_value == -3) { | |
| if ($lbl_filter != $r['page_extra']) { | |
| $assigned_page = retrieve('title','articles','id',$r['page_extra']); | |
| echo !$assigned_page ? l('all_pages') : $assigned_page; | |
| } | |
| } | |
| $order_input = '<input type="text" name="page_'.$r['id'].'" value="'.$r['artorder'].'" size="1" tabindex="'.$tab.'" /> '; | |
| // Patch #13 - 1.7.0 - next string replace 1 below it. | |
| echo '<p>'.$order_input.'<strong title="'.date(s('date_format'), strtotime($r['date'])).'"> '.$r['title'].'</strong> '; | |
| //echo '<p>'.$order_input.'<strong title="'.date(s('date_format'), strtotime($r['date'])).'"> '.$r['title'].'</strong> '.l('divider').'<a href="'._SITE.$row['seftitle'].'/'.$r['seftitle'].'/">'.l('view').'</a> '; | |
| if ($r['default_page'] != 'YES'){ | |
| echo l('divider').' <a href="'._SITE.'?action=admin_article&id='.$r['id'].'">'.l('edit').'</a> '; | |
| } | |
| $visiblity = $r['visible'] == 'YES' ? | |
| '<a href="'._SITE.'?action=process&task=hide&item='.$item.'&id='.$r['id'].'">'.l('hide').'</a>' : | |
| l('hidden').' ( <a href="'._SITE.'?action=process&task=show&item='.$item.'&id='.$r['id'].'">'.l('show').'</a> )' ; | |
| echo ' '.l('divider').' '.$visiblity; | |
| if ($r['published'] == 2) { | |
| echo l('divider').' ['.l('status').' '.l('future_posting').']'; | |
| } | |
| if ($r['published'] == 0) { | |
| echo l('divider').' ['.l('status').' '.l('unpublished').']'; | |
| } | |
| echo '</p>'; | |
| $tab++; | |
| $lbl_filter = $r['page_extra']; | |
| } | |
| } | |
| echo '</div>'; | |
| } | |
| } | |
| if ($contents == 'article_view' || $contents == 'extra_view') { | |
| $item = $contents == 'extra_view' ? 'extra_contents': 'snews_articles'; | |
| $cat_query = "SELECT id, name, seftitle FROM "._PRE.'categories'." WHERE subcat = 0"; | |
| $cat_res = mysql_query($cat_query); | |
| $num = mysql_num_rows($cat_res); | |
| if (!$cat_res || !$num) { | |
| echo '<p>'.l('no_categories').'</p>'; | |
| } else { | |
| $sql = "SELECT id, title, seftitle, date, published, artorder, visible, default_page | |
| FROM "._PRE.'articles'." | |
| WHERE category = '0' | |
| AND position = $p $subquery | |
| ORDER BY artorder ASC, date DESC "; | |
| $query = mysql_query($sql) or die(mysql_error()); | |
| $num_rows = mysql_num_rows($query); | |
| if ($num_rows > 0) { | |
| echo '<div class="innerpanel">'; | |
| echo '<p class="admintitle">'.l('no_category_set').'</p>'; // Patch #19 - 1.7.1 - replaces fieldset string | |
| while ($O = mysql_fetch_array($query)) { | |
| $order_input = '<input type="text" name="page_'.$O['id'].'" value="'.$O['artorder'].'" size="1" tabindex="'.$tab22.'" /> '; | |
| echo '<p>'.$order_input.'<strong title="'.date(s('date_format'), strtotime($O['date'])).'">'.$O['title'].'</strong> '; | |
| if ($r['default_page'] != 'YES'){ | |
| echo l('divider').' <a href="'._SITE.'?action=admin_article&id='.$O['id'].'">'.l('edit').'</a> '; | |
| } | |
| $visiblity = $O['visible'] == 'YES' ? | |
| '<a href="'._SITE.'?action=process&task=hide&item='.$item.'&id='.$O['id'].'">'.l('hide').'</a>' : | |
| l('hidden').' ( <a href="'._SITE.'?action=process&task=show&item='.$item.'&id='.$O['id'].'">'.l('show').'</a> )' ; | |
| echo ' '.l('divider').' '.$visiblity; | |
| if ($O['published'] == 2) { | |
| echo l('divider').' ['.l('status').' '.l('future_posting').']'; | |
| } | |
| if ($O['published'] == 0) { | |
| echo l('divider').' ['.l('status').' '.l('unpublished').']'; | |
| } | |
| echo '</p>'; | |
| $tab22++; | |
| } | |
| echo '</div>'; | |
| } | |
| while ($row = mysql_fetch_array($cat_res)) { | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle">'.$row['name'].'</p>'; // Patch #19 - 1.7.1 - replaces fieldset string | |
| $sql = "SELECT id, title, seftitle, date, published, artorder, visible, default_page | |
| FROM "._PRE.'articles'." | |
| WHERE category = '".$row['id']."' | |
| AND position = $p $subquery $filterquery | |
| ORDER BY artorder ASC, date DESC "; | |
| $query = mysql_query($sql) or die(mysql_error()); | |
| $num_rows = mysql_num_rows($query); | |
| if ($num_rows == 0) { | |
| echo $no_content; | |
| } | |
| while ($r = mysql_fetch_array($query)) { | |
| $order_input = '<input type="text" name="page_'.$r['id'].'" value="'.$r['artorder'].'" size="1" tabindex="'.$tab.'" /> '; | |
| echo '<p>'.$order_input.'<strong title="'.date(s('date_format'), strtotime($r['date'])).'"> | |
| '.$r['title'].'</strong> '.l('divider').' | |
| <a href="'._SITE.$row['seftitle'].'/'.$r['seftitle'].'/">'.l('view').'</a> '; | |
| if ($r['default_page'] != 'YES'){ | |
| echo l('divider').' <a href="'._SITE.'?action=admin_article&id='.$r['id'].'">'.l('edit').'</a> '; | |
| } | |
| $visiblity = $r['visible'] == 'YES' ? | |
| '<a href="'._SITE.'?action=process&task=hide&item='.$item.'&id='.$r['id'].'">'.l('hide').'</a>' : | |
| l('hidden').' ( <a href="'._SITE.'?action=process&task=show&item='.$item.'&id='.$r['id'].'">'.l('show').'</a> )' ; | |
| echo ' '.l('divider').' '.$visiblity; | |
| if ($r['published'] == 2) { | |
| echo l('divider').' ['.l('status').' '.l('future_posting').']'; | |
| } | |
| if ($r['published'] == 0) { | |
| echo l('divider').' ['.l('status').' '.l('unpublished').']'; | |
| } | |
| echo '</p>'; | |
| $tab++; | |
| } | |
| $query2 = mysql_query("SELECT id, name, seftitle FROM "._PRE.'categories'." WHERE subcat = '$row[id]' ORDER BY catorder ASC"); | |
| $tab2 = 1; | |
| while ($row2 = mysql_fetch_array($query2)){ | |
| echo '<a class="subcat" onclick="toggle(\'subcat'.$row2['id'].'\')" style="cursor: pointer;">'.$row2['name'].'</a><br />'; | |
| echo '<div id="subcat'.$row2['id'].'" style="display: none;" class="subcat">'; | |
| $catart_sql2 = "SELECT id, title, seftitle, date, published, artorder, visible | |
| FROM "._PRE.'articles'." | |
| WHERE category = '$row2[id]' $subquery $filterquery | |
| ORDER BY category ASC, artorder ASC, date DESC "; | |
| $catart_query2 = mysql_query($catart_sql2) or die(mysql_error()); | |
| $num_rows2 = mysql_num_rows($catart_query2); | |
| if ($num_rows2 == 0) { | |
| echo $no_content; | |
| } | |
| while ($ca_r2 = mysql_fetch_array($catart_query2)) { | |
| $order_input2 = '<input type="text" name="page_'.$ca_r2['id'].'" value="'.$ca_r2['artorder'].'" size="1" tabindex="'.$tab2.'" /> '; | |
| $catSEF = cat_rel($row2['id'],'seftitle'); | |
| echo '<p>'.$order_input2.'<strong title="'.date(s('date_format'), strtotime($ca_r2['date'])).'"> | |
| '.$ca_r2['title'].'</strong> '.l('divider').' | |
| <a href="'._SITE.$catSEF.'/'.$ca_r2['seftitle'].'/">'.l('view').'</a> '; | |
| echo l('divider').' <a href="'._SITE.'?action=admin_article&id='.$ca_r2['id'].'">'.l('edit').'</a> '; | |
| $visiblity2 = $ca_r2['visible'] == 'YES' ? | |
| '<a href="'._SITE.'?action=process&task=hide&item=snews_articles&id='.$ca_r2['id'].'">'.l('hide').'</a>' : | |
| l('hidden').' ( <a href="'._SITE.'?action=process&task=show&item=snews_articles&id='.$ca_r2['id'].'"> | |
| '.l('show').'</a> )'; | |
| echo ' '.l('divider').' '.$visiblity2; | |
| if ($ca_r2['published'] == 2) { | |
| echo l('divider').' ['.l('status').' '.l('future_posting').']'; | |
| } | |
| if ($ca_r2['published'] == 0) { | |
| echo l('divider').' ['.l('status').' '.l('unpublished').']'; | |
| } | |
| echo '</p>'; | |
| } | |
| echo '</div>'; | |
| $tab2++; | |
| } | |
| echo '</div>'; | |
| } | |
| } | |
| } elseif ($contents == 'page_view') { | |
| $sql = "SELECT id, title, seftitle, date, published, artorder, visible, default_page | |
| FROM "._PRE.'articles'." | |
| WHERE position = 3 $subquery | |
| ORDER BY artorder ASC, date DESC "; | |
| $query = mysql_query($sql) or die(mysql_error()); | |
| $num_rows = mysql_num_rows($query); | |
| if ($num_rows == 0) { | |
| echo '<p>'.l('article_not_exist').'</p>'; | |
| } | |
| while ($r = mysql_fetch_array($query)) { | |
| $order_input = '<input type="text" name="page_'.$r['id'].'" value="'.$r['artorder'].'" size="1" tabindex="'.$tab.'" /> '; | |
| echo '<p>'.$order_input.'<strong title="'.date(s('date_format'), strtotime($r['date'])).'"> | |
| '.$r['title'].'</strong> '.l('divider').' | |
| <a href="'._SITE.$r['seftitle'].'/">'.l('view').'</a> '; | |
| if ($r['default_page'] != 'YES') { | |
| echo l('divider').' <a href="'._SITE.'?action=admin_article&id='.$r['id'].'">'.l('edit').'</a> '; | |
| } | |
| $visiblity = $r['visible'] == 'YES' ? | |
| '<a href="'._SITE.'?action=process&task=hide&item=snews_pages&id='.$r['id'].'">'.l('hide').'</a>' : | |
| l('hidden').' ( <a href="'._SITE.'?action=process&task=show&item=snews_pages&id='.$r['id'].'">'.l('show').'</a> )' ; | |
| echo ' '.l('divider').' '.$visiblity; | |
| if ($r['published'] == 2) { | |
| echo l('divider').' ['.l('status').' '.l('future_posting').']'; | |
| } | |
| if ($r['published'] == 0) { | |
| echo l('divider').' ['.l('status').' '.l('unpublished').']'; | |
| } | |
| echo '</p>'; | |
| $tab++; | |
| } | |
| } | |
| echo '<p>'.html_input('submit', 'reorder', 'reorder', l('order_content'), '', 'button', '', '', '', '', '', '', '', '', ''); | |
| echo '</p></div></form>'; | |
| } | |
| //BUTTONS | |
| function buttons(){ | |
| echo '<div class="clearer"></div> | |
| <p>'.l('formatting').': | |
| <br class="clearer" />'; | |
| $formatting = array( | |
| 'strong' => '', | |
| 'em' => 'key', | |
| 'underline' => 'key', | |
| 'del' => 'key', | |
| 'p' => '', | |
| 'br' => '' | |
| ); | |
| foreach ($formatting as $key => $var) { | |
| $css = $var == 'key' ? $key :'buttons'; | |
| echo '<input type="button" name="'.$key.'" title="'.l($key).'" class="'.$css.'" onclick="tag(\''.$key.'\')" value="'. | |
| l($key.'_value').'" />'; | |
| } | |
| echo '</p><br class="clearer" /><p>'.l('insert').': <br class="clearer" />'; | |
| $insert = array('img', 'link', 'include', 'func','intro'); | |
| foreach ($insert as $key) { | |
| echo '<input type="button" name="'.$key.'" title="'.l($key).'" class="buttons" onclick="tag(\''. | |
| $key.'\')" value="'.l($key.'_value').'" />'; | |
| } | |
| echo '<br class="clearer" /></p>'; | |
| } | |
| // COMMENTS - EDIT | |
| function edit_comment() { | |
| $commentid = $_GET['commentid']; | |
| $query = mysql_query('SELECT id,articleid,name,url,comment,approved FROM '._PRE.'comments'.' WHERE id='.$commentid); | |
| $r = mysql_fetch_array($query); | |
| $articleTITLE = retrieve('title', 'articles', 'id', $r['articleid']); | |
| echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', '?action=process&task=editcomment&id='.$commentid, ''); | |
| echo '<div class="adminpanel">'; | |
| # Patch #19 - 1.7.1 - replaces fieldset string | |
| echo '<p class="admintitle">'.l('edit_comment').' (<strong> '.$articleTITLE.'</strong> )</p>'; | |
| echo html_input('textarea', 'editedcomment', 'ec', stripslashes($r['comment']), l('comment'), '', '', '', '', '', '2', '100', '', '', ''); | |
| echo html_input('text', 'name', 'n', $r['name'], l('name'), '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('text', 'url', 'url', $r['url'], l('url'), '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('checkbox', 'approved', 'a', '', l('approved'), '', '', '', '', $r['approved'] == 'True' ? 'ok' : '', '', '', '', '', ''); | |
| echo '</div><p>'; // echo '</fieldset></div><p>'; # Patch #19 - 1.7.1 | |
| echo html_input('hidden', 'id', 'id', $r['articleid'], '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', 'submit_text', 'submit_text', l('edit'), '', 'button', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('hidden', 'commentid', 'commentid', $r['id'], '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', 'delete_text', 'delete_text', l('delete'), '', | |
| 'button', 'onclick="javascript: return pop()"', '', '', '', '', '', '', '', ''); | |
| echo '</p></form>'; | |
| } | |
| // FORM EXTRA GROUPINGS | |
| function form_groupings() { | |
| if (s('enable_extras') == 'YES') { | |
| if (isset($_GET['id']) && is_numeric($_GET['id']) && !is_null($_GET['id'])) { | |
| $extraid = $_GET['id']; | |
| $query = mysql_query('SELECT id,name,seftitle,description FROM '._PRE.'extras'.' WHERE id='.$extraid); | |
| $r = mysql_fetch_array($query); | |
| $frm_action = _SITE.'?action=process&task=admin_groupings&id='.$extraid; | |
| $frm_add_edit = l('edit'); | |
| $frm_name = $r['name']; | |
| $frm_sef_title = $r['seftitle']; | |
| $frm_description = $r['description']; | |
| $frm_task = 'edit_groupings'; | |
| $frm_submit = l('edit_button'); // Patch #11 - 1.7.0 | |
| } else { | |
| $frm_action = _SITE.'?action=process&task=admin_groupings'; | |
| $frm_add_edit = l('add_groupings'); | |
| $frm_name = $_POST['name']; | |
| $frm_sef_title = $_POST['name'] == '' ? cleanSEF($_POST['name']) : cleanSEF($_POST['seftitle']); | |
| $frm_description = ''; | |
| $frm_task = 'add_groupings'; | |
| $frm_submit = l('add_groupings'); | |
| } | |
| echo html_input('form', '', 'post', '', '', '', '', '', '', '', '', '', 'post', $frm_action, ''); | |
| echo '<div class="adminpanel">'; | |
| # Patch #19 - 1.7.1 - replaces fieldset string | |
| echo '<p class="admintitle">'.$frm_add_edit.'</p>'; | |
| echo html_input('text', 'name', 't', $frm_name, l('name'), '', | |
| 'onchange="genSEF(this,document.forms[\'post\'].seftitle)"', | |
| 'onkeyup="genSEF(this,document.forms[\'post\'].seftitle)"', '', '', '', '', '', '', ''); | |
| echo html_input('text', 'seftitle', 's', $frm_sef_title, l('extra_title'), '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('text', 'description', 'desc', $frm_description, l('description'), '', '', '', '', '', '', '', '', '', ''); | |
| echo '</div><p>'; // echo '</fieldset></div><p>'; # Patch #19 - 1.7.1 | |
| echo html_input('hidden', 'task', 'task', 'admin_groupings', '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', $frm_task, $frm_task, $frm_submit, '', 'button', '', '', '', '', '', '', '', '', ''); | |
| if (!empty($extraid)) { | |
| echo ' '; | |
| echo html_input('hidden', 'id', 'id', $extraid, '', '', '', '', '', '', '', '', '', '', ''); | |
| if ($extraid != 1) { | |
| echo html_input('submit', 'delete_groupings', 'delete_groupings', l('delete'), '', | |
| 'button', 'onclick="javascript: return pop()"', '', '', '', '', '', '', '', ''); | |
| } | |
| } | |
| echo '</p></form>'; | |
| } | |
| } | |
| // ADMIN GROUPINGS | |
| function admin_groupings() { | |
| if (s('enable_extras') == 'YES') { | |
| if (stats('extras','') > 0) { | |
| $add = ' - <a href="admin_groupings/" title="'.l('add_new').'">'.l('add_new').'</a>'; | |
| } else { | |
| $add = ''; | |
| } | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle">'.l('groupings').$add.'</p>'; // Patch #19 - 1.7.1 - replaces fieldset string | |
| $result = mysql_query('SELECT id,name,description FROM '._PRE.'extras'.' ORDER BY id ASC'); | |
| if (!$result || !mysql_num_rows($result)) { | |
| echo '<p>'.l('group_not_exist').'</p>'; | |
| } else { | |
| while ($r = mysql_fetch_array($result)) { | |
| echo '<p><strong>'.$r['name'].'</strong> '.l('divider').'<a href="'._SITE.'?action=admin_groupings&id='.$r['id'].'" title="'.$r['description'].'">'.l('edit').'</a></p>'; | |
| } | |
| } | |
| echo '</div>'; | |
| } | |
| } | |
| /*** PROCESSING (CATEGORIES, CONTENTS, COMMENTS) ***/ | |
| function processing() { | |
| if (!_ADMIN) { | |
| echo (notification(1,l('error_not_logged_in'),'home')); | |
| } else { | |
| $action = clean(cleanXSS($_GET['action'])); | |
| $id = clean(cleanXSS($_GET['id'])); | |
| $commentid = $_POST['commentid']; | |
| $approved = $_POST['approved'] == 'on' ? 'True' : ''; | |
| $name = clean(entity($_POST['name'])); | |
| $category = !empty($_POST['define_category']) ? $_POST['define_category'] : 0; | |
| $subcat = $_POST['subcat']; | |
| $page = $_POST['define_page']; | |
| $def_extra = $_POST['define_extra']; | |
| $description = clean(entity($_POST['description'])); | |
| $title = clean(entity($_POST['title'])); | |
| $seftitle = $_POST['seftitle']; | |
| $url = cleanXSS($_POST['url']); | |
| $comment = $_POST['editedcomment']; | |
| $text = clean($_POST['text']); | |
| $date = date('Y-m-d H:i:s'); | |
| $description_meta = entity($_POST['description_meta']); | |
| $keywords_meta = entity($_POST['keywords_meta']); | |
| $display_title = $_POST['display_title'] == 'on' ? 'YES' : 'NO'; | |
| $display_info = $_POST['display_info'] == 'on' ? 'YES' : 'NO'; | |
| $commentable = $_POST['commentable'] == 'on' ? 'YES' : 'NO'; | |
| $freez = $_POST['freeze'] == 'on' ? 'YES' : 'NO'; | |
| if ($freez == 'YES' && $commentable == 'YES') { | |
| $commentable = 'FREEZ'; | |
| } | |
| $position = $_POST['position']> 0 ? $_POST['position'] : 1; | |
| if ($position == 2) { | |
| $position = $_POST['cat_dependant'] == 'on' ? 21 : 2; | |
| } | |
| $publish_article = ($_POST['publish_article'] == 'on') ? 1 : 0; | |
| $show_in_subcats = $_POST['show_in_subcats'] == 'on' ? 'YES' : 'NO'; | |
| $show_on_home = ($_POST['show_on_home'] == 'on' || $position > 1) ? 'YES' : 'NO'; | |
| $publish_category = $_POST['publish'] == 'on' ? 'YES' : 'NO'; | |
| $fpost_enabled = false; | |
| if ($_POST['fposting'] == 'on') { | |
| $fpost_enabled = true; | |
| $date = $_POST['fposting_year'].'-'.$_POST['fposting_month'].'-'.$_POST['fposting_day'].' '. | |
| $_POST['fposting_hour'].':'.$_POST['fposting_minute'].':00'; | |
| if (date('Y-m-d H:i:s') < $date) $publish_article = 2; | |
| } | |
| $task = clean(cleanXSS($_GET['task'])); | |
| switch ($task) { | |
| case 'save_settings': | |
| if (isset($_POST['save'])) { | |
| $website_title = $_POST['website_title']; | |
| $home_sef = $_POST['home_sef']; | |
| $website_description = $_POST['website_description']; | |
| $website_keywords = $_POST['website_keywords']; | |
| $website_email = $_POST['website_email']; | |
| $contact_subject = $_POST['contact_subject']; | |
| $language = $_POST['language']; | |
| $charset = $_POST['charset']; | |
| $date_format = $_POST['date_format']; | |
| $article_limit = $_POST['article_limit']; | |
| $rss_limit = $_POST['rss_limit']; | |
| $display_page = $_POST['display_page']; | |
| $display_new_on_home = $_POST['display_new_on_home']; | |
| $display_pagination = $_POST['display_pagination']; | |
| $num_categories = $_POST['num_categories']; | |
| $show_cat_names = $_POST['show_cat_names']; | |
| $approve_comments = $_POST['approve_comments']; | |
| $mail_on_comments = $_POST['mail_on_comments']; | |
| $comments_order = $_POST['comments_order']; | |
| $comment_limit = $_POST['comment_limit']; | |
| $word_filter_enable = $_POST['word_filter_enable']; | |
| $word_filter_file = $_POST['word_filter_file']; | |
| $word_filter_change = $_POST['word_filter_change']; | |
| $enable_extras = $_POST['enable_extras'] == 'on' ? 'YES' : 'NO'; | |
| $enable_comments = $_POST['enable_comments'] == 'on' ? 'YES' : 'NO'; | |
| $comment_repost_timer = is_numeric($_POST['comment_repost_timer']) ? $_POST['comment_repost_timer'] : '15'; | |
| $freeze_comments = $_POST['freeze_comments'] == 'on' ? 'YES' : 'NO'; | |
| $file_ext = $_POST['file_ext']; | |
| $allowed_file = $_POST['allowed_file']; | |
| $allowed_img = $_POST['allowed_img']; | |
| $ufield = array( | |
| 'website_title' => $website_title, | |
| 'home_sef' => $home_sef, | |
| 'website_description' => $website_description, | |
| 'website_keywords' => $website_keywords, | |
| 'website_email' => $website_email, | |
| 'contact_subject' => $contact_subject, | |
| 'language' => $language, | |
| 'charset' => $charset, | |
| 'date_format' => $date_format, | |
| 'article_limit' => $article_limit, | |
| 'rss_limit' => $rss_limit, | |
| 'display_page' => $display_page, | |
| 'comments_order' => $comments_order, | |
| 'comment_limit' => $comment_limit, | |
| 'word_filter_file' => $word_filter_file, | |
| 'word_filter_change' => $word_filter_change, | |
| 'display_new_on_home' => $display_new_on_home, | |
| 'display_pagination' => $display_pagination, | |
| 'num_categories' => $num_categories, | |
| 'show_cat_names' => $show_cat_names, | |
| 'approve_comments' => $approve_comments, | |
| 'mail_on_comments' => $mail_on_comments, | |
| 'word_filter_enable' => $word_filter_enable, | |
| 'enable_extras' => $enable_extras, | |
| 'enable_comments' => $enable_comments, | |
| 'freeze_comments' => $freeze_comments, | |
| 'comment_repost_timer' => $comment_repost_timer, | |
| 'file_extensions' => $file_ext, | |
| 'allowed_files' => $allowed_file, | |
| 'allowed_images' => $allowed_img | |
| ); | |
| while (list($key, $value) = each($ufield)) { | |
| mysql_query("UPDATE "._PRE.'settings'." SET VALUE = '$value' WHERE name = '$key' LIMIT 1"); | |
| } | |
| echo notification(0,'','snews_settings'); | |
| } | |
| break; | |
| case 'changeup': | |
| if (isset($_POST['submit_pass'])) { | |
| $user = checkUserPass($_POST['uname']); | |
| $pass1 = checkUserPass($_POST['pass1']); | |
| $pass2 = checkUserPass($_POST['pass2']); | |
| if ($user && $pass1 && $pass2 && $pass1 === $pass2) { | |
| $uname = md5($user); | |
| $pass = md5($pass2); | |
| $query = "UPDATE "._PRE.'settings'." SET VALUE="; | |
| mysql_query($query."'$uname' WHERE name='username' LIMIT 1"); | |
| mysql_query($query."'$pass' WHERE name='password' LIMIT 1"); | |
| echo notification(0,'','administration'); | |
| } else { | |
| die(notification(2,l('pass_mismatch'),'snews_settings')); | |
| } | |
| } | |
| break; | |
| case 'admin_groupings': | |
| switch (true) { | |
| case (empty($name)): | |
| echo notification(1,l('err_TitleEmpty').l('errNote')); | |
| form_groupings(); | |
| break; | |
| case (empty($seftitle)): | |
| echo notification(1,l('err_SEFEmpty').l('errNote')); | |
| form_groupings(); | |
| break; | |
| case(check_if_unique('group_name', $name, $id, '')): | |
| echo notification(1,l('err_TitleExists').l('errNote')); | |
| form_groupings(); | |
| break; | |
| case(check_if_unique('group_seftitle', $seftitle, $id, '')): | |
| echo notification(1,l('err_SEFExists').l('errNote')); | |
| form_groupings(); | |
| break; | |
| case(cleancheckSEF($seftitle) == 'notok'): | |
| echo notification(1,l('err_SEFIllegal').l('errNote')); | |
| form_groupings(); | |
| break; | |
| default: | |
| switch (true) { | |
| case (isset($_POST['add_groupings'])): | |
| mysql_query("INSERT INTO "._PRE.'extras'."(name, seftitle, description) | |
| VALUES('$name', '$seftitle', '$description')"); | |
| break; | |
| case (isset($_POST['edit_groupings'])): | |
| mysql_query("UPDATE "._PRE.'extras'." SET | |
| name = '$name', | |
| seftitle = '$seftitle', | |
| description = '$description' | |
| WHERE id = $id LIMIT 1"); | |
| break; | |
| case (isset($_POST['delete_groupings'])): | |
| mysql_query("DELETE FROM "._PRE.'extras'." WHERE id = $id LIMIT 1"); | |
| break; | |
| } | |
| echo notification(0,'','groupings'); | |
| } | |
| break; | |
| case 'admin_category': | |
| case 'admin_subcategory': | |
| switch (true) { | |
| case (empty($name)): | |
| echo notification(1,l('err_TitleEmpty').l('errNote')); | |
| form_categories(); | |
| break; | |
| case (empty($seftitle)): | |
| echo notification(1,l('err_SEFEmpty').l('errNote')); | |
| form_categories(); | |
| break; | |
| case (isset($_POST['add_category']) && check_if_unique('subcat_name', $name, '', $subcat)): | |
| echo notification(1,l('err_TitleExists').l('errNote')); | |
| form_categories(); | |
| break; | |
| case (isset($_POST['add_category']) && check_if_unique('subcat_seftitle', $seftitle, '', $subcat)): | |
| echo notification(1,l('err_SEFExists').l('errNote')); | |
| form_categories(); | |
| break; | |
| case (isset($_POST['edit_category']) && $subcat == 0 && check_if_unique('cat_name_edit', $name, $id, '')): | |
| echo notification(1,l('err_TitleExists').l('errNote')); | |
| form_categories(); | |
| break; | |
| case (isset($_POST['edit_category']) && $subcat == 0 && check_if_unique('cat_seftitle_edit', $seftitle, $id, '')): | |
| echo notification(1,l('err_SEFExists').l('errNote')); | |
| form_categories(); | |
| break; | |
| case (isset($_POST['edit_category']) && $subcat != 0 && check_if_unique('subcat_name_edit', $name, $id, $subcat)): | |
| echo notification(1,l('err_TitleExists').l('errNote')); | |
| form_categories(); | |
| break; | |
| case (isset($_POST['edit_category']) && $subcat != 0 && check_if_unique('subcat_seftitle_edit', $seftitle, $id, $subcat)): | |
| echo notification(1,l('err_SEFExists').l('errNote')); | |
| form_categories(); | |
| break; | |
| case (cleancheckSEF($seftitle) == 'notok'): | |
| echo notification(1,l('err_SEFIllegal').l('errNote')); | |
| form_categories(); | |
| break; | |
| case ($subcat==$id): | |
| echo notification(1,l('errNote')); | |
| form_categories(); | |
| break; | |
| default: | |
| switch(true) { | |
| case(isset($_POST['add_category'])): | |
| $catorder = mysql_fetch_array(mysql_query( | |
| "SELECT MAX(catorder) as max | |
| FROM "._PRE.'categories'." WHERE subcat = $subcat")); | |
| $catorder = $catorder['max'] + 1; | |
| mysql_query("INSERT INTO "._PRE.'categories'." | |
| (name, seftitle, description, published, catorder, subcat) | |
| VALUES('$name', '$seftitle', '$description', '$publish_category', '$catorder','$subcat')"); | |
| break; | |
| case(isset($_POST['edit_category'])): | |
| $catorder = mysql_fetch_array(mysql_query( | |
| "SELECT MAX(catorder) as max | |
| FROM "._PRE.'categories'." WHERE subcat = $subcat")); | |
| $catorder = isset($_POST['catorder']) ? $_POST['catorder'] : $catorder['max'] + 1; | |
| mysql_query("UPDATE "._PRE.'categories'." SET | |
| name = '$name', | |
| seftitle = '$seftitle', | |
| description = '$description', | |
| published = '$publish_category', | |
| subcat='$subcat', | |
| catorder='$catorder' | |
| WHERE id = $id LIMIT 1"); | |
| break; | |
| case (isset($_POST['delete_category'])): | |
| $any_subcats = retrieve('COUNT(id)','categories','subcat',$id); | |
| $any_articles = retrieve('COUNT(id)','articles','category',$id); | |
| if ($any_subcats > 0 || $any_articles > 0) { | |
| echo notification(1,l('warn_catnotempty'),''); | |
| echo '<p><a href="'._SITE.'administration/" title="'.l('administration').'"> | |
| '.l('administration').'</a> OR <a href="'._SITE.'?action=process&task=delete_category_all&id='.$id.'" onclick="javascript: return pop(\'x\')" title="'.l('administration').'"> | |
| '.l('empty_cat').'</a></p>'; | |
| $no_success = true; | |
| } else { delete_cat($id); } | |
| break; | |
| } | |
| $success = isset($no_success) ? '' : notification(0,'','snews_categories'); | |
| echo $success; | |
| } | |
| break; | |
| case 'reorder': | |
| if (isset($_POST['reorder'])) { | |
| switch ($_POST['order']){ | |
| case 'snews_articles': | |
| case 'extra_contents': | |
| case 'snews_pages': | |
| $table = 'articles'; | |
| $order_type = 'artorder'; | |
| $remove = 'page_'; | |
| break; | |
| case 'snews_categories': | |
| $table = 'categories'; | |
| $order_type = 'catorder'; | |
| $remove = 'cat_'; | |
| break; | |
| } | |
| foreach ($_POST as $key => $value){ | |
| $type_id = str_replace($remove,'',$key); | |
| $key = clean(cleanXSS(trim($value))); | |
| if ($key != 'reorder' && $key != 'order' && $key != $table && $key != l('order_content') && $key != $_POST['order']){ | |
| $query = "UPDATE "._PRE.$table." SET $order_type = $value WHERE id = $type_id LIMIT 1;"; | |
| mysql_query($query) or die(mysql_error().'<br />'.$query); | |
| } | |
| } | |
| echo notification(0,l('please_wait')); | |
| echo '<meta http-equiv="refresh" content="1; url='._SITE.$_POST['order'].'/">'; | |
| } | |
| break; | |
| case 'admin_article': | |
| $_SESSION[_SITE.'temp']['title'] = $_POST['title']; // Patch #9 - 1.7.0 - revised | |
| $_SESSION[_SITE.'temp']['seftitle'] = $_POST['seftitle']; // Patch #9 - 1.7.0 - revised | |
| $_SESSION[_SITE.'temp']['text'] = $_POST['text']; // Patch #9 - 1.7.0 - revised | |
| switch (true) { | |
| case (empty($title)): | |
| echo notification(1,l('err_TitleEmpty').l('errNote')); | |
| form_articles(''); | |
| unset($_SESSION[_SITE.'temp']); | |
| break; | |
| case (empty($seftitle)): | |
| echo notification(1,l('err_SEFEmpty').l('errNote')); | |
| $_SESSION[_SITE.'temp']['seftitle'] = $_SESSION[_SITE.'temp']['title']; | |
| form_articles(''); | |
| unset($_SESSION[_SITE.'temp']); | |
| break; | |
| case (cleancheckSEF($seftitle) == 'notok'): | |
| echo notification(1,l('err_SEFIllegal').l('errNote')); | |
| form_articles(''); | |
| unset($_SESSION[_SITE.'temp']); | |
| break; | |
| case ($position == 1 && $_POST['article_category'] != $category && isset($_POST['edit_article']) | |
| && check_if_unique('article_title', $title, $category, '')): | |
| echo notification(1,l('err_TitleExists').l('errNote')); | |
| form_articles(''); | |
| unset($_SESSION[_SITE.'temp']); | |
| break; | |
| case ($position == 1 && $_POST['article_category'] != $category && isset($_POST['edit_article']) | |
| && check_if_unique('article_seftitle', $seftitle, $category, '')): | |
| echo notification(1,l('err_SEFExists').l('errNote')); | |
| form_articles(''); | |
| unset($_SESSION[_SITE.'temp']); | |
| break; | |
| case (!isset($_POST['delete_article']) && !isset($_POST['edit_article']) | |
| && check_if_unique('article_title', $title, $category, '')): | |
| echo notification(1,l('err_TitleExists').l('errNote')); | |
| form_articles(''); | |
| unset($_SESSION[_SITE.'temp']); | |
| break; | |
| case (!isset($_POST['delete_article']) && !isset($_POST['edit_article']) | |
| && check_if_unique('article_seftitle', $seftitle, $category, '')): | |
| echo notification(1,l('err_SEFExists').l('errNote')); | |
| form_articles(''); | |
| unset($_SESSION[_SITE.'temp']); | |
| break; | |
| default: | |
| $pos = $position; | |
| $sub = !empty($category) ? ' AND category = '.$category : ''; | |
| $curr_artorder = retrieve('artorder','articles','id',$id); | |
| if (!$curr_artorder){ | |
| $artorder = 1; | |
| } else { | |
| $artorder = $curr_artorder; | |
| } | |
| switch ($pos) { | |
| case 1: $link = 'snews_articles'; break; | |
| case 2: $link = 'extra_contents'; break; | |
| case 3: $link = 'snews_pages'; break; | |
| } | |
| switch (true) { | |
| case (isset($_POST['add_article'])): | |
| mysql_query("INSERT INTO "._PRE.'articles'."( | |
| title, seftitle, text, date, category, | |
| position, extraid, page_extra, displaytitle, | |
| displayinfo, commentable, published, description_meta, | |
| keywords_meta, show_on_home, show_in_subcats, artorder) | |
| VALUES('$title', '$seftitle', '$text', '$date', '$category', | |
| '$position', '$def_extra', '$page', '$display_title', | |
| '$display_info', '$commentable', '$publish_article', | |
| '$description_meta', '$keywords_meta', '$show_on_home', | |
| '$show_in_subcats', '$artorder')"); | |
| break; | |
| case (isset($_POST['edit_article'])): | |
| $category = $position == 3 ? 0 : $category; | |
| $old_pos = retrieve('position','articles','id',$id); | |
| // Only do this if page is changed to art/extra | |
| if ($position != $old_pos && $old_pos == 3) { | |
| $chk_extra_query = "SELECT id FROM "._PRE.'articles'." | |
| WHERE position = 2 AND category = -3 AND page_extra = $id"; | |
| $chk_extra_sql = mysql_query($chk_extra_query) or die(mysql_error('oops')); | |
| if ($chk_extra_sql) { | |
| while ($xtra = mysql_fetch_array($chk_extra_sql)) { | |
| $xtra_id = $xtra['id']; | |
| mysql_query("UPDATE "._PRE.'articles'." SET | |
| category = '0', page_extra = '' | |
| WHERE id = $xtra_id"); | |
| } | |
| } | |
| } | |
| if ($fpost_enabled == true) { | |
| $future = "date = '$date',"; // Patch #5 - 1.7.0 | |
| //allows backdating of article | |
| $publish_article = strtotime($date) < time() ? 1 : $publish_article; | |
| } | |
| mysql_query("UPDATE "._PRE.'articles'." SET | |
| title='$title', | |
| seftitle = '$seftitle', | |
| text = '$text', | |
| ".$future." | |
| category = $category, | |
| position = $position, | |
| extraid = '$def_extra', | |
| page_extra = '$page', | |
| displaytitle = '$display_title', | |
| displayinfo = '$display_info', | |
| commentable = '$commentable', | |
| published = $publish_article, | |
| description_meta = '$description_meta', | |
| keywords_meta = '$keywords_meta', | |
| show_on_home='$show_on_home', | |
| show_in_subcats='$show_in_subcats', | |
| artorder = '$artorder' | |
| WHERE id = $id LIMIT 1") or die(mysql_error()); | |
| break; | |
| case(isset($_POST['delete_article'])): | |
| if ($position == 3) { | |
| $chk_extra_query = "SELECT id FROM "._PRE.'articles'." | |
| WHERE position = 2 AND category = -3 AND page_extra = $id"; | |
| $chk_extra_sql = mysql_query($chk_extra_query) or die(mysql_error()); | |
| if ($chk_extra_sql) { | |
| while ($xtra = mysql_fetch_array($chk_extra_sql)) { | |
| $xtra_id = $xtra['id']; | |
| mysql_query("UPDATE "._PRE.'articles'." SET category = '0',page_extra = '' WHERE id = $xtra_id"); | |
| } | |
| } | |
| } | |
| mysql_query("DELETE FROM "._PRE.'articles'." WHERE id = $id"); | |
| mysql_query("DELETE FROM "._PRE.'comments'." WHERE articleid = $id"); | |
| if ($id == s('display_page')) { | |
| mysql_query("UPDATE "._PRE.'settings'." SET | |
| VALUE = 0 WHERE name = 'display_page'"); | |
| } | |
| break; | |
| } | |
| echo notification(0,'',$link); | |
| unset($_SESSION[_SITE.'temp']); | |
| } | |
| break; | |
| case 'editcomment': | |
| $articleID = retrieve('articleid', 'comments', 'id', $commentid); | |
| $articleSEF = retrieve('seftitle', 'articles', 'id', $articleID); | |
| $articleCAT = retrieve('category','articles','seftitle',$articleSEF); | |
| $postCat = cat_rel($articleCAT, 'seftitle'); | |
| $link = $postCat.'/'.$articleSEF; | |
| if (isset($_POST['submit_text'])) { | |
| mysql_query("UPDATE "._PRE.'comments'." SET | |
| name = '$name', | |
| url = '$url', | |
| comment = '$comment', | |
| approved = '$approved' | |
| WHERE id = $commentid"); | |
| } else if (isset($_POST['delete_text'])) { | |
| mysql_query("DELETE FROM "._PRE.'comments'." WHERE id = $commentid"); | |
| } | |
| echo notification(0,'',$link); | |
| break; | |
| case 'deletecomment': | |
| $commentid = $_GET['commentid']; | |
| $articleid = retrieve('articleid', 'comments', 'id', $commentid); | |
| $articleSEF = retrieve('seftitle', 'articles', 'id', $articleid); | |
| $articleCAT = retrieve('category','articles','id', $articleid); | |
| $postCat = cat_rel($articleCAT, 'seftitle'); | |
| $link = $postCat.'/'.$articleSEF; | |
| mysql_query("DELETE FROM "._PRE.'comments'." WHERE id = $commentid"); | |
| echo notification(0,'', $link); | |
| echo '<meta http-equiv="refresh" content="1; url='._SITE.$postCat.'/'.$articleSEF.'/">'; | |
| break; | |
| case 'delete_category_all': | |
| $art_query = mysql_query("SELECT id FROM "._PRE.'articles'." WHERE category = $id"); | |
| while ($rart = mysql_fetch_array($art_query)) { | |
| mysql_query("DELETE FROM "._PRE.'comments'." WHERE articleid = $rart[id]"); | |
| } | |
| mysql_query("DELETE FROM "._PRE.'articles'." WHERE category = $id"); | |
| $sub_query = mysql_query("SELECT id FROM "._PRE.'categories'." WHERE subcat = $id"); | |
| while ($rsub = mysql_fetch_array($sub_query)) { | |
| $art_query = mysql_query("SELECT id FROM "._PRE.'articles'." WHERE category = $rsub[id]"); | |
| while ($rart = mysql_fetch_array($art_query)) { | |
| mysql_query("DELETE FROM "._PRE.'comments'." WHERE articleid = $rart[id]"); | |
| } | |
| mysql_query("DELETE FROM "._PRE.'articles'." WHERE category = $rsub[id]"); | |
| } | |
| mysql_query("DELETE FROM "._PRE.'categories'." WHERE subcat = $id"); delete_cat($id); | |
| echo notification(0,'', 'snews_categories'); | |
| break; | |
| case 'hide': | |
| case 'show': | |
| $id = $_GET['id']; | |
| $item = $_GET['item']; | |
| $back = $_GET['back']; | |
| $no_yes = $task == 'hide' ? 'NO' : 'YES'; | |
| switch ($item) { | |
| case 'snews_articles': | |
| $order = 'artorder'; | |
| $link = empty($back) ? 'snews_articles' : $back; | |
| break; | |
| case 'extra_contents': | |
| $order = 'artorder'; | |
| $link = empty($back) ? 'extra_contents' : $back; | |
| break; | |
| case 'snews_pages': | |
| $order = 'artorder'; | |
| $link = empty($back) ? 'snews_pages' : $back; | |
| break; | |
| } | |
| $item = 'articles'; | |
| mysql_query("UPDATE "._PRE."$item SET visible = '$no_yes' WHERE id = '$id'"); | |
| echo notification(0,l('please_wait')); | |
| echo '<meta http-equiv="refresh" content="1; url='._SITE.$link.'/">'; | |
| break; | |
| } | |
| } | |
| } | |
| // FILES | |
| function files() { | |
| $upload_file = isset($_POST['upload']) ? $_POST['upload'] : null; | |
| $ip = (isset($_POST['ip']) && $_POST['ip'] == $_SERVER['REMOTE_ADDR']) ? $_POST['ip'] : null; | |
| $time = (isset($_POST['time']) && (time() - $_POST['time']) > 4) ? $_POST['time'] : null; | |
| if ($ip && $time && $upload_file && _ADMIN) { | |
| $ignore = explode(',', l('ignored_items')); | |
| $file_types = explode(',', s('allowed_files')); | |
| $image_types = explode(',', s('allowed_images')); | |
| $extension = array_merge($file_types, $image_types); | |
| if ($_FILES['imagefile']['type']) { | |
| $filetemp = $_FILES['imagefile']['tmp_name']; | |
| $filename = strtolower($_FILES['imagefile']['name']); | |
| $filetype = $_FILES['imagefile']['type']; | |
| if (!in_array(substr(strrchr($filename, '.'), 1), $extension) || in_array($filename, $ignore)) { | |
| die(notification(2,l('file_error'),'snews_files')); | |
| } else { | |
| $upload_dir = $_POST['upload_dir'].'/'; | |
| copy ($filetemp, $upload_dir.$filename) or die (l('file_error')); | |
| echo notification(0,'','snews_files'); | |
| $kb_size = round(($_FILES['imagefile']['size'] / 1024), 1); | |
| echo '<p><a href="'.$upload_dir.$filename.'" title="'.$filename.'">'.$filename.'</a> ['.$kb_size.' KB] ['.$filetype.']</p>'; | |
| } | |
| } else { | |
| die(notification(2,l('file_error'),'snews_files')); | |
| } | |
| } else { | |
| if (isset($_GET['task']) == 'delete') { | |
| $file_to_delete = $_GET['folder'].'/'.$_GET['file']; | |
| @unlink($file_to_delete); | |
| echo notification(0,'','snews_files'); | |
| } else { | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle">'.l('upload').'</p>'; # Patch #19 - 1.7.1 - title string replaces fieldset | |
| echo '<form method="post" action="snews_files/" enctype="multipart/form-data">'; | |
| echo '<p>'.l('uploadto'). | |
| ' <select name="upload_dir" id="ud1">'; | |
| echo '<option value=".">..</option>'; | |
| filelist('option',".", 0); | |
| echo '</select></p><p>'.l('uploadfrom'). | |
| ' <input type="file" name="imagefile" /></p><p>'; | |
| echo html_input('hidden', 'ip', 'ip1', $_SERVER['REMOTE_ADDR'], '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('hidden', 'time', 'time1', time(), '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', 'upload', 'upload', l('upload'), '', 'button', '', '', '', '', '', '', '', '', ''); | |
| echo '</p></form></div>'; // echo '</p></form></fieldset></div>'; # Patch #19 - 1.7.1 | |
| echo '<div class="adminpanel">'; | |
| echo '<p class="admintitle">'.l('view_files').' '.(!isset($_POST['upload_dir']) ? ' root' : ' '.str_replace('.', 'root', $_POST['upload_dir'])); | |
| echo '</p>'; # Patch #19 - 1.7.1 - title string replaces fieldset | |
| echo '<form method="post" action="snews_files/" enctype="multipart/form-data">'; | |
| echo '<p><select name="upload_dir" id="ud2"><option value=".">..</option>'; | |
| filelist('option',"."); | |
| echo '</select>'; | |
| echo html_input('hidden', 'file', 'file', $file, '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('hidden', 'ip', 'ip2', $_SERVER['REMOTE_ADDR'], '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('hidden', 'time', 'time2', time(), '', '', '', '', '', '', '', '', '', '', ''); | |
| echo html_input('submit', 'show', 'show', l('view'), '', 'button', '', '', '', '', '', '', '', '', ''); | |
| $handle = (isset($_POST['upload_dir']) && strlen($_POST['upload_dir']) > 2) ? substr($_POST['upload_dir'], 2) : "."; | |
| echo '</p><p>'; | |
| filelist('list', $handle); | |
| echo '</p></form></div>'; // echo '</p></form></fieldset></div>'; # Patch #19 - 1.7.1 | |
| } | |
| } | |
| } | |
| // FILELIST FUNCTION | |
| function filelist($mode, $path, $depth = 0) { | |
| $ignore = explode(',', l('ignored_items')); | |
| $file_types = explode(',', s('allowed_files')); | |
| $image_types = explode(',', s('allowed_images')); | |
| $types = array_merge($file_types, $image_types); | |
| $dh = @opendir($path); | |
| while (false !== ($file = readdir($dh))) { | |
| $target = $path.'/'.$file; | |
| if(!in_array($file, $ignore)) { | |
| $spaces = str_repeat(l('divider').' ', ($depth)); | |
| switch(true) { | |
| case ($mode == 'option' && is_dir($target)): | |
| $selected = $_POST['view_dir'] == $target ? ' selected="selected"' : ''; | |
| echo '<option value="'.$target.'"'.$selected.'>'.$spaces.$file.'</option>'; | |
| filelist('option', $target, ($depth + 1)); | |
| break; | |
| case ($mode == 'list' && is_file($target) && in_array(substr(strrchr($target, '.'), 1), $types)): | |
| echo ' | |
| <a href="'.$target.'" title="'.l('view').' '.$file.'">'.$file.'</a> | |
| '.l('divider').' | |
| <a href="?action=snews_files&task=delete&folder='.$path.'&file='.$file.'" title="'.l('delete').' '.$file.'" onclick="return pop()"> '.l('delete').'</a><br />'; // Patch #3 - 1.7.0 | |
| break; | |
| } | |
| } | |
| } | |
| closedir($dh); | |
| } | |
| // CONNECT TO DATABASE | |
| function connect_to_db() { | |
| $db = mysql_connect(db('dbhost'), db('dbuname'), db('dbpass')); | |
| mysql_select_db(db('dbname')) or die(l('dberror')); | |
| if (mysql_num_rows(mysql_query("SHOW TABLES LIKE '"._PRE.'articles'."'")) != 1) { | |
| die(l('db_tables_error')); | |
| } | |
| } | |
| // Get parent/child from an id | |
| function cat_rel($var, $column) { | |
| $categoryid = $var; | |
| $join_result = mysql_query( | |
| "SELECT parent.$column FROM "._PRE.'categories'." as child | |
| INNER JOIN "._PRE.'categories'." as parent | |
| ON parent.id = child.subcat | |
| WHERE child.id = $categoryid"); | |
| while ($j = mysql_fetch_array($join_result)) { | |
| $parent = $j[$column].'/'; | |
| } | |
| $subresult = mysql_query( | |
| "SELECT $column FROM "._PRE.'categories'." | |
| WHERE id = $categoryid"); | |
| while ($c = mysql_fetch_array($subresult)) { | |
| $child = $c[$column]; | |
| } | |
| return $parent.$child; | |
| } | |
| // SMART RETRIEVE FUNCTION | |
| function populate_retr_cache() { | |
| global $retr_cache_cat_id, $retr_cache_cat_sef; | |
| $result = mysql_query('SELECT id, seftitle, name FROM '._PRE.'categories'.''); | |
| while ($r = mysql_fetch_array($result)) { | |
| $retr_cache_cat_id[$r['id']] = $r['seftitle']; | |
| $retr_cache_cat_sef[$r['seftitle']] = $r['name']; | |
| } | |
| } | |
| $retr_init = False; | |
| function retrieve($column, $table, $field, $value) { | |
| if (is_null($value)) | |
| return null; | |
| if ($table == 'categories') { | |
| global $retr_cache_cat_id, $retr_cache_cat_sef, $retr_init; | |
| if (!$retr_init) { | |
| populate_retr_cache(); | |
| $retr_init = true; | |
| } | |
| if ($column == 'name') { | |
| return $retr_cache_cat_sef[$value]; | |
| } else if ($column == 'seftitle') { | |
| return $retr_cache_cat_id[$value]; | |
| } | |
| } | |
| $result = mysql_query("SELECT $column FROM "._PRE."$table WHERE $field = '$value'"); | |
| while ($r = mysql_fetch_array($result)) { | |
| $retrieve = $r[$column]; | |
| } | |
| return $retrieve; | |
| } | |
| //NOTIFICATION | |
| function notification($error = 0, $note = '', $link = '') { | |
| // adds a "Warning" option | |
| $title = $error == 0 ? l('operation_completed') : ($error !== 0? l('admin_error') : l('warning')); | |
| $note = (!$note || empty($note)) ? '' : '<p>'.$note.'</p>'; | |
| switch(true){ | |
| case (!$link): | |
| $goto = ''; | |
| break; | |
| case ($link == 'home'): | |
| $goto = '<p><a href="'._SITE.'">'.l('backhome').'</a></p>'; | |
| break; | |
| case ($link != 'home'): | |
| $goto = '<p><a href="'._SITE.$link.'/" title="'.$link.'">'.l('back').'</a></p>'; | |
| break; | |
| } | |
| if ($error == 2) { | |
| $_SESSION[_SITE.'fatal'] = $note == '' ? '' : '<h3>'.$title.'</h3>'.$note.$goto; | |
| echo '<meta http-equiv="refresh" content="0; url='._SITE.$link.'/">'; | |
| return; | |
| } else { | |
| $output = '<h3>'.$title.'</h3>'.$note.$goto; | |
| return $output; | |
| } | |
| } | |
| // PREPARING ARTICLE FOR XML | |
| function strip($text) { | |
| $search = array('/\[include\](.*?)\[\/include\]/', '/\[func\](.*?)\[\/func\]/', '/\[break\]/', '/</', '/>/'); | |
| $replace = array('', '', '', '<', '>'); | |
| $output = preg_replace($search, $replace, $text); | |
| $output = stripslashes(strip_tags($output, '<a><img><h1><h2><h3><h4><h5><ul><li><ol><p><hr><br><b><i><strong><em><blockquote>')); | |
| return $output; | |
| } | |
| // HTML ENTITIES | |
| function entity($item) { | |
| $item = htmlspecialchars($item, ENT_QUOTES, s('charset')); | |
| return $item; | |
| } | |
| //FILE INCLUSION | |
| function file_include($text, $shorten) { | |
| $fulltext = substr($text, 0, $shorten); | |
| if(substr_count ($fulltext, '&')>0){$fulltext = str_replace('&', '&', str_replace('&', '&', $fulltext));} | |
| if ($shorten < 9999000 && preg_match('<p>',$fulltext)) { | |
| if (substr_count ($fulltext, '<p>') > substr_count ($fulltext, '</p>')) { | |
| $fulltext .='</p>'; | |
| } | |
| } | |
| $ins = strpos($fulltext, '[/func]'); | |
| if ($ins > 0) { | |
| $text = str_replace('[func]', '|&|', $fulltext); | |
| $text = str_replace('[/func]', '|&|', $text); | |
| $text = explode('|&|', $text); | |
| $num = count($text) - 1; | |
| $i = 1; | |
| while ($i <= $num) { | |
| $func = explode(':|:', $text[$i]); | |
| ob_start(); | |
| $returned = call_user_func_array($func[0], explode(',',$func[1])); | |
| $text[$i] = ob_get_clean(); | |
| if (empty($text[$i])) { | |
| $text[$i] = $returned; | |
| } | |
| $i = $i + 2; | |
| } | |
| $fulltext = implode($text); | |
| } | |
| $inc = strpos($fulltext, '[/include]'); | |
| if ($inc > 0) { | |
| $text = str_replace('[include]', '|&|', $fulltext); | |
| $text = str_replace('[/include]', '|&|', $text); | |
| $text = explode('|&|', $text); | |
| $num = count($text); | |
| $extension = explode(',', s('file_extensions')); | |
| for ($i = 0; $i<$num; $i++) { | |
| if ($i == $num) { | |
| break; | |
| } | |
| if (!in_array(substr(strrchr($text[$i], '.'), 1), $extension)) { | |
| echo substr($text[$i], 0); | |
| } else { | |
| if (preg_match('/^[a-z0-9_\-.\/]+$/i', $text[$i])) { | |
| $filename=$text[$i]; | |
| file_exists($filename) ? include($filename) : print l('error_file_exists'); | |
| } else { | |
| echo l('error_file_name'); | |
| } | |
| } | |
| } | |
| } else { | |
| echo $fulltext; | |
| } | |
| } | |
| // CLEAN - cleaning query | |
| function clean($query) { | |
| if (get_magic_quotes_gpc()) { | |
| $query = stripslashes($query); | |
| } | |
| $query = mysql_real_escape_string($query); | |
| return $query; | |
| } | |
| // BREAK TO NEW LINE | |
| function br2nl($text){ | |
| $text = str_replace('\r\n','',str_replace("<br />","\n",preg_replace('/<br\\\\s*?\\/??>/i', "\\n", $text))); | |
| return $text; | |
| } | |
| // SEND EMAIL | |
| function send_email($send_array) { | |
| foreach ($send_array as $var => $value) { $$var = $value; } | |
| $body = isset($status) ? $status."\n" : ''; | |
| if (isset($message)) { | |
| $text = l('message').': '."\n".br2nl($message)."\n"; | |
| } | |
| if (isset($comment)) { | |
| $text = l('comment').': '."\n".br2nl($comment)."\n"; | |
| } | |
| $header = "MIME-Version: 1.0\n"; | |
| $header .= "Content-type: text/plain; charset=".s('charset')."\n"; | |
| $header .= "From: $name <$email>\r\nReply-To: $name <$email>\r\nReturn-Path: <$email>\r\n"; | |
| $body .= isset($name) ? l('name').': '.$name."\n" : ''; | |
| $body .= isset($email) ? l('email').': '.$email."\n" : ''; | |
| // The below requires new lang var if ip to be sent with email - $l['ip'] = 'IP'; | |
| // $body .= isset($ip) ? l('ip').': '.$ip."\n" : ''; | |
| $body .= isset($url) && $url!='' ? l('url').': '.$url."\n\n" : ''; | |
| $body .= $text."\n"; | |
| mail($to,$subject,$body,$header); | |
| } | |
| // USER/PASS CHECK | |
| function checkUserPass($input) { | |
| $output = clean(cleanXSS($input)); | |
| $output = strip_tags($output); | |
| if (ctype_alnum($output) === true && strlen($output) > 3 && strlen($output) < 14) { | |
| return $output; | |
| } else { | |
| return null; | |
| } | |
| } | |
| // MATH CAPTCHA - // Patch #18 - 1.7.1 - revised function by KikkoMax | |
| function mathCaptcha() { | |
| $x = rand(1, 9); | |
| $y = rand(1, 9); | |
| if (!isset($_SESSION[_SITE.'mathCaptcha-digit'])) { | |
| $_SESSION[_SITE.'mathCaptcha-digit'] = $x + $y; | |
| } | |
| $math = '<p><label for="calc">* '.l('math_captcha').': </label><br />'; | |
| $math .= "$x + $y = "; | |
| $math .= '<input type="text" name="calc" id="calc" /></p>'; | |
| return $math; | |
| } | |
| /* | |
| function mathCaptcha() { | |
| $x = rand(1, 9); | |
| $y = rand(1, 9); | |
| $_SESSION[_SITE.'mathCaptcha-digit'] = $x + $y; | |
| $math = ' | |
| <p><label for="calc"> | |
| * '.l('math_captcha').': | |
| </label><br />'; | |
| $math .= $x.' + '.$y.' = '; | |
| $math .= ' | |
| <input type="text" name="calc" id="calc" /> | |
| </p>'; | |
| return $math; | |
| } | |
| */ | |
| // CHECK MATH CAPTCHA RESULT | |
| function checkMathCaptcha() { | |
| $result = false; | |
| $testNumber = isset($_SESSION[_SITE.'mathCaptcha-digit']) ? $_SESSION[_SITE.'mathCaptcha-digit'] : 'none'; | |
| unset($_SESSION[_SITE.'mathCaptcha-digit']); | |
| if (is_numeric($testNumber) && is_numeric($_POST['calc']) && ($testNumber == $_POST['calc'])) { | |
| $result = true; | |
| } | |
| return $result; | |
| } | |
| //CATEGORY CHECK | |
| function check_category($category) { | |
| $main_menu = explode(',', l('cat_listSEF')); | |
| if (in_array($category, $main_menu)) { | |
| return true; | |
| } else { | |
| return false; | |
| } | |
| } | |
| // MAKE A CLEAN SEF URL | |
| function cleanSEF($string) { | |
| $string = str_replace(' ', '-', $string); | |
| $string = preg_replace('/[^0-9a-zA-Z-_]/', '', $string); | |
| $string = str_replace('-', ' ', $string); | |
| $string = preg_replace('/^\s+|\s+$/', '', $string); | |
| $string = preg_replace('/\s+/', ' ', $string); | |
| $string = str_replace(' ', '-', $string); | |
| return strtolower($string); | |
| } | |
| // CLEAN CHECK SEF | |
| function cleancheckSEF($string) { | |
| $ret = !preg_match('/^[a-z0-9-_]+$/i', $string) ? 'notok' : 'ok'; | |
| return $ret; | |
| } | |
| // XSS CLEAN | |
| $XSS_cache = array(); | |
| $ra1 = array('applet', 'body', 'bgsound', 'base', 'basefont', 'embed', 'frame', 'frameset', 'head', 'html', | |
| 'id', 'iframe', 'ilayer', 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title', 'xml'); | |
| $ra2 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', | |
| 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base', | |
| 'onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', | |
| 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', | |
| 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', | |
| 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', | |
| 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', | |
| 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', | |
| 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', | |
| 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', | |
| 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', | |
| 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', | |
| 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', | |
| 'onstop', 'onsubmit', 'onunload'); | |
| $tagBlacklist = array_merge($ra1, $ra2); | |
| //CLEANXSS | |
| function cleanXSS($val) { | |
| if ($val != "") { | |
| global $XSS_cache; | |
| if (!empty($XSS_cache) && array_key_exists($val, $XSS_cache)) return $XSS_cache[$val]; | |
| $source = html_entity_decode($val, ENT_QUOTES, 'ISO-8859-1'); | |
| $source = preg_replace('/&#(\d+);/me','chr(\\1)', $source); | |
| $source = preg_replace('/&#x([a-f0-9]+);/mei','chr(0x\\1)', $source); | |
| while($source != filterTags($source)) { | |
| $source = filterTags($source); | |
| } | |
| $source = nl2br($source); | |
| $XSS_cache[$val] = $source; | |
| return $source; | |
| } | |
| return $val; | |
| } | |
| //FILTER TAGS | |
| function filterTags($source) { | |
| global $tagBlacklist; | |
| $preTag = NULL; | |
| $postTag = $source; | |
| $tagOpen_start = strpos($source, '<'); | |
| while($tagOpen_start !== FALSE) { | |
| $preTag .= substr($postTag, 0, $tagOpen_start); | |
| $postTag = substr($postTag, $tagOpen_start); | |
| $fromTagOpen = substr($postTag, 1); | |
| $tagOpen_end = strpos($fromTagOpen, '>'); | |
| if ($tagOpen_end === false) break; | |
| $tagOpen_nested = strpos($fromTagOpen, '<'); | |
| if (($tagOpen_nested !== false) && ($tagOpen_nested < $tagOpen_end)) { | |
| $preTag .= substr($postTag, 0, ($tagOpen_nested+1)); | |
| $postTag = substr($postTag, ($tagOpen_nested+1)); | |
| $tagOpen_start = strpos($postTag, '<'); | |
| continue; | |
| } | |
| $tagOpen_nested = (strpos($fromTagOpen, '<') + $tagOpen_start + 1); | |
| $currentTag = substr($fromTagOpen, 0, $tagOpen_end); | |
| $tagLength = strlen($currentTag); | |
| if (!$tagOpen_end) { | |
| $preTag .= $postTag; | |
| $tagOpen_start = strpos($postTag, '<'); | |
| } | |
| $tagLeft = $currentTag; | |
| $attrSet = array(); | |
| $currentSpace = strpos($tagLeft, ' '); | |
| if (substr($currentTag, 0, 1) == '/') { | |
| $isCloseTag = TRUE; | |
| list($tagName) = explode(' ', $currentTag); | |
| $tagName = substr($tagName, 1); | |
| } else { | |
| $isCloseTag = FALSE; | |
| list($tagName) = explode(' ', $currentTag); | |
| } | |
| if ((!preg_match('/^[a-z][a-z0-9]*$/i',$tagName)) || (!$tagName) || ((in_array(strtolower($tagName), $tagBlacklist)))) { | |
| $postTag = substr($postTag, ($tagLength + 2)); | |
| $tagOpen_start = strpos($postTag, '<'); | |
| continue; | |
| } | |
| while ($currentSpace !== FALSE) { | |
| $fromSpace = substr($tagLeft, ($currentSpace+1)); | |
| $nextSpace = strpos($fromSpace, ' '); | |
| $openQuotes = strpos($fromSpace, '"'); | |
| $closeQuotes = strpos(substr($fromSpace, ($openQuotes+1)), '"') + $openQuotes + 1; | |
| if (strpos($fromSpace, '=') !== FALSE) { | |
| if (($openQuotes !== FALSE) && (strpos(substr($fromSpace, ($openQuotes+1)), '"') !== FALSE)) | |
| $attr = substr($fromSpace, 0, ($closeQuotes+1)); | |
| else $attr = substr($fromSpace, 0, $nextSpace); | |
| } else $attr = substr($fromSpace, 0, $nextSpace); | |
| if (!$attr) $attr = $fromSpace; | |
| $attrSet[] = $attr; | |
| $tagLeft = substr($fromSpace, strlen($attr)); | |
| $currentSpace = strpos($tagLeft, ' '); | |
| } | |
| $postTag = substr($postTag, ($tagLength + 2)); | |
| $tagOpen_start = strpos($postTag, '<'); | |
| } | |
| $preTag .= $postTag; | |
| return $preTag; | |
| } | |
| // CLEAN - WORD FILTER | |
| function cleanWords($text) { | |
| if ((strtolower(s('word_filter_enable')) == 'on') && (file_exists(s('word_filter_file')))) { | |
| $bad_words_from_what = preg_replace('/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/', '', file(s('word_filter_file'))); | |
| $bad_words_from_what = preg_replace('/^(.*)$/', '/\\1/i', $bad_words_from_what); | |
| $bad_words_to_what = s('word_filter_change'); | |
| $text = preg_replace($bad_words_from_what, $bad_words_to_what, $text); | |
| return $text; | |
| } else { | |
| return $text; | |
| } | |
| } | |
| // CHECK IF UNIQUE | |
| function check_if_unique($what, $text, $not_id = 'x', $subcat) { | |
| $text = clean($text); | |
| switch ($what) { | |
| case 'article_seftitle': | |
| $sql = _PRE.'articles'.' WHERE seftitle = "'.$text.(!empty($not_id) ? '" | |
| AND category = '.$not_id : '"'); | |
| break; | |
| case 'article_title': | |
| $sql = _PRE.'articles'.' WHERE title = "'.$text.(!empty($not_id) ? '" | |
| AND category = '.$not_id : '"'); | |
| break; | |
| case 'subcat_seftitle': | |
| $sql = _PRE.'categories'.' WHERE seftitle = "'.$text.'" | |
| AND subcat = '.$subcat; | |
| break; | |
| case 'subcat_name': | |
| $sql = _PRE.'categories'.' WHERE name = "'.$text.'" | |
| AND subcat = '.$subcat; | |
| break; | |
| case 'cat_seftitle_edit': | |
| $sql = _PRE.'categories'.' WHERE seftitle = "'.$text.'" | |
| AND id != '.$not_id; | |
| break; | |
| case 'cat_name_edit': | |
| $sql = _PRE.'categories'.' WHERE name = "'.$text.'" | |
| AND id != '.$not_id; | |
| break; | |
| case 'subcat_seftitle_edit': | |
| $sql = _PRE.'categories'.' WHERE seftitle = "'.$text.'" | |
| AND subcat = '.$subcat.' AND id != '.$not_id; | |
| break; | |
| case 'subcat_name_edit': | |
| $sql = _PRE.'categories'.' WHERE name = "'.$text.'" | |
| AND subcat = '.$subcat.' AND id != '.$not_id; | |
| break; | |
| case 'group_seftitle': | |
| $sql = _PRE.'extras'.' WHERE seftitle = "'.$text.(!empty($not_id) ? '" | |
| AND id != '.$not_id : '"'); | |
| break; | |
| case 'group_name': | |
| $sql = _PRE.'extras'.' WHERE name = "'.$text.(!empty($not_id) ? '" | |
| AND id != '.$not_id : '"'); | |
| break; | |
| } | |
| $rows = mysql_num_rows(mysql_query('SELECT id FROM '.$sql)); | |
| if ($rows == 0) { | |
| return false; | |
| } else { | |
| return true; | |
| } | |
| } | |
| // ARTICLES - FUTURE POSTING | |
| function update_articles() { | |
| $last_date = s('last_date'); | |
| $updatetime = !empty($last_date) ? strtotime($last_date) : time(); | |
| $dif_time = time() - $updatetime; | |
| if ($dif_time > 1200 || empty($last_date)) { | |
| mysql_query('UPDATE '._PRE.'articles'.' | |
| SET published=1 | |
| WHERE published=2 | |
| AND date <= NOW()'); | |
| mysql_query('UPDATE '._PRE.'settings'.' | |
| SET value=NOW() | |
| WHERE name=\'last_date\''); | |
| } | |
| } | |
| ?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment