diff --git a/wire/core/ProcessWire.php b/wire/core/ProcessWire.php index 3c2d5909..5677e4b1 100644 --- a/wire/core/ProcessWire.php +++ b/wire/core/ProcessWire.php @@ -79,7 +79,7 @@ class ProcessWire extends Wire { * Reversion revision number * */ - const versionRevision = 207; + const versionRevision = 208; /** * Version suffix string (when applicable) diff --git a/wire/core/WireDebugInfo.php b/wire/core/WireDebugInfo.php index 4fb56417..27713b05 100644 --- a/wire/core/WireDebugInfo.php +++ b/wire/core/WireDebugInfo.php @@ -187,10 +187,10 @@ class WireDebugInfo extends Wire { if($page->quietMode) $info['quietMode'] = 1; foreach(array('created', 'modified', 'published') as $key) { - $info[$key] = wireDate($this->wire('config')->dateFormat, $info[$key]) . " " . + $info[$key] = wireDate($this->wire()->config->dateFormat, $info[$key]) . " " . "(" . wireDate('relative', $info[$key]) . ")"; } return $info; } -} \ No newline at end of file +} diff --git a/wire/modules/Fieldtype/FieldtypePage.module b/wire/modules/Fieldtype/FieldtypePage.module index 5e7d5136..361befcb 100644 --- a/wire/modules/Fieldtype/FieldtypePage.module +++ b/wire/modules/Fieldtype/FieldtypePage.module @@ -51,7 +51,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule * */ public function init() { - $pages = $this->wire('pages'); + $pages = $this->wire()->pages; if($pages) { $pages->addHookAfter('delete', $this, 'hookPagesDelete'); } else { @@ -81,8 +81,8 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule public function hookPagesDelete($event) { if(!$event->return) return; // if delete failed, then don't continue $page_id = $event->arguments[0]->id; - $database = $this->wire('database'); - foreach($this->wire('fields') as $field) { + $database = $this->wire()->database; + foreach($this->wire()->fields as $field) { if(!$field->type instanceof FieldtypePage) continue; $table = $database->escapeTable($field->table); // delete references to this page @@ -127,7 +127,8 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule * */ public function getInputfield(Page $page, Field $field) { - $inputfield = $this->wire('modules')->get("InputfieldPage"); + /** @var InputfieldPage $inputfield */ + $inputfield = $this->wire()->modules->get("InputfieldPage"); $inputfield->class = $this->className(); return $inputfield; } @@ -156,7 +157,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule * @param Page $page * @param Field $field * @param string|int|array $value - * @return string|int|array|object $value + * @return PageArray * */ public function ___wakeupValue(Page $page, Field $field, $value) { @@ -372,7 +373,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule if($value instanceof Page) return $this->exportValuePage($page, $field, $value, $options); if(!$value instanceof PageArray) return array(); $a = array(); - foreach($value as $k => $v) { + foreach($value as $v) { $a[] = $this->exportValuePage($page, $field, $v, $options); } // in human mode just return the titles separated by a carriage return @@ -381,8 +382,6 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule } protected function exportValuePage(Page $page, Field $field, Page $value, array $options = array()) { - if($page) {} - if($field) {} if(!$value->id) return array(); // in human mode, just return the title or name if(!empty($options['human'])) { @@ -416,7 +415,8 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule * */ public function ___importValue(Page $page, Field $field, $value, array $options = array()) { - $pageArray = $this->wire('pages')->newPageArray(); + $pages = $this->wire()->pages; + $pageArray = $pages->newPageArray(); if(empty($value)) return $pageArray; if(is_string($value)) $value = array($value); foreach($value as $item) { @@ -428,7 +428,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule } else { continue; } - $p = $this->wire('pages')->get($path); + $p = $pages->get($path); if(!$p->id) { $pageArray->error("Unable to find page '$path' to add to field '$field->name'"); } else if(!$this->isValidPage($p, $field, $page)) { @@ -542,11 +542,11 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule } else if($derefAsPage == FieldtypePage::derefAsPageOrNullPage) { // single page possible blank values - return $this->wire('pages')->newNullPage(); + return $this->wire()->pages->newNullPage(); } else { // multi page blank value (FieldtypePage::derefAsPageArray) - $pageArray = $this->wire('pages')->newPageArray(); + $pageArray = $this->wire()->pages->newPageArray(); $pageArray->setTrackChanges(true); return $pageArray; } @@ -563,6 +563,8 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule */ protected function sanitizeValueString(Page $page, Field $field, $value) { + $pages = $this->wire()->pages; + $sanitizer = $this->wire()->sanitizer; $result = false; $parent_id = $field->get('parent_id'); @@ -577,20 +579,20 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule } else if(ctype_digit("$value")) { // page ID - $result = $this->pages->get("id=" . $value); + $result = $pages->get("id=" . $value); } else if(strpos($value, '-') === 0 && ctype_digit(ltrim($value, '-'))) { // page ID to remove from value - $result = $this->pages->get("id=" . ltrim($value, '-')); + $result = $pages->get("id=" . ltrim($value, '-')); $result->set('_FieldtypePage_remove', $result->id); } else if(strpos($value, '|') !== false && ctype_digit(str_replace('|', '', $value))) { // CSV string separated by '|' characters - $result = $this->pages->getById(explode('|', $value)); + $result = $pages->getById(explode('|', $value)); } else if(strlen($value) && $value[0] == '/') { // path to page - $result = $this->pages->get($value); + $result = $pages->get($value); } else if(strpos($value, "\n") !== false || strpos($value, '|') !== false) { // multiple references in a newline or pipe separated string @@ -600,7 +602,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule foreach($values as $str) { $v = $this->sanitizeValueString($page, $field, trim($str)); // recursive if($v && $v->id) { - if(!$result) $result = $this->wire('pages')->newPageArray(); + if(!$result) $result = $pages->newPageArray(); $result->add($v); } } @@ -610,23 +612,23 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule $value = trim($value); $parentIDs = is_array($parent_id) ? implode('|', $parent_id) : $parent_id; // find by title - $pageTitle = $this->wire('sanitizer')->selectorValue($value); - $result = $this->wire('pages')->get("parent_id=$parentIDs, title=$pageTitle"); + $pageTitle = $sanitizer->selectorValue($value); + $result = $pages->get("parent_id=$parentIDs, title=$pageTitle"); // if cannot find by title, find by name if(!$result->id) { - $pageName = $this->wire('sanitizer')->selectorValue($this->wire('sanitizer')->pageNameUTF8($value)); - $result = $this->wire('pages')->get("parent_id=$parentIDs, name=$pageName"); + $pageName = $sanitizer->selectorValue($sanitizer->pageNameUTF8($value)); + $result = $pages->get("parent_id=$parentIDs, name=$pageName"); } if(!$result->id && $field->get('_sanitizeValueString') === 'create' && $field->get('template_id')) { // option to create page if it does not already exist (useful for imports) // to use this, you must $field->set('_sanitizeValueString', 'create'); ahead of time - $template = $this->wire('templates')->get((int) $field->get('template_id')); - $parent = $this->wire('pages')->get((int) $parent_id); + $template = $this->wire()->templates->get((int) $field->get('template_id')); + $parent = $pages->get((int) $parent_id); if($template && $parent->id) { - $result = $this->wire('pages')->newPage($template); + $result = $pages->newPage($template); $result->parent = $parent; $result->title = $value; - $result->name = $this->wire('sanitizer')->pageNameUTF8($value); + $result->name = $sanitizer->pageNameUTF8($value); $result->save(array('adjustName' => true)); } } @@ -635,14 +637,14 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule $template_ids = self::getTemplateIDs($field, true); if(!empty($template_ids)) { // set by title - $result = $this->wire('pages')->get("templates_id=$template_ids, title=" . $this->wire('sanitizer')->selectorValue($value)); + $result = $pages->get("templates_id=$template_ids, title=" . $sanitizer->selectorValue($value)); // set by name - if(!$result->id) $result = $this->wire('pages')->get("templates_id=$template_ids, name=" . - $this->wire('sanitizer')->selectorValue($this->wire('sanitizer')->pageNameUTF8($value))); + if(!$result->id) $result = $pages->get("templates_id=$template_ids, name=" . + $sanitizer->selectorValue($sanitizer->pageNameUTF8($value))); } } - if(!$result && $this->wire('config')->debug) { + if(!$result && $this->wire()->config->debug) { $this->warning("Unable to locate page match for: $value"); } @@ -783,25 +785,27 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule } return $pageArray; } + + $pages = $this->wire()->pages; // value is an int or array of int|string|Page, load to pages, add to $pageArray if(!is_array($value)) $value = array($value); foreach($value as $v) { - if(is_object($v) && $v instanceof Page) { + if($v instanceof Page) { // Page object if($v->id == $page->id) continue; $pg = $v; } else if(is_int($v)) { // integer page ID if($v == $page->id) continue; - $pg = $this->wire('pages')->get($v); + $pg = $pages->get($v); } else if(is_string($v)) { // path or selector string if(ctype_digit($v)) { $v = (int) $v; if($v == $page->id) continue; } - $pg = $this->wire('pages')->get($v); + $pg = $pages->get($v); } else { // unrecognized type: can't make a page object from it continue; @@ -950,7 +954,8 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule 'sort', ); - $database = $this->wire('database'); + $database = $this->wire()->database; + $pages = $this->wire()->pages; // when $idstr is true, indicates $value is a multi-value CSV ID string (converts to boolean once known) $idstr = null; @@ -979,8 +984,8 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule } if($subfield == 'name') { - $value = $this->wire('sanitizer')->pageName($value); - $value = implode(',', $this->pages->findIDs("name=$value, include=all")); + $value = $this->wire()->sanitizer->pageName($value); + $value = implode(',', $pages->findIDs("name=$value, include=all")); if(empty($value)) $value = "0"; $idstr = true; } @@ -998,7 +1003,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule $idstr = true; } else if(substr(trim($value), 0, 1) == '/') { // path from root - $v = $this->pages->get($value); + $v = $pages->get($value); if($v && $v->id) $value = $v->id; } } @@ -1055,7 +1060,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule */ protected function getMatchQueryNative($query, $table, $subfield, $operator, $value) { - $database = $this->wire('database'); + $database = $this->wire()->database; if(!in_array($subfield, $this->nativeNames)) return false; @@ -1068,12 +1073,12 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule $value = date('Y-m-d H:i:s', $value); } else if(in_array($subfield, array('template', 'templates_id'))) { - $template = $this->templates->get($value); + $template = $this->wire()->templates->get($value); $value = $template ? $template->id : 0; $subfield = 'templates_id'; } else if(in_array($subfield, array('parent', 'parent_id'))) { - if(!ctype_digit("$value")) $value = $this->pages->get($value)->id; + if(!ctype_digit("$value")) $value = $this->wire()->pages->get($value)->id; $subfield = 'parent_id'; } else if($subfield == 'status') { @@ -1085,7 +1090,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule } else $value = 0; } else if($subfield == 'name') { - $value = $this->sanitizer->pageName($value, Sanitizer::toAscii); + $value = $this->wire()->sanitizer->pageName($value, Sanitizer::toAscii); } else $value = (int) $value; @@ -1340,6 +1345,8 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule */ public function ___getConfigInputfields(Field $field) { + $modules = $this->wire()->modules; + $sanitizer = $this->wire()->sanitizer; $inputfields = parent::___getConfigInputfields($field); $labels = array( @@ -1363,7 +1370,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule } /** @var InputfieldRadios $select */ - $select = $this->modules->get("InputfieldRadios"); + $select = $modules->get("InputfieldRadios"); $select->attr('name', 'derefAsPage'); $select->label = $this->_('Page field value type'); $select->description = $this->_('If your field will contain multiple pages, then you should select the first option (PageArray). If your field only needs to contain a single page, then select one of the single Page options (if you are not sure which, select the last option).'); // Long description for: dereference in API @@ -1373,21 +1380,22 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule $select->attr('value', (int) $field->get('derefAsPage')); $select->icon = 'tasks'; $inputfields->append($select); - - /** @var InputfieldMarkup $f */ - $exampleFieldset = $this->wire('modules')->get('InputfieldFieldset'); + + /** @var InputfieldFieldset $exampleFieldset */ + $exampleFieldset = $modules->get('InputfieldFieldset'); $exampleFieldset->attr('name', '_examplesFieldset'); $exampleFieldset->label = $this->_('API usage examples'); $exampleFieldset->icon = 'code'; $inputfields->add($exampleFieldset); - - $f = $this->wire('modules')->get('InputfieldMarkup'); + + /** @var InputfieldMarkup $f */ + $f = $modules->get('InputfieldMarkup'); $f->attr('name', '_examplePageArray'); $f->label = $_labels['PageArray']; $f->showIf = 'derefAsPage=' . FieldtypePage::derefAsPageArray; $f->icon = 'scissors'; $f->value = - "
" . $this->wire('sanitizer')->entities(
+			"
" . $sanitizer->entities(
 			"foreach(\$page->{$field->name} as \$item) {" .
 			"\n  echo \"
  • \$item->title
  • \";". "\n}" @@ -1395,27 +1403,28 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule $exampleFieldset->add($f); $alternateLabel = $this->_('Same as above with alternate syntax'); - - $f = $this->wire('modules')->get('InputfieldMarkup'); + + /** @var InputfieldMarkup $f */ + $f = $modules->get('InputfieldMarkup'); $f->attr('name', '_examplePageArray2'); $f->label = $alternateLabel; $f->showIf = 'derefAsPage=' . FieldtypePage::derefAsPageArray; $f->icon = 'scissors'; $f->value = - "
    " . $this->wire('sanitizer')->entities(
    +			"
    " . $sanitizer->entities(
     			"echo \$page->{$field->name}->each(\n  \"
  • {title}
  • \"\n);" ) . "
    "; $f->notes = sprintf($this->_('More about the %s method.'), "[each()]($url/page-array/each/)"); $exampleFieldset->add($f); /** @var InputfieldMarkup $f */ - $f = $this->wire('modules')->get('InputfieldMarkup'); + $f = $modules->get('InputfieldMarkup'); $f->attr('name', '_examplePageOrFalse'); $f->label = $_labels['PageOrFalse']; $f->showIf = 'derefAsPage=' . FieldtypePage::derefAsPageOrFalse; $f->icon = 'scissors'; $f->value = - "
    " . $this->wire('sanitizer')->entities(
    +			"
    " . $sanitizer->entities(
     			"if(\$page->{$field->name}) {" .
     			"\n  echo \"{\$page->{$field->name}->title}\";" .
     			"\n}" 
    @@ -1423,13 +1432,13 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     		$exampleFieldset->add($f);
     		
     		/** @var InputfieldMarkup $f */
    -		$f = $this->wire('modules')->get('InputfieldMarkup');
    +		$f = $modules->get('InputfieldMarkup');
     		$f->attr('name', '_examplePageOrFalse2');
     		$f->label = $alternateLabel;
     		$f->showIf = 'derefAsPage=' . FieldtypePage::derefAsPageOrFalse;
     		$f->icon = 'scissors';
     		$f->value =
    -			"
    " . $this->wire('sanitizer')->entities(
    +			"
    " . $sanitizer->entities(
     			"if(\$page->{$field->name}) {" .
     			"\n  echo \$page->{$field->name}(\"{title}\");" .
     			"\n}"
    @@ -1437,13 +1446,13 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     		$exampleFieldset->add($f);
     		
     		/** @var InputfieldMarkup $f */
    -		$f = $this->wire('modules')->get('InputfieldMarkup');
    +		$f = $modules->get('InputfieldMarkup');
     		$f->attr('name', '_examplePageOrNullPage');
     		$f->label = $_labels['PageOrNullPage'];
     		$f->showIf = 'derefAsPage=' . FieldtypePage::derefAsPageOrNullPage;
     		$f->icon = 'scissors';
     		$f->value =
    -			"
    " . $this->wire('sanitizer')->entities(
    +			"
    " . $sanitizer->entities(
     			"if(\$page->{$field->name}->id) {" .
     			"\n  echo \"{\$page->{$field->name}->title}\";" .
     			"\n}" 
    @@ -1451,13 +1460,13 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     		$exampleFieldset->add($f);
     		
     		/** @var InputfieldMarkup $f */
    -		$f = $this->wire('modules')->get('InputfieldMarkup');
    +		$f = $modules->get('InputfieldMarkup');
     		$f->attr('name', '_examplePageOrNullPage2');
     		$f->label = $alternateLabel;
     		$f->showIf = 'derefAsPage=' . FieldtypePage::derefAsPageOrNullPage;
     		$f->icon = 'scissors';
     		$f->value =
    -			"
    " . $this->wire('sanitizer')->entities(
    +			"
    " . $sanitizer->entities(
     				"if(\$page->{$field->name}->id) {" .
     				"\n  echo \$page->{$field->name}(\"{title}\");" .
     				"\n}"
    @@ -1466,7 +1475,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     		
     		/** @var InputfieldCheckbox $checkbox */
     		$value = (int) $field->get('allowUnpub');
    -		$checkbox = $this->modules->get('InputfieldCheckbox');
    +		$checkbox = $modules->get('InputfieldCheckbox');
     		$checkbox->attr('name', 'allowUnpub');
     		$checkbox->label = $this->_('Allow unpublished pages?');
     		$checkbox->description = $this->_('When checked, unpublished pages will be selectable for input and allowed in the *unformatted* field value. They will still be excluded from the *formatted* field value either way.'); // Description for allowUnpub option
    @@ -1537,11 +1546,14 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     	 *
     	 */
     	public function ___importConfigData(Field $field, array $data) {
    +		$sanitizer = $this->wire()->sanitizer;
    +		$templates = $this->wire()->templates;
    +		$pages = $this->wire()->pages;
     		$data = parent::___importConfigData($field, $data);
     		// parent page
     		if(!empty($data['parent_id']) && !ctype_digit("$data[parent_id]")) {
     			// we have a page apth rather than id
    -			$id = $this->wire('pages')->get("path=" . $this->wire('sanitizer')->selectorValue($data['parent_id']))->id;
    +			$id = $pages->get("path=" . $sanitizer->selectorValue($data['parent_id']))->id;
     			if(!$id) $data['errors']['parent_id'] = $this->_('Unable to find page') . " - $data[parent_id].";
     			$data['parent_id'] = $id;
     		}
    @@ -1555,7 +1567,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     			foreach($data[$property] as $key => $name) {
     				if(ctype_digit("$name")) continue;
     				// we have a template name rather than id
    -				$template = $this->wire('templates')->get($this->wire('sanitizer')->name($name));
    +				$template = $templates->get($sanitizer->name($name));
     				if($template) {
     					$data[$property][$key] = $template->id;
     				} else {
    @@ -1579,10 +1591,10 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     	 */
     	public function cleanOrphanedReferences() {
     
    -		$database = $this->wire('database'); 
    +		$database = $this->wire()->database; 
     		$totalCleaned = 0; 
     
    -		foreach($this->wire('fields') as $field) {
    +		foreach($this->wire()->fields as $field) {
     
     			if(!$field->type instanceof FieldtypePage) continue; 
     			$table = $database->escapeTable($field->getTable()); 
    @@ -1637,8 +1649,9 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     	 */
     	public function findReferences(Page $page, $selector = '', $field = false, $getCount = false) {
     
    -		/** @var Pages $pages */
    -		$pages = $this->wire('pages');
    +		$pages = $this->wire()->pages;
    +		$fields = $this->wire()->fields;
    +		$database = $this->wire()->database;
     		
     		// modifier option defaults
     		$byField = false;
    @@ -1661,9 +1674,9 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     		if(is_bool($field) || is_null($field)) {
     			$byField = $field ? true : false;
     		} else if(is_string($field)) {
    -			$fieldName = $this->wire('sanitizer')->fieldName($field);
    +			$fieldName = $this->wire()->sanitizer->fieldName($field);
     		} else if(is_int($field)) {
    -			$field = $this->wire('fields')->get($field);
    +			$field = $fields->get($field);
     			if($field) $fieldName = $field->name;
     		} else if($field instanceof Field) {
     			$fieldName = $field->name;
    @@ -1675,14 +1688,14 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     		$total = 0;
     	
     		// first determine which fields have references to $page
    -		foreach($this->wire('fields') as $field) {
    +		foreach($fields as $field) {
     
     			if($fieldName && $field->name != $fieldName) continue;
     			if(!$field->type instanceof FieldtypePage) continue;
     
     			$table = $field->getTable();
     			$sql = "SELECT COUNT(*) FROM `$table` WHERE data=:id";
    -			$query = $this->wire('database')->prepare($sql);
    +			$query = $database->prepare($sql);
     			$query->bindValue(':id', $page->id, \PDO::PARAM_INT);
     			$query->execute();
     
    @@ -1789,7 +1802,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     
     		$inputfields = $this->wire(new InputfieldWrapper());
     		/** @var InputfieldCheckbox $inputfield */
    -		$inputfield = $this->wire('modules')->get('InputfieldCheckbox'); 
    +		$inputfield = $this->wire()->modules->get('InputfieldCheckbox'); 
     		$inputfield->attr('name', '_clean'); 
     		$inputfield->attr('value', 1); 
     		$inputfield->label = $this->_('Find and clean orphaned page references'); 
    @@ -1799,9 +1812,9 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
     		$inputfield->notes = $this->_('Warning: To be safe you should back-up your database before running this.'); // Find and clean notes
     		$inputfields->add($inputfield); 
     
    -		if($this->wire('input')->post('_clean')) {
    +		if($this->wire()->input->post('_clean')) {
     			$this->message($this->_('Finding and cleaning...')); 
    -			$this->wire('fieldtypes')->get('FieldtypePage')->cleanOrphanedReferences();
    +			$this->cleanOrphanedReferences();
     		}
     
     		return $inputfields;