From 9bf9d8de9e19711a574cb4847ecb4e90544c7bdb Mon Sep 17 00:00:00 2001 From: Jean Rajotte Date: Tue, 21 Oct 2014 18:18:02 -0400 Subject: [PATCH 1/6] validate findPagesCode-found pages also. --- .../Inputfield/InputfieldPage/InputfieldPage.module | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module index 35c302d9..4f527b04 100644 --- a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module +++ b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module @@ -106,7 +106,8 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { /** * Is the given $page valid for the given $field? * - * Note that this validates all but findPagesCode (eval) based page selections. + * Note that this validates all but findPagesCode (eval) based page selections. + * findPagesCode (eval) also validated here now * This is primarily for use by FieldtypePage, but kept here since the config options * it uses to check are part of this module's config. * @@ -134,7 +135,11 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { } if($field->findPagesCode) { - // TODO: we don't currently validate these + // if the page being tested is in the same list + // as the so-called selectable pages, it's a good one, period. + $inputField = $field->getInputfield( $editPage, $field); + $validPages = $inputField->findPagesCode( $editPage ); + return $validPages->get( 'id=' . $page->id) ? true : false; } if($field->parent_id && $field->parent_id != $page->parent_id) { From e26b983f6ea2857e2e740485ab805e21d912920e Mon Sep 17 00:00:00 2001 From: Jean Rajotte Date: Tue, 21 Oct 2014 18:29:03 -0400 Subject: [PATCH 2/6] Revert "validate findPagesCode-found pages also." This reverts commit 9bf9d8de9e19711a574cb4847ecb4e90544c7bdb. --- .../Inputfield/InputfieldPage/InputfieldPage.module | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module index 4f527b04..35c302d9 100644 --- a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module +++ b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module @@ -106,8 +106,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { /** * Is the given $page valid for the given $field? * - * Note that this validates all but findPagesCode (eval) based page selections. - * findPagesCode (eval) also validated here now + * Note that this validates all but findPagesCode (eval) based page selections. * This is primarily for use by FieldtypePage, but kept here since the config options * it uses to check are part of this module's config. * @@ -135,11 +134,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { } if($field->findPagesCode) { - // if the page being tested is in the same list - // as the so-called selectable pages, it's a good one, period. - $inputField = $field->getInputfield( $editPage, $field); - $validPages = $inputField->findPagesCode( $editPage ); - return $validPages->get( 'id=' . $page->id) ? true : false; + // TODO: we don't currently validate these } if($field->parent_id && $field->parent_id != $page->parent_id) { From 97516d669b499a2376fe749cdcf2986d7b8b26ce Mon Sep 17 00:00:00 2001 From: Jean Rajotte Date: Tue, 21 Oct 2014 18:34:07 -0400 Subject: [PATCH 3/6] Add simple validation to InputfieldPage saving when using findPagesCode --- .../modules/Inputfield/InputfieldPage/InputfieldPage.module | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module index 35c302d9..6ff986e0 100644 --- a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module +++ b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module @@ -107,6 +107,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { * Is the given $page valid for the given $field? * * Note that this validates all but findPagesCode (eval) based page selections. + * If this simple change is right, not findPagesCode does validate. * This is primarily for use by FieldtypePage, but kept here since the config options * it uses to check are part of this module's config. * @@ -134,7 +135,10 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { } if($field->findPagesCode) { - // TODO: we don't currently validate these + // if the page is in the list, it's valid. No more questions asked! + $inputField = $field->getInputfield( $editPage, $field); + $validPages = $inputField->findPagesCode( $editPage ); + return $validPages->get( 'id=' . $page->id) ? true : false; } if($field->parent_id && $field->parent_id != $page->parent_id) { From e07d777e98de4e3c64701dd0f1b343ce9de09ba7 Mon Sep 17 00:00:00 2001 From: Jean Rajotte Date: Wed, 7 Jan 2015 11:53:36 -0500 Subject: [PATCH 4/6] ensure all Page instances have all language status fields set to 1, matching the admin UI default behaviour. This ensures API-created pages behave like admin-UI-created ones. --- wire/modules/LanguageSupport/LanguageSupportPageNames.module | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wire/modules/LanguageSupport/LanguageSupportPageNames.module b/wire/modules/LanguageSupport/LanguageSupportPageNames.module index 430888da..779604c4 100644 --- a/wire/modules/LanguageSupport/LanguageSupportPageNames.module +++ b/wire/modules/LanguageSupport/LanguageSupportPageNames.module @@ -695,7 +695,9 @@ class LanguageSupportPageNames extends WireData implements Module, ConfigurableM $page = $event->arguments[0]; $extraData = $event->return; if(!is_array($extraData)) $extraData = array(); - $alwaysActiveTypes = array('User', 'Role', 'Permission', 'Language'); + // 2015-01-07: add Page to the list to + // match default behaviour in hookInputfieldPageNameRenderAfter for API-based page creation + $alwaysActiveTypes = array('User', 'Role', 'Permission', 'Language', 'Page'); foreach(wire('languages') as $language) { if($language->isDefault()) continue; From 70bc09d2230065150e1d7a547170b268d51f7865 Mon Sep 17 00:00:00 2001 From: Jean Rajotte Date: Wed, 7 Jan 2015 12:08:10 -0500 Subject: [PATCH 5/6] discard my changes to InputfieldPage.module to get back to the main dev version --- .../InputfieldPage/InputfieldPage.module | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module index ce5c592e..25181f70 100644 --- a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module +++ b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module @@ -107,7 +107,6 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { * Is the given $page valid for the given $field? * * Note that this validates all but findPagesCode (eval) based page selections. - * If this simple change is right, not findPagesCode does validate. * This is primarily for use by FieldtypePage, but kept here since the config options * it uses to check are part of this module's config. * @@ -123,7 +122,6 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { if(!$field instanceof Field) $field = wire('fields')->get($field); if(!$field instanceof Field) throw new WireException('isValidPage requires a valid Field or field name'); if($editPage && $page->id == $editPage->id) return false; // prevent circular reference - if(wire('pages')->cloning) return true; // bypass check when clong is active $valid = true; @@ -136,10 +134,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { } if($field->findPagesCode) { - // if the page is in the list, it's valid. No more questions asked! - $inputField = $field->getInputfield( $editPage, $field); - $validPages = $inputField->findPagesCode( $editPage ); - return $validPages->get( 'id=' . $page->id) ? true : false; + // TODO: we don't currently validate these } if($field->parent_id && $field->parent_id != $page->parent_id) { @@ -217,8 +212,6 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { } else { $children = new PageArray(); } - - if($children->has($page)) $children->remove($page); // don't allow page being edited to be selected return $children; } @@ -325,8 +318,6 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { return $this->name; } - $inputfield->renderReady($this, false); - $out = "\n
"; $out .= $inputfield->render(); $out .= $this->renderAddable(); @@ -418,7 +409,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { $inputfield->processInput($input); $value = $this->attr('value'); - $existingValueStr = $value ? "$value" : ''; + $existingValue = $value ? clone $value : ''; $newValue = null; $value = $inputfield->value; @@ -458,7 +449,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { $this->setAttribute('value', $newValue); } - if("$newValue" != "$existingValueStr") { + if("$newValue" != "$existingValue") { $this->trackChange('value'); } $this->processInputMode = false; @@ -706,4 +697,4 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { -} +} \ No newline at end of file From b638d091c0d556f951c69015e93d3cf03d8f712f Mon Sep 17 00:00:00 2001 From: Jean Rajotte Date: Wed, 7 Jan 2015 12:10:02 -0500 Subject: [PATCH 6/6] do this right -- using Ryan's dev branch --- .../Inputfield/InputfieldPage/InputfieldPage.module | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module index 25181f70..60ba08ac 100644 --- a/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module +++ b/wire/modules/Inputfield/InputfieldPage/InputfieldPage.module @@ -122,6 +122,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { if(!$field instanceof Field) $field = wire('fields')->get($field); if(!$field instanceof Field) throw new WireException('isValidPage requires a valid Field or field name'); if($editPage && $page->id == $editPage->id) return false; // prevent circular reference + if(wire('pages')->cloning) return true; // bypass check when clong is active $valid = true; @@ -212,6 +213,8 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { } else { $children = new PageArray(); } + + if($children->has($page)) $children->remove($page); // don't allow page being edited to be selected return $children; } @@ -318,6 +321,8 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { return $this->name; } + $inputfield->renderReady($this, false); + $out = "\n
"; $out .= $inputfield->render(); $out .= $this->renderAddable(); @@ -409,7 +414,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { $inputfield->processInput($input); $value = $this->attr('value'); - $existingValue = $value ? clone $value : ''; + $existingValueStr = $value ? "$value" : ''; $newValue = null; $value = $inputfield->value; @@ -449,7 +454,7 @@ class InputfieldPage extends Inputfield implements ConfigurableModule { $this->setAttribute('value', $newValue); } - if("$newValue" != "$existingValue") { + if("$newValue" != "$existingValueStr") { $this->trackChange('value'); } $this->processInputMode = false;