110 lines
3.7 KiB
PHP
110 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* Class: Feathers
|
|
* Contains various functions, acts as the backbone for all feathers.
|
|
*/
|
|
class Feathers {
|
|
# Array: $instances
|
|
# Holds all feather instantiations.
|
|
public static $instances = array();
|
|
|
|
# Boolean: $cancelled
|
|
# Is the feather's execution cancelled?
|
|
public $cancelled = false;
|
|
|
|
# String: $safename
|
|
# The feather's non-camelized name.
|
|
public $safename = "";
|
|
|
|
# Array: $fields
|
|
# The attribute fields for the feather.
|
|
public $fields = array();
|
|
|
|
# Array: $filters
|
|
# Manages named trigger filters for feather fields.
|
|
public static $filters = array();
|
|
|
|
# Array: $custom_filters
|
|
# Manages custom feather-provided trigger filters.
|
|
public static $custom_filters = array();
|
|
|
|
/**
|
|
* Function: setFilter
|
|
* Applies a filter to a specified field of the Feather.
|
|
*
|
|
* Parameters:
|
|
* $field - Attribute of the post to filter.
|
|
* $name - Name of the filter to use.
|
|
*
|
|
* See Also:
|
|
* <Trigger.filter>
|
|
*/
|
|
protected function setFilter($field, $name): void {
|
|
self::$filters[get_class($this)][] = array("field" => $field, "name" => $name);
|
|
|
|
if (isset($this->fields[$field])) {
|
|
foreach ((array) $name as $filter)
|
|
$this->fields[$field]["filters"][] = $filter;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function: customFilter
|
|
* Allows a Feather to apply its own filter to a specified field.
|
|
*
|
|
* Parameters:
|
|
* $field - Attribute of the post to filter.
|
|
* $name - Name of the class function to use as the filter.
|
|
*
|
|
* See Also:
|
|
* <Trigger.filter>
|
|
*/
|
|
protected function customFilter($field, $name): void {
|
|
self::$custom_filters[get_class($this)][] = array("field" => $field, "name" => $name);
|
|
|
|
if (isset($this->fields[$field])) {
|
|
foreach ((array) $name as $filter)
|
|
$this->fields[$field]["custom_filters"][] = $filter;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function: respondTo
|
|
* Allows a Feather to respond to a Trigger as a Module would.
|
|
*
|
|
* Parameters:
|
|
* $name - Name of the trigger to respond to.
|
|
* $function - Name of the class function to respond with.
|
|
* $priority - Priority of the response.
|
|
*
|
|
* See Also:
|
|
* <Trigger>
|
|
*/
|
|
protected function respondTo($name, $function = null, $priority = 10): void {
|
|
fallback($function, $name);
|
|
Trigger::current()->priorities[$name][] = array(
|
|
"priority" => $priority,
|
|
"function" => array($this, $function)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Function: setField
|
|
* Sets the feather's fields for creating/editing posts with that feather.
|
|
*
|
|
* Parameters:
|
|
* $options - An array of key => val options for the field.
|
|
*
|
|
* Options:
|
|
* attr - The technical name for the field. Think $post->attr.
|
|
* type - The field type. (text, file, text_block, or select)
|
|
* label - The label for the field.
|
|
* optional - Is this field optional?
|
|
* extra - Stuff to output after the input field. Can be anything.
|
|
* note - A minor note to display next to the label text.
|
|
*/
|
|
protected function setField($options): void {
|
|
$this->fields[$options["attr"]] = $options;
|
|
}
|
|
}
|