Array ('subitem' => true), 'OnUpdate' => Array ('subitem' => true), ); $this->permMapping = array_merge($this->permMapping, $permissions); } /** * Saves user profile to database * * @param kEvent $event * @return void * @access protected */ protected function OnUpdate(kEvent $event) { $items_info = $this->Application->GetVar($event->getPrefixSpecial(true)); list ($user_id, $field_values) = each($items_info); if ($user_id != $this->Application->RecallVar('user_id')) { // we are not updating own profile return ; } $public_profile_add = Array (); $public_profile_remove = Array (); $profile_mapping = $this->Application->getUnitOption('u', 'UserProfileMapping'); foreach ($field_values as $variable_name => $variable_value) { if (array_key_exists($variable_name, $profile_mapping)) { // old style variable for displaying fields in public profile (named "pp_*") if ($variable_value) { $public_profile_add[] = $profile_mapping[$variable_name]; } else { $public_profile_remove[] = $profile_mapping[$variable_name]; } } else { $this->Application->StorePersistentVar($variable_name, htmlspecialchars_decode($variable_value)); } } if ($public_profile_add || $public_profile_remove) { $user = $this->Application->recallObject('u.current'); /* @var $user kDBItem */ // get current value $display_to_public_old = $user->GetDBField('DisplayToPublic'); $display_to_public_new = $display_to_public_old ? explode('|', substr($display_to_public_old, 1, -1)) : Array (); // update value $display_to_public_new = array_diff(array_merge($display_to_public_new, $public_profile_add), $public_profile_remove); $display_to_public_new = array_unique($display_to_public_new); $display_to_public_new = $display_to_public_new ? '|' . implode('|', $display_to_public_new) . '|' : ''; if ($display_to_public_new != $display_to_public_old) { $user->SetDBField('DisplayToPublic', $display_to_public_new); $user->Update(); } } } }