Skip to content
Snippets Groups Projects
Select Git revision
  • ab746308d1b45964688c6e616a8f61f6b32d7b58
  • master default
  • disable-new-requests
  • fix-bulletin-view-missing-notes-error
  • add-missing-queue-managers
  • projects-task-53
  • projects-task-51
  • projects-task-43
  • projects-task-24
  • projects-task-31
  • projects-task-32
  • projects-task-8
  • project-setup-docs
  • projects-task-28
  • projects-task-27
  • projects-task-9
  • projects-task-7
  • mass-update-course-codes-in-sections
  • wdn-four
  • learning-outcomes
  • additional-bulletin-pages
  • svn-redesign
  • svn-popups
  • svn-trunk
  • svn-performance
  • svn-tim
26 results

ViewTimeModel.php

Blame
  • 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';
        	}
        }
    }