1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-11 01:04:16 +02:00
This commit is contained in:
Ryan Cramer
2022-08-26 12:19:06 -04:00
parent 866f91424f
commit e8219ba71a
8 changed files with 94 additions and 87 deletions

View File

@@ -430,11 +430,12 @@ abstract class DatabaseQuery extends WireData {
* Implied parameters (using "?") was added in 3.0.157.
*
* @param string $method
* @param array $args
* @param array $arguments
* @return $this
*
*/
public function __call($method, $args) {
public function __call($method, $arguments) {
$args = &$arguments;
// if(!$this->has($method)) return parent::__call($method, $args);
if(!isset($this->queryMethods[$method])) return parent::__call($method, $args);
@@ -443,11 +444,10 @@ abstract class DatabaseQuery extends WireData {
if(!is_array($curValue)) $curValue = array();
$value = $args[0];
if(is_object($value) && $value instanceof DatabaseQuery) {
if($value instanceof DatabaseQuery) {
// if we've been given another DatabaseQuery, load from its $method
// note that if using bindValues you should also copy them separately
// behavior deprecated in 3.l0.157+, please use the copyTo() method instead
/** @var DatabaseQuery $query */
$query = $value;
$value = $query->$method; // array
if(!is_array($value) || !count($value)) return $this; // nothing to import

View File

@@ -25,11 +25,11 @@
* @property array $limit
* @property string $comment Comments for query
*
* @method $this select($sql, array $params = array())
* @method $this select($sql, $params = array())
* @method $this from($sql)
* @method $this join($sql, array $params = array())
* @method $this leftjoin($sql, array $params = array())
* @method $this where($sql, array $params = array())
* @method $this join($sql, $params = array())
* @method $this leftjoin($sql, $params = array())
* @method $this where($sql, $params = array())
* @method $this groupby($sql)
* @method $this limit($sql)
*

View File

@@ -3,7 +3,7 @@
/**
* ProcessWire WireMail
*
* ProcessWire 3.x, Copyright 2021 by Ryan Cramer
* ProcessWire 3.x, Copyright 2022 by Ryan Cramer
* https://processwire.com
*
* #pw-summary A module type that handles sending of email in ProcessWire
@@ -148,6 +148,7 @@ class WireMail extends WireData implements WireMailInterface {
*
*/
protected function sanitizeEmail($email) {
$email = (string) $email;
if(!strlen($email)) return '';
$email = strtolower(trim($email));
if(strpos($email, ':') && preg_match('/^(.+):\d+$/', $email, $matches)) {
@@ -155,14 +156,15 @@ class WireMail extends WireData implements WireMailInterface {
// so remove trailing port, i.e. ':8888', if present since it will not validate
$email = $matches[1];
}
$clean = $this->wire('sanitizer')->email($email);
$sanitizer = $this->wire()->sanitizer;
$clean = $sanitizer->email($email);
if($email !== $clean) {
throw new WireException("Invalid email address: " . $this->wire('sanitizer')->entities($email));
throw new WireException("Invalid email address: " . $sanitizer->entities($email));
}
/** @var WireMailTools $mail */
$mail = $this->wire('mail');
if($mail && $mail->isBlacklistEmail($email)) {
throw new WireException("Email address not allowed: " . $this->wire('sanitizer')->entities($email));
throw new WireException("Email address not allowed: " . $sanitizer->entities($email));
}
return $clean;
}
@@ -176,8 +178,7 @@ class WireMail extends WireData implements WireMailInterface {
*
*/
protected function ___sanitizeHeaderName($name) {
/** @var Sanitizer $sanitizer */
$sanitizer = $this->wire('sanitizer');
$sanitizer = $this->wire()->sanitizer;
$name = $sanitizer->emailHeader($name, true);
// ensure consistent capitalization for header names
$name = ucwords(str_replace('-', ' ', $name));
@@ -194,7 +195,7 @@ class WireMail extends WireData implements WireMailInterface {
*
*/
protected function ___sanitizeHeaderValue($value) {
return $this->wire('sanitizer')->emailHeader($value);
return $this->wire()->sanitizer->emailHeader($value);
}
/**
@@ -219,6 +220,7 @@ class WireMail extends WireData implements WireMailInterface {
*/
protected function extractEmailAndName($email) {
$name = '';
$email = (string) $email;
if(strpos($email, '<') !== false && strpos($email, '>') !== false) {
// email has separate from name and email
if(preg_match('/^(.*?)<([^>]+)>.*$/', $email, $matches)) {
@@ -598,7 +600,7 @@ class WireMail extends WireData implements WireMailInterface {
}
// prep any additional PHP mail params
$param = $this->wire('config')->phpMailAdditionalParameters;
$param = $this->wire()->config->phpMailAdditionalParameters;
if(is_null($param)) $param = '';
foreach($this->param as $value) {
$param .= " $value";
@@ -629,12 +631,13 @@ class WireMail extends WireData implements WireMailInterface {
*/
protected function renderMailHeader() {
$settings = $this->wire()->config->wireMail;
$config = $this->wire()->config;
$settings = $config->wireMail;
$from = $this->from;
if(!strlen($from) && !empty($settings['from'])) $from = $settings['from'];
if(!strlen($from)) $from = $this->wire('config')->adminEmail;
if(!strlen($from)) $from = 'processwire@' . $this->wire('config')->httpHost;
if(!strlen($from)) $from = $config->adminEmail;
if(!strlen($from)) $from = 'processwire@' . $config->httpHost;
$header = "From: " . ($this->fromName ? $this->bundleEmailAndName($from, $this->fromName) : $from);
@@ -741,10 +744,11 @@ class WireMail extends WireData implements WireMailInterface {
protected function renderMailAttachments() {
$body = '';
$boundary = $this->multipartBoundary();
$sanitizer = $this->wire()->sanitizer;
foreach($this->attachments as $filename => $file) {
$filename = $this->wire('sanitizer')->text($filename, array(
$filename = $sanitizer->text($filename, array(
'maxLength' => 512,
'truncateTail' => false,
'stripSpace' => '-',
@@ -802,7 +806,7 @@ class WireMail extends WireData implements WireMailInterface {
*
*/
protected function ___htmlToText($html) {
$text = $this->wire('sanitizer')->getTextTools()->markupToText($html);
$text = $this->wire()->sanitizer->getTextTools()->markupToText($html);
$text = str_replace("\n", "\r\n", $text);
$text = $this->strReplace($text, $this->multipartBoundary());
return $text;

View File

@@ -8,7 +8,7 @@
* For documentation about the fields used in this class, please see:
* /wire/core/Fieldtype.php
*
* ProcessWire 3.x, Copyright 2019 by Ryan Cramer
* ProcessWire 3.x, Copyright 2022 by Ryan Cramer
* https://processwire.com
*
*/
@@ -184,8 +184,7 @@ class FieldtypeDatetime extends Fieldtype {
* @param Field $field
* @param int $value
* @param array $options
*
* @return array|false|float|int|string
* @return string
*
*/
public function ___exportValue(Page $page, Field $field, $value, array $options = array()) {
@@ -203,7 +202,7 @@ class FieldtypeDatetime extends Fieldtype {
*/
public function isEmptyValue(Field $field, $value) {
if(is_object($value) && $value instanceof Selector) {
if($value instanceof Selector) {
// PageFinder is asking if it should let this Fieldtype handle the operator/value
// combination with potential empty value present in a Selector
$selector = $value;
@@ -366,12 +365,13 @@ class FieldtypeDatetime extends Fieldtype {
*/
public function ___getConfigInputfields(Field $field) {
$modules = $this->wire()->modules;
$inputfields = parent::___getConfigInputfields($field);
$wdt = $this->wire('datetime'); /** @var WireDateTime $wdt */
$dateOutputFormat = (string) $field->get('dateOutputFormat');
/** @var InputfieldSelect $f */
$f = $this->modules->get('InputfieldSelect');
$f = $modules->get('InputfieldSelect');
$f->attr('name', '_dateOutputFormat');
$f->label = $this->_('Date Output Format');
$f->description = $this->_('Select the format to be used when outputting dates with this field.') . ' ';
@@ -382,7 +382,7 @@ class FieldtypeDatetime extends Fieldtype {
$date = strlen(date('jn')) < 4 ? time() : strtotime('2016-04-08 5:10:02 PM');
$found = false;
foreach($wdt->getDateFormats() as $format) {
$dateFormatted = $wdt->formatDate($date, $format);
$dateFormatted = (string) $wdt->formatDate($date, $format);
if($format == 'U') $dateFormatted .= " " . $this->_('(unix timestamp)');
$f->addOption($format, "$dateFormatted [$format]");
if(!$found && strpos($dateOutputFormat, $format) !== false) {
@@ -393,7 +393,8 @@ class FieldtypeDatetime extends Fieldtype {
$f->attr('onchange', "$('#Inputfield_dateOutputFormat').val($(this).val() + ' ' + $('#Inputfield__timeOutputFormat').val());");
$inputfields->add($f);
$f = $this->modules->get('InputfieldSelect');
/** @var InputfieldSelect $f */
$f = $modules->get('InputfieldSelect');
$f->attr('name', '_timeOutputFormat');
$f->label = $this->_('Time Output Format');
$f->description = $this->_('If you want to output time in addition to the date, select the format to be used when outputting time with this field. This will be combined with the date format.');
@@ -414,18 +415,19 @@ class FieldtypeDatetime extends Fieldtype {
$inputfields->add($f);
/** @var InputfieldText $f */
$f = $this->modules->get("InputfieldText");
$f = $modules->get("InputfieldText");
$f->attr('name', 'dateOutputFormat');
$f->attr('value', $field->get('dateOutputFormat'));
$f->attr('size', 20);
$f->label = $this->_('Date/Time Output Format Code');
$f->description = $this->_('The date/time will be output according to the format below. This is automatically built from the date/time selections above, but you may change it as needed to suit your needs.') . ' ';
$f->description .= $this->_('See the [PHP date](http://www.php.net/manual/en/function.date.php) function reference for more information on how to customize this format. Alternatively, you may use a [PHP strftime](http://www.php.net/manual/en/function.strftime.php) format if desired for localization.');
$f->description .= $this->_('See the [PHP date](https://www.php.net/manual/en/function.date.php) function reference for more information on how to customize this format. Alternatively, you may use a [PHP strftime](https://www.php.net/manual/en/function.strftime.php) format if desired for localization.');
$f->icon = 'code';
$f->collapsed = Inputfield::collapsedYes;
if($this->languages) {
$f->useLanguages = true;
foreach($this->languages as $language) {
/** @var Language $language */
if($language->isDefault()) continue;
$f->set("value$language", (string) $field->get('dateOutputFormat' . $language));
}

View File

@@ -5,7 +5,7 @@
*
* This Inputfield connects the jQuery UI Autocomplete widget with the ProcessWire ProcessPageSearch AJAX API.
*
* ProcessWire 3.x, Copyright 2019 by Ryan Cramer
* ProcessWire 3.x, Copyright 2022 by Ryan Cramer
* https://processwire.com
*
* @property int $parent_id Limit results to this parent, or if combined with findPagesSelector, the search is performed as $pages->get($parent_id)->find() rather than $pages->find().
@@ -104,8 +104,8 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
*/
protected function ___renderListItem($label, $value, $class = '') {
if($class) $class = " $class";
if(strpos($label, '&') !== false) $label = $this->wire('sanitizer')->unentities($label);
$label = $this->wire('sanitizer')->entities($label);
if(strpos($label, '&') !== false) $label = $this->wire()->sanitizer->unentities($label);
$label = $this->wire()->sanitizer->entities($label);
$out =
"<li class='ui-state-default$class'>" .
"<i class='itemSort fa fa-arrows fa-fw'></i> " .
@@ -146,8 +146,7 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
*
*/
public function ___render() {
/** @var Sanitizer $sanitizer */
$sanitizer = $this->wire('sanitizer');
$sanitizer = $this->wire()->sanitizer;
if($this->maxSelectedItems == 1) $this->useList = false;
$out = $this->useList ? $this->renderList() : '';
@@ -157,7 +156,7 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
// convert our list of search fields to a CSV string for use in the ProcessPageSearch query
$searchField = '';
$searchFields = str_replace(array(',', '|'), ' ', $this->searchFields);
foreach(explode(' ', $searchFields) as $key => $name) {
foreach(explode(' ', $searchFields) as /* $key => */ $name) {
$name = trim($name);
// @esrch pr#994 --
if(strpos($name, '.')) {
@@ -206,7 +205,7 @@ class InputfieldPageAutocomplete extends Inputfield implements InputfieldHasArra
$remove = '';
if(!$this->useList) {
if(count($this->value)) {
$item = $this->wire('pages')->getById($this->value)->first();
$item = $this->wire()->pages->getById($this->value)->first();
if($item && $item->id) {
$textValue = $this->labelFieldFormat ? $item->getText($this->labelFieldFormat, true, false) : $item->get($labelField);
if(!strlen($textValue)) $textValue = $item->get('title|name');
@@ -285,7 +284,7 @@ _OUT;
protected function getAjaxUrl() {
$pipe = '%7C'; // encoded pipe "|"
$selector = $this->findPagesSelector;
$selector = (string) $this->findPagesSelector;
if($this->parent_id) {
if($selector) {
@@ -329,7 +328,9 @@ _OUT;
// specify what label field we want to retrieve
if($this->labelFieldFormat) {
$name = "autocomplete_" . $this->attr('name');
$this->wire('modules')->get('ProcessPageSearch')->setDisplayFormat($name, $this->labelFieldFormat, true);
/** @var ProcessPageSearch $pps */
$pps = $this->wire()->modules->get('ProcessPageSearch');
$pps->setDisplayFormat($name, $this->labelFieldFormat, true);
$selector .= "&format_name=$name";
}
$selector .= "&get=" . $this->labelFieldName;
@@ -371,10 +372,11 @@ _OUT;
*
*/
public function ___getConfigInputfields() {
$modules = $this->wire()->modules;
$inputfields = parent::___getConfigInputfields();
/** @var InputfieldRadios $field */
$field = $this->modules->get('InputfieldRadios');
$field = $modules->get('InputfieldRadios');
$field->setAttribute('name', 'operator');
$field->label = $this->_('Autocomplete search operator');
$field->description = $this->_("The search operator that is used in the API when performing autocomplete matches.");
@@ -396,7 +398,7 @@ _OUT;
$inputfields->add($field);
/** @var InputfieldText $field */
$field = $this->modules->get('InputfieldText');
$field = $modules->get('InputfieldText');
$field->attr('name', 'searchFields');
$field->label = $this->_('Fields to query for autocomplete');
$field->description = $this->_('Enter the names of the fields that should have their text queried for autocomplete matches.');
@@ -405,7 +407,8 @@ _OUT;
$field->collapsed = Inputfield::collapsedNo;
$field->attr('value', $this->searchFields);
$notes = $this->_('Indexed text fields include:');
foreach($this->wire('fields') as $f) {
foreach($this->wire()->fields as $f) {
/** @var Field $f */
if(!$f->type instanceof FieldtypeText) continue;
$notes .= ' ' . $f->name . ',';
}

View File

@@ -3,7 +3,7 @@
/**
* Multi-language support page names module
*
* ProcessWire 3.x, Copyright 2021 by Ryan Cramer
* ProcessWire 3.x, Copyright 2022 by Ryan Cramer
* https://processwire.com
*
* @property int $moduleVersion
@@ -253,8 +253,8 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
$testPath = trim($path, '/') . '/';
$segments = $this->wire()->pages->pathFinder()->languageSegments();
foreach($segments as $languageId => $segment) {
if(!strlen($segment)) continue;
foreach($segments as /* $languageId => */ $segment) {
if(!strlen("$segment")) continue;
$name = "$segment/";
if(strpos($testPath, $name) !== 0) continue;
$path = substr($testPath, strlen($name));
@@ -456,12 +456,11 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
*
* @param Page $page
* @param Language $language
* @return bool|string|array
* @return bool|array
* @since 3.0.186
*
*/
public function ___pageNotAvailableInLanguage(Page $page, Language $language) {
if($language) {} // ignore
if($page->editable()) return true;
if($page->id == $this->wire()->config->http404PageID) return true;
$redirect404 = (int) $this->redirect404;
@@ -627,7 +626,6 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
*
*/
public function hookPageRender(HookEvent $event) {
if($event) {}
if($this->force404) {
$this->force404 = false; // prevent another 404 on the 404 page
throw new Wire404Exception('Not available in requested language', Wire404Exception::codeLanguage);
@@ -728,6 +726,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
// add labels and inputs for other languages
foreach($languages as $language) {
/** @var Language $language */
if($language->isDefault()) continue;
$user->setLanguage($language);
$value = $page->get("name$language");
@@ -784,6 +783,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
$sanitizer = $this->wire()->sanitizer;
foreach($languages as $language) {
/** @var Language $language */
if($language->isDefault()) continue;
if(!$languages->editable($language)) continue;
@@ -1016,7 +1016,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
$language = $languages->get($language);
}
if(!$language || !$language->id || !$language instanceof Language) {
if(!$language instanceof Language || !$language->id) {
$language = $languages->getDefault();
}
@@ -1134,6 +1134,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
if(!is_array($extraData)) $extraData = array();
foreach($this->wire()->languages as $language) {
/** @var Language $language */
if($language->isDefault()) continue;
$language_id = (int) $language->id;
@@ -1206,6 +1207,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
if($userTrackChanges) $user->setTrackChanges(false);
foreach($this->wire()->languages as $language) {
/** @var Language $language */
if($language->isDefault()) continue;
$user->setLanguage($language);
$name = $page->get("name$language");
@@ -1244,6 +1246,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
// go into this only if we know the renamed hook hasn't already been called
$renamed = false;
foreach($this->wire()->languages as $language) {
/** @var Language $language */
if($language->isDefault()) continue;
$namePrevious = $page->get("-name$language");
if(!$namePrevious) continue;
@@ -1318,6 +1321,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
if(!$p->id) continue;
$duplicates = 0; // count duplicate names, which would invalidate any $foundLanguage
foreach($languages as $language) {
/** @var Language $language */
$key = 'name' . ($language->isDefault() ? '' : $language->id);
$name = $p->get($key);
if($name === $part) {
@@ -1361,6 +1365,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
if($query->rowCount() < 2) {
foreach($this->wire()->languages as $language) {
/** @var Language $language */
if($language->isDefault()) continue;
$status = "status" . (int) $language->id;
$database->exec("ALTER TABLE pages ADD $status INT UNSIGNED NOT NULL DEFAULT " . Page::statusOn);
@@ -1394,6 +1399,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
$defaultUrlPrefix = $config->get('_pageNumUrlPrefix|pageNumUrlPrefix');
foreach($this->wire()->languages as $language) {
/** @var Language $language */
/** @var InputfieldName $f */
$f = $modules->get('InputfieldName');
$name = "pageNumUrlPrefix$language";
@@ -1469,6 +1475,7 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM
$database = $this->wire()->database;
$sqls = array();
foreach($languages as $language) {
/** @var Language $language */
if($language->isDefault()) continue;
$name = 'name' . $language->id;
if(!$database->columnExists("pages", $name)) continue;

View File

@@ -6,7 +6,7 @@
* Keeps track of past URLs where pages have lived and automatically 301 redirects
* to the new location whenever the past URL is accessed.
*
* ProcessWire 3.x, Copyright 2021 by Ryan Cramer
* ProcessWire 3.x, Copyright 2022 by Ryan Cramer
* https://processwire.com
*
* @method upgrade($fromVersion, $toVersion)
@@ -87,7 +87,7 @@ class PagePathHistory extends WireData implements Module, ConfigurableModule {
*/
protected function getVersion() {
if($this->version) return $this->version;
$this->version = $this->wire('modules')->getModuleInfoProperty($this, 'version');
$this->version = $this->wire()->modules->getModuleInfoProperty($this, 'version');
if(!$this->version) $this->version = 1;
return $this->version;
}
@@ -118,10 +118,10 @@ class PagePathHistory extends WireData implements Module, ConfigurableModule {
// ok
} else if($language === 0) {
$language = $languages->getDefault();
} else if(is_int($language) || ctype_digit($language)) {
} else if(is_int($language) || ctype_digit("$language")) {
$language = $languages->get((int) $language);
} else if(is_string($language) && $language) {
$language = $languages->get($this->wire('sanitizer')->pageNameUTF8($language));
$language = $languages->get($this->wire()->sanitizer->pageNameUTF8($language));
}
if($language && !$language->id) $language = null;
return $language;
@@ -138,7 +138,7 @@ class PagePathHistory extends WireData implements Module, ConfigurableModule {
*/
public function setPathHistory(Page $page, $path, $language = null) {
$database = $this->wire('database');
$database = $this->wire()->database;
$table = self::dbTableName;
$result = $this->addPathHistory($page, $path, $language);
@@ -655,7 +655,7 @@ class PagePathHistory extends WireData implements Module, ConfigurableModule {
if($matchRow) {
// ok found
$result['matchType'] = 'exact';
} else if($rowCount) {
} else {
// select from multiple matched rows (urlSegments mode only)
// order by quantity of slashes (most to least)
arsort($pathCounts);
@@ -668,8 +668,6 @@ class PagePathHistory extends WireData implements Module, ConfigurableModule {
$result['matchType'] = 'partial';
break;
}
} else {
// no match
}
if($matchRow) {

View File

@@ -383,7 +383,7 @@ class ProcessPageLister extends Process implements ConfigurableModule {
* Check for a bookmark specified in GET variable $n
*
* @param string $bookmarkID
* @return null|int|bool Returns NULL if not applicable, boolean false if bookmark not found, or integer of bookmark ID if applied
* @return null|string|false Returns NULL if not applicable, boolean false if bookmark not found, or integer of bookmark ID if applied
*
*/
public function checkBookmark($bookmarkID = '') {
@@ -399,7 +399,7 @@ class ProcessPageLister extends Process implements ConfigurableModule {
$this->set('defaultSort', $bookmark['sort']);
$this->sessionSet('sort', $bookmark['sort']);
$this->set('columns', $bookmark['columns']);
$this->headline($this->wire('page')->title . ' - ' . $bookmark['title']);
$this->headline($this->wire()->page->title . ' - ' . $bookmark['title']);
return $bookmarkID;
}
@@ -724,6 +724,7 @@ class ProcessPageLister extends Process implements ConfigurableModule {
// custom fields (sort)
foreach($fields as $field) {
/** @var Field $field */
if(!$this->allowColumnField($field)) continue;
if($useLabels) {
if($template) {
@@ -916,13 +917,13 @@ class ProcessPageLister extends Process implements ConfigurableModule {
$selectors2 = new Selectors();
}
foreach($selectors1 as $key1 => $selector1) {
foreach($selectors1 as /* $key1 => */ $selector1) {
//$value = $selector1->value;
//if(is_array($value) || strlen($value)) continue;
$fieldName1 = $selector1->field;
if(is_array($fieldName1)) $fieldName1 = implode('|', $fieldName1);
// see if we have the same field in selectors2
foreach($selectors2 as $key2 => $selector2) {
foreach($selectors2 as /* $key2 => */ $selector2) {
$fieldName2 = $selector2->field;
if(is_array($fieldName2)) $fieldName2 = implode('|', $fieldName2);
if($fieldName1 == $fieldName2) {
@@ -1209,7 +1210,7 @@ class ProcessPageLister extends Process implements ConfigurableModule {
$templatesAPI = $this->wire()->templates;
foreach($template as $t) {
$t = $templatesAPI->get($t);
if($t && $t instanceof Template) $templates[] = $t;
if($t instanceof Template) $templates[] = $t;
}
return $templates;
}
@@ -1394,7 +1395,7 @@ class ProcessPageLister extends Process implements ConfigurableModule {
$p->of(false);
$values = array();
foreach($columns as $cnt => $name) {
foreach($columns as /* $cnt => */ $name) {
$value = $this->buildListerTableCol($p, $fields, $name);
$values[] = $value;
}
@@ -1529,12 +1530,11 @@ class ProcessPageLister extends Process implements ConfigurableModule {
//if($value instanceof Pageimages && $this->imageFirst) $value = array($value->first());
$values = array();
$isImage = false;
foreach($value as $k => $v) {
foreach($value as /* $k => */ $v) {
if(empty($v)) continue;
if($subname == 'data') $v = (string) $v;
if($subname && is_object($v)) $v = $v->$subname;
if($v instanceof Pageimage) {
/** @var Pageimage $v */
$vfull = $v;
if($this->imageWidth || $this->imageHeight) $v = $v->size($this->imageWidth, $this->imageHeight);
$alt = $vfull->basename . ($vfull->description ? ' - ' . $sanitizer->entities1($vfull->description) : "");
@@ -1626,8 +1626,6 @@ class ProcessPageLister extends Process implements ConfigurableModule {
$languages = $this->wire()->languages;
if(!$languages) return null;
$language = null;
if(strpos($name, '-') && preg_match('/-([-_a-z0-9]+)$/', $name, $matches)) {
// i.e. title-de or categories.title-de
$language = $languages->get($matches[1]);
@@ -1759,30 +1757,24 @@ class ProcessPageLister extends Process implements ConfigurableModule {
$target = $editMode == self::windowModeBlank ? "_blank" : "";
if($editMode == self::windowModeDirect) $directURL = $actions['edit']['url'];
$actionsOut .= $this->renderListerTableColAction($actions['edit'], $class, $target);
unset($actions['edit']);
} else {
unset($actions['edit']);
}
unset($actions['edit']);
if($viewable) {
$class = $viewMode == self::windowModeModal ? "modal" : "";
$target = $viewMode == self::windowModeBlank ? "_blank" : "";
if($viewMode == self::windowModeDirect) $directURL = $p->url;
$actionsOut .= $this->renderListerTableColAction($actions['view'], $class, $target);
unset($actions['view']);
} else {
unset($actions['view']);
}
unset($actions['view']);
if($addable) {
$actions['new']['url'] = $this->addURL . "?parent_id=$p->id";
$class = $editMode == self::windowModeModal ? "modal" : "";
$target = $editMode == self::windowModeBlank ? "_blank" : "";
$actionsOut .= $this->renderListerTableColAction($actions['new'], "$class PageAdd PageEdit", $target);
unset($actions['new']);
} else {
unset($actions['new']);
}
unset($actions['new']);
if($directURL) {
// click goes directly to edit or view
@@ -1858,12 +1850,13 @@ class ProcessPageLister extends Process implements ConfigurableModule {
static $pageListRender = null;
if(is_null($pageListRender)) {
require_once($this->wire()->config->paths->ProcessPageList . 'ProcessPageListRenderJSON.php');
require_once($this->wire()->config->paths('ProcessPageList') . 'ProcessPageListRenderJSON.php');
$pageListRender = new ProcessPageListRenderJSON($this->wire()->page, $this->wire()->pages->newPageArray());
$pageListRender = $this->wire($pageListRender);
$this->wire($pageListRender);
$pageListRender->setUseTrash($this->wire()->user->isSuperuser());
}
/** @var ProcessPageListRenderJSON $pageListRender */
$actions = $pageListRender->getPageActions($p);
if(isset($actions['edit']) && $this->editURL && strpos($actions['edit']['url'], '/page/edit/') !== false) {
@@ -1988,8 +1981,6 @@ class ProcessPageLister extends Process implements ConfigurableModule {
$pagerOut = $pager->render($results);
$pageURL = $this->wire()->page->url;
$pagerOut = str_replace($pageURL . "'", $pageURL . "?pageNum=1'", $pagerOut); // specifically identify page1
} else {
$pagerOut = '';
}
} else {
@@ -1998,6 +1989,7 @@ class ProcessPageLister extends Process implements ConfigurableModule {
}
foreach($this->wire()->notices as $notice) {
/** @var Notice $notice */
if($notice instanceof NoticeError) {
$out .= "<p class='ui-state-error-text'>$notice->text</p>";
} else {
@@ -2144,7 +2136,8 @@ class ProcessPageLister extends Process implements ConfigurableModule {
$out = '';
if($minimal) {
/** @var InputfieldHidden $f */
$sort = htmlspecialchars($this->sessionGet('sort'));
$sort = (string) $this->sessionGet('sort');
$sort = htmlspecialchars($sort);
$out .= "<input type='hidden' name='sort' id='lister_sort' value='$sort' />";
$out .= "<input type='hidden' name='columns' id='lister_columns' value='ignore' />";
$out .= "<input type='hidden' name='filters' id='ProcessListerFilters' value='ignore' />";