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:
@@ -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') {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user