aboutsummaryrefslogtreecommitdiff
path: root/assets/css/home.css
AgeCommit message (Collapse)Author
2020-01-20fix media little problemsvincent-peugnet
2020-01-18refactoring medialistvincent-peugnet
2020-01-17css cleaningvincent-peugnet
2020-01-17media ui menu barvincent-peugnet
2019-10-21css fix : ajust icon size in mobile viewvincent-peugnet
2019-10-21CSS mobile clean-upvincent-peugnet
2019-08-21css style updatevincent-peugnet
2019-08-21Fix : get list code moved to selectionvincent-peugnet
2019-08-21New feature : bookmarksvincent-peugnet
- public bookmarks stored in config.json - personnal bookmarks stored in user data
2019-08-18Render All Buttonvincent-peugnet
2019-08-18interface home updatevincent-peugnet
2019-08-17Media oragnisationvincent-peugnet
- Delete folder - move or delete files
2019-08-17Feature : list is going to work soonvincent-peugnet
2019-08-09Feature : Users may expirevincent-peugnet
- user have expiredate - admins can set up this date
2019-08-07new medialist parse synthax + media file id bugfixvincent-peugnet
2019-07-131.2.6 Environnement updatevincent-peugnet
backtopbar always visible + minor fixes
2019-03-30new feature : upload json as pagevincent-peugnet
2019-03-29mini update UIvincent-peugnet
2019-03-28graphic updatevincent-peugnet
2019-01-29home redirectvincent-peugnet
2019-01-15timeline is ok for messagingvincent-peugnet
2019-01-12timeline message workingvincent-peugnet
2019-01-10bug fixiesvincent-peugnet
2019-01-10minor fixvincent-peugnet
2019-01-09target blank internal or external option adminvincent-peugnet
2019-01-08multi editvincent-peugnet
2019-01-07home css display working fill availiable flexvincent-peugnet
2018-12-24user levelvincent-peugnet
2018-12-23feature usersvincent-peugnet
2018-12-13templateoptionsvincent-peugnet
2018-12-10media-cleanvincent-peugnet
2018-12-10media-uploadvincent-peugnet
2018-12-09little-improvementsvincent-peugnet
2018-12-09auto-media-dir-listvincent-peugnet
2018-12-09media parservincent-peugnet
2018-12-05manualvincent-peugnet
2018-12-05mediastylevincent-peugnet
2018-12-04editor right barvincent-peugnet
2018-12-04admin panelvincent-peugnet
2018-11-14article-rendervincent-peugnet
2018-11-12corner-menuvincent-peugnet
2018-11-12url-cleaning-redirect-correct-idvincent-peugnet
2018-11-11cleanvincent-peugnet
fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
<?php

namespace Wcms;

use Exception;
use JamesMoss\Flywheel\Document;

class Modelpage extends Modeldb
{

	const SELECT = ['title', 'id', 'description', 'tag', 'date', 'datecreation', 'datemodif', 'daterender', 'css', 'quickcss', 'javascript', 'body', 'header', 'main', 'nav', 'aside', 'footer', 'render', 'secure', 'invitepassword', 'interface', 'linkfrom', 'linkto', 'template', 'affcount', 'editcount'];
	const BY = ['datecreation', 'title', 'id', 'description', 'datemodif', 'secure'];
	const ORDER = ['DESC', 'ASC'];


	public function __construct()
	{
		parent::__construct();
		$this->storeinit(Config::pagetable());
		if(!$this->dircheck(Model::HTML_RENDER_DIR)) {
			throw new Exception("Media error : Cant create /render folder");
		}
	}

	/**
	 * Scan library for all pages as objects
	 * 
	 * @return array of Pages objects
	 */
	public function getlister()
	{
		$pagelist = [];
		$list = $this->repo->findAll();
		foreach ($list as $pagedata) {
			$pagelist[$pagedata->id] = new Page($pagedata);
		}
		return $pagelist;
	}


	/**
	 * Scan database for specific pages IDs and return array of Pages objects
	 * 
	 * @param array $idlist list of ID strings
	 * 
	 * @return array of Page objects
	 */
	public function getlisterid(array $idlist = []) : array
	{
		$pagedatalist = $this->repo->query()
		->where('__id', 'IN', $idlist)
		->execute();

		$pagelist = [];
		foreach ($pagedatalist as $id => $pagedata) {
			$pagelist[$id] = new Page($pagedata);
		}
		return $pagelist;
	}

	/**
	 * Store new page in the database
	 * 
	 * @param Page $page object
	 */
	public function add(Page $page)
	{

		$pagedata = new Document($page->dry());
		$pagedata->setId($page->id());
		$this->repo->store($pagedata);
	}

	/**
	 * Obtain a page object from the database
	 * 
	 * @param Page|string $id could be an Page object or a id string
	 * 
	 * @return Page|false The Page object or false if it does not exist.
	 */
	public function get($id)
	{
		if ($id instanceof Page) {
			$id = $id->id();
		}
		if (is_string($id)) {
			$pagedata = $this->repo->findById($id);
			if ($pagedata !== false) {
				return new Page($pagedata);
			} else {
				return false;
			}
		} else {
			return false;
		}
	}

	/**
	 * Transform File to Page Oject
	 * 
	 * @return false|Page 
	 */
	public function getfromfile()
	{
		if(!isset($_FILES['pagefile']) || $_FILES['pagefile']['error'] > 0 ) return false;

		$ext = substr(strrchr($_FILES['pagefile']['name'],'.'),1);
		if($ext !== 'json') return false;

		$files = $_FILES;

		$json = file_get_contents($_FILES['pagefile']['tmp_name']);
		$pagedata = json_decode($json, true);

		if($pagedata === false) return false;

		$page = new Page($pagedata);

		return $page;

	}

	public function getpageelement($id, $element)
	{
		if (in_array($element, Model::TEXT_ELEMENTS)) {
			$page = $this->get($id);
			if ($page !== false) {
				return $page->$element();
			} else {
				return false;
			}
		}
	}

	public function delete(Page $page)
	{
		$this->repo->delete($page->id());
		$this->unlink($page->id());
	}


	public function unlink(string $pageid)
	{
		$files = ['.css', '.quick.css', '.js'];
		foreach ($files as $file) {
			if (file_exists(Model::RENDER_DIR . $pageid . $file)) {
				unlink(Model::RENDER_DIR . $pageid . $file);
			}
		}
		if(file_exists(Model::HTML_RENDER_DIR . $pageid . '.html')) {
			unlink(Model::HTML_RENDER_DIR . $pageid . '.html');
		}
	}

	public function update(Page $page)
	{
		$pagedata = new Document($page->dry());
		$pagedata->setId($page->id());
		$this->repo->store($pagedata);
	}

	public function combine(Page $pagea, Page $pageb)
	{
		$mergepage = $pagea;
		$merge = [];
		$diff = [];
			foreach ($pagea::TABS as $element) {
				if($pagea->$element() !== $pageb->$element()) {
					$merge[$element] = compare($pagea->$element(), $pageb->$element());
					$diff[] = $element;
				}
			}
		$mergepage->hydrate($merge);

		return ['diff' => $diff, 'mergepage' => $mergepage];
	}

	// public function diffpageelement(Page $pagea, Page $pageb)
	// {
	// 	$diff = [];
	// 	foreach ($pagea::TABS as $element) {
	// 		if($pagea->$element() !== $pageb->$element()) {
	// 			$diff[] = $element;
	// 		}
	// 	}
	// 	return $diff;
	// }

	public function pagecompare($page1, $page2, $method = 'id', $order = 1)
	{
		$result = ($page1->$method('sort') <=> $page2->$method('sort'));
		return $result * $order;
	}

	public function buildsorter($sortby, $order)
	{
		return function ($page1, $page2) use ($sortby, $order) {
			$result = $this->pagecompare($page1, $page2, $sortby, $order);
			return $result;
		};
	}



	public function pagelistsort(&$pagelist, $sortby, $order = 1)
	{
		return usort($pagelist, $this->buildsorter($sortby, $order));
	}


	/**
	 * @param array $pagelist List of Page
	 * @param array $tagchecked list of tags
	 * @param string $tagcompare string, can be 'OR' or 'AND', set the tag filter method
	 * 
	 * @return array $array
	 */

	public function filtertagfilter(array $pagelist, array $tagchecked, $tagcompare = 'OR')
	{

		$filteredlist = [];
		foreach ($pagelist as $page) {
			if (empty($tagchecked)) {
				$filteredlist[] = $page->id();
			} else {
				$inter = (array_intersect($page->tag('array'), $tagchecked));
				if ($tagcompare == 'OR') {
					if (!empty($inter)) {
						$filteredlist[] = $page->id();
					}
				} elseif ($tagcompare == 'AND') {
					if (!array_diff($tagchecked, $page->tag('array'))) {
						$filteredlist[] = $page->id();
					}
				}
			}
		}
		return $filteredlist;
	}

	public function filterauthorfilter(array $pagelist, array $authorchecked, $authorcompare = 'OR')
	{

		$filteredlist = [];
		foreach ($pagelist as $page) {
			if (empty($authorchecked)) {
				$filteredlist[] = $page->id();
			} else {
				$inter = (array_intersect($page->authors('array'), $authorchecked));
				if ($authorcompare == 'OR') {
					if (!empty($inter)) {
						$filteredlist[] = $page->id();
					}
				} elseif ($authorcompare == 'AND') {
					if (!array_diff($authorchecked, $page->authors('array'))) {
						$filteredlist[] = $page->id();
					}
				}
			}
		}
		return $filteredlist;
	}

	public function filtersecure(array $pagelist, $secure)
	{
		$filteredlist = [];
		foreach ($pagelist as $page) {
			if ($page->secure() == intval($secure)) {
				$filteredlist[] = $page->id();
			} elseif (intval($secure) >= 4) {
				$filteredlist[] = $page->id();
			}
		}
		return $filteredlist;
	}


	public function tag(array $pagelist, $tagchecked)
	{
		$pagecheckedlist = [];
		foreach ($pagelist as $page) {
			if (in_array($tagchecked, $page->tag('array'))) {
				$pagecheckedlist[] = $page;
			}
		}
		return $pagecheckedlist;
	}

	public function taglist(array $pagelist, array $tagcheckedlist)
	{
		$taglist = [];
		foreach ($tagcheckedlist as $tag) {
			$taglist[$tag] = $this->tag($pagelist, $tag);
		}
		return $taglist;
	}

	/**
	 * @param array $taglist list of tags
	 * @param array $pagelist list of Page
	 * 
	 * @return array list of tags each containing list of id
	 */

	public function tagpagelist(array $taglist, array $pagelist)
	{
		$tagpagelist = [];
		foreach ($taglist as $tag) {
			$tagpagelist[$tag] = $this->filtertagfilter($pagelist, [$tag]);
		}
		return $tagpagelist;
	}

	public function lasteditedpagelist(int $last, array $pagelist)
	{
		$this->pagelistsort($pagelist, 'datemodif', -1);
		$pagelist = array_slice($pagelist, 0, $last);
		$idlist = [];
		foreach ($pagelist as $page) {
			$idlist[] = $page->id();
		}
		return $idlist;
	}

}