mirror of
				https://github.com/alchemy-fr/Phraseanet.git
				synced 2025-10-26 11:23:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			174 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /*
 | |
|  * This file is part of Phraseanet
 | |
|  *
 | |
|  * (c) 2005-2016 Alchemy
 | |
|  *
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  */
 | |
| namespace Alchemy\Phrasea\Databox;
 | |
| 
 | |
| use Doctrine\DBAL\Connection;
 | |
| 
 | |
| final class DbalDataboxRepository implements DataboxRepository
 | |
| {
 | |
|     /** @var Connection */
 | |
|     private $connection;
 | |
|     /** @var DataboxFactory */
 | |
|     private $factory;
 | |
| 
 | |
|     public function __construct(Connection $connection, DataboxFactory $factory)
 | |
|     {
 | |
|         $this->connection = $connection;
 | |
|         $this->factory = $factory;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param int $id
 | |
|      * @return \databox|null
 | |
|      */
 | |
|     public function find($id)
 | |
|     {
 | |
|         $row = $this->fetchRow($id);
 | |
| 
 | |
|         if (is_array($row)) {
 | |
|             return $this->factory->create($id, $row);
 | |
|         }
 | |
| 
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return \databox[]
 | |
|      */
 | |
|     public function findAll()
 | |
|     {
 | |
|         return $this->factory->createMany($this->fetchRows());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param \databox $databox
 | |
|      * @return bool
 | |
|      */
 | |
|     public function save(\databox $databox)
 | |
|     {
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public function delete(\databox $databox)
 | |
|     {
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public function unmount(\databox $databox)
 | |
|     {
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param int $id
 | |
|      * @return false|array
 | |
|      * @throws \Doctrine\DBAL\DBALException
 | |
|      */
 | |
|     private function fetchRow($id)
 | |
|     {
 | |
|         $query = 'SELECT ord, viewname, label_en, label_fr, label_de, label_nl FROM sbas WHERE sbas_id = :id';
 | |
|         $statement = $this->connection->prepare($query);
 | |
|         $statement->execute(['id' => $id]);
 | |
|         $row = $statement->fetch(\PDO::FETCH_ASSOC);
 | |
|         $statement->closeCursor();
 | |
| 
 | |
|         return $row;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return array
 | |
|      * @throws \Doctrine\DBAL\DBALException
 | |
|      */
 | |
|     private function fetchRows()
 | |
|     {
 | |
|         $query = 'SELECT sbas_id, ord, viewname, label_en, label_fr, label_de, label_nl FROM sbas';
 | |
|         $statement = $this->connection->prepare($query);
 | |
|         $statement->execute();
 | |
|         $rows = [];
 | |
|         while ($row = $statement->fetch(\PDO::FETCH_ASSOC)) {
 | |
|             $id = $row['sbas_id'];
 | |
|             unset($row['sbas_id']);
 | |
|             $rows[$id] = $row;
 | |
|         }
 | |
|         $statement->closeCursor();
 | |
| 
 | |
|         return $rows;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param $host
 | |
|      * @param $port
 | |
|      * @param $user
 | |
|      * @param $password
 | |
|      * @param $dbname
 | |
|      *
 | |
|      * @return \databox
 | |
|      */
 | |
|     public function mount($host, $port, $user, $password, $dbname)
 | |
|     {
 | |
|         $query = 'INSERT INTO sbas (ord, host, port, dbname, sqlengine, user, pwd)
 | |
|               SELECT COALESCE(MAX(ord), 0) + 1 AS ord, :host AS host, :port AS port, :dbname AS dbname,
 | |
|                      "MYSQL" AS sqlengine, :user AS user, :password AS pwd FROM sbas';
 | |
| 
 | |
|         $statement = $this->connection->prepare($query);
 | |
|         $statement->execute([
 | |
|             ':host'     => $host,
 | |
|             ':port'     => $port,
 | |
|             ':dbname'   => $dbname,
 | |
|             ':user'     => $user,
 | |
|             ':password' => $password
 | |
|         ]);
 | |
| 
 | |
|         $statement->closeCursor();
 | |
| 
 | |
|         return $this->find((int) $this->connection->lastInsertId());
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param $host
 | |
|      * @param $port
 | |
|      * @param $user
 | |
|      * @param $password
 | |
|      * @param $dbname
 | |
|      *
 | |
|      * @return \databox
 | |
|      */
 | |
|     public function create($host, $port, $user, $password, $dbname)
 | |
|     {
 | |
|         $params = [
 | |
|             ':host' => $host,
 | |
|             ':port' => $port,
 | |
|             ':user' => $user,
 | |
|             ':password' => $password,
 | |
|             ':dbname' => $dbname
 | |
|         ];
 | |
| 
 | |
|         $query = 'SELECT sbas_id FROM sbas
 | |
|                   WHERE host = :host AND port = :port AND `user` = :user AND pwd = :password AND dbname = :dbname';
 | |
|         $statement = $this->connection->executeQuery($query, $params);
 | |
| 
 | |
|         if ($row = $statement->fetch(\PDO::FETCH_ASSOC)) {
 | |
|             return $this->find((int) $row['sbas_id']);
 | |
|         }
 | |
| 
 | |
|         $query = 'INSERT INTO sbas (ord, host, port, dbname, sqlengine, user, pwd)
 | |
|               SELECT COALESCE(MAX(ord), 0) + 1 AS ord, :host AS host, :port AS port, :dbname AS dbname,
 | |
|                      "MYSQL" AS sqlengine, :user AS user, :password AS pwd FROM sbas';
 | |
| 
 | |
|         $stmt = $this->connection->prepare($query);
 | |
|         $stmt->execute($params);
 | |
| 
 | |
|         $stmt->closeCursor();
 | |
| 
 | |
|         return $this->find((int) $this->connection->lastInsertId());
 | |
| 
 | |
|     }
 | |
| }
 | 
