Select Git revision
ViewTimeModel.php
ViewTimeModel.php 7.63 KiB
<?php
class Requests_ViewTimeModel extends Unl_Model
{
static public function find($id)
{
$db = Zend_Registry::get('db');
$select = new Zend_Db_Select($db);
$select->from(array('t' => 'creqRequestViewTimes'));
if (Unl_Util::isArray($id)) {
if (count($id) == 0) {
return new Unl_Model_Collection(__CLASS__);
}
$select->where('t.requestViewTimeId IN (?)', $id);
} else {
$select->where('t.requestViewTimeId = ?', $id);
}
$records = $select->query()->fetchAll();
$objects = new Unl_Model_Collection(__CLASS__);
foreach ($records as $record) {
$object = Unl_Model_Registry::getInstance()->getOrAdd(new self($record));
$objects[$object->getId()] = $object;
}
// if we were passed an array of users, return an array for each user
if (Unl_Util::isArray($id)) {
return $objects;
// otherwise, return an array of groups for the single user we were passed
} else {
return $objects[$id];
}
}
static public function findByUserAndRequest($user, $request)
{
$db = Zend_Registry::get('db');
$requestId = $request->getId();
$userId = $user->getId();
$select = new Zend_Db_Select($db);
$select->from(array('t' => 'creqRequestViewTimes'), array('requestViewTimeId', 'user', 'request'));
if (Unl_Util::isArray($requestId)) {
if (count($requestId) == 0) {
return new Unl_Model_Collection(__CLASS__);
}
$select->where('request IN (?)', $requestId);
} else {
$select->where('request = ?', $requestId);
}
if (Unl_Util::isArray($userId)) {
if (count($userId) == 0) {
return new Unl_Model_Collection(__CLASS__);
}
$select->where('user IN (?)', $userId);
} else {
$select->where('user = ?', $userId);
}
$records = $select->query()->fetchAll();
$viewTimeIds = array();
foreach ($records as $record) {
$viewTimeIds[] = $record['requestViewTimeId'];
}
self::find($viewTimeIds);
if (Unl_Util::isArray($user) && Unl_Util::isArray($request)) {
$objects = array();
} else if (Unl_Util::isArray($user) || Unl_Util::isArray($request)) {
$objects = new Unl_Model_Collection(__CLASS__);
} else {
$objects = null;
}
foreach ($records as $record) {
$uId = $record['user'];
$rId = $record['request'];
$vId = $record['requestViewTimeId'];
if (Unl_Util::isArray($user) && Unl_Util::isArray($request)) {
$objects[$uId][$rId] = Unl_Model_Registry::getInstance()->get(__CLASS__, $vId);
} else if (!Unl_Util::isArray($user) && Unl_Util::isArray($request)) {
$objects[$rId] = Unl_Model_Registry::getInstance()->get(__CLASS__, $vId);
} else if (Unl_Util::isArray($user) && !Unl_Util::isArray($request)) {
$objects[$uId] = Unl_Model_Registry::getInstance()->get(__CLASS__, $vId);
} else if (!Unl_Util::isArray($user) && !Unl_Util::isArray($request)) {
$objects = Unl_Model_Registry::getInstance()->get(__CLASS__, $vId);
}
}
return $objects;
}
static public function fetchNew()
{
$data = array(
'request' => null,
'user' => null,
'viewTime' => 0,
'hidden' => 'no'
);
$new = new self($data);
$new->_setClean();
return $new;
}
static public function save($models)
{
$modelsToInsert = new Unl_Model_Collection(__CLASS__);
$modelsToUpdate = new Unl_Model_Collection(__CLASS__);
if (!Unl_Util::isArray($models)) {
$model = $models;
$models = new Unl_Model_Collection(__CLASS__);
$models[$model->getId()] = $model;
}
foreach ($models as $model) {
if ($model->getId()) {
if ($model->_cleanData != $model->_data) {
$modelsToUpdate[] = $model;
}
} else {
$modelsToInsert[] = $model;
}
}
if (count($modelsToInsert) > 0) {
self::_insert($modelsToInsert);
}
if (count($modelsToUpdate) > 0) {
self::_update($modelsToUpdate);
}
foreach ($models as $model)
{
$model->_setClean();
}
}
static protected function _update(Unl_Model_Collection $models)
{
$db = Zend_Registry::get('db');
$sql = 'CREATE TEMPORARY TABLE creqRequestViewTimesUpdate '
. 'SELECT * FROM creqRequestViewTimes LIMIT 0';
$db->query($sql);
$sql = 'INSERT INTO creqRequestViewTimesUpdate VALUES ';
$sqlParts = array();
foreach ($models as $model) {
$sqlParts[] = $db->quoteInto('(?, ', $model->_data['requestViewTimeId'])
. $db->quoteInto('?, ' , $model->_data['request'])
. $db->quoteInto('?, ' , $model->_data['user'])
. $db->quoteInto('?, ' , $model->_data['viewTime'])
. $db->quoteInto('?)' , $model->_data['hidden']);
}
$sql .= implode(', ', $sqlParts);
$db->query($sql);
$sql = 'UPDATE creqRequestViewTimes AS a, '
. ' creqRequestViewTimesUpdate AS b '
. 'SET a.request = b.request, '
. ' a.user = b.user, '
. ' a.viewTime = b.viewTime, '
. ' a.hidden = b.hidden '
. 'WHERE a.requestViewTimeId = b.requestViewTimeId ';
$db->query($sql);
}
static protected function _insert(Unl_Model_Collection $models)
{
$db = Zend_Registry::get('db');
$sql = 'INSERT INTO creqRequestViewTimes (request, user, viewTime, hidden) VALUES ';
$sqlParts = array();
foreach ($models as $model) {
$sqlParts[] = $db->quoteInto('(?, ', $model->_data['request'])
. $db->quoteInto('?, ' , $model->_data['user'])
. $db->quoteInto('?, ' , $model->_data['viewTime'])
. $db->quoteInto('?)' , $model->_data['hidden']);
}
$sql .= implode(', ', $sqlParts);
$db->query($sql);
$lastId = $db->lastInsertId();
foreach ($models as $model) {
$model->_data['requestViewTimeId'] = $lastId;
$lastId++;
}
}
public function getId()
{
return $this->_data['requestViewTimeId'];
}
public function getRequest()
{
return $this->_data['request'];
}
public function setRequest(Requests_RequestModel $request)
{
$this->_data['request'] = $request->getId();
}
public function getUser()
{
return $this->_data['user'];
}
public function setUser(Auth_UserModel $user)
{
$this->_data['user'] = $user->getId();
}
public function getTime()
{
return $this->_data['viewTime'];
}
public function setTime(Zend_Date $date)
{
$this->_data['viewTime'] = $date->getTimestamp();
}
public function isHidden()
{
return (bool) ($this->_data['hidden'] == 'yes');
}
public function setHidden($hidden = true)
{
if ($hidden) {
$this->_data['hidden'] = 'yes';
} else {
$this->_data['hidden'] = 'no';
}
}
}