File: /var/www/apklausos/application/models/Session.php
<?php
/*
* LimeSurvey
* Copyright (C) 2013 The LimeSurvey Project Team / Carsten Schmitz
* All rights reserved.
* License: GNU/GPL License v2 or later, see LICENSE.php
* LimeSurvey is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*
* Files Purpose: lots of common functions
*/
/**
* Class Session
* Extend CActiveRecord and not LSActiveRecord to disable plugin event (session can be used a lot)
*
* @property string $id Primary Key
* @property integer $expire
* @property string $data
*/
class Session extends CActiveRecord
{
/** @var mixed $dataBackup to reset $data after save */
private $dataBackup = null;
/**
* @inheritdoc
*/
public function init()
{
$this->attachEventHandler("onBeforeSave", array($this, 'fixDataType'));
$this->attachEventHandler("onAfterSave", array($this, 'resetDataType'));
}
/**
* @inheritdoc
* @return Session
*/
public static function model($className = __CLASS__)
{
/** @var self $model */
$model = parent::model($className);
return $model;
}
/** @inheritdoc */
public function tableName()
{
return '{{sessions}}';
}
/** @inheritdoc */
public function primaryKey()
{
return 'id';
}
/** @inheritdoc */
public function afterFind()
{
$sDatabasetype = Yii::app()->db->getDriverName();
// Postgres delivers a stream pointer
if (gettype($this->data) == 'resource') {
$this->data = stream_get_contents($this->data, -1, 0);
}
return parent::afterFind();
}
/**
* Update data before saving
* @see \CDbHttpSession
* @return void
*/
public function fixDataType()
{
$this->dataBackup = $this->data;
$db = $this->getDbConnection();
$dbType = $db->getDriverName();
switch ($dbType) {
case 'sqlsrv':
case 'mssql':
case 'dblib':
$this->data = new CDbExpression('CONVERT(VARBINARY(MAX), ' . $db->quoteValue($this->data) . ')');
break;
case 'pgsql':
$this->data = new CDbExpression($db->quoteValueWithType($this->data, PDO::PARAM_LOB) . "::bytea");
break;
case 'mysql':
// Don't seems to need something
default:
// No update
}
}
/**
* Reset data after saving
* @return void
*/
public function resetDataType()
{
$this->data = $this->dataBackup;
$this->dataBackup = null;
}
}