mirror of
https://github.com/processwire/processwire.git
synced 2025-08-09 16:26:59 +02:00
Various minor updates
This commit is contained in:
@@ -1242,7 +1242,8 @@ abstract class Inputfield extends WireData implements Module {
|
||||
*/
|
||||
public function getClassArray($property = 'class', $assoc = false) {
|
||||
$property = $this->getClassProperty($property);
|
||||
$value = trim($property === 'class' ? $this->attr('class') : $this->getSetting($property));
|
||||
$value = ($property === 'class' ? $this->attr('class') : $this->getSetting($property));
|
||||
$value = trim("$value");
|
||||
while(strpos($value, ' ') !== false) $value = str_replace(' ', ' ', $value);
|
||||
$classes = strlen($value) ? explode(' ', $value) : array();
|
||||
if($assoc) {
|
||||
|
@@ -392,10 +392,25 @@ interface WireDatabase {
|
||||
interface WirePageEditor {
|
||||
/**
|
||||
* @return Page The current page being edited
|
||||
*
|
||||
*/
|
||||
public function getPage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface indicates item stores in a WireArray or type descending from it
|
||||
*
|
||||
* @since 3.0.205
|
||||
*
|
||||
*/
|
||||
interface WireArrayItem {
|
||||
/**
|
||||
* @return WireArray
|
||||
*
|
||||
*/
|
||||
public function getWireArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface shared by all ProcessWire Null objects
|
||||
*
|
||||
|
@@ -1423,8 +1423,11 @@ class Modules extends WireArray {
|
||||
|
||||
if(empty($options['noPermissionCheck'])) {
|
||||
// check that user has permission required to use module
|
||||
if(!$this->hasPermission($module, $this->wire('user'), $this->wire('page'))) {
|
||||
$error = $this->_('You do not have permission to execute this module') . ' - ' . wireClassName($module);
|
||||
$page = $this->wire()->page;
|
||||
$user = $this->wire()->user;
|
||||
if(!$this->hasPermission($module, $user, $page)) {
|
||||
$error = $this->_('You do not have permission to execute this module') . ' - ' .
|
||||
wireClassName($module) . " (page=$page)";
|
||||
if(empty($options['noThrow'])) throw new WirePermissionException($error);
|
||||
return empty($options['returnError']) ? null : $error;
|
||||
}
|
||||
|
@@ -84,7 +84,7 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
*
|
||||
*/
|
||||
public function isValidItem($item) {
|
||||
return is_object($item) && $item instanceof Page;
|
||||
return $item instanceof Page;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -123,7 +123,7 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
// given item exists in this PageArray (or at least has)
|
||||
$key = $this->keyIndex[$id];
|
||||
if(isset($this->data[$key])) {
|
||||
$page = $this->data[$key]; /** @var Page $page */
|
||||
$page = $this->data[$key];
|
||||
if($page->id === $id) {
|
||||
// found it
|
||||
return $key;
|
||||
@@ -188,17 +188,17 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
*
|
||||
* #pw-internal
|
||||
*
|
||||
* @param array|PageArray|Page $pages Pages to import.
|
||||
* @param array|PageArray|Page $items Pages to import.
|
||||
* @return PageArray reference to current instance.
|
||||
*
|
||||
*/
|
||||
public function import($pages) {
|
||||
if(is_object($pages) && $pages instanceof Page) $pages = array($pages);
|
||||
if(!self::iterable($pages)) return $this;
|
||||
foreach($pages as $page) $this->add($page);
|
||||
if($pages instanceof PageArray) {
|
||||
if(count($pages) < $pages->getTotal()) {
|
||||
$this->setTotal($this->getTotal() + ($pages->getTotal() - count($pages)));
|
||||
public function import($items) {
|
||||
if($items instanceof Page) $items = array($items);
|
||||
if(!self::iterable($items)) return $this;
|
||||
foreach($items as $page) $this->add($page);
|
||||
if($items instanceof PageArray) {
|
||||
if(count($items) < $items->getTotal()) {
|
||||
$this->setTotal($this->getTotal() + ($items->getTotal() - count($items)));
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
@@ -213,7 +213,7 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
* @return bool True if the index or Page exists here, false if not.
|
||||
*/
|
||||
public function has($key) {
|
||||
if(is_object($key) && $key instanceof Page) {
|
||||
if($key instanceof Page) {
|
||||
return $this->getItemKey($key) !== null;
|
||||
}
|
||||
return parent::has($key);
|
||||
@@ -236,24 +236,25 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
* $pageArray->add(1005);
|
||||
* ~~~~~
|
||||
*
|
||||
* @param Page|PageArray|int $page Page object, PageArray object, or Page ID.
|
||||
* @param Page|PageArray|int $item Page object, PageArray object, or Page ID.
|
||||
* - If given a `Page`, the Page will be added.
|
||||
* - If given a `PageArray`, it will do the same thing as the `WireArray::import()` method and append all the pages.
|
||||
* - If Page `ID`, the Page identified by that ID will be loaded and added to the PageArray.
|
||||
* @return $this
|
||||
*/
|
||||
public function add($page) {
|
||||
public function add($item) {
|
||||
|
||||
if($this->isValidItem($page)) {
|
||||
parent::add($page);
|
||||
if($this->isValidItem($item)) {
|
||||
parent::add($item);
|
||||
|
||||
} else if($page instanceof PageArray || is_array($page)) {
|
||||
return $this->import($page);
|
||||
} else if($item instanceof PageArray || is_array($item)) {
|
||||
return $this->import($item);
|
||||
|
||||
} else if(ctype_digit("$page")) {
|
||||
$page = $this->wire()->pages->get("id=$page");
|
||||
if($page->id) parent::add($page);
|
||||
} else if(ctype_digit("$item")) {
|
||||
$item = $this->wire()->pages->get("id=$item");
|
||||
if($item->id) parent::add($item);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -285,7 +286,9 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
*
|
||||
*/
|
||||
public function findRandom($num) {
|
||||
return parent::findRandom($num);
|
||||
/** @var PageArray $value */
|
||||
$value = parent::findRandom($num);
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -302,7 +305,9 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
*
|
||||
*/
|
||||
public function slice($start, $limit = 0) {
|
||||
return parent::slice($start, $limit);
|
||||
/** @var PageArray $value */
|
||||
$value = parent::slice($start, $limit);
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -317,7 +322,9 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
*
|
||||
*/
|
||||
public function eq($num) {
|
||||
return parent::eq($num);
|
||||
/** @var Page $value */
|
||||
$value = parent::eq($num);
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -453,7 +460,9 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
*
|
||||
*/
|
||||
public function find($selector) {
|
||||
return parent::find($selector);
|
||||
/** @var PageArray $value */
|
||||
$value = parent::find($selector);
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -467,7 +476,9 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
*
|
||||
*/
|
||||
public function findOne($selector) {
|
||||
return parent::findOne($selector);
|
||||
/** @var Page|bool $value */
|
||||
$value = parent::findOne($selector);
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -611,7 +622,7 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
*/
|
||||
public function __toString() {
|
||||
$s = '';
|
||||
foreach($this as $key => $page) $s .= "$page|";
|
||||
foreach($this as $page) $s .= "$page|";
|
||||
$s = rtrim($s, "|");
|
||||
return $s;
|
||||
}
|
||||
@@ -698,7 +709,6 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
protected function trackAdd($item, $key) {
|
||||
parent::trackAdd($item, $key);
|
||||
if(!$item instanceof Page) return;
|
||||
/** @var Page $item */
|
||||
if(!isset($this->keyIndex[$item->id])) $this->numTotal++;
|
||||
$this->keyIndex[$item->id] = $key;
|
||||
}
|
||||
@@ -713,7 +723,6 @@ class PageArray extends PaginatedArray implements WirePaginatable {
|
||||
protected function trackRemove($item, $key) {
|
||||
parent::trackRemove($item, $key);
|
||||
if(!$item instanceof Page) return;
|
||||
/** @var Page $item */
|
||||
if(isset($this->keyIndex[$item->id])) {
|
||||
if($this->numTotal) $this->numTotal--;
|
||||
unset($this->keyIndex[$item->id]);
|
||||
|
@@ -248,4 +248,4 @@ abstract class PageProperties {
|
||||
if($remainder > 1) $names[$remainder] = "unknown-$remainder";
|
||||
return $names;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -52,7 +52,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
class Pagefile extends WireData {
|
||||
class Pagefile extends WireData implements WireArrayItem {
|
||||
|
||||
/**
|
||||
* Timestamp 'created' used by pagefiles that are temporary, not yet published
|
||||
@@ -1450,6 +1450,19 @@ class Pagefile extends WireData {
|
||||
return $this->get($key) !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* For WireArrayItem interface
|
||||
*
|
||||
* #pw-internal
|
||||
*
|
||||
* @return Pagefiles
|
||||
* @since 3.0.205
|
||||
*
|
||||
*/
|
||||
public function getWireArray() {
|
||||
return $this->pagefiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Debug info
|
||||
*
|
||||
|
@@ -87,7 +87,7 @@ class WireData extends Wire implements \IteratorAggregate, \ArrayAccess {
|
||||
*/
|
||||
public function setQuietly($key, $value) {
|
||||
$track = $this->trackChanges();
|
||||
$this->setTrackChanges(false);
|
||||
if($track) $this->setTrackChanges(false);
|
||||
$this->set($key, $value);
|
||||
if($track) $this->setTrackChanges(true);
|
||||
return $this;
|
||||
|
@@ -132,6 +132,7 @@ class ProcessModule extends Process {
|
||||
*
|
||||
*/
|
||||
public function __construct() {
|
||||
parent::__construct();
|
||||
$this->labels['download'] = $this->_('Download');
|
||||
$this->labels['download_install'] = $this->_('Download and Install');
|
||||
$this->labels['get_module_info'] = $this->_('Get Module Info');
|
||||
@@ -155,7 +156,7 @@ class ProcessModule extends Process {
|
||||
$this->labels['install'] = $this->_('Install'); // Label for Install tab
|
||||
$this->labels['cancel'] = $this->_('Cancel'); // Label for Cancel button
|
||||
|
||||
require(dirname(__FILE__) . '/ProcessModuleInstall.php');
|
||||
require_once(dirname(__FILE__) . '/ProcessModuleInstall.php');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -292,6 +293,7 @@ class ProcessModule extends Process {
|
||||
$session = $this->wire()->session;
|
||||
$sanitizer = $this->wire()->sanitizer;
|
||||
$input = $this->wire()->input;
|
||||
$config = $this->wire()->config;
|
||||
|
||||
foreach($modules as $module) {
|
||||
$this->modulesArray[$module->className()] = 1;
|
||||
@@ -353,7 +355,7 @@ class ProcessModule extends Process {
|
||||
if($input->post('clear_file_compiler')) {
|
||||
$session->CSRF->validate();
|
||||
/** @var FileCompiler $compiler */
|
||||
$compiler = $this->wire(new FileCompiler($this->wire('config')->paths->siteModules));
|
||||
$compiler = $this->wire(new FileCompiler($config->paths->siteModules));
|
||||
$compiler->clearCache(true);
|
||||
$session->message($this->_('Cleared file compiler cache'));
|
||||
$session->redirect('./');
|
||||
@@ -430,7 +432,7 @@ class ProcessModule extends Process {
|
||||
|
||||
$info = $modules->getModuleInfoVerbose($name);
|
||||
|
||||
$isNew = !$info['core'] || ($info['core'] && in_array($name, $this->newCoreModules));
|
||||
$isNew = !$info['core'] || in_array($name, $this->newCoreModules);
|
||||
if($isNew) $isNew = $info['created'] > 0 && $info['created'] > (time()-$newSeconds);
|
||||
if($isNew) $newModulesArray[$name] = $installed;
|
||||
|
||||
@@ -509,7 +511,8 @@ class ProcessModule extends Process {
|
||||
$form->add($tab);
|
||||
|
||||
// configurable
|
||||
|
||||
|
||||
/** @var InputfieldWrapper $tab */
|
||||
$tab = $this->wire(new InputfieldWrapper());
|
||||
$tab->attr('id', 'tab_configurable_modules');
|
||||
$tab->attr('title', $this->labels['configure']);
|
||||
@@ -528,6 +531,7 @@ class ProcessModule extends Process {
|
||||
|
||||
// installable
|
||||
|
||||
/** @var InputfieldWrapper $tab */
|
||||
$tab = $this->wire(new InputfieldWrapper());
|
||||
$tab->attr('id', 'tab_install_modules');
|
||||
$tabLabel = $this->labels['install'];
|
||||
@@ -558,6 +562,7 @@ class ProcessModule extends Process {
|
||||
dirname(str_replace($rootPath, '/', $item['file'])) . '/'
|
||||
);
|
||||
}
|
||||
/** @var InputfieldWrapper $tab */
|
||||
$tab = $this->wire(new InputfieldWrapper());
|
||||
$tab->attr('id', 'tab_missing_modules');
|
||||
$tabLabel = $this->_('Missing');
|
||||
@@ -675,7 +680,7 @@ class ProcessModule extends Process {
|
||||
$f->label = $this->_('Module ZIP file URL');
|
||||
$f->description = $this->_('Download a ZIP file containing a module. If you download a module that is already installed, the installed version will be overwritten with the newly downloaded version.');
|
||||
$f->notes = $trustNote;
|
||||
$f->attr('placeholder', $this->_('http://domain.com/ModuleName.zip')); // placeholder
|
||||
$f->attr('placeholder', $this->_('https://domain.com/ModuleName.zip')); // placeholder
|
||||
$f->required = false;
|
||||
$fieldset->add($f);
|
||||
|
||||
@@ -837,6 +842,7 @@ class ProcessModule extends Process {
|
||||
$section = $matches[1];
|
||||
$sections[] = $section;
|
||||
if($table) $out .= $table->render() . "</div>";
|
||||
/** @var MarkupAdminDataTable $table */
|
||||
$table = $modules->get("MarkupAdminDataTable");
|
||||
$table->setEncodeEntities(false);
|
||||
$table->headerRow($tableHeader);
|
||||
@@ -847,7 +853,7 @@ class ProcessModule extends Process {
|
||||
$info = $modules->getModuleInfoVerbose($name);
|
||||
$configurable = $info['configurable'];
|
||||
$title = !empty($info['title']) ? $sanitizer->entities1($info['title']) : substr($name, strlen($section));
|
||||
$title = "<span title='$name' uk-tooltip='delay:1000'>$title</span>";
|
||||
$title = "<span title='$name' data-uk-tooltip='delay:1000'>$title</span>";
|
||||
if($options['allowClasses']) $title .= "<br /><small class='ModuleClass ui-priority-secondary'>$name</small>";
|
||||
if($info['icon']) $title = wireIconMarkup($info['icon'], 'fw') . " $title";
|
||||
$class = $configurable ? 'ConfigurableModule' : '';
|
||||
@@ -1030,7 +1036,7 @@ class ProcessModule extends Process {
|
||||
$info = self::getModuleInfo();
|
||||
$this->headline($this->labels['download_install']);
|
||||
$this->breadcrumb('./', $info['title']);
|
||||
if($update) $this->breadcrumb("./?edit=$name", $name);
|
||||
if($update) $this->breadcrumb("./?edit=$name", $name);
|
||||
|
||||
$redirectURL = $update ? "./edit?name=$name" : "./";
|
||||
$className = $name;
|
||||
@@ -1057,7 +1063,7 @@ class ProcessModule extends Process {
|
||||
$installable = true;
|
||||
foreach($data['categories'] as $category) {
|
||||
if(!in_array($category['name'], $this->uninstallableCategories)) continue;
|
||||
$this->error(sprintf($this->_('Sorry modules of type "%s" are not installable from the admin.'), $category['title']));
|
||||
$this->error(sprintf($this->_('Sorry, modules of type "%s" are not installable from the admin.'), $category['title']));
|
||||
$installable = false;
|
||||
}
|
||||
if(!$installable) $session->redirect($redirectURL);
|
||||
@@ -1424,7 +1430,6 @@ class ProcessModule extends Process {
|
||||
foreach($moduleInfo as $key => $value) {
|
||||
if(isset($moduleInfoVerbose[$key]) && $moduleInfoVerbose[$key] !== $value) {
|
||||
unset($moduleInfo[$key]);
|
||||
continue;
|
||||
} else if(empty($value)) {
|
||||
if($value === "0" || $value === 0 || $value === false) continue;
|
||||
unset($moduleInfo[$key]);
|
||||
@@ -1752,6 +1757,7 @@ class ProcessModule extends Process {
|
||||
foreach($fields->getAll() as $field) {
|
||||
if(!$field->getSetting('useLanguages')) continue;
|
||||
foreach($languages as $language) {
|
||||
/** @var Language $language */
|
||||
if($language->isDefault()) continue;
|
||||
$name = $field->name . '__' . $language->id;
|
||||
if(!isset($data[$name])) continue;
|
||||
@@ -1781,6 +1787,7 @@ class ProcessModule extends Process {
|
||||
if($languages && $field->getSetting('useLanguages')) {
|
||||
$_name = $name;
|
||||
foreach($languages as $language) {
|
||||
/** @var Language $language */
|
||||
if($language->isDefault()) continue;
|
||||
$name = $_name . "__" . $language->id;
|
||||
$value = $field->get("value$language->id");
|
||||
@@ -2046,6 +2053,7 @@ class ProcessModule extends Process {
|
||||
$form->description = sprintf($this->_('Import translations for module %s'), $moduleName);
|
||||
|
||||
foreach($languages as $language) {
|
||||
/** @var Language $language */
|
||||
/** @var InputfieldSelect $lang */
|
||||
$langLabel = $language->get('title');
|
||||
$langLabel .= $langLabel ? " ($language->name)" : $language->name;
|
||||
@@ -2096,7 +2104,7 @@ class ProcessModule extends Process {
|
||||
* method can return false.
|
||||
*
|
||||
* @param Page $page
|
||||
* @return bool|string
|
||||
* @return string
|
||||
* @sine 3.0.167
|
||||
*
|
||||
*/
|
||||
|
Reference in New Issue
Block a user