1
0
mirror of https://github.com/processwire/processwire.git synced 2025-08-12 17:54:44 +02:00

Fix issue processwire/processwire-issues#347 where field export that included roles was using IDs rather than role names. Also same issue with PageTable that was using template IDs rather than template names.

This commit is contained in:
Ryan Cramer
2018-02-02 10:05:40 -05:00
parent f7ff7eab8c
commit 1d82b530ff
2 changed files with 56 additions and 2 deletions

View File

@@ -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') {

View File

@@ -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;
}