sterzycom/kirby/core/site.php

337 lines
No EOL
6.3 KiB
PHP

<?php
/**
* Site
*
* @package Kirby CMS
* @author Bastian Allgeier <bastian@getkirby.com>
* @link http://getkirby.com
* @copyright Bastian Allgeier
* @license http://getkirby.com/license
*/
abstract class SiteAbstract extends Page {
// the current page
public $page = null;
/**
* Constructor
*
*/
public function __construct(Kirby $kirby) {
$this->kirby = $kirby;
$this->url = $kirby->urls()->index();
$this->depth = 0;
$this->uri = '';
$this->site = $this;
$this->page = null;
// build ugly urls if rewriting is disabled
if($this->kirby->options['rewrite'] === false) {
$this->url .= '/index.php';
}
$this->root = $kirby->roots()->content();
$this->dirname = basename($this->root);
}
/**
* Cleans the temporary internal cache
*/
public function reset() {
$this->cache = array();
}
/**
* The id is an empty string in case of the site object
*
* @return string
*/
public function id() {
return '';
}
/**
* The base diruri is bascially just an empty string
*
* @return string
*/
public function diruri() {
return '';
}
/**
* Returns the base url for the site
*
* @return string
*/
public function url() {
return $this->url;
}
/**
* Returns the full URL for the content folder
*
* @return string
*/
public function contentUrl() {
return $this->kirby()->urls()->content();
}
/**
* Checks if this object is the main site
*
* @return boolean
*/
public function isSite() {
return true;
}
/**
* Returns the usable template
*
* @return string
*/
public function template() {
return 'site';
}
/**
* The site has no template
*
* @return boolean
*/
public function templateFile() {
return false;
}
/**
* Returns the intended template
*
* @return string
*/
public function intendedTemplate() {
return 'site';
}
/**
* Again, the site has no template!
*
* @return boolean
*/
public function intendedTemplateFile() {
return false;
}
/**
* There can't be a template for the site
* Didn't you still get it yet?
*
* @return boolean
*/
public function hasTemplate() {
return false;
}
/**
* Sets the currently active page
* and returns its page object
*
* @param string $uri
* @return Page
*/
public function visit($uri = '') {
$uri = trim($uri, '/');
if(empty($uri)) {
return $this->page = $this->homePage();
} else {
if($page = $this->children()->find($uri)) {
return $this->page = $page;
} else {
return $this->page = $this->errorPage();
}
}
}
/**
* Returns the currently active page or any other page by uri
*
* @param string $uri Optional uri to get any page on the site
* @return Page
*/
public function page($uri = null) {
if(is_null($uri)) {
return is_null($this->page) ? $this->page = $this->homePage() : $this->page;
} else {
return $this->children()->find($uri);
}
}
/**
* Alternative for $this->children()
*
* @return Children
*/
public function pages() {
return $this->children();
}
/**
* Builds a breadcrumb collection
*
* @return Children
*/
public function breadcrumb() {
if(isset($this->cache['breadcrumb'])) return $this->cache['breadcrumb'];
// get all parents and flip the order
$crumb = $this->page()->parents()->flip();
// add the home page
$crumb->prepend($this->homePage()->uri(), $this->homePage());
// add the active page
$crumb->append($this->page()->uri(), $this->page());
return $this->cache['breadcrumb'] = $crumb;
}
/**
* Alternative for $this->page()
*
* @return Page
*/
public function activePage() {
return $this->page();
}
/**
* Returns the error page object
*
* @return Page
*/
public function errorPage() {
if(isset($this->cache['errorPage'])) return $this->cache['errorPage'];
return $this->cache['errorPage'] = $this->children()->find($this->kirby->options['error']);
}
/**
* Returns the home page object
*
* @return Page
*/
public function homePage() {
if(isset($this->cache['homePage'])) return $this->cache['homePage'];
return $this->cache['homePage'] = $this->children()->find($this->kirby->options['home']);
}
/**
* Returns the locale for the site
*
* @return string
*/
public function locale() {
return isset($this->kirby->options['locale']) ? $this->kirby->options['locale'] : 'en_US';
}
/**
* Checks if the site is a multi language site
*
* @return boolean
*/
public function multilang() {
return false;
}
/**
* Placeholder for multilanguage sites
*/
public function languages() {
return null;
}
/**
* Placeholder for multilanguage sites
*/
public function language() {
return null;
}
/**
* Placeholder for multilanguage sites
*/
public function defaultLanguage() {
return null;
}
/**
* Return the detected language
*/
public function detectedLanguage() {
return null;
}
/**
* Returns a collection of all users
*
* @return Users
*/
public function users() {
return new Users();
}
/**
* Returns the current user
*
* @param string $username Optional way to search for a single user
* @return User
*/
public function user($username = null) {
if(is_null($username)) return User::current();
try {
return new User($username);
} catch(Exception $e) {
return null;
}
}
/**
* Returns a collection of all roles
*
* @return Roles
*/
public function roles() {
return new Roles();
}
/**
* Gets the last modification date of all pages
* in the content folder.
*
* @param mixed $format
* @param mixed $handler
* @return mixed
*/
public function modified($format = null, $handler = null) {
return dir::modified($this->root, $format, $handler ? $handler : $this->kirby->options['date.handler']);
}
/**
* Checks if any content of the site has been
* modified after the given unix timestamp
* This is mainly used to auto-update the cache
*
* @return boolean
*/
public function wasModifiedAfter($time) {
return dir::wasModifiedAfter($this->root(), $time);
}
}