I'm trying to get a class to save arrays to the session and reload those from a database after logging in. I'm not much of a OOP coder so any help with this would be appreciated. It would have been much easier to just write the arrays to a database directly but I'm a little to far along for a re-write.
After constructing the class, the old session vars _are found in retrievePersistentMessages() but the buildMessages() shows $this->message_message as null there. Any ideas? Thanks!
class UserMessages
{
static $error_levels = array('notice', 'warning', 'error');
private $session;
public $message_pointer, $message_persistence, $message_message, $message_page_element, $message_level;
const store = 'system_messages';
const store_js = 'system_messages_js';
function __construct($message = null, $page_element = null, $class = null)
{
$this->message_pointer = rand();
$this->message_persistence = 1;
$this->message_message = $message;
$this->message_page_element = $page_element;
$this->message_level = in_array($class, self::$error_levels) ? $class : self::$error_levels[0];
$this->session = Session::getInstance();
if($this->message_message || $this->message_page_element) {
$this->buildMessages();
}
if($this->session->user_id) {
$this->retrievePersistentMessages();
}
}
private function buildMessages()
{ // called after changing parameters
$messages = $this->session->{self::store};
$messages[ $this->message_pointer ] = array (
'pointer' => $this->message_pointer,
'persistence' => $this->message_persistence,
'level' => $this->message_level,
'page_element' => $this->message_page_element,
'message' => $this->message_message,
);
$this->session->{self::store} = $messages;
$this->session->{self::store_js} = $messages;
return $this;
}
function removeMessages($which = null)
{ // called after display
$which = ($which == 'js') ? self::store_js : self::store;
$messages = $this->session->{$which};
foreach($messages as $pointer => $v) {
$timestamp = $messages[$pointer]['persistence']--;
if($timestamp <= 1 || $timestamp > 86400 && $timestamp < time())
{ // delete these
unset($messages[$pointer]);
}
}
$this->session->{$which} = $messages; // resave the session with messages left
$this->savePersistentMessages();
}
function savePersistentMessages()
{ // called after remove
if(empty($this->session->user_id)) {
return;
}
$messages = $this->session->{self::store};
foreach($messages as $pointer => $arr) {
if($messages[$pointer]['persistence']) {
$store[ $pointer ] = $messages[ $pointer ];
}
}
if(!empty($store)) {
DataStorage::addData('userMessages', $this->session->user_id, serialize($store));
}
}
function retrievePersistentMessages()
{ // called by init
if(empty($this->session->user_id)) {
return;
}
$old_messages = DataStorage::findData('userMessages', $this->session->user_id);
$old_messages_cleanup = DataStorage::deleteData('userMessages', $this->session->user_id);
if(!empty($old_messages->data))
{
$store = unserialize($old_messages->data);
foreach($store as $arr) {
foreach($arr as $key => $value) {
$this->message_{$key} = $value; // rebuild messages from array
}
$this->buildMessages();
}
}
}