<?php
/* Ulyxex version 1.6.7.8 ***************/
/* code http://ulyxex.logz.org **********/
/* Andre Lozano http://andre-lozano.org */
class Articles extends Admin {
	public object $h;
	public object $t;
	public int $pagePos;
	public array $sortMethods;
	public string $Select;
	public string $From;
	public string $SelectCount;
	public string $OrderSort;
	public array $Cond;
	
	function __construct(){
		$this->h = New Htmlz();
		$this->t = New Translate();
		if (isset($_GET['pg'])) {
			$this->pagePos = $this->h->num($_GET['pg']);
			//~ $_SESSION['pga'] = $_GET['pg'];
		} elseif (isset($_GET['resetPos']))  {
			$this->pagePos = 0;
		} else {
			$this->pagePos = 0;
		}
		
		$this->sortMethods = array("",ARTICLES.".DATEPAGE DESC",ARTICLES.".SUBJECT",ARTICLES.".PAGEID",ARTICLES.".USERID",ARTICLES.".HIDE DESC","");  
		$this->Select = SELECT.
							ARTICLES.".ID ARTID,".ARTICLES.".SUBJECT,".ARTICLES.".DATEPAGE,".ARTICLES.".HIDE,".
							USERS.".USERNAME,".USERS.".ID IDUSERID,".USERS.".USERLEVEL,".
							PAGES.".NAME PAGENAME,".PAGES.".ID PAGEID,".PAGES.".TYPEPAGE,".PAGES.".USERID USERPAGEID";						
		$this->From = 	FROM.
							ARTICLES.
							JOIN.PAGES._ON_.ARTICLES.".PAGEID = ".PAGES.".ID".
							JOIN.USERS._ON_.ARTICLES.".USERID = ".USERS.".ID";
							
		$this->SelectCount = 	SELECT."COUNT(".ARTICLES.".ID) AS NUM";
		$this->OrderSort = "";
		$this->Cond = array();
		if (!isset($_SESSION['admin_article_sort'])) $_SESSION['admin_article_sort'] = $this->sortMethods[1];
	}
	public function update_articles(){
		$h = $this->h;$t = $this->t;
		$formValues = array();
		$values = $_POST;
		foreach($values as $k=>$v){
			if ( preg_match("/\_/",$k) ){
				list($key,$id) = explode("_",$k);
				$formValues[$id][$key] = $v;
			}
		}
		foreach($formValues as $id=>$value){
			$query = 0;
			if (isset($value['delete'])){
				$query = DELETE.FROM.ARTICLES.WHERE."ID = ".$id;
				$query = $this->q($query);
			}
			if (isset($value['hide']) && $value['oldhide'] == 0){
				$query = UPDATE.ARTICLES.SET."HIDE = 1".WHERE."ID = ".$id;
				$query = $this->q($query);
			} elseif (!isset($value['hide']) && $value['oldhide'] == 1){
				$query = UPDATE.ARTICLES.SET."HIDE = 0".WHERE."ID = ".$id;
				$query = $this->q($query);
			}
		}
		return $h->h3($t->w("some vals been modified !"),$h->v("class","warning"));
	}
	public function list_articles(){
		$h = $this->h;$t = $this->t;
		$tree = New Tree();
		$paths = $tree->paths();
		$pathById = array();
		foreach ($paths as $pth=>$arr) {
			$pathById[$arr[1]] = $pth;
		}
		$pgPos =($this->pagePos)?($this->pagePos - 1) * ITEMS:0;
		if (isset($_POST['sort'])) $_SESSION['admin_article_sort'] = $this->sortMethods[$_POST['sort']];
		if (isset($_GET['ownerFilter'])) $_SESSION['admin_articles_filter'] = ARTICLES.".USERID = ".$h->num($_GET['ownerFilter']);
		if (isset($_GET['pageFilter'])) $_SESSION['admin_articles_filter'] = ARTICLES.".PAGEID = ".$h->num($_GET['pageFilter']);
		if (isset($_POST['search_subject'])) $_SESSION['admin_articles_search_subject'] = " MATCH(".ARTICLES.".SUBJECT,".ARTICLES.".CONTENT) AGAINST('".$h->safe($_POST['search_subject'])."') ";
		if (isset($_POST['reset'])){
			if (isset($_SESSION['admin_articles_filter'])) $_SESSION['admin_articles_filter'] = "";
			if (isset($_SESSION['admin_article_sort'])) $_SESSION['admin_article_sort'] = $this->sortMethods[1];
			if (isset($_SESSION['admin_articles_search_subject'])) $_SESSION['admin_articles_search_subject'] = "";
		}
		// always page position = 1 if use search, only ITEMS first results
		if ( isset($_SESSION['admin_articles_search_subject']) && !empty($_SESSION['admin_articles_search_subject']) ) $pgPos = 1;
		$this->OrderSort = ORDERBY.$_SESSION['admin_article_sort']." LIMIT ".$pgPos.",".ITEMS;
		
		// 1) can create users etc. (high trust level)
		// 2) can create articles and pages
		// 3) can create articles everywhere
		// 4) can create articles only in sandbox		
		switch ($_SESSION['level']){
			case 1:
				// user level 1 can't edit others user level 1
				if ($_SESSION['userid'] != 1){ // restrain user level if not user admin
					$this->Cond[] = "(".USERS.".USERLEVEL > ".$_SESSION['level']._OR_.USERS.".ID = ".$_SESSION['userid'].")"; // all level 2, 3 and 4 user's articles, and user's articles 
					$this->Cond[] = USERS.".ID != 1"; // but not admin articles
				} // else no restriction
				if (isset($_SESSION['admin_articles_filter']) && !empty($_SESSION['admin_articles_filter'])) $this->Cond[] = $_SESSION['admin_articles_filter'];
				break;
			case 2:
				$this->Cond[] = "(".USERS.".ID = ".$_SESSION['userid']._OR_.PAGES.".USERID = ".$_SESSION['userid'].")"; // user's articles and articles in user's pages
				$this->Cond[] = USERS.".ID != 1"; // but not admin articles
				if (isset($_SESSION['admin_articles_filter']) && !empty($_SESSION['admin_articles_filter']) ) $this->Cond[] = $_SESSION['admin_articles_filter'];
				break;
			default:
				$this->Cond[] = ARTICLES.".USERID = ".$_SESSION['userid']; // user's articles only
		}
		
		//~ SEARCH !!!
		if ( isset($_SESSION['admin_articles_search_subject']) && !empty($_SESSION['admin_articles_search_subject']) ){
			$query = SELECT.ARTICLES.".ID ARTID,".ARTICLES.".SUBJECT,".ARTICLES.".DATEPAGE,".ARTICLES.".HIDE".FROM.ARTICLES;
			if ($_SESSION['userid'] == 1){
				$query .= WHERE.$_SESSION['admin_articles_search_subject'];
			} else {
				$_ = array();
				$_[] = $_SESSION['admin_pages_search_title'];
				$_[] = ARTICLES.".USERID = ".$_SESSION['userid'];
				$query .= WHERE.$this->Do_And($_);
			}
			$srchOff = false;
		} else {
			$query = $this->Select.$this->From.$this->Where($this->Cond).$this->OrderSort;
			$srchOff = true;
		}
		
		$query = $this->q($query,true);
		$result = "";
		
		$sort = array($t->w("date")=>1,$t->w("subject")=>2,$t->w("page")=>3,$t->w("user")=>4,$t->w("hiddeno")=>5);
		$type = array_search($_SESSION['admin_article_sort'],$this->sortMethods);
		$inputs = $h->p($h->select($sort,"sort",$type,$h->alt($t->w("sort/filter by")))." ".$h->input("submit",null,$t->w("sort/filter by")));
		$result .= $h->form($inputs,"sort","post","admin.php?action=articles");
		
		$searchValue = (isset($_POST['search_subject']))?$_POST['search_subject']:"";
		$searchForm = $this->search_form("search_subject","search subject","articles",$searchValue);
		$goIdForm = $this->go_id("art","modify_article");
		$menuPages = $h->p($tree->getListPagesMenu(),$h->v("class","sortbypages"));
		$menuUsers = $h->p($tree->getListUsersMenu(),$h->v("class","sortbyusers"));
		$resetForm = $this->reset_form("articles");
		$result .= $searchForm.$goIdForm.$menuPages.$menuUsers.$resetForm;
		
		$artListSubmit = $h->p(
			$h->input("submit",null,$t->w("update all")).
			$h->input("hidden","update",1)
		);
		$artListTitle = $h->h3(
			$t->w("articles list")." ".$h->ahref("admin.php?action=add_article",$t->w("add article"),$h->v("class","addnew"))
		);
		$artList = "";
		
		while ( $line = $this->fetch($query) ){
			$id = "id".$h->f4d($line['ARTID']);
			$date = substr($line['DATEPAGE'],0,10);
			$checked = ($line['HIDE'])?$h->v(" checked","checked"):null;
			$hide = $h->span(
				$h->lbl($t->wr("hide"),"hide_".$line['ARTID']).
				$h->input("checkbox","hide_".$line['ARTID'],"on",$checked).
				$h->input("hidden","oldhide_".$line['ARTID'],$line['HIDE'])
			,$h->alt($t->wz("hide").$line['SUBJECT']));
			$modify = $h->ahref("admin.php?action=modify_article&amp;art=".$line['ARTID'],$t->w("modify"),$h->v("class","linkbtn").$h->alt($t->wz("modify").$line['SUBJECT']));
			$delete = $h->span(
				$h->lbl($t->wlr("del"),"delete_".$line['ARTID']).
				$h->input("checkbox","delete_".$line['ARTID'],"on")
			,$h->alt($t->wz("delete").$line['SUBJECT']));
			$subject = $h->strWidth(strip_tags($line['SUBJECT']),28);
			$hidecss = ($line['HIDE'])?$h->v("style","color:Gray;"):"";
			$view = $t->wx("subj").$h->ahref(
				"index.php?k=article&amp;v=".$line['ARTID'],
				$subject,
				$h->v("class","linkbtn").$h->v("target","blank").$hidecss.$h->alt($t->wz("show").$line['SUBJECT'])
			);
			
			if ($srchOff) {
				//~ add "page", "by" and "$nextPages" informations
				$artPagePath = "";
				$page = $t->wx("pag");
				$page .= $h->ahref(
								"index.php?k=".$line['TYPEPAGE']."&v=".$line['PAGEID'],
								$h->strWidth($line['PAGENAME'],20),
								$h->v("class","linkbtn").$h->alt($t->wz("show").$line['PAGENAME'].$artPagePath." [id:".$line['PAGEID']."]").$h->v("target","blank")
							);
				$by = $t->wx("by");
				$by .= $h->ahref(
								"index.php?k=user&v=".$line['IDUSERID'],
								$h->strWidth($line['USERNAME'],12),
								$h->v("class","linkbtn").$h->alt($t->wz("show").$line['USERNAME']." [".$t->w("level").":".$line['USERLEVEL']."][id:".$line['IDUSERID']."]").$h->v("target","blank")
							);
			} else {
				$page = "";
				$by = "";
			}

			$_ = array($this->dashframe($id." "),$this->dashframe($date." "),$this->dashframe($hide." "),$modify,$this->dashframe($delete),$view,$page,$by);
			$content = implode("",$_);
			$artList .= $h->p($content,$h->v("class","linebtns"));
		}
		
		$nextPages = ($srchOff)?$this->next_pages():"";
		$artList = $artListTitle.$artListSubmit.$artList.$artListSubmit.$nextPages;
		$result .= $h->form($artList,"articles","post","admin.php?action=articles&amp;pg=".$this->pagePos);
		return $result;
	}
	public function next_pages(){
		$h = $this->h;$t = $this->t;
		$query = $this->SelectCount.$this->From.$this->Where($this->Cond);
		$query = $this->q($query);
		$dat = $this->fetch($query);
		$pagesNumbers = new NextPages($dat['NUM'],"action=articles");
		$result = $h->p($pagesNumbers->numbers(),$h->v("class","pagenumbers"));
		$result .= $h->p("(".$t->wr("total articles")."= ".$dat['NUM'].")",$h->v("style","text-align:center"));
		return $result;
	}
}
?>

page url