1: <?php
2: /**
3: * The IMP_Quota_Base:: class is the abstract class that all drivers inherit
4: * from.
5: *
6: * Copyright 2010-2012 Horde LLC (http://www.horde.org/)
7: *
8: * See the enclosed file COPYING for license information (GPL). If you
9: * did not receive this file, see http://www.horde.org/licenses/gpl.
10: *
11: * @author Michael Slusarz <slusarz@horde.org>
12: * @category Horde
13: * @license http://www.horde.org/licenses/gpl GPL
14: * @package IMP
15: */
16: abstract class IMP_Quota_Base
17: {
18: /**
19: * Driver parameters.
20: *
21: * @var array
22: */
23: protected $_params = array(
24: 'unit' => 'MB'
25: );
26:
27: /**
28: * Constructor.
29: *
30: * @param array $params Parameters:
31: * <pre>
32: * 'format' - (string) The formats of the quota messages in the user
33: * interface. Must be a hash with the four possible elements
34: * 'long', 'short', 'nolimit_long', and 'nolimit_short'. The
35: * strings will be passed through sprintf().
36: * 'unit' - (string) What storage unit the quota messages should be
37: * displayed in. Either 'GB', 'MB', or 'KB'.
38: * 'username' - (string) The username to query.
39: * </pre>
40: */
41: public function __construct(array $params = array())
42: {
43: $this->_params = array_merge($this->_params, $params);
44:
45: $this->_params['format'] = array(
46: 'long' => isset($this->_params['format']['long'])
47: ? $this->_params['format']['long']
48: : _("Quota status: %.2f %s / %.2f %s (%.2f%%)"),
49: 'short' => isset($this->_params['format']['short'])
50: ? $this->_params['format']['short']
51: : _("%.0f%% of %.0f %s"),
52: 'nolimit_long' => isset($this->_params['format']['nolimit_long'])
53: ? $this->_params['format']['nolimit_long']
54: : _("Quota status: %.2f %s / NO LIMIT"),
55: 'nolimit_short' => isset($this->_params['format']['nolimit_short'])
56: ? $this->_params['format']['nolimit_short']
57: : _("%.0f %s")
58: );
59: }
60:
61: /**
62: * Get quota information (used/allocated), in bytes.
63: *
64: * @return array An array with the following keys:
65: * 'limit' = Maximum quota allowed
66: * 'usage' = Currently used portion of quota (in bytes)
67: * @throws IMP_Exception
68: */
69: abstract public function getQuota();
70:
71: /**
72: * Returns the quota messages variants, including sprintf placeholders.
73: *
74: * @return array An array with quota message templates.
75: */
76: public function getMessages()
77: {
78: return $this->_params['format'];
79: }
80:
81: /**
82: * Determine the units of storage to display in the quota message.
83: *
84: * @return array An array of size and unit type.
85: */
86: public function getUnit()
87: {
88: $unit = $this->_params['unit'];
89:
90: switch ($unit) {
91: case 'GB':
92: $calc = 1024 * 1024 * 1024.0;
93: break;
94:
95: case 'KB':
96: $calc = 1024.0;
97: break;
98:
99: case 'MB':
100: default:
101: $calc = 1024 * 1024.0;
102: $unit = 'MB';
103: break;
104: }
105:
106: return array($calc, $unit);
107: }
108:
109: }
110: