artabro/wire/modules/Process/ProcessList.module
2024-08-27 11:35:37 +02:00

116 lines
3.2 KiB
Text

<?php namespace ProcessWire;
/**
* ProcessWire List Process
*
* Generates a <dl> definition list of Processes attached to each child page.
*
* For more details about how Process modules work, please see:
* /wire/core/Process.php
*
* ProcessWire 3.x, Copyright 2022 by Ryan Cramer
* https://processwire.com
*
*
*/
class ProcessList extends Process {
public static function getModuleInfo() {
return array(
'title' => __('List', __FILE__), // getModuleInfo title
'summary' => __('Lists the Process assigned to each child page of the current', __FILE__), // getModuleInfo summary
'version' => 101,
'permanent' => true,
'permission' => 'page-view',
);
}
public function ___execute() {
return $this->render();
}
protected function render() {
$modules = $this->wire()->modules;
$sanitizer = $this->wire()->sanitizer;
$defaults = array(
'dlClass' => 'nav',
'dtClass' => '',
'ddClass' => '',
'aClass' => 'label',
'disabledClass' => 'ui-priority-secondary',
'showIcon' => true,
);
$settings = $this->wire()->config->ProcessList;
if(!is_array($settings)) $settings = array();
$settings = array_merge($defaults, $settings);
$out = "\n<dl class='$settings[dlClass]'>";
$cnt = 0;
foreach($this->wire()->page->children("check_access=0") as $child) {
if(!$child->viewable()) continue;
$dtClass = $settings['dtClass'];
$ddClass = $settings['ddClass'];
$icon = '';
if($child->process) {
$info = $modules->getModuleInfoVerbose($child->process, array('noCache' => true));
if($settings['showIcon']) {
$icon = $child->get('page_icon');
if(!$icon) $icon = $info['icon'];
if($icon) {
if(strpos($icon, 'fa-') === 0) list(,$icon) = explode('-', 2);
$icon = "<i style='float: right;' class='fa fa-3x fa-fw fa-$icon ui-priority-secondary'></i> ";
}
}
$title = $child->title;
if(!strlen($title)) $title = $info['title'];
if(!strlen($title)) $title = $child->name;
$titleTranslated = __($title, '/wire/templates-admin/default.php');
if($titleTranslated && $titleTranslated != $title) $title = $titleTranslated;
$title = $sanitizer->entities1($title);
if($child->summary) {
$summary = $child->summary;
} else {
$summary = $info['summary'];
}
$summary = $sanitizer->entities1($summary);
} else {
$title = $child->get("title|name");
if($child->template == 'admin') {
$summary = $this->_('The process module assigned to this page does not appear to be installed.');
$dtClass .= ' ' . $settings['disabledClass'];
$ddClass .= ' ' . $settings['disabledClass'];
} else if($child->summary) {
$summary = $sanitizer->entities($child->getUnformatted('summary'));
} else {
$summary = '<!--' . $this->_('No description available') . '-->';
}
}
$dtClass = trim($dtClass);
$ddClass = trim($ddClass);
$out .= "\n\t<dt class='$dtClass'><a class='$settings[aClass]' href='{$child->url}'>$icon$title</a></dt>";
if($summary) $out .= "\n\t<dd class='$ddClass'>$summary</dd>";
$cnt++;
}
$out .= "\n</dl>";
if(!$cnt) $out = '';
return $out;
}
}