Hello,
I successfully extended the modxUser, with inspiration through the tutorials in the rtfm and Bob's ClassExtender.
Writing data to the added table works so far. For this I created a little snippet that works as hook in the Login UpdateProfile snippet.
But, existing entries updated are not updated. With every profile update a new entry will be added to the table.
Does anybody have an idea, what's going wrong?
Thanks for helping
Greetings
Florian
This is the little snippet:
// Basic Setup
$defaultExtendUserCorePath = $modx->getOption('core_path').'components/extendeduser/';
$extendUserCorePath = $modx->getOption('extendeduser.core_path',null,$defaultExtendUserCorePath);
$modx->addPackage('extuser', $extendUserCorePath . 'model/');
$user = NULL;
$data = NULL;
$user =& $modx->user;
if (is_object($user)) {
if(!($user instanceof extUser)) {
$user->set('class_key', 'extUser');
$user->save();
//$user = $modx->getObject('extUser', $user->get('id'));
} else {
if ((!$data) && $user) {
$data = $modx->newObject('ProfileData');
$user->addOne($data);
}
$fields = array();
if ($data) {
$fields['firstname'] = $data->get('firstname');
$fields['lastname'] = $data->get('lastname');
$fields['title'] = $data->get('title');
foreach ($fields as $key => $field) {
if (empty($field)) {
$fields[$key] = '';
}
}
}
if (!$submission) {
$modx->request->sanitizeRequest();
$dirty = false;
foreach ($fields as $key => $value) {
if ($hook->getValue($key)) {
if ($value !== $hook->getValue($key)) {
$data->set($key, $hook->getValue($key));
$dirty = true;
}
}
}
if ($dirty) {
//echo "dirty<br>";
$user->save();
if ($user->save() == false) {
return false;
} else {
return true;
}
}
}
}
}
And the xml schema:
<?xml version="1.0" encoding="UTF-8"?>
<model package="extuser" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM">
<object class="extUser" extends="modUser">
<composite alias="Data" local="id" class="ProfileData" foreign="userdata_id" cardinality="one" owner="local"/>
<composite alias="DataSocial" local="id" foreign="user" cardinality="many" owner="local"/>
<composite alias="AuthorTitles" local="id" foreign="user" cardinality="many" owner="local"/>
</object>
<!-- Profile data table -->
<object class="ProfileData" table="user_profile" extends="xPDOSimpleObject">
<field key="userdata_id" dbtype="int" precision="11" phptype="integer" null="false" attributes="unsigned"/>
<field key="firstname" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="lastname" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="title" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="pseudonym" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="affiliate" dbtype="varchar" precision="100" phptype="string" null="true"/>
<index alias="userdata_id" name="userdata_id" primary="false" unique="true" type="BTREE">
<column key="userdata_id" length="" collation="A" null="false"/>
</index>
<aggregate alias="extUser" local="userdata_id" foreign="id" cardinality="one" owner="foreign"/>
</object>
<!-- Socialmedia platforms -->
<object table="user_profile_social" extends="xPDOSimpleObject">
<field key="userdata_id" dbtype="int" precision="11" phptype="integer" null="false" attributes="unsigned"/>
<field key="socialprofile" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="socialurl" dbtype="varchar" precision="100" phptype="string" null="true"/>
<aggregate alias="extUser" local="user" foreign="id" cardinality="one" owner="foreign"/>
</object>
<!-- Booktitles -->
<object table="user_author_titles" extends="xPDOSimpleObject">
<field key="userdata_id" dbtype="int" precision="11" phptype="integer" null="false" attributes="unsigned"/>
<field key="isbn" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="title" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="pseudonym" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="verlag" dbtype="varchar" precision="100" phptype="string" null="true"/>
<field key="shortdesc" dbtype="text" phptype="string" null="true"/>
<aggregate alias="extUser" local="user" foreign="id" cardinality="one" owner="foreign"/>
</object>
</model>