273 lines
8.8 KiB
PHP
273 lines
8.8 KiB
PHP
|
<?php
|
||
|
require_once 'invalidparameterexception.php';
|
||
|
require_once 'Validate.php';
|
||
|
require_once 'helper.php';
|
||
|
|
||
|
/**
|
||
|
* OMB Notice representation
|
||
|
*
|
||
|
* This class represents an OMB notice.
|
||
|
*
|
||
|
* Do not call the setters with null values. Instead, if you want to delete a
|
||
|
* field, pass an empty string. The getters will return null for empty fields.
|
||
|
*
|
||
|
* PHP version 5
|
||
|
*
|
||
|
* LICENSE: This program is free software: you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU Affero General Public License as published by
|
||
|
* the Free Software Foundation, either version 3 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU Affero General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Affero General Public License
|
||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*
|
||
|
* @package OMB
|
||
|
* @author Adrian Lang <mail@adrianlang.de>
|
||
|
* @copyright 2009 Adrian Lang
|
||
|
* @license http://www.gnu.org/licenses/agpl.html GNU AGPL 3.0
|
||
|
**/
|
||
|
|
||
|
class OMB_Notice {
|
||
|
protected $author;
|
||
|
protected $uri;
|
||
|
protected $content;
|
||
|
protected $url;
|
||
|
protected $license_url; /* url is an own addition for clarification. */
|
||
|
protected $seealso_url; /* url is an own addition for clarification. */
|
||
|
protected $seealso_disposition;
|
||
|
protected $seealso_mediatype;
|
||
|
protected $seealso_license_url; /* url is an addition for clarification. */
|
||
|
|
||
|
/* The notice as OMB param array. Cached and rebuild on usage.
|
||
|
false while outdated. */
|
||
|
protected $param_array;
|
||
|
|
||
|
/**
|
||
|
* Constructor for OMB_Notice
|
||
|
*
|
||
|
* Initializes the OMB_Notice object with author, uri and content.
|
||
|
* These parameters are mandatory for postNotice.
|
||
|
*
|
||
|
* @param object $author An OMB_Profile object representing the author of the
|
||
|
* notice.
|
||
|
* @param string $uri The notice URI as defined by the OMB. A unique and
|
||
|
* unchanging identifier for a notice.
|
||
|
* @param string $content The content of the notice. 140 chars recommended,
|
||
|
* but there is no limit.
|
||
|
*
|
||
|
* @access public
|
||
|
*/
|
||
|
public function __construct($author, $uri, $content) {
|
||
|
$this->content = $content;
|
||
|
if (is_null($author)) {
|
||
|
throw new OMB_InvalidParameterException('', 'notice', 'omb_listenee');
|
||
|
}
|
||
|
$this->author = $author;
|
||
|
|
||
|
if (!Validate::uri($uri)) {
|
||
|
throw new OMB_InvalidParameterException($uri, 'notice', 'omb_notice');
|
||
|
}
|
||
|
$this->uri = $uri;
|
||
|
|
||
|
$this->param_array = false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the notice as array
|
||
|
*
|
||
|
* The method returns an array which contains the whole notice as array. The
|
||
|
* array is cached and only rebuilt on changes of the notice.
|
||
|
* Empty optional values are not passed.
|
||
|
*
|
||
|
* @access public
|
||
|
* @returns array The notice as parameter array
|
||
|
*/
|
||
|
public function asParameters() {
|
||
|
if ($this->param_array !== false) {
|
||
|
return $this->param_array;
|
||
|
}
|
||
|
|
||
|
$this->param_array = array(
|
||
|
'omb_notice' => $this->uri,
|
||
|
'omb_notice_content' => $this->content);
|
||
|
|
||
|
if (!is_null($this->url))
|
||
|
$this->param_array['omb_notice_url'] = $this->url;
|
||
|
|
||
|
if (!is_null($this->license_url))
|
||
|
$this->param_array['omb_notice_license'] = $this->license_url;
|
||
|
|
||
|
if (!is_null($this->seealso_url)) {
|
||
|
$this->param_array['omb_seealso'] = $this->seealso_url;
|
||
|
|
||
|
/* This is actually a free interpretation of the OMB standard. We assume
|
||
|
that additional seealso parameters are not of any use if seealso itself
|
||
|
is not set. */
|
||
|
if (!is_null($this->seealso_disposition))
|
||
|
$this->param_array['omb_seealso_disposition'] =
|
||
|
$this->seealso_disposition;
|
||
|
|
||
|
if (!is_null($this->seealso_mediatype))
|
||
|
$this->param_array['omb_seealso_mediatype'] = $this->seealso_mediatype;
|
||
|
|
||
|
if (!is_null($this->seealso_license_url))
|
||
|
$this->param_array['omb_seealso_license'] = $this->seealso_license_url;
|
||
|
}
|
||
|
return $this->param_array;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Builds an OMB_Notice object from array
|
||
|
*
|
||
|
* The method builds an OMB_Notice object from the passed parameters array.
|
||
|
* The array MUST provide a notice URI and content. The array fields HAVE TO
|
||
|
* be named according to the OMB standard, i. e. omb_notice_* and
|
||
|
* omb_seealso_*. Values are handled as not passed if the corresponding array
|
||
|
* fields are not set or the empty string.
|
||
|
*
|
||
|
* @param object $author An OMB_Profile object representing the author of
|
||
|
* the notice.
|
||
|
* @param string $parameters An array containing the notice parameters.
|
||
|
*
|
||
|
* @access public
|
||
|
*
|
||
|
* @returns OMB_Notice The built OMB_Notice.
|
||
|
*/
|
||
|
public static function fromParameters($author, $parameters) {
|
||
|
$notice = new OMB_Notice($author, $parameters['omb_notice'],
|
||
|
$parameters['omb_notice_content']);
|
||
|
|
||
|
if (isset($parameters['omb_notice_url'])) {
|
||
|
$notice->setURL($parameters['omb_notice_url']);
|
||
|
}
|
||
|
|
||
|
if (isset($parameters['omb_notice_license'])) {
|
||
|
$notice->setLicenseURL($parameters['omb_notice_license']);
|
||
|
}
|
||
|
|
||
|
if (isset($parameters['omb_seealso'])) {
|
||
|
$notice->setSeealsoURL($parameters['omb_seealso']);
|
||
|
}
|
||
|
|
||
|
if (isset($parameters['omb_seealso_disposition'])) {
|
||
|
$notice->setSeealsoDisposition($parameters['omb_seealso_disposition']);
|
||
|
}
|
||
|
|
||
|
if (isset($parameters['omb_seealso_mediatype'])) {
|
||
|
$notice->setSeealsoMediatype($parameters['omb_seealso_mediatype']);
|
||
|
}
|
||
|
|
||
|
if (isset($parameters['omb_seealso_license'])) {
|
||
|
$notice->setSeealsoLicenseURL($parameters['omb_seealso_license']);
|
||
|
}
|
||
|
return $notice;
|
||
|
}
|
||
|
|
||
|
public function getAuthor() {
|
||
|
return $this->author;
|
||
|
}
|
||
|
|
||
|
public function getIdentifierURI() {
|
||
|
return $this->uri;
|
||
|
}
|
||
|
|
||
|
public function getContent() {
|
||
|
return $this->content;
|
||
|
}
|
||
|
|
||
|
public function getURL() {
|
||
|
return $this->url;
|
||
|
}
|
||
|
|
||
|
public function getLicenseURL() {
|
||
|
return $this->license_url;
|
||
|
}
|
||
|
|
||
|
public function getSeealsoURL() {
|
||
|
return $this->seealso_url;
|
||
|
}
|
||
|
|
||
|
public function getSeealsoDisposition() {
|
||
|
return $this->seealso_disposition;
|
||
|
}
|
||
|
|
||
|
public function getSeealsoMediatype() {
|
||
|
return $this->seealso_mediatype;
|
||
|
}
|
||
|
|
||
|
public function getSeealsoLicenseURL() {
|
||
|
return $this->seealso_license_url;
|
||
|
}
|
||
|
|
||
|
public function setURL($url) {
|
||
|
if ($url === '') {
|
||
|
$url = null;
|
||
|
} elseif (!OMB_Helper::validateURL($url)) {
|
||
|
throw new OMB_InvalidParameterException($url, 'notice', 'omb_notice_url');
|
||
|
}
|
||
|
$this->url = $url;
|
||
|
$this->param_array = false;
|
||
|
}
|
||
|
|
||
|
public function setLicenseURL($license_url) {
|
||
|
if ($license_url === '') {
|
||
|
$license_url = null;
|
||
|
} elseif (!OMB_Helper::validateURL($license_url)) {
|
||
|
throw new OMB_InvalidParameterException($license_url, 'notice',
|
||
|
'omb_notice_license');
|
||
|
}
|
||
|
$this->license_url = $license_url;
|
||
|
$this->param_array = false;
|
||
|
}
|
||
|
|
||
|
public function setSeealsoURL($seealso_url) {
|
||
|
if ($seealso_url === '') {
|
||
|
$seealso_url = null;
|
||
|
} elseif (!OMB_Helper::validateURL($seealso_url)) {
|
||
|
throw new OMB_InvalidParameterException($seealso_url, 'notice',
|
||
|
'omb_seealso');
|
||
|
}
|
||
|
$this->seealso_url = $seealso_url;
|
||
|
$this->param_array = false;
|
||
|
}
|
||
|
|
||
|
public function setSeealsoDisposition($seealso_disposition) {
|
||
|
if ($seealso_disposition === '') {
|
||
|
$seealso_disposition = null;
|
||
|
} elseif ($seealso_disposition !== 'link' && $seealso_disposition !== 'inline') {
|
||
|
throw new OMB_InvalidParameterException($seealso_disposition, 'notice',
|
||
|
'omb_seealso_disposition');
|
||
|
}
|
||
|
$this->seealso_disposition = $seealso_disposition;
|
||
|
$this->param_array = false;
|
||
|
}
|
||
|
|
||
|
public function setSeealsoMediatype($seealso_mediatype) {
|
||
|
if ($seealso_mediatype === '') {
|
||
|
$seealso_mediatype = null;
|
||
|
} elseif (!OMB_Helper::validateMediaType($seealso_mediatype)) {
|
||
|
throw new OMB_InvalidParameterException($seealso_mediatype, 'notice',
|
||
|
'omb_seealso_mediatype');
|
||
|
}
|
||
|
$this->seealso_mediatype = $seealso_mediatype;
|
||
|
$this->param_array = false;
|
||
|
}
|
||
|
|
||
|
public function setSeealsoLicenseURL($seealso_license_url) {
|
||
|
if ($seealso_license_url === '') {
|
||
|
$seealso_license_url = null;
|
||
|
} elseif (!OMB_Helper::validateURL($seealso_license_url)) {
|
||
|
throw new OMB_InvalidParameterException($seealso_license_url, 'notice',
|
||
|
'omb_seealso_license');
|
||
|
}
|
||
|
$this->seealso_license_url = $seealso_license_url;
|
||
|
$this->param_array = false;
|
||
|
}
|
||
|
}
|
||
|
?>
|