diff --git a/wire/core/Field.php b/wire/core/Field.php index 1ab0e7ba..c0875c19 100644 --- a/wire/core/Field.php +++ b/wire/core/Field.php @@ -448,6 +448,20 @@ class Field extends WireData implements Saveable, Exportable { if(strpos($key, '_') === 0) unset($data[$key]); } + // convert access roles from IDs to names + if($this->useRoles) { + foreach(array('viewRoles', 'editRoles') as $roleType) { + if(!is_array($data[$roleType])) $data[$roleType] = array(); + $roleNames = array(); + foreach($data[$roleType] as $key => $roleID) { + $role = $this->wire('roles')->get($roleID); + if(!$role || !$role->id) continue; + $roleNames[] = $role->name; + } + $data[$roleType] = $roleNames; + } + } + return $data; } @@ -497,7 +511,11 @@ class Field extends WireData implements Saveable, Exportable { $this->type = $this->wire('fieldtypes')->get($data['type']); } - if(!$this->type) $this->type = $this->wire('fieldtypes')->get('FieldtypeText'); + if(!$this->type) { + if(!empty($data['type'])) $this->error("Unable to locate field type: $data[type]"); + $this->type = $this->wire('fieldtypes')->get('FieldtypeText'); + } + $data = $this->type->importConfigData($this, $data); // populate import data @@ -632,6 +650,15 @@ class Field extends WireData implements Saveable, Exportable { $ids[] = (int) $role; } else if($role instanceof Role) { $ids[] = (int) $role->id; + } else if(is_string($role) && strlen($role)) { + $rolePage = $this->wire('roles')->get($role); + if($rolePage && $rolePage->id) { + $ids[] = $rolePage->id; + } else { + $this->error("Unknown role '$role'"); + } + } else { + // invalid } } if($type == 'view') { diff --git a/wire/modules/Fieldtype/FieldtypePageTable.module b/wire/modules/Fieldtype/FieldtypePageTable.module index c6c47360..f489c2db 100644 --- a/wire/modules/Fieldtype/FieldtypePageTable.module +++ b/wire/modules/Fieldtype/FieldtypePageTable.module @@ -450,7 +450,16 @@ class FieldtypePageTable extends FieldtypeMulti implements Module { * */ public function ___exportConfigData(Field $field, array $data) { - $data = $this->wire('fieldtypes')->get('FieldtypePage')->exportConfigData($field, $data); + $data = $this->wire('fieldtypes')->get('FieldtypePage')->exportConfigData($field, $data); + if(is_array($data['template_id'])) { + // convert template IDs to names + $names = array(); + foreach($data['template_id'] as $id) { + $template = $this->wire('templates')->get((int) $id); + if($template) $names[] = $template->name; + } + $data['template_id'] = $names; + } return $data; } @@ -464,7 +473,25 @@ class FieldtypePageTable extends FieldtypeMulti implements Module { * */ public function ___importConfigData(Field $field, array $data) { + $templateIDs = array(); + if(!empty($data['template_id'])) { + if(!is_array($data['template_id'])) $data['template_id'] = array($data['template_id']); + $errorTemplates = array(); + foreach($data['template_id'] as $name) { + $template = $this->wire('templates')->get($name); + if($template) { + $templateIDs[] = $template->id; + } else { + $errorTemplates[] = $name; + } + } + $data['template_id'] = 0; + if(count($errorTemplates)) { + $data['errors']['template_id'] = "Unable to find template(s): " . implode(', ', $errorTemplates); + } + } $data = $this->wire('fieldtypes')->get('FieldtypePage')->importConfigData($field, $data); + $data['template_id'] = $templateIDs; return $data; }