This forum has moved to a new location and is in read-only mode. Please visit talk.octobercms.com to access the new location.
I'm working on adding an additional image called offline_image to the User object by Rainlab. Rather than coding it with duct tape to upload the image to a directory and referencing the path, I would like to imitate the Avatar attribute as closely as possible.
public function boot()
{
$this->extendUserModel();
$this->extendUsersController();
}
protected function extendUserModel()
{
UserModel::extend(function($model) {
$model->hasOne = [
'offline_image' => [\System\Models\File::class, 'key' => 'attachment_id', 'otherKey' => 'field']
];
});
}
protected function extendUsersController()
{
UsersController::extendFormFields(function($widget) {
// Prevent extending of related form instead of the intended User form
if (!$widget->model instanceof UserModel) {
return;
}
$configFile = plugins_path('revurb/userdata/config/text_fields.yaml');
$config = Yaml::parse(File::get($configFile));
$widget->addTabFields($config);
// Broken
$configFile2 = plugins_path('revurb/userdata/config/image_fields.yaml');
$config2 = Yaml::parse(File::get($configFile2));
// $widget->addSecondaryTabFields($config2)
});
}
text_fields.yaml
# ===================================
# Extended Profile Field Definitions
# ===================================
offlineImage:
label: revurb.userdata::lang.user.offlineImage
type: fileupload
mode: image
imageHeight: 1920
imageWidth: 1080
If I don't set the 'otherKey' to 'field', I get the Avatar image reference. With the field, I'm getting an error when uploading an image: Call to undefined method October\Rain\Database\QueryBuilder::isPublic()
How do I extend and process the upload process to ensure all fields are properly set?
mjauvin said:
shouldn't "offlineImage:" be "offline_image:" in text_fields.yaml ?
offlineImage was an old naming which was converted to offline_image. That's a paste error on my end and does not relate to the current state of the code, or the error message.
mjauvin said:
And I don't think "key" and "otherKey" are needed in your relation config.
Without "key", I get a SQL error for system_files.user_id column not found.
It looks like that was a partial fix.
$model->attachOne = [
'offline_image' => 'System\Models\File'
];
I got an error: Model 'RainLab\User\Models\User' does not contain a definition for 'avatar'. Amending to the following seems to work, but needs to be adjusted to append, instead of replacing.
$model->attachOne = [
'avatar' => 'System\Models\File',
'offline_image' => 'System\Models\File'
];
Corrected, appending an attachOne is performed via:
$model->attachOne['offline_image'] = 'System\Models\File';
1-7 of 7