1: <?php
2: /**
3: * A persistent file-based driver for simulating a Kolab user database stored in
4: * LDAP.
5: *
6: * PHP version 5
7: *
8: * @category Kolab
9: * @package Kolab_Server
10: * @author Gunnar Wrobel <wrobel@pardus.de>
11: * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
12: * @link http://pear.horde.org/index.php?package=Kolab_Server
13: */
14:
15: /**
16: * This class provides a persistant class for testing the Kolab Server DB.
17: *
18: * Copyright 2008-2012 Horde LLC (http://www.horde.org/)
19: *
20: * See the enclosed file COPYING for license information (LGPL). If you
21: * did not receive this file, see http://www.horde.org/licenses/lgpl21.
22: *
23: * @category Kolab
24: * @package Kolab_Server
25: * @author Gunnar Wrobel <wrobel@pardus.de>
26: * @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
27: * @link http://pear.horde.org/index.php?package=Kolab_Server
28: */
29: class Horde_Kolab_Server_Connection_File
30: extends Horde_Kolab_Server_Connection_Mock
31: {
32:
33: /**
34: * The file for storing the database data.
35: *
36: * @var string
37: */
38: private $_file;
39:
40: /**
41: * Set configuration parameters.
42: *
43: * @param array $params The parameters.
44: *
45: * @return NULL
46: */
47: public function setParams(array $params)
48: {
49: if (isset($params['file'])) {
50: $this->_file = $params['file'];
51: }
52:
53: parent::setParams($params);
54: }
55:
56: /**
57: * Get the file parameter.
58: *
59: * @return NULL
60: */
61: private function _getFile()
62: {
63: if (empty($this->_file)) {
64: throw new Horde_Kolab_Server_Exception('The file based driver requires a \'file\' parameter.');
65: }
66: return $this->_file;
67: }
68:
69: /**
70: * Load the current state of the database.
71: *
72: * @return NULL
73: */
74: protected function load()
75: {
76: $raw_data = file_get_contents($this->_getFile());
77: if (!$raw_data === false) {
78: $data = @unserialize($raw_data);
79: if ($data !== false) {
80: $this->data = $data;
81: } else {
82: $error = error_get_last();
83: if (isset($this->logger)) {
84: $this->logger->warn(sprintf('Horde_Kolab_Server_file failed to read the database from %s. Error was: %s',
85: $this->_getFile(), $error['message']));
86: }
87: $this->data = array();
88: }
89: }
90: }
91:
92: /**
93: * Store the current state of the database.
94: *
95: * @return NULL
96: */
97: protected function store()
98: {
99: $raw_data = serialize($this->data);
100: $result = @file_put_contents($this->_getFile(), $raw_data);
101: if ($result === false) {
102: $error = error_get_last();
103: if (isset($this->logger)) {
104: $this->logger->warn(sprintf('Horde_Kolab_Server_file failed to store the database in %s. Error was: %s',
105: $this->_getFile(), $error['message']));
106: }
107: }
108: }
109:
110: /**
111: * Cleans the current state of the database.
112: *
113: * @return NULL
114: */
115: public function clean()
116: {
117: unlink($this->_getFile());
118: $this->data = array();
119: $this->store();
120: }
121:
122: /**
123: * Returns the path to the storage location of the database.
124: *
125: * @return string The path to the database.
126: */
127: public function getStoragePath()
128: {
129: return $this->_getFile();
130: }
131: }
132: