jkuchar/MultipleFileUpload

View on GitHub
MultipleFileUpload/Model/NetteDatabase/Queues.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

/**
 * This file is part of the MultipleFileUpload (https://github.com/jkuchar/MultipleFileUpload/)
 *
 * Copyright (c) 2013 Jan Kuchař (http://www.jankuchar.cz)
 *
 * For the full copyright and license information, please view
 * the file license.txt that was distributed with this source code.
 */

namespace MultipleFileUpload\Model\NetteDatabase;

use MultipleFileUpload\Model\BaseQueues,
    MultipleFileUpload\Model\IQueue,
    Nette\InvalidStateException;

/**
 * Multiple File Uploader driver for Nette\Database
 *
 * @author  Zdeněk Jurka
 * @license New BSD License
 */
class Queues extends BaseQueues
{
    
    public static $filesTable = 'files';
        
    /**
     * Path to directory of uploaded files (temp)
     * @var string
     */
    public static $uploadsTempDir;

    /**
     * Initializes driver
     */
    function initialize()
    {

    }

    /** @var Nette\Database\Context */
    private $database;
    
    
    public function getFilesTable(){
        return self::$filesTable;
    }
    
    public function __construct(\Nette\Database\Context $database)
    {
        $this->database = $database;
    }
    
    // <editor-fold defaultstate="collapsed" desc="Database functions">

    /**
     * @return \Nette\Database\Context 
     */
    public function getConnection()
    {
        return $this->database;
    }


    // </editor-fold>

    /**
     * Gets queue (create if needed)
     * @param string $id
     * @return Queue
     */
    function getQueue($id)
    {
        return $this->createQueueObj($id);
    }


    /**
     * Queue factory.
     * @param string $queueID
     * @return Queue
     */
    function createQueueObj($queueID)
    {
        $queue = new Queue();
        $queue->setQueuesModel($this);
        $queue->setQueueID($queueID);
        $queue->initialize();
        return $queue;
    }


    /**
     * Executes cleanup
     */
    function cleanup()
    {
        $this->getConnection()->beginTransaction();
        foreach ($this->getQueues() AS $queue) {
            if ($queue->getLastAccess() < time() - $this->getLifeTime()) {
                $queue->delete();
            }
        }
        $this->getConnection()->commit();
    }


    /**
     * Gets all queues
     * @return IQueue[]
     */
    function getQueues()
    {
        $queuesOut = array();
        
        foreach ($this->getConnection()->table($this->getFilesTable())->select('queueID')->group('queueID') AS $row) {
            $queuesOut[] = $this->createQueueObj($row["queueID"]);
        }
        return $queuesOut;
    }


}