5ceeda1d2559f087be1b223217968e71fe13e2e6
[tine20] / tine20 / Tinebase / Db / Table.php
1 <?php
2 /**
3  * Tine 2.0
4  * 
5  * @package     Tinebase
6  * @subpackage  Db
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @author      Lars Kneschke <l.kneschke@metaways.de>
10  */
11
12 /**
13  * the class provides functions to handle applications
14  * 
15  * @package     Tinebase
16  * @subpackage  Db
17  */
18 class Tinebase_Db_Table extends Zend_Db_Table_Abstract
19 {
20     /**
21      * wrapper around Zend_Db_Table_Abstract::fetchAll
22      *
23      * @param strin|array $_where OPTIONAL
24      * @param string $_order OPTIONAL
25      * @param string $_dir OPTIONAL
26      * @param int $_count OPTIONAL
27      * @param int $_offset OPTIONAL
28      * @throws Tinebase_Exception_InvalidArgument if $_dir is not ASC or DESC
29      * @return the row results per the Zend_Db_Adapter fetch mode.
30      */
31     public function fetchAll($_where = NULL, $_order = NULL, $_dir = 'ASC', $_count = NULL, $_offset = NULL)
32     {
33         if($_dir != 'ASC' && $_dir != 'DESC') {
34             throw new Tinebase_Exception_InvalidArgument('$_dir can be only ASC or DESC');
35         }
36         
37         $order = NULL;
38         if($_order !== NULL) {
39             $order = $_order . ' ' . $_dir;
40         }
41         
42         $rowSet = parent::fetchAll($_where, $order, $_count, $_offset);
43         
44         return $rowSet;
45     }
46     
47     /**
48      * get total count of rows
49      *
50      * @param string|array|Zend_Db_Select $_where
51      */
52     public function getTotalCount($_where)
53     {
54         $tableInfo = $this->info();
55             
56         if (is_array($_where) || is_string($_where)) {
57             $select = $this->getAdapter()->select();
58             foreach((array)$_where as $where) {
59                 $select->where($where);
60             }
61         } elseif ($_where instanceof Zend_Db_Select ) {
62             $select = $_where;
63         }
64         
65         $select->from($tableInfo['name'], array('count' => 'COUNT(*)'));
66         
67         $stmt = $this->getAdapter()->query($select);
68         $result = $stmt->fetch(Zend_Db::FETCH_ASSOC);
69         
70         return $result['count'];
71     }
72     
73     /**
74      * get describe table from metadata cache
75      * 
76      * @param string $tableName
77      * @param Zend_Db_Adapter_Abstract $db
78      * @return array
79      */
80     public static function getTableDescriptionFromCache($tableName, $db = NULL)
81     {
82         if ($db === NULL) {
83             $db = Tinebase_Core::getDb();
84         }
85         try {
86             $config = array(
87                 'name' => $tableName,
88                 'db'   => $db
89             );
90             $tableDescription = new Tinebase_Db_Table($config);
91             $tableInfo = $tableDescription->info();
92             $result = $tableInfo['metadata'];
93         } catch (Zend_Db_Table_Exception $zdte) {
94             if (Tinebase_Core::isLogLevel(Zend_Log::NOTICE)) Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__
95                 . ' Could not fetch schema from cache: ' . $zdte->getMessage());
96             $result = $db->describeTable($tableName);
97         }
98         return $result;
99     }
100 }