]> git.mxchange.org Git - core.git/blob - inc/classes/main/criteria/dataset/class_DataSetCriteria.php
Added new methods:
[core.git] / inc / classes / main / criteria / dataset / class_DataSetCriteria.php
1 <?php
2 /**
3  * A set of data storeable in databases
4  *
5  * @author              Roland Haeder <webmaster@shipsimu.org>
6  * @version             0.0.0
7  * @copyright   Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team
8  * @license             GNU GPL 3.0 or any newer version
9  * @link                http://www.shipsimu.org
10  *
11  * This program is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation, either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program. If not, see <http://www.gnu.org/licenses/>.
23  */
24 class DataSetCriteria extends BaseCriteria implements StoreableCriteria {
25         /**
26          * Table name
27          */
28         private $tableName = '';
29
30         /**
31          * Unique key
32          */
33         private $uniqueKey = '';
34
35         /**
36          * Primary key
37          */
38         private $primaryKey = '';
39
40         /**
41          * Protected constructor
42          *
43          * @return      void
44          */
45         protected function __construct () {
46                 // Call parent constructor
47                 parent::__construct(__CLASS__);
48         }
49
50         /**
51          * Creates an instance of this criteria
52          *
53          * @param       $tableName                      Name of the table
54          * @return      $criteriaInstance       An instance of this criteria
55          */
56         public static final function createDataSetCriteria ($tableName) {
57                 // Get a new instance
58                 $criteriaInstance = new DataSetCriteria();
59
60                 // Set table name
61                 $criteriaInstance->setTableName($tableName);
62
63                 // Return the instance
64                 return $criteriaInstance;
65         }
66
67         /**
68          * Setter for table name
69          *
70          * @param       $tableName      Name of the table to set
71          * @return      void
72          */
73         public final function setTableName ($tableName) {
74                 $this->tableName = (string) $tableName;
75         }
76
77         /**
78          * Getter for table name
79          *
80          * @return      $tableName      Name of the table to set
81          */
82         public final function getTableName () {
83                 return $this->tableName;
84         }
85
86         /**
87          * Setter for unique key
88          *
89          * @param       $uniqueKey      Column to use as unique key
90          * @return      void
91          */
92         public final function setUniqueKey ($uniqueKey) {
93                 $this->uniqueKey = (string) $uniqueKey;
94         }
95
96         /**
97          * Getter for unique key
98          *
99          * @return      $uniqueKey      Column to use as unique key
100          */
101         public final function getUniqueKey () {
102                 return $this->uniqueKey;
103         }
104
105         /**
106          * Getter for unique key value
107          *
108          * @return      $uniqueValue    Value of the unique key
109          */
110         public final function getUniqueValue () {
111                 // Get primary key(s) first
112                 $primaryKey  = trim($this->getCriteriaElemnent($this->getPrimaryKey()));
113                 $primaryKeys = $this->getPrimaryKeys();
114
115                 // Debug message
116                 //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: tableName=' . $this->getTableName() . ',primaryKey=' . $primaryKey . ',primaryKeys()=' . count($primaryKeys));
117
118                 /*
119                  * If this is not set, this could mean a badly written frontend as
120                  * tables should always have a primary key.
121                  */
122                 if (count($primaryKeys) > 0) {
123                         /*
124                          * Init return value, this can be put all together without any
125                          * separator as it only aids as a "unique value" for generating the
126                          * "row file name".
127                          */
128                         $return = '';
129
130                         // Combination set, so get all
131                         foreach ($primaryKeys as $primaryKey) {
132                                 // Add it
133                                 $return .= trim($this->getCriteriaElemnent($primaryKey));
134                         } // END - foreach
135
136                         // Debug message
137                         //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: tableName=' . $this->getTableName() . ',return=' . $return . ' - EXIT!');
138
139                         // Return it
140                         return $return;
141                 } elseif (!empty($primaryKey)) {
142                         // Return primary key
143                         return $primaryKey;
144                 } else {
145                         // @TODO Issue a warning
146                         self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: Primary key not set for table ' . $this->getTableName() . ', please fix your table. Falling back to unique key ...');
147
148                         // Get unique key
149                         $uniqueKey = trim($this->getCriteriaElemnent($this->getUniqueKey()));
150
151                         // Debug message
152                         //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: tableName=' . $this->getTableName() . ',uniqueKey=' . $uniqueKey);
153
154                         // Is it empty, too?
155                         if (empty($uniqueKey)) {
156                                 // Bad news, nothing is "unique" by design for this table
157                                 ApplicationEntryPoint::app_exit('Table ' . $this->getTableName() . ' has both no primary and unique key, but ' . __METHOD__ . ' was called. Please fix your table.');
158                         } else {
159                                 // Return unique key
160                                 return $uniqueKey;
161                         }
162                 }
163         }
164
165         /**
166          * Getter for primary key or unique key if not set
167          *
168          * @return      $primaryKey             Primary key or unique key if not set
169          */
170         public final function getPrimaryKey () {
171                 // Get primary key by default
172                 $primaryKey = $this->primaryKey;
173
174                 if (empty($primaryKey)) {
175                         // Get uniqueKey
176                         $primaryKey = $this->getUniqueKey();
177                 } // END - if
178
179                 // Return it
180                 return $primaryKey;
181         }
182
183         /**
184          * Setter for primary key
185          *
186          * @param       $primaryKey             Primary key to set
187          * @return      void
188          */
189         public final function setPrimaryKey ($primaryKey) {
190                 $this->primaryKey = (string) $primaryKey;
191         }
192
193         /**
194          * Setter for primary key array
195          *
196          * @param       $primaryKeys    Primary key array to set
197          * @return      void
198          */
199         public function setPrimaryKeyCombined (array $primaryKeys) {
200                 $this->primaryKeys = $primaryKeys;
201         }
202
203         /**
204          * Getter for primary keys
205          *
206          * @return      $primaryKeys    Primary key array
207          */
208         public final function getPrimaryKeys () {
209                 // Return it
210                 return $this->primaryKeys;
211         }
212 }
213
214 // [EOF]
215 ?>