Getting and Setting Extended User Attributes (from a select menu)
Permalink$ui = UserInfo::getByID($_SESSION[uID]); $_SESSION[temp][billing_city] = $ui->getUserCity(); $_SESSION[temp][firstname] = $ui->getUserFirstname(); // and am able to set like this $ui->setAttribute('mailing_address', $_SESSION[temp][billing_address]); $ui->setAttribute('firstname', $_SESSION[temp][firstname]);
However, I have another attribute for Cell Provider (so we can write scripts to text/SMS users). This is a pull down <select> menu. It works fine on the Dashboard, of course.
But when I try and retrieve the value, or set the value programmatically, I get the white screen of death (corrupted SESSION arry, I believe). Like this:
$ui = UserInfo::getByID($_SESSION[uID]); //white screen of death on next page load $_SESSION[temp][cell_provider] = $ui->getUserCellProvider(); //white screen of death on next page load $ui->setAttribute('cell_provider', $_SESSION[temp][cell_provider]);
Short of hacking with machete and manually retrieving and and inserting values with MYSQL, how can I elegantly accomplish what seems like it should be a trivial task?
The processing you apply then automatically stringifies the object.
It may still give problems for attribute objects that do not stringify automatically.
For attributes that return objects, you need to get the attribute ID as an integer and then subsequently use the attribute ID to re-load the attribute for a later request.
It may be simpler to apply such a strategy across any and all attributes.
If you don't need to re-create the attribute, maybe you could get and store the display value.
If you are open to a completely different approach, this is the sort of mixing and manipulating of little bits of data that Magic Data and its various extensions can be good for. You would need to write a 'send SMS' symbol, but I suspect much of the rest could be done without any php.
However, if you use getAttribute to first set a variable, then process that variable in any harmless way, it then works to set it to the session, like this: