symfony, PHP

2008. augusztus 28., csütörtök

sfGuard + profile + admin generator

My sfGuard profile solution in symfony 1.0:


Modify plugins/sfGuardPlugin/lib/model/sfGuardUser.php

class sfGuardUser extends PluginsfGuardUser
{
public function __call($m, $a)
{
$sf_guard_user_profile = $this->getProfile();
return call_user_func_array(array($sf_guard_user_profile, $m), $a);
}
}

And also modify the action that does the saving (source: symfony homepage):

class sfGuardUserActions extends BasesfGuardUserActions
{

protected function savesfGuardUser($sf_guard_user)
{

// saving user data into db
parent::savesfGuardUser($sf_guard_user);

// getting "foreign key" field name
$fieldName = sfConfig::get('app_sf_guard_plugin_profile_field_name', 'user_id');

// getting profile class
$profileClass = sfConfig::get('app_sf_guard_plugin_profile_class', 'sfGuardUserProfile');
$profilePeerClass = $profileClass.'Peer';

// building "setUserId" method from class and field retrieved above
$method = 'set'.call_user_func_array(array($profilePeerClass, 'translateFieldName'), array($fieldName, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_PHPNAME));


// recovering user profile
$sf_guard_user_profile = $sf_guard_user->getProfile();

// setting "foreign key". This operation must be done here. This is the only place where we can
// be sure that the sfGuardUserId is set (since the user is saved/updated in the parent::savesfGuardUser).
// A hidden field in the form wouldn't be effective when creating a new user, since its id is unknown.
$sf_guard_user_profile->$method($sf_guard_user->getId());

// saving user
$sf_guard_user_profile->save();

}


}


And the generator.yml:

generator:
class: sfPropelAdminGenerator
param:
model_class: sfGuardUser
theme: default

fields:
password_bis: { name: "Password (again)" }

list:
title: User list
fields:
name: { name: User Name }
display: [ =username, full_name, delivery_zip, created_at, last_login ]
filters: [ username ]

edit:
title: "%%username%% felhasználó szerkesztése"
fields:
password:
password_bis:
groups: { name: Groups/Roles, type: admin_double_list, params: through_class=sfGuardUserGroup }
permissions: { name: permissions, type: admin_check_list, params: through_class=sfGuardUserPermission }
last_login: { type: plain }
first_name: { name: First Name, params: disabled=false }
last_name: { name: Last Name, params: disabled=false }
email: { name: Email, params: disabled=false}
delivery_zip: { params: disabled=false }

display:
"NONE": [ username, _password, _password_bis ]
"Information": [ last_login ]
"Permissions and groups": [ is_active, groups, permissions ]
"User Profile": [ first_name, last_name, email, delivery_zip ]