1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
<?php
/**
* TfishTag class file.
*
* @copyright Simon Wilkinson 2013-2017 (https://tuskfish.biz)
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL) V2
* @author Simon Wilkinson <[email protected]>
* @version Release: 1.0
* @since 1.0
* @package content
*/
// Enable strict type declaration.
declare(strict_types=1);
if (!defined("TFISH_ROOT_PATH")) die("TFISH_ERROR_ROOT_PATH_NOT_DEFINED");
/**
* Tag content object class.
*
* Tags are basically 'subjects' that can be used to label content objects, to facilitate retrieval
* of related items. However, tags are content objects in their own right and can be used as a
* simple hook to create a section on your website. Tags can be grouped into collections via the
* parent field, and tag collections can be used to create custom tag select boxes.
*
* @copyright Simon Wilkinson 2013-2017 (https://tuskfish.biz)
* @license https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html GNU General Public License (GPL) V2
* @author Simon Wilkinson <[email protected]>
* @version Release: 1.0
* @since 1.0
* @package content
* @properties int $id Auto-increment, set by database.
* @properties string $type Content object type eg. TfishArticle etc. [ALPHA]
* @properties string $title The name of this content.
* @properties string $teaser A short (one paragraph) summary or abstract for this content. [HTML]
* @properties string $description The full article or description of the content. [HTML]
* @properties string image An associated image file, eg. a screenshot a good way to handle it. [FILEPATH OR URL]
* @properties string $caption Caption of the image file.
* @properties int $parent A source work or collection of which this content is part.
* @properties int $online Toggle object on or offline.
* @properties int $submission_time Timestamp representing submission time.
* @properties int $counter Number of times this content was viewed or downloaded.
* @properties string $meta_title Set a custom page title for this content.
* @properties string $meta_description Set a custom page meta description for this content.
* @properties string $seo SEO-friendly string; it will be appended to the URL for this content.
* @properties string $handler Handler for this object (not persistent).
* @properties string $template The template that should be used to display this object (not persistent).
* @properties string $module The module that handles this content type (not persistent).
* @properties string $icon The Font Awesome icon representing this content type (not persistent).
*/
class TfishTag extends TfishContentObject
{
/** Initialise default property values and unset unneeded ones. */
function __construct()
{
// Must call parent constructor first.
parent::__construct();
// Declare the type, template and module for this this class.
$this->__data['type'] = "TfishTag";
$this->__data['template'] = "tag";
$this->__data['module'] = "tags";
$this->__data['icon'] = '<i class="fas fa-tag"></i>';
// Object definition - unset any properties unused in this subclass.
$zeroedProperties = $this->zeroedProperties();
foreach ($zeroedProperties as $property) {
unset($this->__properties[$property], $this->__data[$property]);
}
}
/**
* Set the value of a whitelisted property.
*
* Intercepts direct calls to set the value of an object property. This method is overridden by
* child classes to impose data type restrictions and range checks on custom subclass
* properties.
*
* If you have added some custom properties to this content subclass that need to be type
* and/or range checked before permitting assignment, add a switch above the call to the parent
* method. Structure it so that any case not explicitly handled will fall through to the parent
* method, while explicit cases will be handled here.
*
* @param string $property Name of property.
* @param mixed $value Value of property.
*/
public function __set(string $property, $value)
{
parent::__set($property, $value);
}
/**
* Converts properties to human readable form in preparation for output.
*
* If you have added some custom properties to this content subclass that need to be formatted
* for output, add a switch above the call to the parent method. Structure it so that any case
* not explicitly handled will fall through to the parent method, while explicit cases will
* return a formatted value.
*
* @param string $clean_property Name of content object property to be formatted.
*/
protected function makeHumanReadable(string $clean_property)
{
return parent::makeHumanReadable($clean_property);
}
/**
* Returns an array of base object properties that are not used by this subclass.
*
* This list is also used in update calls to the database to ensure that unused columns are
* cleared and reset with default values.
*
* @return array Array of properties that should be zeroed (unset).
*/
public function zeroedProperties()
{
return array(
'creator',
'language',
'rights',
'publisher',
'tags');
}
}