describe.php in Crumbs, the Breadcrumbs suite 7.2
File
lib/PluginOperation/describe.php
View source
<?php
class crumbs_PluginOperation_describe {
protected $keys = array(
'*' => TRUE,
);
protected $keysByPlugin = array();
private $descriptions = array();
protected $pluginKey;
protected $injectedAPI_mono;
protected $injectedAPI_multi;
function __construct() {
$this->injectedAPI_mono = new crumbs_InjectedAPI_describeMonoPlugin($this);
$this->injectedAPI_multi = new crumbs_InjectedAPI_describeMultiPlugin($this);
}
function invoke($plugin, $plugin_key) {
$this->pluginKey = $plugin_key;
if ($plugin instanceof crumbs_MonoPlugin) {
$result = $plugin
->describe($this->injectedAPI_mono);
if (is_string($result)) {
$this
->setTitle($result);
}
}
elseif ($plugin instanceof crumbs_MultiPlugin) {
$result = $plugin
->describe($this->injectedAPI_multi);
if (is_array($result)) {
foreach ($result as $key_suffix => $title) {
$this
->addRule($key_suffix, $title);
}
}
}
}
function addRule($key_suffix, $title) {
$key = $this->pluginKey . '.' . $key_suffix;
$this
->_addRule($key);
$this
->_addDescription($key, $title);
}
function addDescription($description, $key_suffix) {
if (isset($key_suffix)) {
$key = $this->pluginKey . '.' . $key_suffix;
}
else {
$key = $this->pluginKey;
}
$this
->_addDescription($key, $description);
}
protected function _addDescription($key, $description) {
$this->descriptions[$key][] = $description;
}
function setTitle($title) {
$this
->_addRule($this->pluginKey);
$this
->_addDescription($this->pluginKey, $title);
}
protected function _addRule($key) {
$fragments = explode('.', $key);
$partial_key = array_shift($fragments);
while (TRUE) {
if (empty($fragments)) {
break;
}
$wildcard_key = $partial_key . '.*';
$this->keys[$wildcard_key] = TRUE;
$this->keysByPlugin[$this->pluginKey][$wildcard_key] = TRUE;
$partial_key .= '.' . array_shift($fragments);
}
$this->keys[$key] = $key;
$this->keysByPlugin[$this->pluginKey][$key] = $key;
}
function getKeys() {
return $this->keys;
}
function getKeysByPlugin() {
return $this->keysByPlugin;
}
function setDefaultWeight($key, $weight) {
$this->keys[$key] = $key;
}
function collectedInfo() {
$container = new crumbs_Container_MultiWildcardData($this->keys);
$container
->__set('key', $this->keys);
$container->descriptions = $this->descriptions;
return $container;
}
}
Classes
Name |
Description |
crumbs_PluginOperation_describe |
This class uses the PluginOperation pattern, but it does not implement any of
the PluginOperation interfaces. This is because it is not supposed to be used
with the PluginEngine, but rather from a custom function (see above). |