Rev 52 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line | 
|---|---|---|---|
| 27 | PointedEar | 1 | <?php | 
        
| 2 | |||
| 51 | PointedEar | 3 | namespace PointedEars\PHPX\Db;  | 
        
| 4 | |||
| 27 | PointedEar | 5 | /** | 
        
| 6 |  * Generic abstract database mapper class | 
        ||
| 7 |  * | 
        ||
| 61 | PointedEar | 8 |  * @property-read \PointedEars\PHPX\Db\Table $table | 
        
| 9 |  *   The <code>Table</code> for this mapper | 
        ||
| 27 | PointedEar | 10 |  * @author Thomas Lahn | 
        
| 11 |  */ | 
        ||
| 51 | PointedEar | 12 | abstract class Mapper extends \PointedEars\PHPX\AbstractModel  | 
        
| 27 | PointedEar | 13 | { | 
        
| 14 |   /** | 
        ||
| 15 |    * Class name of the associated table model | 
        ||
| 16 |    * | 
        ||
| 17 |    * @var string | 
        ||
| 18 |    */ | 
        ||
| 19 | protected $_table = 'Table';  | 
        ||
| 49 | PointedEar | 20 | |
| 27 | PointedEar | 21 | protected $_dbTable;  | 
        
| 49 | PointedEar | 22 | |
| 27 | PointedEar | 23 |   /** | 
        
| 24 |    * Sets the {@link Table} for this mapper | 
        ||
| 25 |    * @param string|Table $dbTable | 
        ||
| 26 |    *   Class name of the new instance, or an existing instance | 
        ||
| 27 |    * @throws Exception if <var>$dbTable</var> is not a <code>Table</code> | 
        ||
| 28 |    */ | 
        ||
| 29 | public function setDbTable($table)  | 
        ||
| 30 |   { | 
        ||
| 31 | if (is_string($table))  | 
        ||
| 32 |     { | 
        ||
| 33 | $table = new $table();  | 
        ||
| 34 |     } | 
        ||
| 49 | PointedEar | 35 | |
| 27 | PointedEar | 36 | if (!($table instanceof Table)) {  | 
        
| 37 | throw new Exception('Invalid table data gateway provided');  | 
        ||
| 38 |     } | 
        ||
| 49 | PointedEar | 39 | |
| 27 | PointedEar | 40 | $this->_dbTable = $table;  | 
        
| 41 |   } | 
        ||
| 42 | |||
| 43 |   /** | 
        ||
| 44 |    * Gets the {@link Table} for this mapper | 
        ||
| 45 |    * | 
        ||
| 46 |    * @param string|Table $table | 
        ||
| 47 |    *   Class name of the new instance or an existing instance. | 
        ||
| 48 |    *   The default is the value of the <code>$_table</code> property. | 
        ||
| 49 |    * @return Table | 
        ||
| 50 |    * @throws Exception if <var>$dbTable</var> is not a <code>Table</code> | 
        ||
| 51 |    * @see Mapper::setDbTable() | 
        ||
| 52 |    */ | 
        ||
| 53 | public function getDbTable($table = null)  | 
        ||
| 54 |   { | 
        ||
| 55 | if (is_null($this->_dbTable))  | 
        ||
| 56 |     { | 
        ||
| 57 | if (is_null($table))  | 
        ||
| 58 |       { | 
        ||
| 59 | $table = $this->_table;  | 
        ||
| 60 |       } | 
        ||
| 49 | PointedEar | 61 | |
| 27 | PointedEar | 62 | $this->setDbTable($table);  | 
        
| 63 |     } | 
        ||
| 49 | PointedEar | 64 | |
| 27 | PointedEar | 65 | return $this->_dbTable;  | 
        
| 66 |   } | 
        ||
| 49 | PointedEar | 67 | |
| 27 | PointedEar | 68 |   /** | 
        
| 49 | PointedEar | 69 |    * Returns the <code>Table</code> for this object. | 
        
| 70 |    * | 
        ||
| 71 |    * @return Table | 
        ||
| 72 |    */ | 
        ||
| 73 | public function getTable ()  | 
        ||
| 74 |   { | 
        ||
| 75 | return $this->getDbTable();  | 
        ||
| 76 |   } | 
        ||
| 77 | |||
| 78 |   /** | 
        ||
| 27 | PointedEar | 79 |    * Sorts an array of objects by the property of the nested object. | 
        
| 80 |    * To be used with the u*sort() functions. | 
        ||
| 81 |    * | 
        ||
| 82 |    * @param object $a First operand of the comparison | 
        ||
| 83 |    * @param object $b Second operand of the comparison | 
        ||
| 84 |    * @param string $property | 
        ||
| 85 |    *   Name of the property of the nested object by which to sort the outer array | 
        ||
| 86 |    * @return int | 
        ||
| 87 |    *   0 if <var>$a</var> and <var>$b</var> are "equal", | 
        ||
| 88 |    *   <code>-1</code> if <var>$a</var> is "less" than <var>$b</var>, | 
        ||
| 89 |    *   <code>1</code> otherwise. | 
        ||
| 90 |    */ | 
        ||
| 91 | protected static function sortByProperty($a, $b, $property)  | 
        ||
| 92 |   { | 
        ||
| 93 | if ($a->$property === $b->$property)  | 
        ||
| 94 |     { | 
        ||
| 95 | return 0;  | 
        ||
| 96 |     } | 
        ||
| 49 | PointedEar | 97 | |
| 27 | PointedEar | 98 | return ($a->$property < $b->$property) ? -1 : 1;  | 
        
| 99 |   } | 
        ||
| 100 | } |